易百纳ss928开发板移植自训练模型跑通yolov5算法

news/2024/9/19 15:42:12/文章来源:https://www.cnblogs.com/onlyliveonce/p/18406593

ss928平台移植官方yolov5s算法参考文章:https://www.ebaina.com/articles/140000017418,这位大佬也开源了代码,gitee链接:https://gitee.com/apchy_ll/ss928_yolov5s
本文在参考上述文章的基础上,将官方yolov5s模型跑通,验证推理图片正确,然后移植自训练的推理模型,在移植过程中遇到了一些问题,解决后记录一下。
一、模型转换
自训练模型是在yolov5-v7.0版本下训练的,通过export.py将pt模型转为onnx模型,需要注意的是在运行export.py转出前,需要将yolo.py文件里的foward函数修改为如下:

点击查看代码
def forward(self, x):for i in range(self.nl):x[i] = self.m[i](x[i])  bs, _, ny, nx = x[i].shape  x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous()return x
这样修改的目的是为了让模型推理输出三层output,进一步通过后处理解算目标检测框。目前试过yolov5_62_export_ncnn、yolov5-v6.2、yolov5-v7.0、瑞芯微rk的yolov5代码(在官方yolov5-v7.0版本上做了些优化)这些版本转出的onnx模型都相同,可以进行下一步运用atc工具转换为om模型转换om模型。

二、模型部署
在参考上述提到的文章里的代码移植自己训练好的模型,与官方yolov5s不同的是自训练模型检测8类目标,需要修改如下几个地方:
1.模型调用路径
2.模型输入图像数据路径
3.后处理代码中的检测类别数量

4.画图可视化时目标标签类型

经过以上修改编译完成得到可执行文件,就可以用自训练模型推理了。
** 三、推理验证**
采用一张测试集中的图片进行推理测试,在板端推理结果如图1所示,在PC端用python工程推理结果如图2所示。

图1 板端推理结果

图2 PC端推理结果
明显可看出PC端检测结果要比板端检测结果好很多,验证了pt、onnx模型的推理结果都正常以及板端后处理代码无误后,定位问题出在om模型或输入推理模型的图像。进一步研究发现在使用act工具转om模型时会开启aipp_op配置,默认配置文件里是将YUV420SP_U8转为GRAY灰度图格式,对应代码中将输入的jpg图片转为YUV420SP_U8格式数据再输入给推理函数。这里推测自训练模型效果差是因为输入的是GRAY格式图片,训练的数据集都是jpg图片,可能不像官方yolov5s用的coco数据集那么多,导致模型推理GRAY格式图像检测精度下降。因此将代码修改如下:
1.输入图片letterbox预处理后不转为YUV420SP格式,直接保存为BGR格式的bin文件,然后再输入给推理函数。

2.此时保存的bin图像数据是BGR格式,在onnx转换om模型时,开启通道交换开关,将BGR格式转换为RGB格式。

这里配置时输入格式参数是RGB888_U8,其实应该写BGR的,但是查看了act工具手册里,该参数没有BGR合适的输入,最后验证这里写RGB888_U8,只开启通道交换功能,最后推理结果是正确的,说明BGR格式转为了RGB格式,aipp里的其它功能暂时没有使用过,不确定这样配置是否会影响其它功能正确使用。
修改后重新编译推理测试图片,推理结果如图所示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/795041.html

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

相关文章

hyperworks软件许可优化解决方案

Hyperworks软件介绍 Altair 仿真驱动设计改变了产品开发,使工程师能够减少设计迭代和原型测试。提升科学计算能力扩大了应用分析的机会,使大型设计研究能够在限定的项目时间完成。现在,人工智能在工程领域的应用再次改变了产品开发。基于物理场的仿真驱动设计与机器学习相结…

Xcode 16 RC (16A242) 发布下载,正式版下周公布

Xcode 16 RC (16A242) 发布下载,正式版下周公布Xcode 16 RC (16A242) - Apple 平台 IDE IDE for iOS/iPadOS/macOS/watchOS/tvOS/visonOS 请访问原文链接:https://sysin.org/blog/apple-xcode-16/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.orgXcode 16 的新…

md5拓展攻击

md5拓展攻击 【工具】hash-ext-attack/img/img_1.png at master shellfeel/hash-ext-attack GitHub 【攻击方法例题】https://ctf.org.cn/2019/11/19/哈希长度扩展攻击以及HashPump安装使用和两道题目/ 实际中的利用条件如下:基于哈希的消息认证码 (MAC):长度扩展攻击的关键…

JAVA+VUE实现动态表单配置

功能描述: 资产管理系统中,在资产分类中,给同一种类型的资产配置定制化的表单项,并实现不同类型显示不同的数据,如图所示:数据库设计部分: 1.表单项表CREATE TABLE `dct_smp`.`t_asset_product_definitions` (`id` bigint NOT NULL,`product_id` bigint NOT NULL COMMEN…

vue 可选链操作符(?.)报错

一直用的好好的这个运算符,换了个项目,用不了了 首先交代一下,vue版本是2.6.11,node版本是v14.17.4 ,vue-template-compiler也是2.6.11 首先哈,我们升级一下vue到2.7.xx版本npm i vue@2.7.0 vue-template-compiler@2.7.0然后安装这个插件npm install @babel/plugin-propo…

互信息

参考 互信息是信息论中用以评价两个随机变量之间的依赖程度的一个度量。 相关概念:信息量:是对某个事件发生或者变量出现的概率的度量,一个事件发生的概率越低,这个事件包含的信息量越大,这跟我们直观上的认知也是吻合的,越稀奇新闻包含的信息量越大,因为这种新闻出现的…

UEFI原理与编程(一)

第一章 UEFI概述(Unified Extensible Firmware Interface 统一的可扩展固件接口) 常见缩写及描述:缩略词 全名 描述UEFI Unified Extensible Firmware Interface 统一的可扩展固件接口BS Boot Services 启动服务RT Runtime Service 运行时服务BIOS Basic Input Output System …

SparkSQL练习:对学生选课成绩进行分析计算

题目内容: 对学生选课成绩进行分析计算题目要求: (1)该系总共有多少学生; (2)该系共开设来多少门课程; (3)每个学生的总成绩多少; (4)每门课程选修的同学人数; (5)每位同学选修的课程门数; (6)该系DataBase课程共有多少人选修; (7)每位同学平均成绩;数据…

面试-JS基础知识-原型和原型链

JS本身是基于原型来继承的语言。 问题引出:如何判断一个变量是不是数组? 手写一个简易的jQuery,考虑插件和扩展性 class的原型本质,怎么理解?知识点class和继承 类型判断 instanceof 原型和原型链class class相当于一个模版,可以用来构建(constructor)东西。 class Stu…

作业9.2:论文查重

这个作业属于哪个课程 班级链接这个作业要求在哪里 作业要求链接这个作业的目标 设计论文查重算法;学会 Git 版本控制。Github 链接:博客正文首行 github 链接 目录一、整体设计开发环境整体设计项目结构二、模块接口的设计与实现核心的类与方法类与函数的调用关系核心算法三…

搭建企业内部的大语言模型系统

大纲开源大语言模型 大语言模型管理 私有大语言模型服务部署方案开源大语言模型 担心安全与隐私?可私有部署的开源大模型商业大模型,不支持私有部署ChatGPT Claude Google Gemini 百度问心一言开源大模型,支持私有部署Mistral Meta Llama ChatGLM 阿里通义千问常用开源大模型…

115. 不同的子序列(leetcode)

https://leetcode.cn/problems/distinct-subsequences/submissions/563375885/ 这题比较有难度,具体不太好想到,需要以是否选择s[i]来划分子集这位描述的很清楚,不做过多赘述 class Solution {public int numDistinct(String s, String t) {// f[i][j]表示s中前i个字符中选择,有…