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

openRv1126 AI算法部署实战之——YOLO实时目标识别实战

在RV1126开发板上部署YOLO算法,实时目标检测+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/526600.html

相关文章:

  • socket实现HTTP请求,参考HttpURLConnection源码解析
  • 项目集成GateWay
  • 【C++高并发服务器WebServer】-9:多线程开发
  • zabbix7 配置字体 解决中文乱码问题(随手记)
  • 网站快速收录:提高页面加载速度的重要性
  • SpringBoot源码解析(八):Bean工厂接口体系
  • 国产碳化硅(SiC)MOSFET模块与同功率应用的进口IGBT模块价格持平
  • 模型I/O
  • Vue3笔记——(二)
  • 本地Apache Hive的Linux服务器集群复制数据到SQL Server数据库的分步流程
  • 36【Unicode(UTF-16)】
  • 如何解除TikTok地区限制:实用方法解析
  • 【PyTorch】6.张量运算函数:一键开启!PyTorch 张量函数的宝藏工厂
  • 【思维导图】java
  • unity免费资源2025-1-26
  • solidity基础 -- 可视范围
  • Blazor-@inject
  • [前端开发]记录国内快速cdn库,用于在线引入JavaScript第三方库
  • ubuntu20.04.6下运行VLC-Qt例子simple-player
  • ChatGPT-4o和ChatGPT-4o mini的差异点
  • Vue.js组件开发深度指南:从零到可复用的艺术
  • Linux内核中container_of宏深度刨析
  • 算法题(52):翻转二叉树
  • @Inject @Qualifier @Named
  • LangChain教程 - RAG - PDF解析
  • Three.js 后期处理(Post-Processing)详解