论文精读——YOLOv4


专栏链接:深度学习和论文精读
本文并非对论文直接进行翻译,增加了自己对于论文的理解,如有问题请及时指出~


前言

论文题目:《YOLOv4: Optimal Speed and Accuracy of Object Detection》
论文原文:https://arxiv.org/abs/2004.10934
论文来源:无
发表时间:2018论文题目和作者


摘要

有大量特性被认为可以提高卷积神经网络(CNN)的准确率。需要在大型数据集上实际测试这些特性的组合,并对结果进行理论上的证明。一些特性只在特定模型、特定问题上有效,或者仅适用于小规模数据集;而像批量归一化和残差连接这样的特性,适用于大多数模型、任务和数据集。我们假设这类通用特性包括加权残差连接(WRC)、跨阶段部分连接(CSP)、跨小批量归一化(CmBN)、自对抗训练(SAT)和Mish激活函数。我们使用新特性:WRC、CSP、CmBN、SAT、Mish激活、Mosaic数据增强、CmBN、DropBlock正则化和CIoU损失,并组合一些特性以达到最先进的结果:对MS COCO数据集,达到43.5%的AP(65.7%的AP50),在Tesla V100上以约65 FPS的实时速度。源代码位于https://github.com/AlexeyAB/darknet

ps:本文结合了大量前人研究技术,设计内容广泛,部分重要内容博主以后会专门写文章进行讲解,本文章仅做简单介绍若不详细还请读者自行搜索~


1 介绍

1.1 背景

大多数基于CNN的对象检测器主要只适用于推荐系统。例如,通过城市视频摄像头搜索空闲停车位是由慢速但精确的模型执行的,而汽车碰撞警告则涉及到快速但不精确的模型。提高实时对象检测器的准确性,使其不仅能用于生成提示的推荐系统,还能用于独立的过程管理和减少人工输入。实时对象检测器在常规图形处理单元(GPU)上的操作,使得它们可以以合理的价格大规模使用。最精确的现代神经网络无法实时操作,并且需要大量的GPU以及大批量大小进行训练。我们通过创建一个在常规GPU上实时操作的CNN来解决此类问题,而且训练只需要一块常规GPU。

1.2 贡献

在生产系统中需要对象检测器,并针对并行计算而非低计算量理论指标(BFLOP)进行优化。作者希望所设计的对象能够轻松训练和使用。例如,任何使用常规GPU进行训练和测试的人都可以实现实时、高质量和令人信服的对象检测结果,正如YOLOv4在下图中展示的结果。
AP与FPS的对比

本文的贡献总结如下:

  1. 开发了一个高效和强大的对象检测模型。它使得每个人都可以使用1080 Ti或2080 Ti GPU来训练一个超快速且准确的对象检测器。
  2. 验证了最新的Bag-of-Freebies和Bag-of-Specials方法对于对象检测器训练期间的影响。
  3. 修改了最新方法,使它们更加高效且适合单GPU训练,包括CBN、PAN、SAM等

2 相关工作

2.1 目标检测模型(Object detection models)

现代的检测器通常由两部分组成,一个是在ImageNet上预训练的主干网络(backbone),另一个是用于预测对象的类别和边界框的头部网络(head)。对于在GPU平台上运行的检测器,它们的主干网络可以是VGG、ResNet、ResNeXt或DenseNet。对于在CPU平台上运行的检测器,它们的主干网络可以是SqueezeNet、MobileNet或ShuffleNet。至于头部网络,通常分为两种类型,即单阶段(one-stage)对象检测器和两阶段(two-stage) 对象检测器。最具代表性的两阶段对象检测器是R-CNN系列,包括Fast R-CNN、Faster R-CNN、R-FCN和Libra R-CNN。也可以将两阶段对象检测器做成无锚点(anchor-free)的,如RepPoints。对于单阶段对象检测器,最具代表性的模型是YOLO、SSD和RetinaNet。近年来,开发了无锚点(anchor-free)的单阶段对象检测器,这类检测器包括CenterNet、CornerNet、FCOS等。近年来开发的对象检测器常在主干网络和头部网络之间插入一些层,这些层通常用于收集来自不同阶段的特征图。我们可以称之为对象检测器的颈部(neck)。颈部通常由若干自下而上的路径和若干自上而下的路径组成。装备了这种机制的网络包括特征金字塔网络(FPN)、路径聚合网络(PAN)、BiFPN和NAS-FPN。除了上述模型外,一些研究者还专注于直接构建新的主干网络(如DetNet、DetNAS)或新的整体模型(如SpineNet、HitDetector)进行对象检测。
总之,一个普通的对象检测器由几个部分组成

部分内容
输入(Input)图像(Image)、小块(Patches)、图像金字塔(Image Pyramid)
主干(Backbones)VGG、ResNet、SpineNet、EfficientNet、CSPResNeXt、CSPDarknet
颈部(Neck)附加模块(Additional blocks)、路径聚合模块(Path-aggregation blocks)
头部(Heads)密集预测-单阶段(Dense Prediction)、稀疏预测-两阶段(Sparse Prediction)

对象检测器的组成

2.2 Bag of freebies

通常,传统的物体检测器是离线训练的。因此,研究人员总是喜欢利用这一优势,开发更好的训练方法,这些方法可以在不增加推理成本的情况下提高物体检测器的准确性。我们称这些只改变训练策略或仅增加训练成本的方法为“免费福袋”

2.2.1 数据增强

物体检测方法中经常采用并符合免费福袋定义的是数据增强。数据增强的目的是增加输入图像的变异性,从而使设计的物体检测模型对来自不同环境的图像具有更高的鲁棒性。例如,光度扭曲(photometric distortions)和几何扭曲(geometric distortions)是两种常用的数据增强方法

像素级调整操作
光度失真亮度、对比度、色调、饱和度、噪声
几何失真随机缩放、裁剪、翻转、旋转

上述提到的数据增强方法都是像素级调整,调整区域中的所有原始像素信息都被保留。此外,一些从事数据增强的研究人员重点模拟物体遮挡问题。他们在图像分类和物体检测方面取得了良好的成果。直接点击方法名即可跳转到对应论文。

模拟物体遮挡操作实例(均来源论文原文)
随机擦除,
CutOut
图像中随机选择矩形区域,并填充随机或零的补充值随机擦除和CutOut
hide-and-seek,
grid mask
随机或均匀地选择图像中的多个矩形区域,并将它们替换为全零hide-and-seek和grid mask
DropOut,
DropConnect,
DropBlock
上个方法应用在特征图中请添加图片描述

此外,一些研究者还提出了使用多张图像一起进行数据增强的方法。

多张图像组合操作实例(均来源论文原文)
MixUp两张图像以不同的系数比例相乘和叠加,然后根据这些叠加比例调整标签下图中Mixup所对应图片
CutMix将裁剪的图像覆盖到其他图像的矩形区域,并根据混合区域的大小调整标签请添加图片描述

除了上述方法外,风格转换GAN也被用于数据增强,这种使用可以有效减少CNN学习到的纹理偏差。

2.2.2 解决数据不平衡问题

与上述不同的方法相比,还有一些其他的“免费福袋”方法专门用于解决数据集中语义分布可能存在偏差的问题。在处理语义分布偏差的问题时,一个非常重要的问题是不同类别之间存在数据不平衡的问题,这个问题通常通过在两阶段目标检测器中进行困难负例挖掘或在线困难样本挖掘来解决。但是,样本挖掘方法不适用于一阶段目标检测器,因为这种检测器属于密集预测架构。因此,Lin等人提出了Focal loss来处理不同类别之间存在的数据不平衡问题。另一个非常重要的问题是,使用一热硬表示很难表达不同类别之间关联程度的关系。这种表示方案通常在执行标注时使用。另一项研究提出的标签平滑是将硬标签转换为软标签进行训练(一定程度缩小label中min和max的差距),这可以使模型更加鲁棒。为了获得更好的软标签,Islam等人引入了知识蒸馏的概念来设计标签细化网络。

2.2.3 损失函数(回归的目标函数)

最后一个免费福利是边界框(BBox)回归的目标函数。传统的目标检测器通常使用均方误差(MSE)直接对边界框的中心点坐标以及高度和宽度进行回归。至于基于锚点的方法,它是估计相应的偏移量。然而,直接估计BBox每个点的坐标值是将这些点视为独立变量,但实际上没有考虑到物体本身的完整性。为了更好地处理这个问题,一些研究者提出了新损失。后续会出有关IoU损失函数的专题介绍。读者可以移至霹雳吧啦Wz查看更为清晰的讲解。

损失函数改进
IoU损失预测的BBox区域和真实BBox区域的覆盖率考虑在内
GIoU除了覆盖区域外,还包括物体的形状和方向
DIoU额外考虑了物体中心的距离
CIoU同时考虑了重叠区域、中心点之间的距离和宽高比

2.3 Bag of specials

对于那些只会稍微增加推理成本但能显著提高目标检测准确性的插件模块和后处理方法,我们称之为“特殊技巧包”。一般来说,这些插件模块用于增强模型中的某些属性,如扩大感受野、引入注意力机制或增强特征整合能力等,而后处理则是一种筛选模型预测结果的方法。

2.3.1 增强感受野

可以用于增强感受野的常见模块包括SPP、ASPP和RFB

1. SPP(Spatial Pyramid Pooling)及其改进

SPP模块源自空间金字塔匹配(SPM),SPM的原始方法是将特征图分割成几个 d × d d×d d×d的等大小块,从而形成空间金字塔,然后提取词袋特征。SPP将SPM集成到CNN中,并使用最大池化操作代替词袋操作。但由于提出的SPP模块会输出一个一维特征向量,因此无法在全卷积网络(FCN)中应用。

SPP模块简介:
SPP 于2015年被提出。作者发现现有的深度卷积神经网络(CNN)需要固定大小的输入图像,对原始图片的裁剪等变换可能会降低识别准确度。因此作者为网络配备了另一种池化策略,“空间金字塔池化(Spatial Pyramid Pooling)”。SPP模块通过三种尺度的池化,将任意大小的特征图固定为相同长度的特征向量,传输给全连接层
SPP模块结构
例如上图,这里的输入是256x256的特征图,在SPP layer被分成1x1,2x2,4x4三个pooling结构,对每个输入都作max pooling,这样无论输入图像大小如何,出来的特征固定是 ( 16 + 4 + 1 ) × 256 (16+4+1)×256 (16+4+1)×256维度。
相关内容可参考 :增强感受野SPP、ASPP、RFB、PPM

因此,在YOLOv3的设计中,Redmon和Farhadi改进了SPP模块(见下图,图源霹雳啪啦Wz),改进为最大池化输出的拼接,池化核大小为 k × k k×k k×k,其中 k = 1 , 5 , 9 , 13 k={1, 5, 9, 13} k=1,5,9,13,步长为1。通过这种设计,较大的 k × k k×k k×k最大池化有效地增加了主干特征的感受野。添加改进版的SPP模块后,YOLOv3-608在MS COCO对象检测任务上的AP50提高了2.7%,代价是额外0.5%的计算量。
YOLOv3中的SPP结构

2. ASPP(Atrous Spatial Pyramid Pooling)

ASPP模块与改进的SPP模块之间的操作差异主要来自于原始的 k × k k×k k×k核大小,步长为1的最大池化到几个 3 × 3 3×3 3×3核大小,扩张比例等于 k k k,步长为1的扩张卷积操作。

ASPP模块简介:
ASPP模块最初是在DeepLabV2中提出的,该模块由4个并行的空洞卷积模块组成(卷积率不同),以获得较大的感受野,提取更多的上下文信息。ASPP结构
ASPP和SPP的差别是,并不是采用max pool得到不同感受野的特征图,而是采用卷积实现,且其kernel size全部是3,但是引入了不同的空洞率来变相扩大感受野。
相关内容可参考 :
想读懂YOLOV4,你需要先了解下列技术(二)
【语义分割】语义分割经典模块

3. RFB(Receptive Field Block)

RFB模块是使用几个 k × k k×k k×k核,扩张比例等于 k k k,步长为1的扩张卷积,以获得比ASPP更全面的空间覆盖。RFB仅增加了7%的推理时间,就将SSD在MS COCO上的AP50提高了5.7%。

RBF结构简介:
RFB模块是在2018年提出的,出发点是模拟人类视觉的感受野从而加强网络的特征提取能力,在结构上RFB借鉴了Inception的思想,主要是在Inception的基础上加入了空洞卷积,从而有效增大了感受野。
RFB模块
RFB结构来自RFBNet,效果不错,计算量也不大,可以看出RFB是ASPP的推广,其采用了不同大小的kernel和不同的空洞率,相比ASPP,计算量减少不少,效果应该差不多。
相关内容可参考 :
想读懂YOLOV4,你需要先了解下列技术(二)
增强感受野SPP、ASPP、RFB、PPM

2.3.2 引入注意力机制

在对象检测中经常使用的注意力模块主要分为通道注意力空间注意力,这两种注意力模型的代表分别是Squeeze-and-Excitation(SE)Spatial Attention Module(SAM)。后续会出有关注意力机制的专题介绍。

1. SE(Squeeze-and-Excitation)

尽管SE模块可以仅增加2%的计算工作量就提高ResNet50在ImageNet图像分类任务中1%的top-1准确率,但在GPU上通常会增加大约10%的推理时间,因此更适合用于移动设备。

SE模块简介:
SE模块是在2019年提出的,是一种通道注意力模块,SE模块能对输入特征图进行通道特征加强,且不改变输入特征图的大小。
SE注意力模块
相关内容可参考 :注意力SE模块

2. SAM(Spatial Attention Module)

对于SAM,它只需额外支付0.1%的计算量就可以在ImageNet图像分类任务上提高ResNet50-SE的0.5% top-1准确率。最重要的是,它根本不影响GPU上的推理速度。

SAM模块简介:
SAM模块是在2018年提出的,是一种空间注意力模块。SAM是基于通道进行全局平均池化以及全局最大池化操作,产生两个代表不同信息的特征图,合并后再通过一个感受野较大的7×7卷积进行特征融合,大的卷积核对获取全局特征有帮助。最后再通过Sigmoid操作来生成权重图叠加回原始的输入特征图,从而使得目标区域得以增强。
SAM注意力模块
相关内容可参考 :注意力机制——CAM、SAM、CBAM、SE

2.3.3 特征整合

在特征整合方面,早期的做法是使用跳跃连接或超列来将低级物理特征与高级语义特征整合。自从像FPN这样的多尺度预测方法变得流行以来,提出了许多集成不同特征金字塔的轻量级模块。此类模块包括SFAM、ASFF和BiFPN。

1. SFAM(Scale-wise Feature Aggregation Module)

SFAM的主要思想是使用SE模块对多尺度串联的特征图执行通道级别的重新加权。

SFAM模块简介:
SFAM模块基本原理是对不同TUM的输出(每个TUM有6个不同尺度的输出),将其中相同尺度的特征进行concat,然后经过一个SE模块(对通道进行reweighting)输出,然后进行检测。其实就是把相同尺度的各层金字塔特征提取出来,然后concat,经过SE模块,进行通道加权,再进行后续的预测,实现对不同通道进行不同加权功能。SFAM模块
相关内容可参考 :想读懂YOLOV4,你需要先了解下列技术(二)

2. ASFF(Adaptively Spatial Feature Fusion)

至于ASFF,它使用softmax作为点级别的重新加权,然后添加不同尺度的特征图。

ASFF模块简介:
ASFF模块是在2019年提出的。FPN操作是一个非常常用的用于对付大小尺寸物体检测的办法,作者指出FPN的缺点是不同尺度之间存在语义gap。因此将原来的FPN add方式现在变成了add基础上多了一个可学习系数,该参数是自动学习的,可以实现自适应融合效果,类似于全连接参数。
ASFF模块
相关内容可参考 :想读懂YOLOV4,你需要先了解下列技术(二)

3. BiFPN(Bi-directional Feature Pyramid Network)

在BiFPN中,提出了多输入加权残差连接来执行尺度级别的重新加权,然后添加不同尺度的特征图。

BiFPN模块简介:
BiFPN模块是在2020年提出的。BiFPN思想和ASFF非常类似,也是可学习参数的自适应加权融合,但是比ASFF更加复杂。BiFPN模块
相关内容可参考 :想读懂YOLOV4,你需要先了解下列技术(二)

4. PANet(Path Aggregation Network)

此小节为博主添加,由于实验中用到了此模块因此在这里简单介绍下。参考PAnet网络(路径聚合网络)
PANet是一种用于目标检测的神经网络模型,于2018年提出。其旨在解决目标检测模型在处理小目标和遮挡目标时的性能问题。
PANet结构
PANet 包含两个主要的模块:

  • 自上而下的路径聚合模块(PA): 该模块从较低分辨率的特征图开始,通过上采样操作逐层向上传递信息。在每个层级,低分辨率特征图与高分辨率特征图进行横向连接和逐点加法操作,以整合不同尺度的信息。
  • 自下而上的路径聚合模块(PAM): 该模块从高分辨率的特征图开始,通过下采样操作逐层向下传递信息。同样,在每个层级,高分辨率特征图与低分辨率特征图进行横向连接和逐点加法操作。

这两个路径聚合模块相互协作,构成了 PANet 的核心结构。通过这种设计,PANet 能够更好地整合不同尺度的特征信息,提高了目标检测模型对小目标和遮挡目标的检测性能。PANet 的设计结构提供了一种通用的多尺度信息聚合方法

2.3.4 激活函数

在深度学习研究中,一些人专注于寻找好的激活函数。一个好的激活函数可以使梯度更有效地传播,同时不会引起太多额外的计算成本。后续会出有关损失函数的专题介绍。

损失函数目的
ReLU传统的tanh和sigmoid中遇到的梯度消失问题
LReLU和PReLU解决ReLU输出小于零时梯度为零的问题
ReLU6和hard-Swish量化网络设计
SELU自我规范化神经网络
Swish和Mish连续可微的激活函数

2.3.5 后处理

在基于深度学习的对象检测中,常用的后处理方法是NMS(非极大值抑制),它可以用来过滤那些对同一对象预测不佳的边界框,仅保留响应更高的候选边界框。NMS尝试改进的方式与优化目标函数的方法一致。
NMS最初提出的方法没有考虑上下文信息,因此Girshick等人在R-CNN中加入了分类置信度分数作为参考,并根据置信度分数的顺序,以高分到低分的顺序进行贪心NMS。
至于SOFT-NMS,它考虑了物体遮挡可能导致贪心NMS中置信度分数下降的问题。
DIoU NMS的思路是在SOFT-NMS的基础上,增加了中心点距离的信息到边界框筛选过程中


3 方法(Methodology)

基本目标是提高神经网络在生产系统中的快速运行速度,以及针对并行计算的优化,而不是低计算量理论指标(BFLOP)。作者提出了两种实时神经网络的选项:
值得一提的是,由于上述后处理方法都没有直接参考捕获的图像特征,因此在后续发展的无锚点方法中,后处理已不再需要。

  • 对于GPU,作者在卷积层中使用少量的组(1-8):CSPResNeXt50 / CSPDarknet53。
  • 对于VPU,作者使用分组卷积,但避免使用挤压和激励(SE)模块——具体包括以下模型:EfficientNet-lite / MixNet / GhostNet / MobileNetV3。

3.1 架构选择(Selection of architecture)

实验的目标是找到输入网络分辨率、卷积层数量、参数数量(滤波器大小 2 ^2 2 * 滤波器数量 * 通道数 / 组数)以及层输出数量(滤波器数量)之间的最佳平衡。例如,众多研究表明,与CSPDarknet53相比,CSPResNext50在ILSVRC2012(ImageNet)数据集上进行对象分类方面明显更好。然而,相反地,CSPDarknet53在MS COCO数据集上进行对象检测方面,比CSPResNext50表现得更好。
下一个目标是选择额外的模块以增加感受野,并为不同检测器级别选择不同背骨级别的参数聚合的最佳方法:例如,FPN、PAN、ASFF、BiFPN。
一个对分类来说最佳的参考模型并不总是对检测器最优的。与分类器相比,检测器需要以下特点

  • 更高的输入网络尺寸(分辨率)——用于检测多个小尺寸物体
  • 更多的层 —— 为了更高的感受野以覆盖输入网络的增加尺寸
  • 更多的参数 —— 为了模型更大的容量以在单一图像中检测不同尺寸的多个物体

从假设上讲,作者可以认为应该选择具有更大感受野尺寸(具有更多的3×3卷积层)和更多参数的模型作为骨干网络。下表显示了CSPResNeXt50、CSPDarknet53和EfficientNet B3的信息。CSPResNext50仅包含16个3×3卷积层,一个425×425的感受野和2060万参数,而CSPDarknet53包含29个3×3卷积层,一个725×725的感受野和2760万参数。这一理论依据,加上众多实验,表明CSPDarknet53神经网络是两者中作为检测器骨干的最优模型
用于图像分类的神经网络参数

CSP模块简介:
CSP模块是在2019年提出。CSP将基础层的特征映射划分为两部分,然后通过跨阶段层次结构将它们合并,在减少了计算量的同时,可以保证准确率。 CSP结构它有如下的优点:

  • 增强CNN的学习能力,使得在轻量化的同时保持准确性。
  • 降低计算瓶颈
  • 降低内存成本

相关内容可参考 :深入浅出Yolo系列之Yolov3&Yolov4&Yolov5&Yolox核心基础知识完整讲解

不同尺寸感受野的影响总结如下

  • 直到物体的大小——允许查看整个物体
  • 直到网络的大小——允许查看物体周围的上下文
  • 超过网络的大小——增加了图像点与最终激活之间的连接数量

作者在CSPDarknet53之上添加了SPP模块,因为它显著增加了感受野,分离出最重要的上下文特征,并且几乎不减慢网络操作速度。使用PANet作为从不同骨干层到不同检测器层的参数聚合方法,而不是YOLOv3中使用的FPN。
最终,作者 选择CSPDarknet53骨干网络、SPP附加模块、PANet路径聚合颈部和YOLOv3(基于锚点的)头部作为YOLOv4的架构

3.2 选择BoS和BoF

为了改进对象检测训练,CNN通常使用以下方法:

  • 激活函数:ReLU、leaky-ReLU、parametric-ReLU、ReLU6、SELU、Swish或Mish
  • 边界框回归损失:MSE、IoU、GIoU、CIoU、DIoU
  • 数据增强:CutOut、MixUp、CutMix
  • 规范化方法:DropOut、DropPath、空间DropOut或DropBlock
  • 通过均值和方差对网络激活进行规范化:批量规范化(BN)、跨GPU批量规范化(CGBN或SyncBN)、滤波器响应规范化(FRN)或跨迭代批量规范化(CBN)
  • 跳过连接:残差连接、加权残差连接、多输入加权残差连接或跨阶段部分连接(CSP)

在训练激活函数方面,由于PReLU和SELU更难训练,因此选择了ReLU6因为它专门设计用于量化网络。在正则化方法方面,选择了DropBlock,因为已经有研究与其他方法比较。至于归一化方法的选择,由于专注于只使用一个GPU的训练策略,因此不考虑syncBN。

3.3 额外的改进(Additional improvements)

为了使设计的检测器更适合在单GPU上训练,进行了以下设计和改进:
作者引入了一种新的数据增强方法:Mosaic和自对抗训练(SAT)
在应用遗传算法时选择了最优的超参数
此外修改了一些现有方法,以使更适合高效训练和检测 - 修改了SAM,修改了PAN,以及跨小批量归一化(CmBN)
Mosaic代表一种新的数据增强方法,它混合了4张训练图像。因此,混合了4种不同的上下文,而CutMix只混合了2张输入图像。这允许在非正常上下文中检测对象。此外,批量归一化在每层从4张不同图像计算激活统计量。这显著减少了大批量尺寸的需求。
Mosaic
自对抗训练(SAT) 也代表了一种新的数据增强技术,它在两个前向后向阶段中操作。在第一阶段,神经网络改变原始图像而不是网络权重。通过这种方式,神经网络对自身执行一次对抗性攻击,改变原始图像以创建没有期望对象在图像上的错觉。在第二阶段,神经网络以正常方式训练,以在这张修改后的图像上检测对象。
CmBN代表CBN的修改版本,如下图所示,定义为跨小批量归一化(CmBN)。这种方法仅在单个批次内的小批量之间收集统计信息。
请添加图片描述
此外将SAM从空间注意力修改为点注意力,并将PAN的快捷连接替换为连接,如图5和图6所示。
更改

3.4 YOLOv4

YOLOv4由以下部分组成

  • 主干网络(Backbone):CSPDarknet53
  • 颈部(Neck):SPP,PAN
  • 头部(Head):YOLOv3

YOLO v4使用

  • 对主干网络的免费增益(BoF):CutMix和Mosaic数据增强,DropBlock正则化,类别标签平滑
  • 对主干网络的特别增益(BoS):Mish激活函数,跨阶段部分连接(CSP),多输入加权残差连接(MiWRC)
  • 对检测器的免费增益(BoF):CIoU-loss,CmBN,DropBlock正则化,Mosaic数据增强,自对抗训练,消除网格敏感性,对单一真实框使用多个锚点,余弦退火调度器,最优超参数,随机训练形状
  • 对检测器的特别增益(BoS):Mish激活函数,SPP块,SAM块,PAN路径聚合块,DIoU-NMS

模型的整体结构如下,图源江大白
YOLOv4结构

4 实验

作者测试了不同训练改进技术对在ImageNet(ILSVRC 2012验证集)数据集上分类器准确度的影响,然后是对在MS COCO(test-dev 2017)数据集上检测器准确度的影响。

4.1 实验设置

这里就不详细介绍了。大家需要的可以去看原文。

4.2 不同特征对分类器训练的影响(Influence of different features on Classifier

training)
首先,研究了不同特征对分类器训练的影响;具体来说,是类标签平滑的影响、不同数据增强技术(如双边模糊、MixUp、CutMix和Mosaic)的影响,如下图所示,以及不同激活函数(如默认的Leaky-ReLU、Swish和Mish)的影响。
数据增强方法
在实验中,如下表所示,通过引入以下特征,分类器的准确度得到了提高:CutMix和Mosaic数据增强、类标签平滑以及Mish激活函数。因此,用于分类器训练的BoF骨干网络包括:CutMix和Mosaic数据增强、类标签平滑。
BoF和Mish的影响
此外,还将Mish激活函数作为补充选项,如上表和下表所示。
BoF和Mish的影响

4.3 不同特征对检测器训练的影响(Influence of different features on Detector training)

进一步的研究关注了不同的自由福利包(BoF-detector)对检测器训练准确度的影响,如下表所示。
BoF的消融实验
通过研究不同的特征,这些特征在不影响FPS(每秒帧数)的情况下提高了检测器的准确度,从而显著扩展了BoF列表:

  • S:消除网格敏感性,方程 b x = σ ( t x ) + c x , b y = σ ( t y ) + c y b_x = σ(t_x) + c_x, b_y = σ(t_y) + c_y bx=σ(tx)+cx,by=σ(ty)+cy,其中 c x c_x cx c y c_y cy总是整数,在YOLOv3中用于评估对象坐标,因此,对于 b x b_x bx值接近 c x c_x cx c x + 1 c_x + 1 cx+1的值,需要极高的 t x t_x tx绝对值。作者通过将sigmoid乘以一个超过1.0的因子来解决这个问题,从而消除了物体无法检测到的网格的影响。
  • M:Mosaic数据增强 - 训练时使用4图像拼接而不是单一图像
  • IT:IoU阈值 - 对单个真实IoU(truth, anchor)> IoU阈值使用多个锚点
  • GA:遗传算法 - 在网络训练的前10%时间段内使用遗传算法选择最优超参数
  • LS:类标签平滑 - 对sigmoid激活使用类标签平滑
  • CBN:CmBN - 使用跨小批量归一化(Cross mini-Batch Normalization)在整个批次内收集统计信息,而不是在单个小批次内收集
  • CA:余弦退火调度器 - 在正弦波训练期间改变学习率
  • DM:动态小批量大小 - 通过使用随机训练形状在小分辨率训练期间自动增加小批量大小
  • OA:优化锚点 - 使用优化后的锚点在512x512网络分辨率下进行训练
  • GIoU, CIoU, DIoU, MSE:使用不同的损失算法进行边界框回归

进一步的研究关注了不同特殊包(BoS-detector)对检测器训练准确度的影响,包括PAN、RFB、SAM、高斯YOLO(G)和ASFF,如下表所示。在实验中,当使用SPP、PAN和SAM时,检测器表现最佳。
BoS的消融实验

4.4 不同骨干和预训练权重对检测器训练的影响(Influence of different backbones and pretrained weightings on Detector training)

作者进一步研究了不同骨干网络模型对检测器准确度的影响,如下表所示。分类准确度最高的模型并不总是在检测器准确度方面表现最好
骨干网络
首先,虽然用不同特征训练的CSPResNeXt-50模型的分类准确度比CSPDarknet53模型高,但CSPDarknet53模型在物体检测方面显示出更高的准确度。
其次,使用BoF和Mish对CSPResNeXt50分类器进行训练可以提高其分类准确度,但将这些预训练的权重进一步应用于检测器训练会降低检测器的准确度。然而,使用BoF和Mish对CSPDarknet53分类器进行训练,可以提高分类器和使用该分类器预训练权重的检测器的准确度。最终结果是,骨干网络CSPDarknet53比CSPResNeXt50更适合作为检测器使用。

4.5 不同小批量对检测器训练的影响(Influence of different mini-batch size on Detector training)

最后,作者分析了使用不同小批量大小训练的模型所获得的结果,结果显示在下表中。其显示的结果来看,在添加了BoF和BoS训练策略之后,小批量大小对检测器的性能几乎没有影响。这个结果表明,在引入了BoF和BoS之后,就不再需要使用昂贵的GPU进行训练了。换句话说,任何人都可以只使用一台常规GPU来训练出一个优秀的检测器。
不同的小批量

5 结果

与其他最先进的目标检测器所获得的结果的比较显示在下图中。我们的YOLOv4位于帕累托最优曲线上,在速度和准确性方面都优于最快和最准确的检测器。剩余部分读者可自行查看原文。
对比实验

6 结论

作者提供了一种最先进的检测器,其速度(FPS)和准确性(MS COCO AP50…95和AP50)均超过所有可用的替代检测器。所描述的检测器可以在一台拥有8-16 GB-VRAM的常规GPU上进行训练和使用,这使得其广泛应用成为可能。一阶段基于锚点的检测器的原始概念已经证明了其可行性。我们验证了大量特征,并为提高分类器和检测器的准确性选择了其中的一些特征。这些特征可以作为未来研究和开发的最佳实践。


Code

目前大部分使用的YOLO是v3、v5以及以后版本,因此不包含模型代码。


相关面试问题

对于单个YOLO版本的相关面试题并不是特别多,大部分都是介绍v1-v5的演变,后续有专门的汇总部分。


参考

【YOLO系列】YOLOv4论文超详细解读(翻译 +学习笔记)
深入浅出Yolo系列之Yolov3&Yolov4&Yolov5&Yolox核心基础知识完整讲解
想读懂YOLOV4,你需要先了解下列技术(一)
增强感受野SPP、ASPP、RFB、PPM

  • 9
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值