模型部署RV11126的流程大致为:训练得到.pth模型、pth2onnx、onnx2rknn,最后在边缘计算设备上完成部署。本文为该专题的最后一篇文章,主要说明了.rknn文件如何在RV1126上运行并实现交互式操作。(注意:本文的所有操作都是在Ubuntu环境下进行的,如不懂如何配置请查阅本专题之前的文章)
一、所需条件
- ubuntu上rknn转换环境,参考:深度学习模型部署RV1126准备工作(一)——Ubuntu搭建Rknn环境_rv1126模型部署-CSDN博客
- windows上rknn转换环境,参考:深度学习模型部署RV1126准备工作(一)附加篇——Windows配置rknn环境_rv1126 windows 模型转换-CSDN博客
- 模型训练的.pth文件,参考:深度学习模型部署RV1126准备工作(二)——初学者如何快速上手训练所需模型_rv1126 训练-CSDN博客
- 模型.pth文件转化为.onnx文件,参考:深度学习模型部署RV1126准备工作(三)——从零学习迅速上手,将.pth 模型文件转换为.onnx-CSDN博客
- 模型.onnx文件转化为.rknn文件,参考:深度学习模型部署RV1126准备工作(四)——.onnx文件转换为.rknn文件及部署文件包详解-CSDN博客
二、rknn模型部署步骤
1、之前的博客已将训练好的模型转成了rknn模型,并生成了install安装包,如下:
将生成的rknn_yolov5_demo传入到板端,并运行rknn程序
./rknn_yolov5_demo ./model/yolov5.rknn ./model/bus.jpg
2、进一步将其定义为一个脚本yolov.sh,内容如下:
#!/bin/bash
cd ./rknn_yolov5_demo/
# 检查模型和图片文件是否存在
MODEL_PATH="./model/yolov5.rknn"
IMAGE_PATH="./model/bus.jpg"
if [[ ! -f "$MODEL_PATH" ]]; then
echo "模型文件不存在:$MODEL_PATH"
exit 1
fi
if [[ ! -f "$IMAGE_PATH" ]]; then
echo "图片文件不存在:$IMAGE_PATH"
exit 1
fi
# 运行YOLOv5模型
./rknn_yolov5_demo "$MODEL_PATH" "$IMAGE_PATH"
cd ..
之后还要将在终端将.sh进行转换输入如下指令:
dos2unix yolo.sh
chmod 777 yolo.sh
//运行
./yolo.sh


3、在rv1126上实现rknn模型的交互运行:
参考:
Qt下编码调用Linux的Shell脚本命令_qprocess shell 传递参数-CSDN博客
在QT程序中编写好对应的脚本运行代码,如下:
//脚本调用程序
void widget_skin_window::run_sh()
{
QProcess process;
QStringList args;
args << "/root/yolo.sh";
process.start("sh", args);
if (!process.waitForFinished())
{
process.close();
return;
}
process.close();
}
//利用按钮进行调用
结果:
4、模型预编译:可以节省代码编译的时间
直接按照example中的指令转换得到的rknn模型在rv1126板子上加载速度非常慢,这里需要使用adb连接开发板才能运行这个py文件,开发板和电脑通过usb线连接,ubantu里执行:
sudo apt install adb
把之前生成的.rknn文件置于以下文件夹:

在rknn环境中输入指令:
python export_rknn_precompile_model.py yolov5.rknn yolov5_precompile.rknn rv1126
三、发现的问题
脚本文件运行rknn的过程中会挂在后端,导致其余的.o文件自动运行,从而导致rknn不能正常运行。为了解决这一问题在主程序运行的脚本文件中添加如下指令杀死初始化文件:
ps -ef | grep monitor_prog | grep -v grep | awk '{print $2}' | xargs kill
1283

被折叠的 条评论
为什么被折叠?



