基于YOLOv10和半监督学习的小麦麦穗检测算法:YOLOv10_ssod
- 1.引言
- 2.数据集
- 2.1 公共数据集
- 2.2 自制数据集
- 3.YOLOv10算法及改进
- 3.1 YOLOv10原版算法
- 3.2 YOLOv10算法改进
- 3.3 对比实验
- 4.半监督学习方法
- 5.训练效果
- 5.1最终检测效果
- 5.2YOLOv10的精度曲线图
- 5.3 半监督YOLOv10的精度曲线图
- 6.代码获取
1.引言
观察小麦麦穗数量有助于人为进行小麦产量评估,早期主要采用人工统计的方法,这种方法费时费力,近几年,由于深度学习技术的进步,利用无人机等设备进行视频图像检测的方法已经取得了一定的成绩。
按照深度学习方法主要分为基于单阶段和双阶段的方法,目前最为流行的即单阶段中的YOLO方法,其精度可以满足日常使用需求且计算负担较小,方便部署于边缘设备。
目前开源出来的最先进的YOLO模型已经更新到第十个版本,即YOLOv10。鉴于目前开源的麦穗数据集视角首先且场景单一,限制算法性能,因此博主结合YOLOv10与半监督学习方法,利用开源的已标注好的数据集以及博主自行采集的无人机视角下的麦穗数据集进行训练,使算法具备更强的适应性。
2.数据集
2.1 公共数据集
目前开源的公共数据集如下所示:
数据集名:Global Wheat Head Dataset
下载地址:www.kaggle.com/c/global-wheat-detection
样图如下:
2.2 自制数据集
众所周知,在深度学习领域,一般数据集和应用场景应当是一致的,否则效果会比较差,为了使算法能够在我们自己的场景中表现良好,也为了节约标注成本,博主利用无人机收集了三千多张应用场景下的麦穗稻田图像,且不对其做标注工作。
收集好的样图如下所示:
3.YOLOv10算法及改进
3.1 YOLOv10原版算法
目前CSDN上对YOLOv10算法的介绍已经很多了,这里就不过多赘述了,v10相对于v8的改动其实也并不大,结构类似,变动稍微大的其实是在backbone的最下层加了一个PSA模块
这里引用csdn博主“小哥谈”的结构图。
下面对比一下YOLOv8的图,其实在结构上相差并不大。
3.2 YOLOv10算法改进
需要在YOLOv10算法的基础上进行改进以发表小论文的同学可以考虑在Backbone与Neck或Neck与Head处加注意力机制(这是普遍的改进方法,具体效果好坏需要进行实际验证),下面给出博主改进的方法:
在Neck中,将如图所示,即送入检测头前的常规C2f改为加了注意力机制的PM-C2f,经过实验测试,这种方法有利用提升网络的精度。
3.3 对比实验
改进后的算法需要进行验证实验,由于博主是在YOLOv10的代码基础上进行改进的,因此只给出YOLOv10的训练方法。
下载好经过笔者调试好的YOLOv10模型后直接运行train.py即可开启训练,通过改变model_yaml_path来指定不同的模型,其中不同对比模型博主已经整理好,方便大家对自己的数据集进行训练。
# coding:utf-8
from ultralytics import YOLOv10
# 模型配置文件
model_yaml_path = "ultralytics/cfg/models/v10/yolov10n.yaml"
# 数据集配置文件
data_yaml_path = 'ultralytics/cfg/datasets/helmet.yaml'
# 预训练模型
pre_model_name = 'yolov10n.pt'
if __name__ == '__main__':
# 加载预训练模型
model = YOLOv10("ultralytics/cfg/models/v10/yolov10n.yaml").load('yolov10n.pt')
model_yaml_path = "ultralytics/cfg/models/v10/yolov10_PA.yaml"
# 训练模型
results = model.train(data=data_yaml_path,epochs=100,batch=8,name='train_v10')
4.半监督学习方法
这里简单介绍一下本文采用的这类半监督方法的原理,流程大概分为以下几个步骤:
- 先用标注好的图像(在本文中为麦穗图像)训练好一个可以检测出目标的模型
- 利用训练好的模型对未标注图像进行初步的检测
- 将检测出来的目标(麦穗目标)按照检测的指标(如置信度等)进行分类,检测效果较好的,置信度较高的即可拿来给半监督算法当做伪标签来使用
- 随着网络训练的进行,伪标签质量越来越高,网络即可从未标注数据中学习到丰富的场景信息
与上文中的YOLOv10原版算法一样,博主同样把半监督训练的方法打包好方便训练。
5.训练效果
5.1最终检测效果
可以看做了一些数据增强(曝光)以及多目标的效果都较好
5.2YOLOv10的精度曲线图
精度最终可以达到0.927
5.3 半监督YOLOv10的精度曲线图
通过观察精度曲线,可以看到精度先上升后下降,最后再上升,这是由于半监督的训练机制造成的,由于我们一开始采用全监督的训练方式,因此很快达到精度最高,但开启半监督训练后,模型的训练受到这些未标注图像的影响,由于未标注图像中的场景信息以前的模型中并没有,因此精度会直线下降,经过一些epoch的训练后,模型即可适应新场景数据集中的新场景信息。
6.代码获取
q:1831255794