英文论文(sci)解读复现【NO.13】基于YOLOv5的自然场景下苹果叶片病害实时检测

news2024/11/27 12:34:14
此前出了目标检测算法改进专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读发表高水平学术期刊中的 SCI论文,并对相应的SCI期刊进行介绍,帮助大家解答疑惑,助力科研论文投稿。解读的系列文章,本人会进行 创新点代码复现,有需要的朋友可关注私信我获取。

一、摘要

针对自然场景中复杂背景下多尺度、异型苹果叶片病害的准确定位与识别问题,提出了一种基于改进YOLOv5s模型的苹果叶片病害检测方法。首先,该模型利用双向特征金字塔网络(BiFPN)高效实现多尺度特征融合;然后,加入变压器和卷积块注意模块(CBAM)注意机制,减少无效背景信息的干扰,提高疾病特征的表达能力,提高模型的准确性和召回率。实验结果表明,所提出的 BTC-YOLOv5s模型(模型尺寸为15.8M)能够在自然场景中有效检测4种苹果叶片病害,平均精度(mAP)为84.3%。使用八核CPU,该模型平均每秒可以处理 8.7 张叶子图像。与SSD、Faster R-CNN、YOLOv4-tiny和YOLOx等经典检测模型相比,该模型的mAP值分别提高了12.74%、48.84%、24.44%和4.2%,具有更高的检测精度和更快的检测速度。此外,该模型在强光、昏暗灯光和模糊图像等强噪声条件下具有较强的鲁棒性,mAP值超过80%。综上所述,新型 BTC-YOLOv5s具有重量轻、精度高、效率高等特点,适合在移动设备上应用。该方法可为苹果叶片病害的早期干预和防治提供技术支持。

二、网络模型及核心创新点

1.双向特征金字塔网络

2.变压器编码器块

3.卷积块注意力模块

4.BTC-YOLOv5s检测模型

三、数据集

在本研究中,我们使用了三个数据集来训练和评估建议的模型:2020年植物病理学挑战(FGVC7)数据集、2021年植物病理学挑战(FGVC8)数据集和PlantDoc数据集。FGVC7和FGVC8由Kaggle 主办的植物病理学细粒度视觉分类比赛中使用的苹果叶片病害图像组成。这些照片是由康奈尔 AgriTech公司使用佳能Rebel T5i 数码单反相机和智能手机拍摄的,每张照片的分辨率为 4000 × 2672像素。苹果叶片病害有四种,即锈病、frogeye 叶斑病、白粉病和赤霉病。这些病害频繁发生,给苹果的品质和产量造成重大损失。数据集的示例图像如图1所示。

PlantDoc[24]是一个非实验室图像数据集,由Davinder Singh等人在2020年构建,用于视觉植物病害检测。它包含了 2598张自然场景中的植物疾病图片,涉及 13种植物和多达17种疾病。PlantDoc中的大多数图像分辨率低、噪声大、样本数量不足,使得检测更加困难。在本研究中,利用苹果锈病和疮痂病图像增强和验证了所提模型的通用性。图 2显示了疾病图像的示例。

  四、实验效果(部分展示)

(1)消融实验

通过消融实验验证了不同优化模块的有效性。我们在基线模型 YOLOv5s 上依次添加了BiFPN模块(BF)、transformer模块(TR)和CBAM注意模块,构建了几个改进模型,并对相同的测试数据进行了比较。实验结果如表4所示。

表 4 中,基线模型YOLOv5s 的精密度和mAP@0.5 分别为 78.4%和 82.7%。通过增加三个优化模块,即BiFPN模块、transformer模块和CBAM关注模块,与基线模型相比,精度和 mAP@0.5 都得到了提高。具体来说,精度分别提高了 3.3%、3.3%和1.1%,mAP@0.5分别提高了0.5%、1%和0.2%。最终三个优化模块的组合得到了最好的结果,其中精度、mAP@0.5 和 mAP@0.5:0.95 都达到了最高值,分别比基线模型高5.7%、1.6%和 0.1%。通过融合跨通道信息和空间信息,CBAM注意机制聚焦于重要特征,而抑制不相关特征。此外,变压器模块采用自我注意机制建立具有疾病特征的长程特征通道。BiFPN模块将上述特征跨尺度融合,提高了重叠模糊目标的识别能力。由于三个模块的组合,BTC-YOLOv5s模型取得了最好的性能。

(2)注意力机制分析

为了评估CBAM注意机制模块的有效性,我们保留了BTC-YOLOv5s模型的其他结构作为实验参数设置,仅将 CBAM 模块替换为其他主流注意机制模块,如SE、CA、ECA模块,以进行对比。
从表 5 可以看出,注意机制可以显著提高模型的准确性。

 SE、CA、ECA和CBAM模型的mAP@0.5分别为83.4%、83.6%、分别为83.6%和84.3%,比YOLOv5s + BF + TR模型高0.4%、0.6%、0.6%和1.3%。每个注意机制都不同程度地改善了 mAP@0.5,其中 CBAM 模型表现最好,达到 84.3%,为0.9%,在四种注意机制中,mAP @ 0.5: 0.95 也是最高的。SE和ECA注意机制只考虑特征图中的通道信息,CA注意机制利用位置信息对通道关系进行编码。而 CBAM关注机制则将空间关注和渠道关注相结合,强调特征图中疾病特征的信息,更有利于疾病的识别和定位。

 五、实验结论

针对苹果叶片病害斑点形状不同、病害多尺度、病害分布密集等问题,本研究在YOLOv5s 的基础上,提出了一种改进的检测模型 BTC-YOLOv5s。为了提高原YOLOv5s模型的整体检测性能,本研究引入了 BiFPN模块,增加了多尺度特征的融合,提供了更多的语义信息。此外,还增加了变压器和 CBAM注意模块,提高了疾病特征的提取能力。结果表明,BTC- YOLOv5s模型在ALDD测试集上的准确率为 84.3%,模型尺寸为15.8 M,在八核CPU设备上的检测速度为8.7 FPS。此外,在极端条件下仍然保持了良好的性能和鲁棒性。改进后的模型检测精度高、检测速度快、计算量要求低,适合部署在移动设备上进行苹果病害的实时监测和智能控制。

注:论文原文出自Real-Time Detection of Apple Leaf Diseases in Natural Scenes Based on YOLOv5本文仅用于学术分享,如有侵权,请联系后台作删文处理。

解读的系列文章,本人已进行创新点代码复现,有需要的朋友欢迎关注私信我获取

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

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

相关文章

python 真正的密码,字符串排序

代码: from typing import List def turePassword(wordList:List[str]) ->str:wordList list(set(wordList))#排序先字符串长度,其次字典序wordList.sort(keylambda x :(len(x),x))ans for i in range(len(wordList)-1,-1,-1):flag Truefor j in …

蓝奥声核心技术分享——无线同步群控技术

1.技术背景 无线同步群控技术指基于对目标场景状态变化的协同感知而获得触发响应并进行智能决策,属于蓝奥声核心技术--边缘协同感知(EICS)技术的关键支撑性技术之一。该项技术涉及无线物联网边缘域网络的无线通信与智能控制技术领域,具体主要…

浅谈人工智能怎么提升工作效率

一、引言 随着科技的飞速发展,人工智能(AI)逐渐成为各行各业提高工作效率的重要工具。本报告旨在通过分析人工智能在提高工作效率方面的作用,探讨其具体实现方法,并通过案例分析来深入了解其实际应用效果和优缺点&…

算法8.从暴力递归到动态规划1

算法|8.从暴力递归到动态规划1 目前感觉,背包问题和货币数组问题本质相同,货币的与dp相关的三种代码写完了,快复习不完了,背包暂时先不写了,回头再写,补充,再总结,结合那个C大神的文…

对KMP算法的一点碎碎念——上篇

对KMP算法的一点碎碎念——上篇 文章目录 对KMP算法的一点碎碎念——上篇1. KMP 算法 Next数组 求解问题1.1 前置知识-最长公共前后缀LCP1.1.1 前缀与后缀1.1.2 最长公共前后缀LCP 1.2 手算法求解 Next数组值(3种常见情况)1.2.1 情况1: next数组 正常存放匹配字符的长度情况1的…

前端面试-React专题

目录 一.React1. React 的主要特性是什么2.React 的核心思想是3. 什么是jsx4. render()函数5. 函数组件和类组件的区别6. HTML和React中事件处理的区别7. React 中的合成事件8. 虚拟Dom?为什么使用?如何实现?9. 在 constructor 中给 super 函…

Excel - 如何给单元格加上下拉框

当你使用下拉列表来限制人们在单元格中的输入时,数据输入会更快、更准确。当有人选择一个单元格时,下拉列表的向下箭头就会出现,可以点击它并进行选择。 创建一个下拉列表 / Create a drop-down list 你可以通过提供下拉列表使工作表更有效率…

基于微信小程序的教学质量评价系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

ubuntu下编译esp32 micropython固件编译(可自行增加模块)

目录 0. 前言1. 安装ESP-IDF2. 初始化Micropython仓库3. 选择ESP-IDF相应版本情况1情况2 4. 开始编译5.烧录固件 0. 前言 为ESP32编译Micropython固件 操作系统:ubuntu22.04 1. 安装ESP-IDF 本节需要ESP-IDF环境,安装开发环境是必要的。 …

FPGA之手把手教你做多路信号发生器(STM32与FPGA数据互传控制波形生成)

文章目录 博主的念叨一、任务介绍1、本文目标2、设计思路3、设计注意事项 二、设计代码1.顶层文件代码2.波形生成模块3.ROM例化4.PLL例化5.引脚分配 总结 博主的念叨 博主建了一个技术资源分享的群,开源免费,欢迎进来唠嗑280730348 最近趁热打铁做了一…

pandas库的常用操作介绍

目录 1.1.Pandas概述2.Pandas索引结构3.groupby学习5.Pandas数值运算二元统计6.对象操作7.merge合并显示设置9.pivot操作10. 时间操作11.常用操作12.groupby操作13.字符串操作14.索引操作15.pandas绘图操作 1.1.Pandas概述 Python的pandas库是一个数据处理和数据分析库&#x…

javascript基础七:说说你对Javascript中作用域的理解?

一、作用域 作用域,即变量(变量作用域又称上下文)和函数生效(能被访问)的区域或集合 换句话说,作用域决定了代码区块中变量和其他资源的可见性 举个粟子 function myFunction(){let name小爱同学 } undef…

6.2:荷兰国旗问题

文章目录 实现key前面的数都小于等key,key后面的数都大于等于key1:前后指针法:2:挖坑法3:单指针法(左神) 辗转相除法求最大公约数 实现key前面的数都小于等key,key后面的数都大于等于…

【leetCode:剑指 Offer】20. 表示数值的字符串

1.题目描述 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。 数值(按顺序)可以分成以下几个部分: 若干空格 一个 小数 或者 整数 (可选)一个 e 或 E ,后面跟着一个 …

深入篇【C++】类与对象:详解内部类+匿名对象+编译器对拷贝的优化

这里写目录标题 Ⅰ.内部类【特点】1.天生友元2.直接访问static成员3.访问限制符限制4.外部类的大小 Ⅱ.匿名对象【特点】1.一行生命域2.对象具有常性3.可强行续命 Ⅲ.拷贝对象时编译器的优化 Ⅰ.内部类 概念:一个类定义在另一个类内部,这个内部的类就叫做…

【Unity100个实用小技巧】如何修改UI上材质的Shader

☀️博客主页:CSDN博客主页💨本文由 萌萌的小木屋 原创,首发于 CSDN💢🔥学习专栏推荐:面试汇总❗️游戏框架专栏推荐:游戏实用框架专栏⛅️点赞 👍 收藏 ⭐留言 📝&#…

mysql基本操作1

库的基本操作 1.show variables like character_set_database 查看系统默认的字符集,若是指定数据库下使用该SQL,则查看的是该数据库对应的字符集。 2.show variables like collation_database 查看系统默认的字符集校验规则,指定数据库下使用…

Java 集合 - List 接口

文章目录 1.List 接口介绍2.List 接口常用 API3.ListIterator 迭代器4.ArrayList - 动态数组4.1 ArrayList 概述4.2 手撸动态数组 5.Vector - 动态数组6.LinkedList - 双向链表6.1 链表概述6.2 手撸双链表6.3 链表与动态数组的区别 7.Stack - 栈8.总结 1.List 接口介绍 在 Jav…

Linux:查看主机运行状态的一系列命令:top、df、iostat、sar

Linux:查看主机运行状态的一系列命令:top、df、iostat、sar 命令top监控系统资源: 使用top(回车)命令后,整个控制台会变成任务管理器的形式: 退出可以使用:ctrlc 或 q 第一行补充:表示正在执行的…

高程复习 欧几里得算法和扩展欧几里得算法考试前冲刺简约版

gcd(m,n)gcd(n,m%n) gcd欧几里得算法标准代码求最大公约数 #include <iostream>using namespace std;typedef long long LL; LL gcd(int a,int b) {if(b0)return a;return gcd(b,a%b); } int main() {LL a,b;cin>>a>>b;cout<<gcd(a,b)<<endl;re…