rk3588部署yolov6
介绍
https://github.com/airockchip/rknn-toolkit2/tree/v2.1.0
https://github.com/airockchip/rknn_model_zoo/tree/v2.1.0
rknn-toolkit2和rknn_model_zoo版本一致,都用v2.1.0
方式1
PC设备操作
搭建环境
本机PC设备(不是rk3588)下载rknn_toolkit2-2.1.0(即RKNPU2)
进入rknn-toolkit2-2.1.0\rknn-toolkit2\packages文件夹下
在终端激活环境,在终端输入
pip install -r requirements_cp38-2.1.0.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
然后再输入pip install rknn_toolkit2-2.1.0+708089d1-cp38-cp38-linux_x86_64.whl
然后,我们的转rknn环境就配置完成了。
模型转换onnx2rknn
参考rknn_model_zoo-2.1.0/examples/yolov6
cd rknn_model_zoo-2.1.0\examples/yolov6/python
python convert.py ../model/yolov6s.onnx rk3588
# output model will be saved as ../model/yolov6.rknn
交叉编译
docs/Compilation_Environment_Setup_Guide.md
docs/Compilation_Environment_Setup_Guide.md
查看设备架构
cat /proc/version
输出
Linux version 5.10.198 (fq@geniatech-184) (aarch64-none-linux-gnu-gcc (GNU Toolchain for the A-profile Architecture 10.3-2021.07 (arm-10.29)) 10.3.1 20210621, GNU ld (GNU Toolchain for the A-profile Architecture 10.3-2021.07 (arm-10.29)) 2.36.1.20210621) #9 SMP Thu Aug 15 08:59:29 CST 2024
rk3588架构是aarch64
下载交叉编译工具
aarch64: 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将
解压
tar -xJvf 文件名.tar.xz
编译
执行权限
chmod +x build-linux.sh
cd rknn_model_zoo-2.1.0
export GCC_COMPILER=/home/aaa/myinstall/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu
./build-linux.sh -t rk3588 -a aarch64 -d yolov6
生成如下:
rk3588操作
将install目录新生成的文件传输到rk3588上,然后执行以下命令
cd rknn_yolov6_demo
export LD_LIBRARY_PATH=./lib
./rknn_yolov6_demo model/yolov6.rknn model/bus.jpg
会输出结果图片out.jpg
方式2
PC设备操作
搭建环境
本机PC设备(不是rk3588)下载rknn_toolkit2-2.1.0(即RKNPU2)
进入rknn-toolkit2-2.1.0\rknn-toolkit2\packages文件夹下
在终端激活环境,在终端输入
pip install -r requirements_cp38-2.1.0.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
然后再输入pip install rknn_toolkit2-2.1.0+708089d1-cp38-cp38-linux_x86_64.whl
然后,我们的转rknn环境就配置完成了。
模型转换onnx2rknn
参考rknn_model_zoo-2.1.0/examples/yolov6
cd rknn_model_zoo-2.1.0\examples/yolov6/python
python convert.py ../model/yolov6s.onnx rk3588
# output model will be saved as ../model/yolov6.rknn
rk3588板端操作
环境配置
需要下载rknn-toolkit2或者上传rknn-toolkit2
(1) rk3588板卡环境
rk3588的系统为Linux系统,版本为 ubuntu20.04
(2) npu2 驱动版本
连接上板卡输入 ,如图所示,npu驱动版本为 0.9.3
(3)npu环境
进入板卡系统,输入以下指令
查询 rknn server版本
strings /usr/bin/rknn_server | grep -i "rknn_server version"
查询 librknnrt.so库版本
strings /usr/lib/librknnrt.so | grep -i "librknnrt version"
遇到问题:没有任何输出
没有输出则下载rknn-toolkit2-master.zip
cp rknn-toolkit2-master/rknpu2/runtime/Linux/rknn_server/aarch64/usr/bin/* /usr/bin/
cp rknn-toolkit2-master/rknpu2/runtime/Linux/librknn_api/aarch64/* /usr/lib/
注意:二者的版本必须一致
若输出不一致,需要做以下处理,下载rknn_toolkit2,我使用的是rknn_toolkit2-v2.0.0版本
Release v2.0.0-beta0: Update RK3562/RK3566/RK3568/RK3576/RK3588/RV1103/RV1106 NPU SDK to V2… · airockchip/rknn-toolkit2 · GitHub
将下载下来的文件拷贝到板卡上,将下面对应文件拷贝对板卡的对应位置
sudo cp rknn-toolkit2/rknpu/runtime/Linux/rknn_server/aarch64/usr/bin/* /usr/bin/
sudo cp rknn-toolkit2/rknpu/runtime/Linux/librnkk_api/aarch64//* /usr/lib/
给rknn_server赋予可执行权限
sudo chmod +x /usr/bin/rknn_server
sudo chmod +x /usr/bin/start_rknn.sh
sudo chmod +x /usr/bin/restart_rknn.sh
紧接着重启服务
cd /usr/bin
如图所示,打印出版本后,就可以用ctrl+c关闭掉
再次执行查询代码:一致!
c++部署
省去了下载交叉编译工具
rknn_model_zoo推送到板卡中,然后修改rknn_model_zoo中关于yolov6的代码
开始编译
进入rknn_model_zoo根目录下,
先给脚本权限
chmod 777 build-linux.sh
再编译
./build-linux.sh -t rk3588 -a aarch64 -d yolov6
编译完成后会在跟目录下生成install文件夹
build文件夹
cd rknn_model_zoo-2.1.0/build/build_rknn_yolov6_demo_rk3588_linux_aarch64_Release
./rknn_yolov6_demo ../../install/rk3588_linux_aarch64/rknn_yolov6_demo/model/yolov6s.rknn ../../install/rk3588_linux_aarch64/rknn_yolov6_demo/model/bus.jpg
成功1。
失败:
export ./lib
./rknn_yolov6_demo model/yolov6.rknn model/bus.jpg
这个方法没有运行成功,输出
./rknn_yolov6_demo <model_path> <image_path>
./rknn_yolov6_demo ../../rk3588_linux_aarch64/rknn_yolov6_demo/model/transport_robot_20240131.rknn ../../rk3588_linux_aarch64/rknn_yolov6_demo/model/bus.jpg
这个成功2。
当前目录下的模型和图像bus.jpg,不知为啥失败