香橙派模型转换以及部署二

由于想更新RKNN-Tookl2的版本,重新做一下记录。

上一篇文章安装的是RKNN-Tookl2 v1.5.2:

香橙派转换模型以及在开发板上部署-CSDN博客

现在记录一下RKNN-Tookl2 v2.0.0beta0版本,使用起来更方便,且可使用的功能更多一些,大概的流程和1.5.2差不多,细节上有一些区别。

一、相关资料的下载:

1、rknn-toolkit2

Tags · airockchip/rknn-toolkit2 (github.com)

2、rknn_model_zoo

Tags · airockchip/rknn_model_zoo (github.com)

3、交叉编译器

https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/aarch64-linux-gnu/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz

将三个下载下来之后,最好都放到虚拟机里面再解压,不然可能后面会有问题。三个文件在虚拟机里面的存放位置如下(其中rk3588是我自己新建的一个文件夹,名字随意):

下载下来之后,在下面位置有对应的使用文档说明。

二、环境的安装

1、python环境

注:这里可以采用两种方式进行,第一种直接在本地环境安装,第二种是使用conda管理环境,新建一个虚拟环境,然后确认好自己python的版本,安装包都要根据python版本进行安装的。我因为硬盘空间不足,之间在虚拟机的本地环境进行安装。

查看自己python版本:

python3 --version

我的虚拟机环境是3.8的,刚好官方推荐3.8。

2、安装rknn-toolkit2的依赖包:

sudo apt-get update
sudo apt-get install libxslt1-dev zlib1g zlib1g-dev libglib2.0-0 libsm6 libgl1-mesa-glx libprotobuf-dev gcc

3、接下来要使用到pip安装命令,所以先安装pip

sudo apt install python3-pip

4、安装rknn-toolkit2相关的库:

pip3 install -r ~/rk3588/rknn-toolkit2/rknn-toolkit2/packages/requirements_cp38-2.0.0b0.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

这里requirements_cp38-2.0.0b0.txt要注意和自己的python保持一致,如果有个别库下载不下来的话,可以更换镜像源。

5、等所有的库都下载安装完成之后,安装rknn-toolkit2:

pip install rknn_toolkit2-2.0.0b0+9bab5682-cp38-cp38-linux_x86_64.whl

这里可以直接把上面的终端关上,找到packages文件夹,右击在终端打开,也可以使用cd命令进入packages文件夹,然后执行上面的命令,注意rknn_toolkit2-2.0.0b0+9bab5682-cp38-cp38-linux_x86_64.whl要和自己的python版本保持一致。

6、检查环境是否安装成功 

先进入到python3环境中,然后导入RKNN。

python3
from rknn.api import RKNN

三、mobilenet模型转换以及在板端测试

rknn_model_zoo文件夹里面给出了很多测试例子,包括了很多模型的转换和部署,下面使用mobilenet来测试一下(使用说明文档可以看02_Rockchip_RKNPU_User_Guide_RKNN文档的第四部分示例)。

1、mobilenet模型下载

进入到rknn_model_zoo/example/mobilenet/model,里面有一个download_model.sh文件,是用来下载mobilenet的onnx模型。使用下面命令下载:

./download_model.sh

2、模型转换:

在rknn_model_zoo/example/mobilenet/python文件夹里面有一个mobilenet.py文件,可以进行模型转换:

python3 mobilenet.py --model ../model/mobilenetv2-12.onnx --target rk3588

转换成功之后,会在rknn_model_zoo/example/mobilenet/model文件夹里面多出一个.rknn的模型文件。

3、板端和虚拟机的连接:

可见香橙派转换模型以及在开发板上部署-CSDN博客的第二部分。

4、更新开发板的rknn_server和librknnrt.so:

注意,我这里是重新开了一个终端进行下面的操作,所以和上面的位置不一样,打开服务之后,就可以把这个终端关掉了。

adb push /home/ly/rk3588/rknn-toolkit2/rknpu2/runtime/Linux/rknn_server/aarch64/usr/bin/* /usr/bin
adb push /home/ly/rk3588/rknn-toolkit2/rknpu2/runtime/Linux/librknn_api/aarch64/librknnrt.so  /usr/lib

注意要修改成自己文件的位置。

5、打开rknn_server服务:

adb shell
restart_rknn.sh

6、连扳测试mobilenet:

 还是使用rknn_model_zoo/example/mobilenet/python文件夹里面的mobilenet.py文件

(1)模型推理测试

python3 mobilenet.py --target rk3588 --npu_device_test

(2) 模型速度测试

python3 mobilenet.py --target rk3588 --eval_perf

 文档里面还有一些精度测试和内存占用测试,我这里都没有做,可以自己做下试试。

7、板端部署

(1)设置交叉编译环境

交叉编译生成也使用rknn_model_zoo,在rknn_model_zoo文件夹下有一个build-linux.sh文件如下:

直接双击打开build-linux.sh文件,在文件的开头添加:

GCC_COMPILER=~/rk3588/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu

这里要注意路径,如果报错找不到,不存在之类的错误,大概率是路径有问题,可以检查一下路径是否正确。

这里还有一个需要注意的点是,最好在虚拟机里面解压文件,我开始是在物理机里面解压的文件,拖进虚拟机里面的,结果libgcc_s.so文件有损坏,报了下面的错误:

-- The C compiler identification is GNU 6.3.1

-- The CXX compiler identification is GNU 6.3.1

-- Check for working C compiler: /home/ly/rk3588/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc

-- Check for working C compiler: /home/ly/rk3588/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc -- broken

CMake Error at /usr/share/cmake-3.16/Modules/CMakeTestCCompiler.cmake:60 (message):

  The C compiler

    "/home/ly/rk3588/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc"

  is not able to compile a simple test program.

  It fails with the following output:

Change Dir: /home/ly/rk3588/rknn_model_zoo/build/build_rknn_mobilenet_demo_rk3588_linux_aarch64_Release/CMakeFiles/CMakeTmp

    

    Run Build Command(s):/usr/bin/make cmTC_a1471/fast && /usr/bin/make -f CMakeFiles/cmTC_a1471.dir/build.make CMakeFiles/cmTC_a1471.dir/build

    make[1]: 进入目录“/home/ly/rk3588/rknn_model_zoo/build/build_rknn_mobilenet_demo_rk3588_linux_aarch64_Release/CMakeFiles/CMakeTmp”

    Building C object CMakeFiles/cmTC_a1471.dir/testCCompiler.c.o

    /home/ly/rk3588/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc    -o CMakeFiles/cmTC_a1471.dir/testCCompiler.c.o   -c /home/ly/rk3588/rknn_model_zoo/build/build_rknn_mobilenet_demo_rk3588_linux_aarch64_Release/CMakeFiles/CMakeTmp/testCCompiler.c

    Linking C executable cmTC_a1471

    /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_a1471.dir/link.txt --verbose=1

    /home/ly/rk3588/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc      CMakeFiles/cmTC_a1471.dir/testCCompiler.c.o  -o cmTC_a1471

    /home/ly/rk3588/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/6.3.1/../../../../aarch64-linux-gnu/bin/ld:/home/ly/rk3588/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/6.3.1/../../../../aarch64-linux-gnu/lib/../lib64/libgcc_s.so: file format not recognized; treating as linker script

    /home/ly/rk3588/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/6.3.1/../../../../aarch64-linux-gnu/bin/ld:/home/ly/rk3588/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/6.3.1/../../../../aarch64-linux-gnu/lib/../lib64/libgcc_s.so:1: syntax error

    collect2: 错误: ld 返回 1

    make[1]: *** [CMakeFiles/cmTC_a1471.dir/build.make:87:cmTC_a1471] 错误 1

    make[1]: 离开目录“/home/ly/rk3588/rknn_model_zoo/build/build_rknn_mobilenet_demo_rk3588_linux_aarch64_Release/CMakeFiles/CMakeTmp”

    make: *** [Makefile:121:cmTC_a1471/fast] 错误 

  CMake will not be able to correctly generate this project.

Call Stack (most recent call first):

  CMakeLists.txt:3 (project)

-- Configuring incomplete, errors occurred!

See also "/home/ly/rk3588/rknn_model_zoo/build/build_rknn_mobilenet_demo_rk3588_linux_aarch64_Release/CMakeFiles/CMakeOutput.log".

See also "/home/ly/rk3588/rknn_model_zoo/build/build_rknn_mobilenet_demo_rk3588_linux_aarch64_Release/CMakeFiles/CMakeError.log"

(2)进行交叉编译生成:

./build-linux.sh -t rk3588 -a aarch64 -d mobilenet

完成之后,会生成一个install的文件夹,我们需要的文件就在这个文件夹里面。

(3)将生成的文件推送到板端

adb push install/rk3588_linux_aarch64/rknn_mobilenet_demo /userdata

(4)板端推理测试

adb shell
cd /userdata/rknn_mobilenet_demo/
./rknn_mobilenet_demo model/mobilenet_v2.rknn model/bell.jpg

成功!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值