当前位置: 首页 > article >正文

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

 在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_rtsp
	openRv1126_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/torchscript
	1.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 12
		python export.py --weights ./yolov5s.pt --img 640 --batch 1 --include onnx --opset 12
		
2.模型转换 onnx/torchscript->rknn
	2.1源码解析
		target = 'rv1126'# 确定目标设备target
		rknn = 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.torchscript
		python 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.kler.cn/a/525645.html

相关文章:

  • 数据结构 队列
  • DeepSeek模型:开启人工智能的新篇章
  • 为大模型提供webui界面的利器:Open WebUI 完全本地离线部署deepseek r1
  • Kafka 副本机制(包含AR、ISR、OSR、HW 和 LEO 介绍)
  • 万物皆有联系:驼鸟和布什
  • LCR 139.训练计划 I
  • Java集合面试总结(题目来源JavaGuide)
  • mysql 学习2 MYSQL数据模型,mysql内部可以创建多个数据库,一个数据库中有多个表;表是真正放数据的地方,关系型数据库 。
  • 【Block总结】SCSA,探索空间与通道注意力之间的协同效应|即插即用
  • Android createScaledBitmap与Canvas通过RectF drawBitmap生成马赛克/高斯模糊(毛玻璃)对比,Kotlin
  • PyTorch 快速入门
  • Haproxy入门学习二
  • DeepSeek 模型全览:探索不同类别的模型
  • 字符串,集合
  • MySQL数据库(二)
  • redis数据安全与性能保障
  • .gitignore 文件的使用
  • Windows平台免费艺术签名设计工具:一键生成书法级个性签名
  • AIGC时代的Vue或React前端开发
  • 搜索与图论复习1
  • Hive详细讲解-概述与环境搭建
  • 代码随想录算法训练营第三十九天-动态规划-213. 打家劫舍 II
  • Unity实现按键设置功能代码
  • 分享|通过Self-Instruct框架将语言模型与自生成指令对齐
  • 为大模型提供webui界面的利器:Open WebUI 完全本地离线部署deepseek r1
  • 【memgpt】letta 课程6:代理RAG和外部内存