openRv1126 AI算法部署实战之——ONNX模型部署实战

ops/2025/1/31 16:30:58/

 在RV1126开发板上部署ONNX算法,实时目标检测+RTSP传输。视频演示地址

rv1126 yolov5 实时目标检测 rtsp传输_哔哩哔哩_bilibili

一、准备工作

1.从官网下载YOLOv5-v7.0工程(YOLOv5的第7个版本)

手动在线下载: Releases · ultralytics/yolov5 · GitHub

手动在线下载地址: https://github.com/ultralytics/yolov5/releases

往下拉找到yolov5s.pt和source code(tar.gz)并下载

在虚拟机中新建1个文件夹yolo,将上面下载的yolov5-7.0.tar.gz工程拷贝到虚拟机并解压,

得到/home/rv1126/yolo/yolov5-7.0文件夹

然后将yolov5s.pt拷贝至解压后的yolov5-7.0目录

2.YOLO初体验—ubuntu下跑YOLO预训练模型

首先进入pytorch训练环境,再进入yolo工程目录

conda activate py3.8-pytorch-1.13.0
cd /home/rv1126/yolo/yolov5-7.0/

在虚拟机中运行yolo程序

python detect.py --weights yolov5s.pt --img 640 --conf 0.25 --source data/images

上述命令表示:采用预训练模型yolov5s.pt, 喂入模型中的图片被resize为640*640大小, 置信度阈值为0.25, 源图片位于data/images下

运行结束后生成的已标记目标的图片文件放在run/detect/exp目录

二、YOLOV5模型转换为RKNN格式

1.修改models/yolo.py文件

    打开/home/rv1126/yolo/yolov5-7.0/models/yolo.py找到59行,添加3个输出。注释后面的1输出。

注意python对文件格式要求较高,如果不会改或者改完报错,请拷贝/home/rv1126/yolov5/yolov5-7.0-github/models/yolo.py文件替换/home/rv1126/yolo/yolov5-7.0/models/yolo.py文件

2.将yolov5s.pt导出为yolov5s.onnx文件

注意当前环境为训练环境(py3.8-pytorch-1.13.0)

python export.py --weights yolov5s.pt --img 640 --batch 1 --include onnx

在当前路径生成yolov5s.onnx

3.将yolov5s.onnx模型转换为yolov5s.rknn

从/home/rv1126/yolov5/yolov5-7.0-github路径中拷贝模型转换脚本convert-onnx-to-rknn-pre.py和文件夹img到当前路径/home/rv1126/yolo/yolov5-7.0

进入模型转换环境

conda activate py3.6-rknn-1.7.3

开始转换模型

python convert-onnx-to-rknn-pre.py

​​​​​在当前目录生成yolov5.rknn

三、部署yolov5.rknn到RV1126开发板上

1.准备工作

首先在开发板执行如下命令,退出出厂测试程序

killall rkmedia_rockx_person_detection

在开发板执行如下命令,挂载nfs根文件系统

busybox mount -t nfs -o nolock,nfsvers=3 192.168.1.108:/home/rv1126 /getnfs/

2.拷贝模型到开发板并运行程序

cd /getnfs/yolo/yolov5-7.0
cp yolov5s.rknn /demo/bin/yolov5s_relu_rv1109_rv1126_out_opt.rknn

在开发板执行如下命令 运行yolo例程

/demo/bin/openRv1126_yolov5_object_recognize

3.VLC查看视频,串口查看打印坐标

然后在电脑上打开VLC播放器,输入如下取流地址。注意IP地址请根据实际修改

rtsp://192.168.1.105/live/main_stream

即可看到实时yolo检测的视频画面。

串口实时打印检测框坐标信息

如需退出请按ctrl+c

4.源码说明

上面运行的openRv1126_yolov5_object_recognize程序源码位于路径:

/home/rv1126/openRv1126-Aidemo/openRv1126_yolov5_object_recognize_rtsp

该源码定义了模型路径、数据集路径、识别类目数量如下

/home/rv1126/openRv1126-Aidemo/openRv1126_yolov5_object_recognize_rtspopenRv1126_yolov5_object_recognize.cpp指定模型路径static char *model_path = "/demo/bin/yolov5s_relu_rv1109_rv1126_out_opt.rknn";postprocess.cc指定数据集路径	#define LABEL_NALE_TXT_PATH "/demo/bin/coco_80_labels_list.txt"postprocess.h指定模型识别类目数量#define OBJ_CLASS_NUM     80

附录:操作命令

附录
pytorch/ONNX预训练模型转换rknn onnx/torchscript->rknn思路:yolov5 v7在训练环境导出为torchscript或onnx,然后在转换环境调用对应的API来转换成RKNN模型https://github.com/ultralytics/yolov5/releases	找到v7,往下拉找到 yolov5s.pt 和 source code(tar.gz)并下载
1.下载yolov5 v7工程,并导出pt->onnx/torchscript1.1修改models/yolo.py第59行打开注释,3个输出。注释后面的1输出return x[0],x[1],x[2]1.2修改好models/yolo.py文件中的def forward(self, x)函数以后, 可执行如下命令, 将.pt文件导出.onnx 或者. torchscript格式文件:// 转换为TorchScript格式, 得到 yolov5s.torchscript文件python export.py --weights ./yolov5s.pt --img 640 --batch 1 --include torchscript// 转换为ONNX格式, 得到 yolov5s.onnx文件python export.py --weights ./yolov5s.pt --img 640 --batch 1 --include onnx// 若需要指定opset, 可根据安装的onnx库的版本来调整, 如安装的onnx库的版本是1.12.0, 后面加上--opset 12python export.py --weights ./yolov5s.pt --img 640 --batch 1 --include onnx --opset 122.模型转换 onnx/torchscript->rknn2.1源码解析target = 'rv1126'# 确定目标设备targetrknn = RKNN()# 创建RKNN对象rknn.config(reorder_channel='0 1 2',mean_values=[[0, 0, 0]],std_values=[[255, 255, 255]],target_platform=target,output_optimize=1)rknn.load_pytorch(model="./original_model/best.torchscript", input_size_list=[[3,640,640]])# 加载模型rknn.build(dataset='./dataset/dataset1.txt',pre_compile=True)# 构建 RKNN 模型,并预处理rknn.export_rknn('./rknn_model/yolov5-7.0-torchscript.rknn')# 导出 RKNN 模型rknn.release()# 释放RKNN对象2.2转换实操:yolov5导出,复制到/home/rv1126/ModelConvertSample/original_model  best.onnx 和 best.torchscriptpython convert-onnx-to-rknn-pre.py python convert-pytorch-to-rknn-pre.py生成 /home/rv1126/ModelConvertSample/rknn_model/ yolov5-7.0-onnx.rknn 和 yolov5-7.0-torchscript.rknn


http://www.ppmy.cn/ops/154522.html

相关文章

2025美赛美国大学生数学建模竞赛A题完整思路分析论文(43页)(含模型、可运行代码和运行结果)

2025美国大学生数学建模竞赛A题完整思路分析论文 目录 摘要 一、问题重述 二、 问题分析 三、模型假设 四、 模型建立与求解 4.1问题1 4.1.1问题1思路分析 4.1.2问题1模型建立 4.1.3问题1样例代码(仅供参考) 4.1.4问题1样例代码运行结果&…

130周四复盘(162)研究神作

1.设计相关 今天没有进行大思想的学习, 而思考的比较细节, 分析了某神作的核心机制的内外逻辑,总结优点,以及一些过时的缺点, b4这款神作就像一座高峰,难以企及,但魂牵梦萦。如果未来有朝一…

【Block总结】SCSA,探索空间与通道注意力之间的协同效应|即插即用

论文信息 该论文于2025年1月27日发布,探讨了空间注意力和通道注意力的协同作用,提出了一种新的空间与通道协同注意力模块(SCSA)。该模块由可共享多语义空间注意力(SMSA)和渐进通道自注意力(PCS…

Python 函数魔法书:基础、范例、避坑、测验与项目实战

Python 函数魔法书:基础、范例、避坑、测验与项目实战 内容简介 本系列文章是为 Python3 学习者精心设计的一套全面、实用的学习指南,旨在帮助读者从基础入门到项目实战,全面提升编程能力。文章结构由 5 个版块组成,内容层层递进…

【计算机视觉】目标跟踪应用

一、简介 目标跟踪是指根据目标物体在视频当前帧图像中的位置,估计其在下一帧图像中的位置。视频帧由t到t1的检测,虽然也可以使用目标检测获取,但实际应用中往往是不可行的,原因如下: 目标跟踪的目的是根据目标在当前…

Java 性能优化与新特性

Java学习资料 Java学习资料 Java学习资料 一、引言 Java 作为一门广泛应用于企业级开发、移动应用、大数据等多个领域的编程语言,其性能和特性一直是开发者关注的重点。随着软件系统的规模和复杂度不断增加,对 Java 程序性能的要求也越来越高。同时&a…

sprnigboot集成Memcached

安装Memcached 下载地址 32位系统 1.2.5版本:http://static.jyshare.com/download/memcached-1.2.5-win32-bin.zip 32位系统 1.2.6版本:http://static.jyshare.com/download/memcached-1.2.6-win32-bin.zip 32位系统 1.4.4版本:http://stati…

MongoDB中常用的几种高可用技术方案及优缺点

MongoDB 的高可用性方案主要依赖于其内置的 副本集 (Replica Set) 和 Sharding 机制。下面是一些常见的高可用性技术方案: 1. 副本集 (Replica Set) 副本集是 MongoDB 提供的主要高可用性解决方案,确保数据在多个节点之间的冗余存储和自动故障恢复。副…