点击上方“计算机视觉工坊”,选择“星标”

干货第一时间送达

作者丨ChaucerG

来源丨集智书童

植物病害的早期识别和预防是精准农业技术的一个关键技术。本文提出了一种高性能的实时细粒度目标检测框架,解决了传统方法的密集分布、不规则形态、多尺度目标类别、纹理相似性等困难。

改进后的YOLOv4网络架构如下:

  • 通过在Backbone中集成DenseNet来优化特征传播和重用,使检测精度和速度最大化,在Backbone和Neck中提出了两个新的残差块来增强特征提取,同时降低计算成本;

  • 空间金字塔池化(SPP)增强了感受野,改进的路径聚合网络(PANet)保留了细粒度局部信息,改善了特征融合。

  • 此外,使用hard-swish函数作为主要激活函数,由于其具有更好的非线性特征提取能力,提高了模型的精度。

该模型在不同挑战性环境下4种不同病害检测中进行了验证。该模型在检测精度和速度方面优于现有的检测模型。在检出率为70.19FPS时,该模型的精度值为90.33%,f1 score为93.64%,平均平均精度(mAP)值为96.29%。

目前的工作为在复杂场景下检测不同植物疾病提供了一种有效和高效的方法,可扩展到不同的水果和农作物检测、通用疾病检测和各种自动农业检测过程。

1再看YOLOv4

YOLOv4是一个高精度的单阶段目标检测模型,它通过生成边界框坐标并为每个类分配概率,将目标检测任务转换为一个回归问题。

如图1所示,完整的网络结构由3个部分组成:

  1. 特征提取的Backbone;

  2. 提取特征的语义表示的Neck;

  3. 以及预测的Head。

图1 YOLOv4

在网络架构中,将残差模块集成到ResNet网络结构中,获得DarkNet53。为了进一步提高网络性能,结合Cross Stage Partial Network(CSPNet),结合其优越的学习能力,形成CSPDarkNet53。将不同的特征层的信息输入到残差模块中,提供更高层次的特征映射作为输出。与ResNet网络相比,这显著降低了网络参数,同时提高了残差特征信息,提高了特征学习能力。

在最初的YOLOv4 Backbone中,SPP块与PANet以及CSPDarknet53集成,取代了YOLO其他变体中使用的特征金字塔网络(FPN)。这带来了感受野的显著增加。

SPP采用了一种有效的目标检测不同尺度的策略。

  • 首先,在SPP中对输入的特征层进行卷积操作。

  • 之后,可以通过4种不同kernel-size的池化操作来对前面所提特征进行池化操作。

  • 然后,将从SPP中获得的合并特征信息连接起来并进一步进行卷积,这显著增加了检测网络的感受野。

从Backbone和SPP中获得的特征在PANet中通过卷积后进行了上采样,从而得到输入的特征层的2倍大小。为了提取额外的语义特征,特征层从CSPDarknet53经过卷积后被连接,然后上采样,然后下采样,与剩余的特征层堆叠,以增强特征融合过程,如图1所示。

因此,Neck被用来提取丰富的语义特征,并用于准确的预测。

最后,对于特定输入的图像大小,YOLOv4模型可以在3个不同的尺度上预测检测头上得到边界框坐标。

在第一步,输入的图像离散成N×N等间距的网格。如果目标属于网格单元,该模型生成B预测边界框和相应的置信分数。采用非最大抑制(NMS)算法对其最佳边界框预测进行过滤,然后得到最终的边界框。预测过程如图2所示。

图2 NMS算法

为了帮助模型学习给定图像在充满挑战的情况下的各种分布,特别是噪声、复杂背景等,YOLOv4引入了CutMix、Mosaic增强和自对抗训练(SAT)方法来扩展数据集。此外,还可以使用drop block正则化学习空间识别特征,类标签平滑来更好地泛化数据集。

虽然上述技术可以有效提高模型的检测精度,但由于环境复杂,植物病害检测任务面临着密集的细粒病害、感染区域几何形态不规则、多尺度感染病变共存、感染区域与周围环境纹理相似、光照条件变化、重叠和遮挡等方面的具体挑战。

因此,原始的YOLOv4可以提供较低的检测精度,这可能导致大量的遗漏检测,以及由于多尺度疾病检测问题的细颗粒特征提取不足而导致错误的目标预测。此外,YOLOv4具有较高的计算成本和较长的训练时间,这可能不适用于现场移动设备。

2改进YOLOv4

为了解决上述与实时疾病检测程序相关的问题,本研究对最先进的YOLOv4算法进行了改进和优化,用于在复杂的背景环境中准确预测细粒度图像多属性检测。在后面的章节中,通过在复杂的背景下实时检测不同的番茄植株病害,证明了该模型的有效性。改进后的YOLOv4网络架构的完整示意图如图3所示。

图3 改进版本的YOLOv4

提出的修改包括:

  • 适当的选择激活函数的Backbone和Neck

  • 结合DenseNet思想改进和优化CSPDarkNet

  • 提出2个新的残差块用于Backbone和Neck,以增强特征提取网络和降低计算成本

  • 集成SPP块

  • 植入修改的PANet以保存细粒局部信息特征

  • 使用原YOLOv3 Head作为检测头。

该模型输入的图像大小为416×416×3,可以以52×52×24、226×26×24和13×13×24三个不同尺度预测检测头的边界框。结果发现,通过上述修改,该模型优于其他最先进的检测模型,特别是在检测细粒番茄植株病害方面。

2.1 Backbone中特征提取网络的改进

CSPDarknet53中的残差模型帮助网络学习更有表达力的特征,同时减少可训练参数的数量,使其更快地进行实时检测。在原始的YOLOv4模型中,残差单元(Res-unit)进行1×1卷积,然后进行3×3卷积,最后对包含提取的特征信息的两个输出进行权值。

在CSPDarknet53网络中,通过卷积操作对输入图像的特征层进行连续降采样,提取细粒度丰富的语义信息。由于最后三层包含相对较高的语义信息,这些信息被传递给SPP和PANet。最后一个特征层包含最好的特征信息,并连接到SPP。其他两层被集成到PANet中,如图3所示。虽然YOLOv4中的残差模块降低了计算成本,但这进一步降低了高分辨率实时检测的计算内存需求。

因此,在CSPDarkNet53网络结构中提出了一个新的残差块,CSP1-n(n为残差加权操作的次数)(见图3)提高检测速度和性能。

图3(c)

在所提出的CSP1-n残差块中,输入特征被分为2部分:

Part1

残差块的第一部分作为Backbone,在进入主残差单元后进行1×1卷积,再进行1×1卷积,调整通道,如图3(c)所示。为了进一步增强特征提取,它然后执行3×3的卷积;

Part2

而第二部分作为卷积的残差边。在CSP1-n块的末端,这两个部分被连接起来,从而产生额外的特征层信息。

在本研究中,CSP1-n模块在一个改进的Backbone中取代了CSP8和CSP4。最后,进行1×1卷积,对通道进行堆积。在改进后的CSPDarknet53中实现CSP1-n模块,显著提高了本文所使用的特征数据集的检测精度。

2.2 实现Hard-Swish激活,以提高准确性

开发目标检测模型的一个重要方面是选择合适的激活函数,以提高精度和性能。激活函数可以通过诸如导数、单调行为等性质来表征。在这方面,Leaky-ReLU、Mish被广泛应用于密集目标检测模型中的激活。然而,使用Swish函数作为ReLU的下降替代品,显示了神经网络性能的显著改善。Swish函数表示为,。由于s函数σ(x)的存在,它增加了计算成本。因此,使用Hard-swish激活函数,其中Swish函数中的σ(x)被替换为ReLU6(x+3):

由于H-swish具有独特的非单调性,它可以提高检测模型对不同数据集的性能。此外,由于H-swish下方有界及其无界性,它有助于消除输出神经元的饱和问题,改善网络正则化。此外,它的计算速度比Swish快,并且有利于训练,因为它有助于学习更有表现力的特征,对噪声更鲁棒。

不同的目标检测算法都采用了H-swish激活,大大减少了模型的内存访问次数。这里使用Hard-Swish函数作为Backbone和Neck的主要激活函数,在所考虑的数据集上具有显著的精度增益。此外,提高了检测速度,大大降低了计算成本。

2.3 改进CSPDarkNet以实现更好的特征传播和重用

在目标检测过程中,YOLOv4算法减少了训练过程中的特征映射。由于卷积和降采样过程的几个步骤,训练样本的重要特征信息在传输过程中可能会丢失。为了保存重要的特征映射和更有效地重用关键的特征信息,提出了DenseNet框架,其中每一层都向前连接到其他层。该框架的主要优点是,第n层能够从所有以前的层接收到所需的特征信息作为输入。

这里,是第n层的拼接特征图函数;是第层的特征图。这样便允许DenseNet减少参数的数量,增强特征传播和促进特征重用。

由于图像数据集的复杂性,特别是多规模疾病类别的密集分布和共存,使用密集块来更好地促进在整个网络中的特征传递和梯度传播至关重要。此外,它还可以在一定程度上减轻过拟合现象。

在该模型中,将原CSPDarknet53中的最后两个残差CSP8和CSP4块修改为Dense-CSP1-4和Dense-CSP1-2,通过添加Dense连接块来增强特征传播。

图4(a、b)

此外,通过删除CSP-n块,减少了冗余特性操作,提高了计算速度。所提出的DenseBlock和相应的网络参数的示意图如图4(a、b)所示。

用深度网络结构取代了26×26和13×13的下采样层,明显改善了网络结构。在dense block-1中,传递特征图函数对层进行非线性变换,其中每一层由64个特征层组成,每个特征层的分辨率为26×26像素,如图4(a)所示。

CSP1-4之前的dense block-1在26×26分辨率的层上进行特征传播和层拼接,最终的正向传播特征层大小为26×26×512。同样,在分辨率为13×13的层上进行特征传播和层拼接,得到在CSP1-2之前的dense block-2最终正向传播分辨率为13×13×1024的特征层,如图4(b)所示。

Dense-CSPDarknet53配置确保了在训练期间,当输入的图像被转移到网络的较低分辨率层时,以后的特征层从前一层获得特征,从而减少了特征损失。此外,不同的低分辨率卷积层可以重用它们之间的特性,提高了特征使用率。

2.4 使用SPP增强感受野

如图3所示,为了增强目标检测过程中的感受野和分离重要的上下文特征,将SPP块与Dense-CSPDarknet53 Backbone结构的最后一个残差块(CSP1-2)紧密集成。

SPP采用了一种有效的策略来检测不同长度尺度下的目标。它用空间金字塔类型的池化层替换了池化层(在最后一个卷积层之后)。

如图4(c)所示,在提出的修改过程中,SPP保留了输出的空间维度,因为最大池化应用于大小为5×5、9×9和13×13的kernel-size,stride为1。

图4(c)

一个相对较大的13×13最大池化有效地增加了Backbone的感受野。

2.5 修改PANet以保存细粒度的局部信息

在本文开发的目标检测神经网络模型中,早期层提取局部纹理和模式信息,构建后期层所需的语义信息。然而,随着残差块层的增加,层间的互联性变得更加复杂,特别是由于每一层之间的密集连接块已连接到以前的所有图层。这就需要对局部信息进行微调。

为了解决这一问题,在该模型的Neck部分采用了PANet,缩短了多尺度特征金字塔图的高、低融合路径。PANet使用元素级最大操作融合来自所有层的信息,与FPN相比具有更灵活的ROI池化。为了在较低的层次上传播信息,在PANet中使用了一个自下而上的路径增强方法,如图3所示。

图3(d)

在PANet中添加了CSP2-n模块,将基本特征层分为2部分,通过跨阶段操作减少了重复梯度信息的使用,如图3(d)所示这进一步改进了具有全局特征信息的多尺度局部特征融合。CSP2-n的引入改进了特征提取流程,从而显著提高了检测精度和速度。

2.6 其他Tricks

除了上述模型架构的修改外,还:

  • Dropout特征图

  • CIoU损失函数

  • Cross mini Batch Normalization

  • Cosine annealing scheduler

  • Dropblock regularization 来提高该模型的性能。

此外,采用旋转、镜像投影、颜色平衡、亮度变换、模糊处理等数据增强程序,增加从不同环境中获得的输入图像的可变性,以增强检测模型的鲁棒性。

3实验结果

3.1 激活函数的影响

3.2 残差CSP1-n和CSP2-n的影响

3.3 SOTA对比结果

3.4 实时性对比

3.5 可视化对比

4参考

[1].A fast accurate fine-grain object detection model based on YOLOv4 deep neural network

本文仅做学术分享,如有侵权,请联系删文。

重磅!计算机视觉工坊-学习交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有ORB-SLAM系列源码学习、3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、深度估计、学术交流、求职交流等微信群,请扫描下面微信号加群,备注:”研究方向+学校/公司+昵称“,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进去相关微信群。原创投稿也请联系。

▲长按加微信群或投稿

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的视频课程(三维重建系列三维点云系列结构光系列手眼标定相机标定、激光/视觉SLAM、自动驾驶等)、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答五个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近4000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

圈里有高质量教程资料、可答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看~

YOLOv4 改进 | 记录如何一步一步改进YOLOv4到自己的数据集(性能、速度炸裂)相关推荐

  1. 一步一步教你如何将 yolov3/yolov4 转为 caffe 模型

    实际工作中,目标检测 yolov3 或者 yolov4 模型移植到 AI 芯片中,经常需要将其先转换为 caffe1.x 模型,大家可能或多或少也有这方面的需求.例如华为海思 NNIE 只支持caff ...

  2. netcore权限控制_记录这两年是如何一步一步转型到.net core+k8s

    2017年12月份,我离开北京,回到了武汉,开始在现在这家公司担任架构师工作.经过2年的时间,逐步完成以.net core+k8s为核心的技术架构.文末有彩蛋. 以下整理这两年的主要时间节点: 201 ...

  3. 手挽手带你学React:四档(上)一步一步学会react-redux (自己写个Redux)

    手挽手带你学React入门四档,用人话教你react-redux,理解redux架构,以及运用在react中.学完这一章,你就可以开始自己的react项目了. 之前在思否看到过某个大神的redux搭建 ...

  4. 一步一步了解区块链技术

    一步一步了解区块链技术 2016-01-06 区块链技术是新的互联网? 比特币的创始人是Satoshi Nakamoto,一个叫中本聪的极客高手.区块链技术源于比特币,它是一个无比巧妙的发明.从比特币 ...

  5. 第000篇 - 一步一步了解区块链技术

    第000篇 - 一步一步了解区块链技术 来源:春哥个人博客 作者:©黎跃春:JS全栈工程师,区块链.高可用架构技术爱好者 版权声明:本文版权归©黎跃春所有,仅供区块链技术爱好者免费学习,未经许可,禁止 ...

  6. 一步一步建立10万IP电影网站

    一步一步建立10万IP电影网站 版本号 修改内容 作者 修订时间 V1.0 初始化文档内容 小优 2012-12-10 V1.1 新增网站运营内容 ivan 2013-1-10 V1.2 新增网站推广 ...

  7. 如何一步一步建立自己的技术影响力

    很多朋友是不是有这样的经历,当我们还是一个菜鸟的时候,团队里总有1-2个技术大拿,每当有技术问题大家争论不休,团队成员讨论的面红耳赤,技术大牛实在看不下去,掐灭手中的烟头,喝掉面前方便面的最后一点热汤 ...

  8. 一步一步写算法(之图结构)

    原文:一步一步写算法(之图结构) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 图是数据结构里面的重要一章.通过图,我们可以判断两个点之间是 ...

  9. 通过脚本案例学习shell(五) 通过创建DNS脚本一步一步教你将一个普通脚本规范到一个生产环境脚本...

    通过脚本案例学习shell(五) 通过创建DNS脚本一步一步教你将一个普通脚本规范到一个生产环境脚本   版权声明: 本文遵循"署名非商业性使用相同方式共享 2.5 中国大陆"协议 ...

  10. 基于postfix一步一步构建Mailserver,支持虚拟用户,支持WebMail

    我们来一步一步来构建MailServer,支持虚拟用户.虚拟域,支持Webmail,支持Mysql.这个实验化了两天的时间完成的,其中各种崎岖,认真的照着做,问题不大.不过新手还是不要做这个了,需要整 ...

最新文章

  1. android 保存文件到本地可见_android 日记log保存到本地简单方法
  2. STEMA 考试每日一练 2020.12.7 - 2021.11.30 试题及答案 - 刷题
  3. Linux web服务器初始化设置
  4. 3分钟把区块链的技术与应用彻底讲清楚
  5. 再也不学AJAX了!(二)使用AJAX
  6. [机器学习] LR与SVM的异同
  7. footer代码html,css如何实现footer定位(完整代码)
  8. 在asp.net2.0中使用存储过程
  9. 作业6--第3、4、5天进度
  10. 2.java运算符与逻辑控制
  11. HDOJ水题集合4:杂题
  12. ubuntu 下vivado关联vscode
  13. Visio2010正确的安装步骤
  14. redis 中pipline,mset, mget使用对比
  15. vue.js毕业设计,基于vue.js前后端分离电影院售票小程序系统设计与实现
  16. 数据库实体之间的关联关系:一对一、一对多、多对多
  17. python猜随机数代码_猜随机数游戏Python
  18. 腾讯首次攻破屏下指纹识别技术;苹果新Mac Pro最贵将卖到4.2万;Haxe 4.0发布 | 极客头条...
  19. 如何用matlab画圆环,利用内外径画圆环
  20. LeetCode 33. 搜索旋转排序数组

热门文章

  1. iOS8官方推荐图标和图像尺寸
  2. iView的表格做一个带斜线的表头
  3. 计算机函数sumif怎么用,怎么用sumif函数求和
  4. Laravel文档梳理10、请求生命的周期
  5. Laravel文档梳理9、Blade模板
  6. Laravel文档 翻译合集
  7. Ubuntu安装Microsoft Windows Fonts微软字体库
  8. c语言中以e为底的指数怎么表示,c++中怎样表示以e为底的
  9. 小学计算机无生试讲教案,小学英语无生试讲
  10. java getbytes 编码_Java String getBytes() encoding 编码转换