目标检测 YOLOv5 - 最新版本v6.2模型在瑞芯微 Rockchip设备上运行的方案

本文主要是介绍目标检测 YOLOv5 - 最新版本v6.2模型在瑞芯微 Rockchip设备上运行的方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目标检测 YOLOv5 - 最新版本v6.2模型在瑞芯微 Rockchip设备上运行的方案

包含pytorch模型转rknn

flyfish

代码

https://github.com/shaoshengsong/rockchip_rknn_yolov5

模型的导出

本例是以640x640的输入来说明

git clone https://github.com/ultralytics/yolov5  # clone
cd yolov5
pip install -r requirements.txt  # install

可以切换到v6.2然后执行导出onnx

python export.py --weights yolov5s.pt --include torchscript onnx

或者直接下载v6.2的源码
在这里插入图片描述
需要更改导出部分
这个为了说明如何编写代码,导出了4部分。在使用时要么输出3部分,要么输出1部分,只选其一。

在这里插入图片描述

方案1 模型的输出如下

在这里插入图片描述

[1,25200,85] 

主要是后处理的编写

def yolov5_post_process(input_image, outputs):class_ids = []confidences = []boxes = []# Rows.rows = outputs[0].shape[1]# Iterate through detections.for r in range(rows):row = outputs[0][0][r]confidence = row[4]# Discard bad detections and continue.if confidence >= CONFIDENCE_THRESHOLD:classes_scores = row[5:]# Get the index of max class score.class_id = np.argmax(classes_scores)#  Continue if the class score is above threshold.if (classes_scores[class_id] > SCORE_THRESHOLD):confidences.append(confidence * classes_scores[class_id])class_ids.append(class_id)cx, cy, w, h = row[0], row[1], row[2], row[3]left = int((cx - w/2) * x_factor)top = int((cy - h/2) * y_factor)width = int(w * x_factor)height = int(h * y_factor)box = np.array([left, top, width, height])boxes.append(box)indices = cv2.dnn.NMSBoxes(boxes, confidences, CONFIDENCE_THRESHOLD, NMS_THRESHOLD)for i in indices:box = boxes[i]left = box[0]top = box[1]width = box[2]height = box[3]             cv2.rectangle(input_image, (left, top), (left + width, top + height), (255, 0, 0), 2)label = "{}:{:.2f}".format(CLASSES[class_ids[i]], confidences[i])             cv2.putText(input_image, label,(left,top),cv2.FONT_HERSHEY_SIMPLEX,0.6, (0, 0, 255), 2)return input_image

方案1完整的pytorch模型转rknn代码下载地址

https://github.com/shaoshengsong/rockchip_rknn_yolov5 

方案2 模型的输出如下

 (1, 3, 80, 80, 85)(1, 3, 40, 40, 85)(1, 3, 20, 20, 85)

在写代码时根据输出的name编写

ret = rknn.load_onnx(model=ONNX_MODEL, outputs=['339', '377', '415'])
if ret != 0:print('Load model failed!')exit(ret)
print('done')

中间转换的shape

(3, 80, 80, 85)
(3, 40, 40, 85)
(3, 20, 20, 85)

最终使用的shape

(80, 80, 3, 85)
(40, 40, 3, 85)
(20, 20, 3, 85)

方案2完整的pytorch模型转rknn代码下载地址

https://github.com/shaoshengsong/rockchip_rknn_yolov5 

在yolov5_v6.2文件夹中

方案3

需要在Ubuntu下进行预编译和量化
为了Rockchip的设备使用量化,这里把box和score分开了。
box范围是0-640
score的范围是0-1
box 由[x_center, y_center, width, height] 变成了[left, top, right, bottom]

常见的边框(bounding box )坐标表示方法

最后模型导出的样子如下,输出两部分
在这里插入图片描述
pytorch原模型推理结果
在这里插入图片描述
rknn推理结果
在这里插入图片描述

这篇关于目标检测 YOLOv5 - 最新版本v6.2模型在瑞芯微 Rockchip设备上运行的方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/390347

相关文章

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语

Qt QCustomPlot库简介(最新推荐)

《QtQCustomPlot库简介(最新推荐)》QCustomPlot是一款基于Qt的高性能C++绘图库,专为二维数据可视化设计,它具有轻量级、实时处理百万级数据和多图层支持等特点,适用于科学计算、... 目录核心特性概览核心组件解析1.绘图核心 (QCustomPlot类)2.数据容器 (QCPDataC

深度解析Java DTO(最新推荐)

《深度解析JavaDTO(最新推荐)》DTO(DataTransferObject)是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式,其核心目的是封装数据,... 目录一、什么是DTO?DTO的核心特点:二、为什么需要DTO?(对比Entity)三、实际应用场景解析

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

python 常见数学公式函数使用详解(最新推荐)

《python常见数学公式函数使用详解(最新推荐)》文章介绍了Python的数学计算工具,涵盖内置函数、math/cmath标准库及numpy/scipy/sympy第三方库,支持从基础算术到复杂数... 目录python 数学公式与函数大全1. 基本数学运算1.1 算术运算1.2 分数与小数2. 数学函数

Python Pillow 库详解文档(最新推荐)

《PythonPillow库详解文档(最新推荐)》Pillow是Python中最流行的图像处理库,它是PythonImagingLibrary(PIL)的现代分支和继承者,本文给大家介绍Pytho... 目录python Pillow 库详解文档简介安装核心模块架构Image 模块 - 核心图像处理基本导入

C++ 检测文件大小和文件传输的方法示例详解

《C++检测文件大小和文件传输的方法示例详解》文章介绍了在C/C++中获取文件大小的三种方法,推荐使用stat()函数,并详细说明了如何设计一次性发送压缩包的结构体及传输流程,包含CRC校验和自动解... 目录检测文件的大小✅ 方法一:使用 stat() 函数(推荐)✅ 用法示例:✅ 方法二:使用 fsee

Python变量与数据类型全解析(最新整理)

《Python变量与数据类型全解析(最新整理)》文章介绍Python变量作为数据载体,命名需遵循字母数字下划线规则,不可数字开头,大小写敏感,避免关键字,本文给大家介绍Python变量与数据类型全解析... 目录1、变量变量命名规范python数据类型1、基本数据类型数值类型(Number):布尔类型(bo