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_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.mzph.cn/pingmian/68646.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++题解】1055. 求满足条件的整数个数

欢迎关注本专栏《C从零基础到信奥赛入门级(CSP-J)》 问题:1055. 求满足条件的整数个数 类型:简单循环 题目描述: 在 1∼n 中,找出能同时满足用 3 除余 2 ,用 5 除余 3 ,用 7 除余…

亚博microros小车-原生ubuntu支持系列:17 gmapping

前置依赖 先看下亚博官网的介绍 Gmapping简介 gmapping只适用于单帧二维激光点数小于1440的点,如果单帧激光点数大于1440,那么就会出【[mapping-4] process has died】 这样的问题。 Gmapping是基于滤波SLAM框架的常用开源SLAM算法。 Gmapping基于RBp…

R语言统计分析——ggplot2绘图4——刻面

参考资料:R语言实战【第2版】 如果组在途中并排出现而不是重叠为单一的图形,关系就是清晰的。我们可以使用facet_wrap()函数和facet_grid()函数创建网格图形(在ggplot2中也称刻面图),相关语法如下: 语法结…

AI大模型开发原理篇-9:GPT模型的概念和基本结构

基本概念 生成式预训练模型 GPT(Generative Pre-trained Transformer)模型 是由 OpenAI 开发的基于 Transformer 架构的自然语言处理(NLP)模型,专门用于文本生成任务。它的设计理念在于通过大规模的预训练来学习语言模…

使用Edu邮箱申请一年免费的.me域名

所需材料:公立Edu教育邮箱一枚(P.S:该服务不支持所有的Edu教育邮箱,仅支持比较知名的院校) 说到域名,.me这个后缀可谓是个性十足,适合个人网站、博客等。.me是黑山的国家顶级域名(c…

【RocketMQ 存储】- RocketMQ存储类 MappedFile

文章目录 1. 前言2. ReferenceResource3. MappedFile3.1 核心参数3.2 构造器3.3 消息追加3.4 消息刷盘3.5 消息提交3.6 截取一段 ByteBuffer3.7 cleanup 释放堆外内存3.8 destroy 销毁 mappedFile3.9 warmMappedFile 4. 小结 本文章基于 RocketMQ 4.9.3 1. 前言 上一篇文章中我…

Autosar-Os是怎么运行的?(时间保护)

写在前面: 入行一段时间了,基于个人理解整理一些东西,如有错误,欢迎各位大佬评论区指正!!! 1.功能概述 AUTOSAR OS 的四大可定制类型凸显了时间保护(Timing Protection)…

Linux环境基础开发工具的使用(apt, vim, gcc, g++, gbd, make/Makefile)

目录 什么是软件包 Linux 软件包管理器 apt 认识apt 查找软件包 安装软件 如何实现本地机器和云服务器之间的文件互传 卸载软件 Linux编辑器 - vim vim的基本概念 vim下各模式的切换 vim命令模式下各指令汇总 vim底行模式个指令汇总 Linux编译器 - gcc/g gcc/g的作…

计算机网络 (62)移动通信的展望

一、技术发展趋势 6G技术的崛起 内生智能:6G将强调自适应网络架构,通过AI驱动的智能算法提升通信能力。例如,基于生成式AI的6G内生智能架构将成为重要研究方向,实现低延迟、高效率的智能通信。信息编码与调制技术:新型…

【卫星通信】链路预算方法

本文介绍卫星通信中的链路预算方法,应该也适用于地面通信场景。 更多内容请关注gzh【通信Online】 文章目录 下行链路预算卫星侧参数信道参数用户侧参数 上行链路预算链路预算计算示例 下行链路预算 卫星侧参数 令卫星侧天线数为 M t M_t Mt​,每根天线…

详细解释java当中的所有知识点(前言及数据类型及变量)(第一部分)

会将java当中的所有的知识点以及相关的题目进行分享,这是其中的第一部分,用红色字体标注出重点,以及加粗的方式进行提醒 目录 一、Java语言概述 1.Java语言简介 2.语言优势 二、main方法 1.Java程序结构组成 2.运行Java程序 3.注释 4.…

MYSQL 商城系统设计 商品数据表的设计 商品 商品类别 商品选项卡 多表查询

介绍 在开发商品模块时,通常使用分表的方式进行查询以及关联。在通过表连接的方式进行查询。每个商品都有不同的分类,每个不同分类下面都有商品规格可以选择,每个商品分类对应商品规格都有自己的价格和库存。在实际的开发中应该给这些表进行…

【竞技宝】LOL:两大赛区胜率达到78.6!

北京时间1月29日,英雄联盟2025新赛季正在如火如荼的进行之中,目前由于新春佳节的到来,LCK和LPL赛区都进行了短暂的休赛期。在新春佳节之前的比赛中,由于新版本以及全局BP(LPL)的到来,很多英雄都…

软件测试 —— jmeter(2)

软件测试 —— jmeter(2) HTTP默认请求头(元件)元件作用域和取样器作用域HTTP Cookie管理器同步定时器jmeter插件梯度压测线程组(Stepping Thread Group)参数解析总结 Response Times over TimeActive Thre…

信息安全专业优秀毕业设计选题汇总:热点选题

目录 前言 毕设选题 开题指导建议 更多精选选题 选题帮助 最后 前言 大家好,这里是海浪学长毕设专题! 大四是整个大学期间最忙碌的时光,一边要忙着准备考研、考公、考教资或者实习为毕业后面临的升学就业做准备,一边要为毕业设计耗费大量精力。学长给大家整理…

在线课堂小程序设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

vim如何解决‘’文件非法关闭后,遗留交换文件‘’的问题

过程描述: 由于我修改文件时(一定得修改了文件,不做任何修改不会产生这个问题)的非法关闭,比如直接关闭虚拟机,或者直接断开远程工具的远程连接,产生了以下遗留交换文件的问题: 点击…

SpringBoot 数据访问(MyBatis)

SpringBoot 数据访问(MyBatis) 向 SQL 语句传参 #{} 形式 #{}:如果传过来的值是字符串类型。那两边会自动加上 单引号。当传递给 #{} 的参数值是非字符串类型(如整数、浮点数、布尔值等),MyBatis 不会为这些值添加引…

SpringBoot整合Swagger UI 用于提供接口可视化界面

目录 一、引入相关依赖 二、添加配置文件 三、测试 四、Swagger 相关注解 一、引入相关依赖 图像化依赖 Swagger UI 用于提供可视化界面&#xff1a; <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactI…

【ArcGIS遇上Python】批量提取多波段影像至单个波段

本案例基于ArcGIS python,将landsat影像的7个波段影像数据,批量提取至单个波段。 相关阅读:【ArcGIS微课1000例】0141:提取多波段影像中的单个波段 文章目录 一、数据准备二、效果比对二、python批处理1. 编写python代码2. 运行代码一、数据准备 实验数据及完整的python位…