TPH-YOLOv5:基于Transformer预测头改进的YOLOv5开发构建麦穗检测计数分析系统

关于小麦麦穗或者是麦粒相关的开发实践不多,但前文也有所涉及,感兴趣的话可以自行移步阅读即可:

《基于轻量级yolov5n+CBAM开发构建全球小麦麦穗智能检测计数系统》

《基于YOLOv5[n/s/m/l/x]全系列参数模型开发构建小麦麦穗颗粒智能化精准检测识别计数系统》

 这里我们的想法是基于Transformer预测头对YOLOv5进行改进优化,进而开发构建用于小麦麦穗检测计数的模型,首先看下实例效果:

接下来简单看下数据集:

实例数据标注实例如下:

0 0.600781 0.94375 0.042188 0.04375
0 0.433594 0.676562 0.101562 0.05625
0 0.802344 0.428125 0.042188 0.0625
0 0.135156 0.915625 0.067187 0.071875
0 0.141406 0.549219 0.079687 0.057813
0 0.175781 0.973437 0.070312 0.053125
0 0.078125 0.019531 0.09375 0.039062
0 0.33125 0.251563 0.059375 0.05625
0 0.25625 0.710156 0.075 0.073438
0 0.449219 0.792969 0.092188 0.079687
0 0.457031 0.34375 0.070312 0.078125
0 0.028125 0.520312 0.05625 0.0625
0 0.214844 0.525781 0.117188 0.064062
0 0.691406 0.210938 0.073438 0.0875
0 0.569531 0.798438 0.082812 0.115625
0 0.935937 0.303906 0.065625 0.073438
0 0.459375 0.411719 0.103125 0.060937
0 0.782031 0.346875 0.054688 0.059375
0 0.95 0.175781 0.078125 0.070312
0 0.08125 0.235937 0.084375 0.078125
0 0.696094 0.352344 0.079687 0.089063
0 0.207813 0.916406 0.084375 0.067187
0 0.357031 0.732812 0.070312 0.053125
0 0.763281 0.821875 0.117188 0.08125
0 0.666406 0.629687 0.092188 0.0625
0 0.445312 0.469531 0.09375 0.079687
0 0.023438 0.146875 0.046875 0.059375
0 0.679688 0.126562 0.059375 0.071875
0 0.850781 0.980469 0.073438 0.039062
0 0.169531 0.739062 0.117188 0.065625
0 0.189062 0.599219 0.06875 0.070312
0 0.621875 0.283594 0.09375 0.073438
0 0.849219 0.867969 0.057813 0.057813
0 0.696875 0.723437 0.05625 0.05625
0 0.099219 0.34375 0.098437 0.06875
0 0.336719 0.892969 0.070312 0.089063
0 0.714844 0.46875 0.092188 0.06875
0 0.971094 0.296094 0.057813 0.051562
0 0.044531 0.935156 0.082812 0.082812
0 0.492969 0.028125 0.070312 0.05625
0 0.9625 0.830469 0.071875 0.089063
0 0.297656 0.889062 0.073438 0.071875
0 0.914844 0.561719 0.092188 0.082812
0 0.057031 0.43125 0.076563 0.06875
0 0.628125 0.557813 0.096875 0.05625
0 0.092188 0.65625 0.10625 0.0875

作者原论文如下:

《TPH-YOLOv5: Improved YOLOv5 Based on Transformer Prediction Head for Object Detection on Drone-captured Scenarios》

详情可以自行阅读原论文即可。

训练数据配置文件如下:

# Dataset
path: ./dataset
train:
  - images/train
val:
  - images/test
test:
  - images/test


nc: 1  # number of classes


# Classes
names:
  0: wheat

这里给出模型文件,如下所示:

# YOLOv5 🚀 by Ultralytics, GPL-3.0 license

# Parameters
nc: 1   # number of classes
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple
anchors: 4

# YOLOv5 v6.0 backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Conv, [64, 6, 2, 2]],  # 0-P1/2
   [-1, 1, Conv, [128, 3, 2]],  # 1-P2/4
   [-1, 3, C3, [128]],
   [-1, 1, Conv, [256, 3, 2]],  # 3-P3/8
   [-1, 6, C3, [256]],
   [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16
   [-1, 9, C3, [512]],
   [-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32
   [-1, 3, C3, [1024]],
   [-1, 1, SPPF, [1024, 5]],  # 9
  ]

# YOLOv5 v6.0 head
head:
  [[-1, 1, Conv, [512, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 6], 1, Concat, [1]],  # cat backbone P4
   [-1, 3, C3, [512, False]],  # 13

   [-1, 1, Conv, [256, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 4], 1, Concat, [1]],  # cat backbone P3
   [-1, 3, C3, [256, False]],  # 17 (P3/8-small)

   [ -1, 1, Conv, [ 128, 1, 1 ] ],
   [ -1, 1, nn.Upsample, [ None, 2, 'nearest' ] ],
   [ [ -1, 2 ], 1, Concat, [ 1 ] ],  # cat backbone P2
   [ -1, 2, C3STR, [ 128, False ] ],  # 21 (P2/4-xsmall)

   [ -1, 1, Conv, [ 128, 3, 2 ] ],
   [ [ -1, 18, 4], 1, Concat, [ 1 ] ],  # cat head P3
   [ -1, 2, C3STR, [ 256, False ] ],  # 24 (P3/8-small)

   [-1, 1, Conv, [256, 3, 2]],
   [[-1, 14, 6], 1, Concat, [1]],  # cat head P4
   [-1, 2, C3STR, [512, False]],  # 27 (P4/16-medium)

   [-1, 1, Conv, [512, 3, 2]],
   [[-1, 10], 1, Concat, [1]],  # cat head P5
   [-1, 2, C3STR, [1024, False]],  # 30 (P5/32-large)

   [[21, 24, 27, 30], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)
  ]

与原始基准模型保持相同的实验参数设置,进行模型的训练,等待开发训练完成,我们来整体对其进行对比分析。

【Precision曲线】
精确率曲线(Precision-Recall Curve)是一种用于评估二分类模型在不同阈值下的精确率性能的可视化工具。它通过绘制不同阈值下的精确率和召回率之间的关系图来帮助我们了解模型在不同阈值下的表现。
精确率(Precision)是指被正确预测为正例的样本数占所有预测为正例的样本数的比例。召回率(Recall)是指被正确预测为正例的样本数占所有实际为正例的样本数的比例。
绘制精确率曲线的步骤如下:
使用不同的阈值将预测概率转换为二进制类别标签。通常,当预测概率大于阈值时,样本被分类为正例,否则分类为负例。
对于每个阈值,计算相应的精确率和召回率。
将每个阈值下的精确率和召回率绘制在同一个图表上,形成精确率曲线。
根据精确率曲线的形状和变化趋势,可以选择适当的阈值以达到所需的性能要求。
通过观察精确率曲线,我们可以根据需求确定最佳的阈值,以平衡精确率和召回率。较高的精确率意味着较少的误报,而较高的召回率则表示较少的漏报。根据具体的业务需求和成本权衡,可以在曲线上选择合适的操作点或阈值。
精确率曲线通常与召回率曲线(Recall Curve)一起使用,以提供更全面的分类器性能分析,并帮助评估和比较不同模型的性能。

【Recall曲线】
召回率曲线(Recall Curve)是一种用于评估二分类模型在不同阈值下的召回率性能的可视化工具。它通过绘制不同阈值下的召回率和对应的精确率之间的关系图来帮助我们了解模型在不同阈值下的表现。
召回率(Recall)是指被正确预测为正例的样本数占所有实际为正例的样本数的比例。召回率也被称为灵敏度(Sensitivity)或真正例率(True Positive Rate)。
绘制召回率曲线的步骤如下:
使用不同的阈值将预测概率转换为二进制类别标签。通常,当预测概率大于阈值时,样本被分类为正例,否则分类为负例。
对于每个阈值,计算相应的召回率和对应的精确率。
将每个阈值下的召回率和精确率绘制在同一个图表上,形成召回率曲线。
根据召回率曲线的形状和变化趋势,可以选择适当的阈值以达到所需的性能要求。
通过观察召回率曲线,我们可以根据需求确定最佳的阈值,以平衡召回率和精确率。较高的召回率表示较少的漏报,而较高的精确率意味着较少的误报。根据具体的业务需求和成本权衡,可以在曲线上选择合适的操作点或阈值。
召回率曲线通常与精确率曲线(Precision Curve)一起使用,以提供更全面的分类器性能分析,并帮助评估和比较不同模型的性能。

【F1值曲线】
F1值曲线是一种用于评估二分类模型在不同阈值下的性能的可视化工具。它通过绘制不同阈值下的精确率(Precision)、召回率(Recall)和F1分数的关系图来帮助我们理解模型的整体性能。
F1分数是精确率和召回率的调和平均值,它综合考虑了两者的性能指标。F1值曲线可以帮助我们确定在不同精确率和召回率之间找到一个平衡点,以选择最佳的阈值。
绘制F1值曲线的步骤如下:
使用不同的阈值将预测概率转换为二进制类别标签。通常,当预测概率大于阈值时,样本被分类为正例,否则分类为负例。
对于每个阈值,计算相应的精确率、召回率和F1分数。
将每个阈值下的精确率、召回率和F1分数绘制在同一个图表上,形成F1值曲线。
根据F1值曲线的形状和变化趋势,可以选择适当的阈值以达到所需的性能要求。
F1值曲线通常与接收者操作特征曲线(ROC曲线)一起使用,以帮助评估和比较不同模型的性能。它们提供了更全面的分类器性能分析,可以根据具体应用场景来选择合适的模型和阈值设置。

【mAP0.5】
mAP0.5(mean Average Precision at 0.5 IoU)
mAP0.5表示在IoU(交并比)阈值为0.5的情况下计算的平均精度(Average Precision,AP)。
IoU阈值决定了何时认为检测框与真实框匹配。较高的IoU阈值意味着更严格的匹配标准。
mAP0.5主要关注低阈值下的性能,即当IoU接近0.5时,模型在识别重叠框时的准确性。

【mAP0.5:0.95】
mAP0.5:0.95(mean Average Precision over IoU thresholds from 0.5 to 0.95):
mAP0.5:0.95表示在多个IoU阈值(从0.5到0.95)下计算的平均精度。
它涵盖了从低到高的IoU阈值,更全面地评估了模型在不同IoU阈值下的性能。
mAP0.5:0.95可以帮助我们了解模型在不同重叠程度下的检测能力。

从上面指标对比情况来看,tph改进的模型与原模型交叉领先没有明显的差距,接下来我们详细看戏tph模型结果

【PR曲线】
精确率-召回率曲线(Precision-Recall Curve)是一种用于评估二分类模型性能的可视化工具。它通过绘制不同阈值下的精确率(Precision)和召回率(Recall)之间的关系图来帮助我们了解模型在不同阈值下的表现。
精确率是指被正确预测为正例的样本数占所有预测为正例的样本数的比例。召回率是指被正确预测为正例的样本数占所有实际为正例的样本数的比例。
绘制精确率-召回率曲线的步骤如下:
使用不同的阈值将预测概率转换为二进制类别标签。通常,当预测概率大于阈值时,样本被分类为正例,否则分类为负例。
对于每个阈值,计算相应的精确率和召回率。
将每个阈值下的精确率和召回率绘制在同一个图表上,形成精确率-召回率曲线。
根据曲线的形状和变化趋势,可以选择适当的阈值以达到所需的性能要求。
精确率-召回率曲线提供了更全面的模型性能分析,特别适用于处理不平衡数据集和关注正例预测的场景。曲线下面积(Area Under the Curve, AUC)可以作为评估模型性能的指标,AUC值越高表示模型的性能越好。

【训练可视化】

【Batch实例】

最后,我们对其各个指标进行统计直方图对比可视化如下所示:

可以看到:改进的TPH-YOLOv5模型在召回率和mAP0.5上略优于原生模型,在其他几个指标上则略逊于原生模型,可见模型的改进本身并不一定能提升模型的效果,打破原生固有的生态平衡可能适得其反。

感兴趣的话也可以基于自己的数据场景开发对比实验尝试下,可能会得到不一样的结果。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

TRIZ经典矛盾矩阵.exe

TRIZ经典矛盾矩阵.exe 一、概要二、技术细节I.函数open_dialog()和open_version_dialog()II.函数resolvent()III.函数Invention_Principle_Content(&#xff…

svn 安装路径

SVN客户端安装(超详细) 一、SVN客户端安装 1、下载安装包地址:https://tortoisesvn.net/downloads.html 此安装包是英文版的,还可以下载一个语言包,在同界面的下方 一直点击下一步,直到弹出选择红框 然…

You Only Look Once

You Only Look Once 真方便, 一行代码, 直接输出超炫效果图_哔哩哔哩_bilibili使用yolov8中等模型对视频进行分割, 视频播放量 465、弹幕量 0、点赞数 7、投硬币枚数 4、收藏人数 3、转发人数 2, 视频作者 宝安钢铁侠, 作者简介 一个分享国产电子DIY的阿婆主,啥也不会,就想分…

qt5-入门-信号槽理解+QMainWindow

参考: Qt 深入了解信号槽_w3cschool https://www.w3cschool.cn/learnroadqt/wz3t1j47.html Qt MainWindow_w3cschool https://www.w3cschool.cn/learnroadqt/uqjl1j4b.html 本地环境: win10专业版,64位 信号槽 最简单的例子:写一…

spring cache的使用(Redis)

要在Spring Boot应用中使用Redis作为缓存,你需要遵循一些步骤来配置和使用Redis。以下是使用Spring Cache抽象与Redis进行整合的详细说明: 1. 添加依赖 首先,需要在pom.xml中添加Spring Boot的Redis starter依赖以及缓存的starter依赖。这会…

我的创作纪念日和前端碎碎念

机缘 作为一个前端开发者,我一直热衷于将设计和技术相结合,尽可能提升用户体验。我最初成为创作者的初心源于学习记录,把创作当作一个笔记,希望把自己遇到的问题,以及学习到的实用技巧记录下来,方便学习回…

新书速览|Docker与Kubernetes容器运维实战

帮助读者用最短的时间掌握Docker与K8s运维技能 内容简介 随着云计算和容器技术的发展,Docker与Kubernetes已经成为各个企业首选的部署工具,使用它们可以提高系统的部署效率和运维能力,降低运维成本。本书是一本为初学者量身定制的Docker与Kub…

nodejs+vue+mysql校园失物招领网站38tp1

本高校失物招领平台是为了提高用户查阅信息的效率和管理人员管理信息的工作效率,可以快速存储大量数据,还有信息检索功能,这大大的满足了用户和管理员这两者的需求。操作简单易懂,合理分析各个模块的功能,尽可能优化界…

nodejs+vue+ElementUi学生兼职招聘求职系统b8t93

浏览器:谷歌浏览器课题主要分为三大模块:即管理员模块和学生、企业模块,主要功能包括:学生、企业、岗位类型、招聘信息、应聘信息、投诉建议等; 运行软件:vscode 前端nodejsvueElementUi 语言 node.js 框架&#xff1…

【MBtiles数据索引和服务发布】GeoServer改造Springboot番外系列二

xyz地图服务访问示例:http://192.168.1.240:8081/gmserver/raster/xyz/firstWP:Imagery-raster/{z}/{x}/{y}.jpg 访问示例如下: mbtiles目录结构 根据z,x,y获取对应mbtiles文件路径的工具方法 说明:重点是使用getMb…

STM32——I2C

通信协议见(STM32——SPI) 一、I2C协议 1.1 I2C协议介绍; I2C是(Inter IC Bus)是由Philips公司开发的一种通用数据总线; 有多根通信线; 一根SDA(串行通信线)&#xf…

PySpark(一)Spark原理介绍、PySpark初体验及原理

Spark简介 Apache Spark是用于大规模数据(large-scala data)处理的统一(unified)分析引擎,其特点就是对任意类型的数据进行自定义计算。 Spark VS Hadoop 尽管Spark相对于Hadoop而言具有较大优势,但Spark并…

Three.js 纹理贴图 - 环境贴图 - 纹理贴图 - 透明贴图 - 高光贴图

文章目录 Three.js 纹理贴图纹理贴图 map属性纹理贴图的映射方式 texture.Mapping纹理加载器 THREE.TextureLoader监听单个材质监听多个材质 - LoadingManager类 1. 颜色贴图与材质的颜色2.渲染效果:UV坐标 - 描述纹理贴图的坐标自定义顶点UVgeometry.attributes.uv…

Java 数据抓取

大家好我是苏麟 , 今天聊聊数据抓取 . 大家合理使用 注意,爬虫技术不能滥用,干万不要给别人的系统造成压力、不要侵犯他人权益! 数据抓取 实质上就是java程序模拟浏览器进行目标网站的访问,无论是请求目标服务器的接口还是请求目标网页内容…

python基础——池

池的介绍: 提前创建进程池,防止创建的进程数量过多导致系统性能受到影响,在系统执行任务时,系统会使用池中已经创建进程/线程,从而防止资源的浪费,创建的进程/线程可以让多个进程使用,从而降低…

Unity技术手册-UGUI零基础详细教程-Canvas详解

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 👉关于作者 专注于Android/Unity和各种游…

备战蓝桥杯---数据结构与STL应用(入门4)

本专题主要是关于利用优先队列解决贪心选择上的“反悔”问题 话不多说,直接看题: 下面为分析: 很显然,我们在整体上以s[i]为基准,先把士兵按s[i]排好。然后,我们先求s[i]大的开始,即规定选人数…

电源模块欠压保护点测试方法分享 纳米软件

电源欠压保护原理 欠压保护是指当电源电压低于一定值时,电源的保护功能会及时断开电路,避免设备受到损坏。电源欠压保护一般是通过一个或多个传感器来检测电压,当电压低于设定值时就会触发电源的保护功能,断开电路,保护…

Git--07--GitExtension

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、GitExtension下载GitExtension官网下载教程 二、GitExtension安装三、GitExtension配置四、GitExtension使用 一、GitExtension下载 官网下载: http…

Docker中安装MySql的遇到的问题

目录 一、mysql查询中文乱码问题 1. 进入mysql中进行查看数据库字符集 2. 修改 my.cnf 中的配置 3. 重启mysql容器,使得容器重新加载配置文件 4. 测试结果 二、主从同步中遇到的问题 2.1 Slave_IO_Running:Connecting 的解决方案 1. 确定宿主机防火墙开放my…