YOLOv4: Optimal Speed and Accuracy of Object Detection

论文链接

YOLOv4于2020年提出,所做的改动并不算很大,但是增加了很多trick以及做了非常丰富的实验,读论文时因为所看的文献有限,很多论文中提到的trick都没有看过,后续需要了解这些trick再读这篇论文才能更深入理解。 

Abstract

        有很多方法被提出认为可以提高卷积神经网络的准确性,需要在大型数据集上对这些方法组合进行实际测试,并对结果进行理论证明。我们假设这些通用方法包括加权残差连接( WRC )、跨阶段部分连接( CSP )、交叉小批量归一化( CmBN )、自对抗训练( SAT )和Mish激活。我们使用新方法:WRC, CSP, CmBN, SAT, Mish activation, Mosaic data augmentation, CmBN, DropBlock regularization, 和 CIoU loss,并结合它们在MSCOCO 数据集达到了最先进的检测性能43.5% 并且在Tesla v100能达到65fps的实时速度。


1. Introduction

         大多基于CNN的目标检测器仅适用于推荐系统。例如,通过城市摄像头搜索空停车位往往运行慢但准确的模型,然而车辆碰撞预警与快但不准确的模型相关。提高实时目标检测器的准确性使得它们不仅适用于提示生成推荐系统,还可以用于单机过程管理和减少人力的投入。实时目标检测器运行在GPU可以承受价格大规模使用。最准确的现代神经网络不能实时运行且需要大量的GPU以大批量来训练。我们解决了这些问题通过提出一个新的CNN网络能在一个传统GPU上实时运行,并且训练的时候仅需要一个传统GPU。我们工作的主要目的是在生产系统设计一个快速运行的目标检测器,同时优化并行计算,而不是低计算量的理论指标。我们希望设计易于训练和使用的模型。例如,每个人都能使用单个传统的GPU训练和测试并且能实时运行,高质量,可靠的目标检测器,如图1所示的YOLOv4结果。

我们希望设计易于训练和使用的模型。例如,每个人都能使用单个传统的GPU训练和测试并且能实时运行,高质量,可靠的目标检测器,如图1所示的YOLOv4结果。

我们的贡献总结如下:

        1.我们开发了一个高效强大的目标检测模型。这使得每个人可以使用一块1080Ti或者2080TiGPU来训练一个极快且准确的检测器。

        2.我们在训练期间验证先进的Bag-of-Freebies 和 Bag-of-Specials 的目标检测方法

        3.我们修改了sota方法并使它们更加高效且更适合单GPU训练包括CBN ,PAN,SAM

2. Related work

2.1. Object detection models

        当前目标检测器通常包含两部分,在ImageNet 上与训练过的backbone和一个用来预测物体类别和边界框的头部。这些检测器运行在GPU平台,它们的骨干网络可以是VGG,ResNet,ResNeXt 或者DenseNet.运行在CPU平台它们可以是SqueezeNet,MobileNet或者ShuffleNet。

        头部,常分为两种类型,单阶段目标检测和两阶段目标检测。最具代表性的是Fastet RCNN,和RCNN,RFCN,和LibraR-CNN .将两阶段的目标检测转成anchor-free 目标检测,比如说RepPoints.单阶段目标检测,最具代表性的是YOLO,SSD,RetainNet.

        近年来,anchor-free单阶段目标检测发展迅速。这类检测器有Center Net,CornerNet,FCOS等等。近年来,目标检测发展常在backbone和head之间插入一些层,这些层通常用来收集不同阶段的特征图,我们通常称它为物体检测器的颈部。通常来说,一个颈部网络包含几个自底向上的路径和几个自顶向下的路径。配有这种机制的网络包括特征金字塔(FPN) ,路径聚合网络(PAN),BiFPN和NAS-FPN.

        除了以上网络,一些研究者专注于直接建立一个网络,DetNet和DetNAS 或者一个全新的模型SpineNet,HitDetector目标检测器。

综上所述,一个普通的目标探测器由几个部分组成:

输入 : 图像, 图像块, 图像金字塔

主干: VGG16 , ResNet-50 , SpineNet, EfficientNet-B0/B7, CSPResNeXt50, CSPDarknet53

颈部:

  • Additional blocks: SPP, ASPP, RFB, SAM
  • Path-aggregation blocks: FPN, PAN, NAS-FPN , Fully-connected FPN, BiFPN, ASFF, SFAM

头部:

  • 密集预测 (单阶段):
    • RPN , SSD , YOLO, RetinaNet(anchor based)
    • CornerNet, CenterNet, MatrixNet, FCOS (anchor free)
  • 稀疏预测(两阶段):
    • Faster R-CNN, R-FCN, Mask RCNN (anchor based)
    • RepPoints (anchor free)

2.2  Object detection models

        通常来说,一个传统的目标检测器是离线训练的。因此,研究者通常喜欢利用这个优点并改进训练方法在不增加推理成本的前提下使得检测器获得更高的精度。我们将这些仅改变训练策略或者仅增加训练成本的方法称为 bag of freebies。

        目标检测方法常采用并符合bag of freebies定义的是数据增强。数据增强的目的是增加输入图像的多样性,以至于目标检测模型在面对不同环境的图片时有更强的鲁棒性。例如,图片失真和几何扭曲是常用的两种数据增强方法并且有利于目标检测任务。在处理图像失真,我们调整图片的亮度,对比度,色度,饱和度和噪声。在几何扭曲,我们使用随机缩放,裁剪,翻转和旋转。

        以上提到的数据增强方法都是对像素调整的,原来全部的像素信息都被保留在调整后的区域。除此之外,一些研究者从事数据增强研究但专注于模拟物体遮挡问题。他们在图像分类和目标检测上都达到了很好的效果。例如,随机擦除和CutOut(可以随机选择图像中的矩形区域,并填充或互补的零值)。对于隐藏和搜索,和网格掩码,在图像中随机或者均匀选取多个矩形区域并将其替换为0.如果相同的想法应用在特征图 那就是DropOut,DropConnect,DropBlock等方法。

        除此之外,一些研究者提出使用多张图像一起来执行数据增强。例如Mixup,将两张图像以不同的系数相乘和叠加,然后用这些叠加的比例来调整标签。CutMix,将裁剪后的图像覆盖其它图像的矩形区域,并根据混合区域的大小调整标签。除了以上提到的方法,style transfer GAN 常用于数据增强,这可以有效的减少CNN学习的纹理偏置。

        与以上提到的大量方法不同,一些其它的bag of freebies 方法旨在解决数据集中的语义分布可能存在偏差的问题。在处理语义分布偏差的问题,一种重要的问题是不同类别数据的不均匀,这个问题通常在两阶段的检测器中艰难的负样本挖掘或者在线艰难样本挖掘。但是样本挖掘方法不适用于单阶段目标检测器,因为这类检测器属于密集预测架构。因此Lin 提出focal Loss 来处理多种类别数据的不均问题。

        另一个重要的问题就是用独热的硬标签很难表达不同类别之间关联程度的关系。这种表达策略常用于类别。标签平滑训练时将硬标签转化为软标签,可以使模型更加鲁棒。为了获得更好的软标签,Islam等引入知识蒸馏的概念来设计标签精炼网络。

        最后的bag of freebies 是bbox回归的目标函数。传统目标检测器通常使用Mean Square Error 来直接执行BBox回归中心点坐标和宽高{x_center,y_center} 或 左上角和右下角的点{x_top left, y_top left, x_bottom right, y_bottom right}.

        如基于anchor的方法,估计对应的坐标,例如{x_center offset, y_center offset, w offset, h offset} and {x_top_lef t offset, y_top_lef t offset, x_bottom right offset, y_bottom_right offset}. 然而,直接估计BBox每个点的坐标值是将这些点看作是独立的变量,但事实上没有考虑物体本身的完整度。为了更好地处理这个问题,最近有研究者提出了IoU损失,该损失考虑了预测BBox区域和真实BBox区域的覆盖。

        IoU loss计算处理将BBox的四个坐标点与真实框计算IOU,然后将产生的结果连成一个整体代码。因为IOU 是一个尺度不变的表示,可以解决传统方法在计算x,y,wh的l1 loss 或l2 loss,损失会随着尺度的增大而增大的问题。最近,一些研究者继续改进IOU Loss.例如,GIOU loss 包含了形状损失和朝向损失。他们提出寻找能够同时覆盖预测BBox和真实BBox 的最小区域BBox ,并将此BBox 作为分母替换原本用于IoU损失的分母。DIoU loss则额外考虑了检测框的中心的距离和CIOU 损失,换种说法就是同时考虑了重叠的区域和两个检测框中心点的距离,和长宽比。CIOU在BBox回归问题上能够取得较好的收敛速度和精度。

小结:

Bag of freebies:提高网络准确性鲁棒性的方法且仅增加训练成本,不增加网络的推理成本

  1. 数据增强
    1. 像素的增强
      1. 调整图片的亮度,对比度,色度,饱和度和噪声
      2. 对图片进行翻转,旋转,随机缩放,裁剪
    2. 遮挡的增强
      1. 应用在图片上,1.CutMix(将裁剪后的图像覆盖其它图像的矩形区域,并根据混合区域的大小调整标签),2.随机擦除,3.hide-and-seek ,4.grid mask,5.Mixip(将两张图像以不同的系数相乘和叠加,然后用这些叠加的比例来调整标签)
      2. 应用在特征图上,1.Dropblock,2.DropPath,3.DropConnect
  2. 数据集的语义分布不均
    1.  数据集中不同类别分布不均匀
      1. 困难样本挖掘,focal loss
    2. 独热硬标签很难表示不同类别之间的关系
      1. label smoothing
  3. IOU损失损失函数(基于anchor的方法将四个点看作是独立的变量,没有考虑物体本身的完整性)
    1. CIOU,DIOU,GIOU


2.3. Bag of specials

        对于即插的模块和后处理方法仅增加少量的推理成本但是能显著提高目标检测精度,我们称其为”bag of specials”.通常来说,这些即插即用的模块是为了增强模型中某些确定的属性,比如说扩大模型的感受野,引入注意力机制,或者增强特征融合能力等等 和后处理(一种筛选模型预测结果的方法)。

        常用来增强感受野的模块,SPP,ASPP和RFB。SPP模块来自Spatial Pyramid Matching(SPM),SPMs原来的方法是将特征图划分成几个dxd相同的块,这里的d可以是{1,2,3},因此构成空间金字塔,然后提取词袋特征。 SPP融合融合了SPM 到CNN中并使用最大池化操作代替词袋操作。因为SPP模块由He 提出将会输出一维特征向量,且不可以用于全卷积神经网络。因此在设计YOLOv3时,Redmon和Farhadi 将SPP模块改进为内核大小为kxk 的最大池化输出的级联,其中k={1,5,9,13},步长为1。在这种设计下,较大的kxk maxpooling 有效地增加了主干特征的感受野。在增加了改进的SPP模块后,YOLOv3-608在MS COCO 目标检测任务上提高了2.7% AP50且仅提高了0.5%的额外成本。ASPP 模块和改进的SPP模块的区别主要从原来kxk大小的核和步长为1变到3x3大小的核,空洞大小为k,且步长为1的空洞卷积操作。RFB模块使用几个kxk的空洞卷积,空洞比率为k和步长为1来获取比ASPP更全面的空间覆盖。RFB仅耗费7%的额外推理时间将SSD在MS COCO上的AP50 提高5.7%。

        注意力模块经常被用于目标检测,主要被分成通道注意力和点注意力,这两种注意力的代表模型分别是Squeeze-and-Excitation(SE) 和 Spatial Attention Module(SAM)。尽管SE模块可以提高ResNet50在ImageNet 图像分类任务的1% top-1 accuracy 且仅提高2%计算成本,但是在一个GPU上它将会增加10%的推理时间,所以这更适用于移动设备。但是SAM,这仅需要付出0.1%额外计算量和可以提高ResNet50-SE 的0.5%top-1 accuracy在ImageNet 图像分类任务上。好的是其并没有影响在GPU上的推理速度。

        特征融合,早期的实践是跳跃连接或者hyper-column 来融合低层几何特征到高层语义特征。因为多尺度预测方法,例如FPN变得热门,很多融合不同特征金字塔的轻量模块被提出,包括SFAM, ASFF, and BiFPN . SFAM的主要思想 是使用SE模块在多尺度拼接的特征图来提取通道级权重。ASFF,使用softmax 获取像素点的权重,然后添加不同尺度的特征图。在BiFPN中,提出了多输入加权残差连接来进行尺度级别的重新加权,然后添加不同尺度的特征图。

        在深度学习领域,一些研究者专注研究更好的激活函数。一个好的激活函数可以让梯度更加高效地传播,并同时不会带来导致额外的计算成本。在2010, Nair 和 Hinton 提出ReLU,基本解决了传统tanh 和sigmoid 激活函数中经常遇到的梯度消失问题。后来,LReLU,PReLU, ReLU6,Scaled Exponential Linear Unit(SELU),Swish,hard-Swish 和 Mish,提出来常用于解决梯度消失问题。LReLU 和 PReLU 的目的是解决ReLU 在输入小于0时值为0的问题。RELU6 和 hard-Swish,它们时专门为量化网络设计的。为了实现神经网络的自归一化,提出了SELU激活函数来满足这一目标。需要注意的是Swish 和Mish 都是连续可微的激活函数。

        常用于基于深度学习的目标检测的后处理方法是NMS,其可以用来过滤掉对同一物体预测出的不良检测框,并仅保留有高置信度的检测框。NMS试图改进的方式与优化目标函数的方法一致。原始NMS提出的方法没有考虑上下文信息,因此Girshick等人在R - CNN中加入了分类置信度分数作为参考,并根据置信度分数的顺序,按照高分到低分的顺序进行贪心NMS。对于软NMS,考虑了在Io U评分的贪心NMS中,物体的遮挡可能导致置信度评分下降的问题。DIoU NMS 研究者的思路是在软NMS的基础上,在BBox筛选过程中加入中心点距离的信息。值得一提的是,由于上述后处理方法均未直接引用拍摄的图像特征,因此在后续无锚点方法的开发中不再需要进行后处理。


3. Methodology

        本文的基本目标不是低计算量的理论指标(BFLOP),而是神经网络在生产系统和优化并行计算中的快速运行速度。我们提出了实时神经网络的两种选择:

  •         GPU上我们使用更小的数字组合(1-8)在卷积层:CSPResNeXt50/CSPDarknet53。
  •         VPU上,我们使用分组卷积,但是我们不使用压缩激励(Squeeze-and-excitement,SE)模块—具体包括以下模型EfficientNet-lite/MixNet/GhostNet/MobileNetv3。

3.1. Selection of architecture

我们的目标是在输入网络分辨率、卷积层数量、参数( filter size^2 * filter * channel / group)和层输出(滤波器)数量之间找到最优的平衡。例如,我们大量的研究证明CSPResNext50 在Image 分类数据集上比CSPDarknet53更好,然而,相反地CSPDarknet53 在MS COCO目标检测数据上比CSPResNext50更好。

一个最适合分类的参考模型不一定适合检测。与检测器相反,检测器需要由以下要求:

  •  更高的输入分辨率-为了检测多样的小尺寸目标
  • 更多的层数-为了更高的感受野来覆盖变大的网络输入
  • 更多的参数-为了更大的模型容量在一张图片中检测多样不同尺寸的物体。

        假设,我们认为模型拥有更大的感受野(更多的3x3的卷积层)和更多的参数可以被选为backbone。表1中展示了CSPResNeXt50,CSPDarknet53和EfficientNet B3的信息。CSPResNext50 仅包含16个3x3卷积层,425x425的感受野和20.6M的参数量,CSPDarknet53 包含29个3x3卷积层,725x725感受野和27.6M参数。理论判断与大量的实验证明CSPDarknet53神经网络是这两种backbone中最适合检测器的。

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

  • 达到对象大小-允许查看整个对象
  • 达到网络规模—允许查看对象周围的上下文
  • 超过网络规模—增加图像点与最终激活之间的连接数。

        我们添加SPP 模块在CSPDarknet53,因为这显著增加了感受野,分离了最显著的上下文特征,并且几乎不会降低网络的运行速度。我们使用PANet作为不同骨干层对不同检测器层的参数聚合方法,而不是YOLOv3中使用的FPN。最后,我们选择CSPDarknet53作为backbone,SPP附加模块,PANet路径聚合颈部,YOLOv3(基于anchor)检测头作为YOLOv4架构的检测头。

        未来,我们计划将BOF的内容到检测头,理论上可以解决一些问题和增加检测头的准确率,并以实验的方式依次检查每个方法的影响。我们没有使用跨GPU的批量归一化或者昂贵的专业设备。这使得任何人都可以在传统的图形处理器上再现我们的最新成果。Gtx 1080Ti或Rtx 2080Ti。


3.2. Selection of BoF and BoS

提高目标检测训练,一个CNN 通常使用如下:

  • 激活:RELU,Leaky-ReLU,参数化-ReLU,ReLU6,SELU,Swish 或者 Mish
  • 边界框回归loss: MSE,IoU,GIoU,CIoU,DIoU
  • 数据增强:CutOut,MixUp,CutMix
  • 正则化方法:DropOut,DropPath,Spatial DropOut,或者DropBlock
  • 通过均值和方差对网络激活的正则化:Batch Normalization (BN) , Cross-GPU Batch Normalization (CGBN or SyncBN), Filter Response Normalization (FRN), or Cross-Iteration Batch Normalization (CBN)
  • 跳跃连接:残差连接,带权残差连接,多输入带权残差连接,或者跨阶段部分残差连接

        对于训练激活函数,因为PReLU 和SELU 是很难训练的,并且RELU6是专门为量化网络设计,我们因此将以上的激活函数从候选列表中移除。正则化方法,提出DropBlock的人将他们的方法与其它方法在细节上作比较,他们的正则化方法更优。因此,我们直接选择了Dropblock作为我们的正则化方法。

3.3. Additional improvements

为了让设计的检测器更适合在单GPU上训练,我们做了额外的如下设计:

  • 我们引入了新的数据增强方法,Mosaic 和Self-Adversarial Trainning(SAT)
  • 我们使用遗传算法选择最佳的超参数。
  • 我们修改了一些现有的方法来让我们的设计更适合高效训练和检测,改进的SAM,改进的PAN,和改进的Cross mini-Batch Normalization(CmBN)

马赛克是一个新的数据增强方法,其混合四张训练图片。因此种中不同的语义被混合,同时CutMix 仅混合两种输入图像。这允许目标的检测算法检测上下文之外的的对象。除此之外,批量归一化计算每一层中4张不同的图片激活统计分布。这显著地减少了大batch_size的需求。

自对抗训练 是一种新的数据增强技术,分两个前向后向阶段操作。在第一阶段,神经网络改变原始图像而不是权值。通过这种方式,神经网络对自身执行对抗攻击,改变原始图像以创建图象是没有期望对象的欺骗。在第二阶段,训练神经网络以正常的方式在修改后的图像上检测物体。

CmBN是CBN的改进版本,如图4所示。这只收集单个批次内的小批量之间的统计数据。

我们将SAM从空间注意力机制改进到点注意力,并将PAN的短接改成了拼接。

3.4. YOLOv4

在本节对YOLOv4的详细配置的描述:

  • YOLOv4 consists of:
    • Backbone: CSPDarknet53
    • Neck: SPP, PAN
    • Head: YOLOv3
    • YOLO v4 uses:
      • Bag of Freebies (BoF) for backbone: CutMix and Mosaic data augmentation, DropBlock regularization, Class label smoothing
      • Bag of Specials (BoS) for backbone: Mish activation, Cross-stage partial connections (CSP), Multiinput weighted residual connections (MiWRC)
      • Bag of Freebies (BoF) for detector: CIoU-loss, CmBN, DropBlock regularization, Mosaic data augmentation, Self-Adversarial Training, Eliminate grid sensitivity, Using multiple anchors for a single ground truth, Cosine annealing scheduler [52], Optimal hyperparameters, Random training shapes
      • Bag of Specials (BoS) for detector: Mish activation, SPP-block, SAM-block, PAN path-aggregation block, DIoU-NMS

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值