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

news2024/11/9 6:22:01

本文是前文的延伸内容,前文主要是对单个麦穗上麦穗颗粒的检测计数,这里本文的主要目的是要对麦穗进行智能化自动化的检测计数,话不多说,简单先看下效果:

接下来看下数据集:
 

YOLO格式标注文件如下所示:

实例标注内容如下所示:

0 0.1625 0.790625 0.08125 0.15
0 0.223438 0.770312 0.021875 0.08125
0 0.273438 0.732031 0.028125 0.067187
0 0.264844 0.621875 0.042188 0.075
0 0.225781 0.620313 0.035937 0.075
0 0.374219 0.711719 0.051562 0.129688
0 0.435156 0.589844 0.045312 0.095312
0 0.446094 0.622656 0.029687 0.082812
0 0.376563 0.85 0.06875 0.1375
0 0.541406 0.4375 0.060937 0.140625
0 0.604688 0.732812 0.04375 0.08125
0 0.724219 0.774219 0.054688 0.110937
0 0.741406 0.728906 0.035937 0.120313
0 0.799219 0.744531 0.026562 0.120313
0 0.897656 0.713281 0.039062 0.076563
0 0.936719 0.667969 0.082812 0.070312
0 0.8125 0.917188 0.05 0.08125
0 0.632812 0.920312 0.028125 0.071875
0 0.861719 0.882031 0.089063 0.151562
0 0.903125 0.973437 0.053125 0.046875
0 0.982031 0.886719 0.029687 0.092188
0 0.982031 0.771875 0.035937 0.065625
0 0.805469 0.517188 0.029687 0.03125
0 0.883594 0.513281 0.026562 0.035937
0 0.78125 0.41875 0.046875 0.0375
0 0.421094 0.427344 0.051562 0.085938
0 0.467187 0.376563 0.04375 0.09375
0 0.640625 0.320312 0.025 0.05625
0 0.267969 0.432812 0.026562 0.05625
0 0.364844 0.425781 0.023438 0.035937
0 0.169531 0.461719 0.032813 0.045312
0 0.220312 0.25625 0.046875 0.096875
0 0.117969 0.26875 0.060937 0.10625
0 0.341406 0.2875 0.029687 0.034375
0 0.375781 0.282813 0.023438 0.0125
0 0.578125 0.283594 0.01875 0.067187
0 0.799219 0.152344 0.051562 0.067187
0 0.814844 0.085156 0.076563 0.054688
0 0.546094 0.073438 0.057813 0.065625
0 0.577344 0.049219 0.048438 0.035937
0 0.684375 0.150781 0.059375 0.073438
0 0.319531 0.107813 0.029687 0.059375
0 0.844531 0.690625 0.060937 0.05625
0 0.051562 0.06875 0.05 0.025
0 0.029687 0.210156 0.059375 0.073438
0 0.9875 0.379688 0.01875 0.025
0 0.471875 0.785937 0.0375 0.071875
0 0.178906 0.736719 0.054688 0.057813
0 0.498437 0.0375 0.028125 0.034375
0 0.65 0.397656 0.03125 0.051562
0 0.879687 0.10625 0.03125 0.04375
0 0.432031 0.8125 0.020313 0.078125
0 0.559375 0.725781 0.08125 0.154688
0 0.582031 0.774219 0.032813 0.076563

VOC格式标注文件如下所示:

实例标注内容如下所示:

<annotation>
    <folder>Data</folder>
    <filename>./images/37473f2ee637dc9e14a36293978d2a685c78a49001ced9231fa80da26cf23dad.jpg</filename>.
    <source>
        <database>The Database</database>
        <annotation>Data</annotation>
        <image>Data</image>
    </source>
    <owner>
        <name>YMGZS</name>
    </owner>    
    <size>
        <width>1024</width>
        <height>1024</height>
        <depth>3</depth>
    </size>
    <segmented>0</segmented>
    
    <object>        
        <name>wheat</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>390</xmin>
            <ymin>16</ymin>
            <xmax>424</xmax>
            <ymax>58</ymax>
        </bndbox>
    </object>
    
    <object>        
        <name>wheat</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>418</xmin>
            <ymin>0</ymin>
            <xmax>513</xmax>
            <ymax>52</ymax>
        </bndbox>
    </object>
    
    <object>        
        <name>wheat</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>445</xmin>
            <ymin>50</ymin>
            <xmax>488</xmax>
            <ymax>95</ymax>
        </bndbox>
    </object>
    
    <object>        
        <name>wheat</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>536</xmin>
            <ymin>150</ymin>
            <xmax>615</xmax>
            <ymax>234</ymax>
        </bndbox>
    </object>
    
    <object>        
        <name>wheat</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>470</xmin>
            <ymin>103</ymin>
            <xmax>523</xmax>
            <ymax>160</ymax>
        </bndbox>
    </object>
    
    <object>        
        <name>wheat</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>596</xmin>
            <ymin>0</ymin>
            <xmax>640</xmax>
            <ymax>49</ymax>
        </bndbox>
    </object>
    
    <object>        
        <name>wheat</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>515</xmin>
            <ymin>58</ymin>
            <xmax>538</xmax>
            <ymax>109</ymax>
        </bndbox>
    </object>
    
    <object>        
        <name>wheat</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>287</xmin>
            <ymin>80</ymin>
            <xmax>331</xmax>
            <ymax>123</ymax>
        </bndbox>
    </object>
    
    <object>        
        <name>wheat</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>444</xmin>
            <ymin>175</ymin>
            <xmax>483</xmax>
            <ymax>217</ymax>
        </bndbox>
    </object>
    
    <object>        
        <name>wheat</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>551</xmin>
            <ymin>50</ymin>
            <xmax>576</xmax>
            <ymax>84</ymax>
        </bndbox>
    </object>
    
</annotation>

这里主要是想要尝试下最为轻量级的n系列的模型的检测效果,这里我们加入了CBAM注意力机制,模型如下:

# YOLOv5 🚀 by Ultralytics, GPL-3.0 license

# Parameters
nc: 1  # number of classes
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.25  # layer channel multiple
anchors:
  - [10,13, 16,30, 33,23]  # P3/8
  - [30,61, 62,45, 59,119]  # P4/16
  - [116,90, 156,198, 373,326]  # P5/32

# 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, [256, 3, 2]],
   [[-1, 14], 1, Concat, [1]],  # cat head P4
   [-1, 3, C3, [512, False]],  # 20 (P4/16-medium)

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

   [[17, 20, 24], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)
  ]

默认是100次epoch的迭代计算,结果详情如下所示:
【混淆矩阵】

混淆矩阵是在机器学习和统计学中常用的工具,用于评估分类模型的性能。它是一个方阵,其中的每个元素表示模型对样本的分类结果与实际标签之间的一种组合。混淆矩阵可以帮助我们了解模型在不同类别上的分类准确度和错误情况。

混淆矩阵的四个基本术语如下:

  1. 真正类(True Positive,TP):模型正确地将正例(Positive)样本分类为正例。
  2. 假负类(False Negative,FN):模型错误地将正例样本分类为负例。
  3. 假正类(False Positive,FP):模型错误地将负例样本分类为正例。
  4. 真负类(True Negative,TN):模型正确地将负例样本分类为负例。

【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曲线)一起使用,以帮助评估和比较不同模型的性能。它们提供了更全面的分类器性能分析,可以根据具体应用场景来选择合适的模型和阈值设置。

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

【训练指标可视化】

【Batch计算实例】

从评估效果和实际测试结果上来看,轻量级的模型表现也还是不错的,感兴趣的话都可以自行实践下。

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

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

相关文章

社区版Visual Studio通过安装开源插件Fine Code Coverage实现单元测试代码覆盖率统计

1、在Visual Studio上安装Fine Code Coverage插件 扩展->管理扩展->联机 搜索到Fine Code Coverage插件&#xff0c;选中进行下载安装 2、修改Fine Code Coverage配置 如果单元测试框架用的是MSTest&#xff0c;一般需要修改插件配置&#xff0c;否则测试结果不正确 …

【深度学习】数据集最常见的问题及其解决方案

简介 如果您还没有听过&#xff0c;请告诉您一个事实&#xff0c;作为一名数据科学家&#xff0c;您应该始终站在一个角落跟你说&#xff1a;“你的结果与你的数据一样好。” 尝试通过提高模型能力来弥补糟糕的数据是许多人会犯的错误。这相当于你因为原来的汽车使用了劣质汽…

【Maven教程】(八):使用 Nexus 创建私服 ~

Maven 使用 Nexus 创建私服 1️⃣ Nexus简介2️⃣ 安装 Nexus2.1 下载 Nexus2.2 Bundle 方式安装 Nexus2.3 WAR 方式安装 Nexus2.4 登录 Nexus 3️⃣ Nexus 的仓库与仓库组3.1 Nexus 内置的仓库3.2 Nexus 仓库分类的概念3.3 创建 Nexus 宿主仓库3.4 创建 Nexus 代理仓库3.5 创…

跳动的文化:TikTok如何塑造多元社交内容?

在数字时代&#xff0c;社交媒体已成为塑造大众文化和社会趋势的强大工具。其中&#xff0c;TikTok崭露头角&#xff0c;以其独特的短视频平台在全球范围内赢得了数以亿计的用户。 TikTok不仅仅是一个娱乐应用&#xff0c;它还是一个文化引擎&#xff0c;重新定义着社交内容和…

一百九十二、Flume——Flume数据流监控工具Ganglia单机版安装

一、目的 在安装好Flume之后&#xff0c;需要用一个工具可以对Flume数据传输进行实时监控&#xff0c;这就是Ganglia 二、Ganglia介绍 Ganglia 由 gmond、gmetad 和 gweb 三部分组成。 &#xff08;一&#xff09;第一部分——gmond gmond&#xff08;Ganglia Monitoring Da…

vue3中去除eslint严格模式

vue3中去除eslint严格模式 1、全局搜索&#xff1a;extends 2、一般在package.json或者vue.config.js中&#xff0c;直接删除掉vue/standard&#xff0c;重启项目。(在package.json文件中&#xff0c;编译不允许有注释&#xff0c;所以直接删掉)

论文阅读 - Coordinated Behavior on Social Media in 2019 UK General Election

论文链接&#xff1a; https://arxiv.org/abs/2008.08370 目录 摘要&#xff1a; Introduction Contributions Related Work Dataset Method Overview Surfacing Coordination in 2019 UK GE Analysis of Coordinated Behaviors 摘要&#xff1a; 协调的在线行为是信息…

配置 Pod 以使用 PersistentVolume 作为存储

配置 Pod 以使用 PersistentVolume 作为存储 本文将向你介绍如何配置 Pod 使用 PersistentVolumeClaim 作为存储。 以下是该过程的总结&#xff1a; 你作为集群管理员创建由物理存储支持的 PersistentVolume。你不会将该卷与任何 Pod 关联。你现在以开发人员或者集群用户的角色…

PAM从入门到精通(十六)

接前一篇文章&#xff1a;PAM从入门到精通&#xff08;十五&#xff09; 本文参考&#xff1a; 《The Linux-PAM Application Developers Guide》 PAM 的应用开发和内部实现源码分析 先再来重温一下PAM系统架构&#xff1a; 更加形象的形式&#xff1a; 六、整体流程示例 2.…

RK3568笔记三:基于ResNet18的Cifar-10分类识别训练部署

若该文为原创文章&#xff0c;转载请注明原文出处。 本篇文章参考的是野火-lubancat的rk3568教程&#xff0c;本篇记录了在正点原子的ATK-DLK3568部署。 一、介绍 ResNet18 是一种卷积神经网络&#xff0c;它有 18 层深度&#xff0c;其中包括带有权重的卷积层和全连接层。它…

Mysql架构解析,InnoDB架构概述。

MySQL架构解析 Mysql整体架构 MySQL整体架构如下图所示&#xff1a; MySQL逻辑系统架构分为4层: 应用层MySQL服务层存储引擎层系统文件层 下面将对各层的功能和组件进行介绍&#xff0c;并探讨一条语句的执行过程。 应用层 应用层是MySQL体系架构的最上层&#xff0c;它…

Docker——【部署项目的最优解】使用DockerCompose部署项目

目录 前言 1、安装docker-compose 2、为什么使用docker-compose&#xff1f; 3、如何使用DockerCompose 3.1、创建docker-compose文件 3.2、docker-compose相关命令&#xff1a; 前言 对Docker常规操作部署项目不了解的伙伴&#xff0c;可以先看看这篇文章&#xff1a;h…

多商户进驻小程序商城的作用是什么

多商户进驻商城简单来说就是在一个商城里&#xff0c;由经营者邀请同行、异业商家进驻到商城里&#xff08;子商户&#xff09;&#xff0c;可丰富商城经营业态&#xff0c;满足客户多方购物需求&#xff0c;打造购物商圈及经营者获得更多收益等。 通过【雨科】平台的多商户进驻…

Anaconda安装第三方库

一定要使用国内镜像源来进行下载&#xff0c;否则会非常慢&#xff01; 有兴趣的可以看看下面的文章^~^ 新版PyCharm安装第三方库更换国内下载镜像地址 OK!安装完成&#xff01;

Oracle数据中如何在 where in() 条件传参

一、问题场景描述 在sql 条件中&#xff0c;如何在 where in()中想传入参数&#xff0c;如果直接 where in(:seqList)&#xff0c;当传入单个值&#xff0c;seqList: ‘80’ 是没问题的&#xff0c;但是初入多个值时&#xff0c;seqList: ‘80,90’ &#xff0c;因缺少单引号&…

Windows重启开机在不登录系统情况下自启指定程序

问题前言&#xff1a; 项目开发完成后需要部署上线&#xff0c;首次肯定是手动部署跑项目&#xff0c;后期如果出现断电或其他原因导致服务器关机需要重启服务器的情况&#xff0c;这个时候再远程过去手动跑项目是很鸡肋的&#xff0c;通常会设置程序开机自启动&#xff0c;这…

eNSP-OSPF协议其他区域不与骨干区域相连解决方法3

virtual-link技术 AR1 [ar1]int g0/0/0 [ar1-GigabitEthernet0/0/0]ip add 192.168.1.1 24 [ar1-GigabitEthernet0/0/0]quit [ar1]ospf [ar1-ospf-1]area 0 [ar1-ospf-1-area-0.0.0.0]net 192.168.1.0 0.0.0.255 [ar1-ospf-1-area-0.0.0.0]quit AR2 [ar2]int g0/0/0 [ar2-Gig…

C语言的输入输出和条件判断

目录 数据类型、运算符与表达式 1.数据类型 基本数据类型包括 取值范围 2.常量和变量 常量 变量 定义变量 变量的分类 为什么要用变量 3.输入与输出 格式输出函数printf&#xff08;&#xff09; 打印时的输出类型 格式输入函数scanf&#xff08;&#xff09; 4…

C++设计模式_10_ Prototype 原型模式(小模式,不太常用)

Prototype 原型模式仍然属于“对象创建模式”模式的一种。前面两篇介绍的工厂方法模式和抽象工厂模式的流行程度要远大于Prototype 原型模式和builder构建器模式&#xff0c;后两种由于较为简单&#xff0c;介绍篇幅也会少一些。 文章目录 1. 动机 (Motivation)2. 代码演示Prot…

解决方案 | 法大大电子签助力融资租赁突围数字化

融资租赁作为我国非银金融市场的重要组成部分&#xff0c;具有融资和融物两方面功能&#xff0c;不仅能够拓宽市场主体的融资渠道&#xff0c;而且也是促进先进制造业、战略性新兴产业、绿色产业等领域高质量发展的重要助力。 2023年以来&#xff0c;多地相继出台了一系列鼓励…