由于想更新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
成功!