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

AI人工智能初学者

共 5668字,需浏览 12分钟

 ·

2022-01-12 15:20

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

改进后的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

5推荐阅读

金字塔ViT | 华为提出使用金字塔结构改进Transformer,涨点明显(Pytorch逐行解读)


清华大学提出DAT | DCN+Swin Transformer会碰撞出怎样的火花???


全新Backbone | Pale Transformer完美超越Swin Transformer


长按扫描下方二维码添加小助手并加入交流群,群里博士大佬云集,每日讨论话题有目标检测、语义分割、超分辨率、模型部署、数学基础知识、算法面试题分享的等等内容,当然也少不了搬砖人的扯犊子

长按扫描下方二维码添加小助手。

可以一起讨论遇到的问题

声明:转载请说明出处

扫描下方二维码关注【集智书童】公众号,获取更多实践项目源码和论文解读,非常期待你我的相遇,让我们以梦为马,砥砺前行!

浏览 39
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报