若该文为原创文章,转载请注明原文出处。
记录的目的是想在RK3568上实现实例分割,在github的rknn_mode_zoo仓库里看到了例子,带着疑问测试了一下,结果跑通了,这里记录下全过程。
一、环境
1、硬件:正点原子ATK-DLRK3568板子
2、虚拟:使用正点提供的虚拟机
3、需要安装的工具(参考03【正点原子】ATK-DLRK3568_AI例程测试手册V1.0.pdf):
安装交叉编译工具链
anaconda 的安装与环境配置
以上自行安装,手册里有详细的説明
二、模型转换
1、下載rknn_model_zoo
https://github.com/airockchip/rknn_model_zoo
本人使用的是git方式,直接在虚拟机下操作的
git clone https://github.com/airockchip/rknn_model_zoo.git
没有VPN很难下载,自行处理。
看下目录,有很多,这里只测试yolov5_seg,也测试了yolov8是正常的。
2、环境及模型下载
转换是在py3.8下转换的,先激活conda環境
conda activate rknn2_env
rknn2_env是根据手册创建的虚拟环境
进入yolov5_seg的model目录
cd /home/alientek/rknn_model_zoo/examples/yolov5_seg/model
下載onnx模型,获取yolov5s-seg.onnx模型,模型訓練和获取会用一篇文章记录。
chmod +x download_model.sh
./download_model.sh
3、rknn模型转换
进入目录/home/alientek/rknn_model_zoo/examples/yolov5_seg/python,里面有个convert.py文件,会把onnx模型转成rknn
这里要注意,rknn-toolkit2一定要安装,py3.8一定要切换。
执行
python convert.py ../model/yolov5s-seg.onnx rk3568 i8
转换成功后的rknn在model目录下。
三、Demo编译
rknn_model_zoo提供了两个测试方法,一个是python, 一个是python, python可以验证onnx模型
cpp直接部署到rk3568上。
这里直接测试cpp
所以编译demo,在readme里也有介绍
即先设置交叉工具链,执行编译。
先执行下面命令,设置交叉工具链:
export GCC_COMPILER=/opt/atk-dlrk356x-toolchain/usr/bin/aarch64-buildroot-linux-gnu
返回rknn_model_zoo目录
执行执行下面命令编译demo
./build-linux.sh -t rk356x -a aarch64 -d yolov5_seg
结果保存在install目录下
rknn_yolov5_seg_demo 会有模型和可执行文件
四、Demo测试及验证
通过ADB把rknn_yolov5_seg_demo上传到板子
adb push rknn_yolov5_seg_demo/ /userdata/aidemo
打开开发板终端,
执行
./rknn_yolov5_seg_demo model/yolov5s-seg.rknn model/bus.jpg
执行出错
错误感觉是rga和rknnrt版本过低。
更新一下,直接拷贝lib下的librga.so和librknnrt.so到/usr/lib目录下
#进入lib目录
cd rknn_yolov5_seg_demo/lib
# 拷贝
cp * /usr/lib
重新运行,输出正常,并输出out.png图片
通过adb把out.png图片下载到虚拟机。
在虚拟机执行下面命令,下载图片
adb pull /userdata/aidemo/rknn_yolov5_seg_demo/out.png ./
后续将训练自己的数据集并部署。
如有侵权,或需要完整代码,请及时联系博主。