文章目录
参考
rockchip rknn-tookit2
rockchip rknpu2
开发环境介绍
宿主机 HostPC: 装有ubuntu22.04(其它亦可参考)
Docker: ubuntu20.04
开发板:rock 5a with rk3588s 芯片
宿主机环境配置
[Rock Pi 1] Rock pi 开启VNC远程桌面适用于VNC+KDE桌面
[Rock Pi 2] rknn宿主机端配置之docker开发环境部署
YOLO v5 模型部署(C++版)
源码下载(宿主机端)
#根据上篇文章创建的docker虚拟机编号执行下面指令进入docker虚拟机
dengml@dengml-SER:~$ sudo docker exec -it -u dengml -w /home/dengml 612c918d5027 /bin/bash
[sudo] dengml 的密码:
dengml@612c918d5027:~$ cd /data/ubuntu/rockpi/rknn-toolkit2
#执行以下命令使能之前创建的python虚拟环境(虽然本节似乎没用到宿主机的python)
dengml@612c918d5027:/data/ubuntu/rockpi/rknn-toolkit2$ source venv/bin/activate
#获取rknpu2源代码
(venv) dengml@612c918d5027:/data/ubuntu/rockpi$ git clone https://kgithub.com/rockchip-linux/rknpu2.git
此代码中包含yolo v5等多个模型的demo,这里我们先部署官方提供的rknn模型
安装交叉编译工具(宿主机端)
ubuntu软件库里已经包含了交叉aarch64-linux交叉编译工具链,因此本着一切从简的原则可以直接使用apt 安装如下:
$ sudo apt update
$ sudo apt-get install gcc-aarch64-linux-gnu
$ sudo apt-get install g++-aarch64-linux-gnu
#安装 cmake 编译工具
$ sudo apt install cmake
源码编译(宿主机端)
$ cd rknpu2/examples/rknn_yolov5_demo
$ ./build-linux_RK3588.sh
#代码通过scp到开发板端,也可以通过winscp、samba、等其他方式
$ scp -r install/rknn_yolov5_demo_Linux rock@192.168.1.13:~/work
验证(开发板端)
编译后的二进制及模型文件scp到板子后,通过ssh登陆到开发板端
#打开cp过来的目录
rock@rock-5a:~$ cd work/rknn_yolov5_demo_Linux/
#添加运行依赖的动态库
rock@rock-5a:~/work/rknn_yolov5_demo_Linux$ export LD_LIBRARY_PATH=./lib
#执行识别命令
rock@rock-5a:~/work/rknn_yolov5_demo_Linux$ ./rknn_yolov5_demo model/RK3588/yolov5s-640-640.rknn model/bus.jpg
命令执行后结果如图所示
运行中的log如图所示,首先在moba界面点击SFTP文档管理器界面(标记为“1”处),点击“2”处一般可以直接打开右边终端所在的目录,如果不能自动打开,就在“3”处输入我们右边终端所在的目录,如上图所示。我们可以看到生成了一个新的文件out.jpg, 即模型生成的结果。至此,C++版本的rknn模型部署完成。双击打开,结果如下
resnet18 模型部署到开发板(Python 版)
开发板安装conda 虚拟环境
参考:[Rock Pi] (三) RK3588平台嵌入式linux平台安装配置miniconda
最后激活rknn虚拟python环境。
加载rknn-toolkit2仓库
将rknn-toolkit2拷贝到开发板。可以直接在github上克隆,或者通过scp的方式从host pc复制到开发板。如下:
(rknn) rock@rock-5a:~/work/rknn-toolkit2$ pwd
/home/rock/work/rknn-toolkit2
安装依赖库
首先需要为板子的系统添加国内源,我的板子运行的时ubuntu22.04系统,其他版本的系统需要参考网上的教程,添加国内源,这里讲一下ubuntu22.04 arm64版本添加国内源的方法(添加源的链接有差异,方法一致)。编辑/etc/apt/source.list 文件,添加国内源的路径,添加后的该文件内容为:
deb http://ports.ubuntu.com/ubuntu-ports jammy main restricted universe multiverse
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-proposed main restricted universe multiverse
添加完成后需要更新软件源
sudo apt update
sudo apt install python3-dev
···
安装完成后,安装rknn所需的python库
···b
(rknn) rock@rock-5a:~/work/rknn-toolkit2/rknn_toolkit_lite2$ pip3 install ./packages/rknn_toolkit_lite2-1.5.2-cp310-cp310-linux_aarch64.whl -i https://pypi.tuna.tsinghua.edu.cn/simple
由于模型运行以来rk官方的runtime库,所以需要在github上下载rknpu的库:rknpu2 。并将runtime库复制到板子的/usr/lib目录下
git clone -b master https://github.com/rockchip-linux/rknpu2.git
sudo cp rknpu2/runtime/RK3588/Linux/librknn_api/aarch64/librknn* /usr/lib/
运行示例
打开rknn-toolkit-lite, 并执行test.py, 得到输出,根据输出的Top 5 结果,该模型可以识别出图像中的物体名称。
中间遇到一些问题。总结在下方
(rknn) rock@rock-5a:~:cd ~/work/rknn-toolkit2/rknn_toolkit_lite2/examples/inference_with_lite
(rknn) rock@rock-5a:~/work/rknn-toolkit2/rknn_toolkit_lite2/examples/inference_with_lite$ python test.py
--> Load RKNN model
done
--> Init runtime environment
I RKNN: [22:27:50.764] RKNN Runtime Information: librknnrt version: 1.5.2 (c6b7b351a@2023-08-23T15:28:22)
I RKNN: [22:27:50.764] RKNN Driver Information: version: 0.8.2
W RKNN: [22:27:50.764] Current driver version: 0.8.2, recommend to upgrade the driver to the new version: >= 0.8.8
I RKNN: [22:27:50.765] RKNN Model Information: version: 6, toolkit version: 1.5.2-source_code(compiler version: 1.5.2 (71720f3fc@2023-08-21T09:35:42)), target: RKNPU v2, target platform: rk3588, framework name: PyTorch, framework layout: NCHW, model inference type: static_shape
done
--> Running model
resnet18
-----TOP 5-----
[812]: 0.9996760487556458
[404]: 0.00024927023332566023
[657]: 1.449744013370946e-05
[466 833]: 9.023910024552606e-06
[466 833]: 9.023910024552606e-06
done
问题及解决办法
1. No module named ‘cv2’
Traceback (most recent call last):
File "/home/rock/work/rknn-toolkit2/rknn_toolkit_lite2/examples/inference_with_lite/test.py", line 1, in <module>
import cv2
ModuleNotFoundError: No module named 'cv2'
解决办法:
执行
conda install opencv
2. ModuleNotFoundError: No module named ‘rknnlite’
解决办法:安装rknn_toolkit_lite2-1.5.2-cp310-cp310-linux_aarch64.whl
pip3 install rknn_toolkit_lite2-1.5.2-cp310-cp310-linux_aarch64.whl -i https://pypi.tuna.tsinghua.edu.cn/simple
3. rknn_toolkit_lite2-1.5.2-cp310-cp310-linux_aarch64.whl 安装出错
203 | #include_next <limits.h> /* recurse down to the real one */
| ^~~~~~~~~~
compilation terminated.
psutil could not be installed from sources. Perhaps Python header files are not installed. Try running:
sudo apt-get install gcc python3-dev
error: command '/usr/bin/gcc' failed with exit code 1
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed building wheel for psutil
Building wheel for ruamel.yaml.clib (pyproject.toml) ... error
error: subprocess-exited-with-error
× Building wheel for ruamel.yaml.clib (pyproject.toml) did not run successfully.
│ exit code: 1
╰─> [24 lines of output]
解决办法:
sudo apt install python3-dev
遇到的包安装不上的问题,可以参考上面添加并更新软件源
4. 缺runtime库的问题
Exception: Can not find dynamic library on RK3588!
Please download the corresponding librknnrt.so from https://github.com/rockchip-linux/rknpu2/tree/master/runtime/RK3588/Linux/librknn_api/aarch64 and move it to directory /usr/lib/
解决办法:
git clone -b master https://github.com/rockchip-linux/rknpu2.git
sudo cp rknpu2/runtime/RK3588/Linux/librknn_api/aarch64/librknn* /usr/lib/