基于YOLOv10和半监督学习的小麦麦穗检测算法:YOLOv10_ssod

news2024/11/15 18:00:58

基于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.半监督学习方法

在这里插入图片描述
这里简单介绍一下本文采用的这类半监督方法的原理,流程大概分为以下几个步骤:

  1. 先用标注好的图像(在本文中为麦穗图像)训练好一个可以检测出目标的模型
  2. 利用训练好的模型对未标注图像进行初步的检测
  3. 将检测出来的目标(麦穗目标)按照检测的指标(如置信度等)进行分类,检测效果较好的,置信度较高的即可拿来给半监督算法当做伪标签来使用
  4. 随着网络训练的进行,伪标签质量越来越高,网络即可从未标注数据中学习到丰富的场景信息

与上文中的YOLOv10原版算法一样,博主同样把半监督训练的方法打包好方便训练。

5.训练效果

5.1最终检测效果

可以看做了一些数据增强(曝光)以及多目标的效果都较好
请添加图片描述

5.2YOLOv10的精度曲线图

在这里插入图片描述
精度最终可以达到0.927

5.3 半监督YOLOv10的精度曲线图

在这里插入图片描述
通过观察精度曲线,可以看到精度先上升后下降,最后再上升,这是由于半监督的训练机制造成的,由于我们一开始采用全监督的训练方式,因此很快达到精度最高,但开启半监督训练后,模型的训练受到这些未标注图像的影响,由于未标注图像中的场景信息以前的模型中并没有,因此精度会直线下降,经过一些epoch的训练后,模型即可适应新场景数据集中的新场景信息。

6.代码获取

q:1831255794

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

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

相关文章

【Material-UI】Button 组件中的图标和标签按钮(Buttons with Icons and Label)详解

文章目录 一、基础用法1. 左侧图标(startIcon)2. 右侧图标(endIcon) 二、图标与标签的搭配三、高级用法和最佳实践1. 自定义图标2. 视觉一致性3. 动态图标 四、总结 在现代用户界面设计中,图标在提高用户体验&#xff…

如何礼貌且高效地应对工作中的无关问题

目录 礼貌而简洁地回应引导至相关资源设置边界利用自动回复工具委婉地拒绝建议通过正式渠道提问引导至相关资源的详细例子设置边界的详细例子深入探讨如何应对无关问题1. 培养对方的自主学习能力2. 利用团队合作3. 利用技术工具提高效率4. 定期培训和分享 具体的案例分析案例一…

初始Spring与SpringIOC容器

一、 Spring框架的基本理解 Spring框架是一款轻量级的开发框架, 核心思想是IOC (控制反转) 和AOP (面向切面编程), 为Java 应用程序开发提供组件管理服务,用于组件之间的解耦,以及简化第三方JavaEE中间件技术的使用( JMS、任务调度…

python XML2SRS

step 1:练习XPATH 选取text-property标签具有nametext 属性值的标签的值 //text-property[nametext] import os import lxml.etree as etree dir "E:\\" for file in os.listdir(dir):if file.endswith(.rptdesign):with open(dirfile,r,encodingutf-8) as f:firs…

高翔【自动驾驶与机器人中的SLAM技术】学习笔记(五)卡尔曼滤波器一:认知卡尔曼滤波器;协方差矩阵与方差;

卡尔曼滤波器 为了研究卡尔曼,我阅读了大量博文。不敢说完全吃透,但是在做一件什么事,可以通过下面这文章来理解,我读了不下五遍。并整理标准重点,添加自己的一些见解。 自动驾驶传感器融合算法 - 自动驾驶汽车中的激…

mprpc框架的应用示例

一、注册 有一个本地服务,我想把它发布成远程服务,首先在user.proto中定义rpc方法的描述,定义参数和响应的消息类型 然后在userservice.cc文件中通过继承UserServiceRpc这个类,重写一下响应的方法(打四个动作&#xf…

深入了解Synchronized原理

深入了解Synchronized原理 第一章:并发编程中的三个问题1.1 可见性1.2 原子性1.3 有序性 第二章:Java内存模型(JMM)2.1 计算机结构简介2.2 Java内存模型 Java Memory Molde 第三章:synchronized保证三大特性3.1 synchronized保证原子性3.2 sy…

收藏!AIGC创业者必备,AI绘画商业变现保姆级全攻略

随着AI爆火后,AI绘画也随之兴起,每次都有人问我,AI绘画如何变现。来,既然大家对商业赚钱这一块还是很关心的,那今天给大家分享我正在做的AI绘画的商业项目保姆级攻略,重点会偏向于术。全程很干,…

六、8 TIM编码器计数和测速代码

(1)所用函数 (2) 1) 上拉输入和下拉输入选择:与外部模块保持一致 若外部模块空闲默认输出高电平,就选择上拉输入,默认输入高电平;若外部模块空闲默认输出低电平&#x…

sql注入——二次注入

二次注入 简介工具环境具体实施 简介 二次注入是一种较为隐蔽的 SQL 注入攻击方式。它并非直接在输入时进行攻击,而是先将恶意数据存储到数据库中,这些数据看似正常。随后,应用程序在后续的操作中,再次使用或处理这些之前存储的恶…

黑马微服务—Docker

Docker 文章目录 Docker1 快速入门1.1 部署MySQL1.2 命令解读 2 Docker基础2.1 常见命令2.2 数据卷2.2.1 数据卷**2.2.2 数据卷命令**2.2.3 挂在本地目录或文件 2.3 自定义镜像2.3.1 镜像结构2.3.2 Dockerfile2.3.3 构建镜像 2.4 容器网络 3 项目部署3.1 部署java项目3.2 部署前…

MySQL 实战 45 讲(01-05)

本文为笔者学习林晓斌老师《MySQL 实战 45 讲》课程的学习笔记,并进行了一定的知识扩充。 sql 查询语句的执行流程 大体来说,MySQL 可以分为 Server 层和存储引擎层两部分。 Server 层包括连接器、查询缓存、分析器、优化器和执行器。 连接器负责接收客…

【第14章】Spring Cloud之Gateway路由断言(IP黑名单)

文章目录 前言一、内置路由断言1. 案例(Weight)2. 更多断言 二、自定义路由断言1. 黑名单断言2. 全局异常处理3. 应用配置4. 单元测试 总结 前言 Spring Cloud Gateway可以让我们根据请求内容精确匹配到对应路由服务,官方已经内置了很多路由断言,我们也…

天润融通助力车企做好战败线索分析,实现商机转化最大化

激烈的行业竞争,让车企越来越重视战败客户分析。 对于每一个汽车品牌来说,大约会有80%甚至更多的留资顾客未在本店购车,最终成为广义上的战败客户。因此,挖掘战败背后的原因对车企意义重大。 作为大宗商品,汽车的交易…

基于Python的Bilibili视频信息分析与可视化

文章目录 有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主项目介绍研究背景研究现状研究目的及意义数据采集及预处理数据清洗数据分析与可视化总结每文一语 有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主 项目介绍 …

浅谈用二分和三分法解决问题(c++)

目录 问题引入[NOIP2001 提高组] 一元三次方程求解题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示思路分析AC代码 思考关于二分和三分例题讲解进击的奶牛题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 思路AC代码 平均数题目描述输入格式输出格式样例 …

【Material-UI】Icon Button 组件详解

文章目录 一、基础用法1. 禁用状态 二、大小(Sizes)1. 小尺寸(Small)2. 大尺寸(Large) 三、颜色(Colors)1. 主题颜色2. 自定义颜色 四、高级用法和最佳实践1. 无障碍性(A…

【香橙派系列教程】(七)香橙派下的Python3安装

【七】香橙派下的Python3安装 为接下来的Linux图像识别智能垃圾桶做准备。 图像处理使用京东SDK只支持pyhton和Java接口,目的是引入C语言的Python调用,感受大厂做的算法bug 此接口是人工智能接口,京东识别模型是通过训练后的模型,…

打靶记录7——Hacker_Kid-v1.0.1

靶机下载地址 https://download.vulnhub.com/hackerkid/Hacker_Kid-v1.0.1.ova难度 OSCP 风格的中级难度靶机(只需要获取root权限即可,CTF 风格的靶机就还需要获取flag) 涉及的攻击方法: 主机发现端口扫描Web信息收集DNS区域传…

数组——对数组进行更加全面的理解

1.数组的概念 数组是一组相同类型元素的集合。数组可分为一维数组和多维数组,多维数组常见的是二维数组。 2.一维数组的创建和初始化 2.1 数组的创建 一维数组的创建的基本语法是: type arr_name[常量值] 例如,我们现在想要存储某个班级…