YOLOv4: Optimal Speed and Accuracy of Object Detection

Abstract

  • 据说有大量的特征可以提高卷积神经网络(CNN)的准确性。需要在大型数据集上对这些特征的组合进行实际测试,并对结果进行理论证明。有些功能只在某些模型上运行,只针对某些问题,或只针对小规模数据集;而一些特性,例如批处理规范化和残差连接,适用于大多数模型、任务和数据集。

  • 本文假设这些通用特征包括加权残差连接(WRC)、跨阶段部分连接(CSP)、跨小批量规范化(CmBN)、自敌训练(SAT)和Mish激活。本文使用了新功能:WRC、CSP、CmBN、SAT、Mish激活、Mosaic数据增强、CmBF、DropBlock正则化和CIoU,dropout,并将其中一些功能结合起来以实现最先进的结果:MS-COCO数据集的43.5%AP(65.7%AP50),实时速度为∼特斯拉V100上65 FPS。

  • 源代码位于:AlexeyAB/darknet: YOLOv4 / Scaled-YOLOv4 / YOLO - Neural Networks for Object Detection (Windows and Linux version of Darknet ) (github.com)

  • 论文地址:https://arxiv.org/abs/2004.10934

  • YOLOV4其实是一个结合了大量前人研究技术,加以组合并进行适当创新的算法,实现了速度和精度的完美平衡。可以说有许多技巧可以提高卷积神经网络(CNN)的准确性,但是某些技巧仅适合在某些模型上运行,或者仅在某些问题上运行,或者仅在小型数据集上运行;这篇文章里作者都用的调优手段:加权残差连接(WRC),跨阶段部分连接(CSP),跨小批量标准化(CmBN),自对抗训练(SAT),Mish激活,马赛克数据增强,CmBN,DropBlock正则化,CIoU Loss等等。经过一系列的堆料,终于实现了目前最优的实验结果:43.5%AP(在Tesla V100上,MS COCO数据集的实时速度约为65FPS)。

  • Bag of Freebies:指的是那些不增加模型复杂度,也不增加推理的计算量的训练方法技巧,来提高模型的准确度

    Bag-of-Specials:指的是那些增加少许模型复杂度或计算量的训练技巧,但可以显著提高模型的准确度

Introduction

  • 大多数基于CNN的目标检测器在很大程度上仅适用于推荐系统。例如,通过城市摄像机搜索免费停车位是通过慢准确的模型执行的,而汽车碰撞警告则与快速不准确的模型相关。提高实时对象检测器的准确性,不仅可以将其用于提示生成推荐系统,还可以用于独立流程管理和减少人工输入。

  • 传统图形处理单元(GPU)上的实时目标探测器操作允许以合理的价格大规模使用。最精确的现代神经网络不能实时运行,需要大量GPU进行大批量的小批量训练。通过创建一个在传统GPU上实时运行的CNN来解决这些问题,并且训练只需要一个传统GPU。

  • 本工作的主要目标是设计生产系统中目标探测器的快速运行速度,并优化并行计算,而不是设计低计算量理论指标(BFLOP)。本文希望设计的对象能够容易地训练和使用。例如,任何使用传统GPU进行训练和测试的人都可以获得实时、高质量和令人信服的目标检测结果,如下图所示的YOLOv4结果。

    • 对拟议的YOLOv4和其他最先进的目标探测器进行比较。YOLOv4的运行速度是EfficientDet的两倍,性能相当。将YOLOv3的AP和FPS分别提高10%和12%。

  • 本文的贡献总结如下:

    • 开发了一个高效、强大的对象检测模型。它使每个人都可以使用1080 Ti或2080 Ti GPU来训练超快速和精确的目标探测器。

    • 在探测器训练期间,验证了最先进的免费包和特殊包物体检测方法的影响。

    • 本文修改了最先进的方法,使其更有效,更适合单GPU训练,包括CBN、PAN[49]、SAM等。

Related work

Object detection models

  • 现代探测器通常由两部分组成,一个是在ImageNet上预先训练的主干,另一个是用于预测对象类别和边界框的头部。对于在GPU平台上运行的探测器,其主干可以是VGG、ResNet、ResNeXt或DenseNet。对于在CPU平台上运行的探测器,其主干可以是SqueezeNet、MobileNet或ShuffleNet。

  • 至于头部,通常分为两类,即一级目标检测器和两级目标检测器。最具代表性的两级目标探测器是R-CNN系列,包括fast R-CNN、faster R-CNN、R-FCN和Libra R-CNN。也可以将两级对象检测器设置为无锚对象检测器,例如RepPoints。对于单级目标探测器,最具代表性的型号是YOLO、SSD和RetinaNet。

  • 近年来,无锚单级目标探测器得到了发展。这类探测器有CenterNet、CornerNet、FCOS等。近年来开发的目标探测器通常在主干和头部之间插入一些层,这些层通常用于收集不同阶段的特征图。可以称之为物体探测器的颈部。通常,颈部由几个自下而上的路径和几个自上而下的路径组成。配备该机制的网络包括特征金字塔网络(FPN)、路径聚合网络(PAN)、BiFPN和NAS-FPN。

  • 除了上述模型外,一些研究人员还将重点放在直接构建新的主干网(DetNet,DetNAS)或新的整体模型(SpineNet,HitDetecto),用于目标检测。

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

    • 输入:图像、图像块、图像金字塔

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

    • Neck:其他区块:SPP、ASPP、RFB、SAM;

    • 路径聚合块:FPN、PAN、NAS-FPN、全连接FPN、BiFPN、ASFF、SFAM

    • Heads:

      • 密集预测(一阶段):RPN、SSD、YOLO、RetinaNet(基于锚点),CornerNet、CenterNet、MatrixNet、FCOS(无锚)

      • 稀疏预测(两阶段):Faster R-CNN , R-FCN , Mask RCNN (anchor based);RepPoints (anchor free)

  • 目前检测器通常可以分为以下几个部分,不管是two-stage还是one-stage都可以划分为如下结构,只不过各类目标检测算法设计改进侧重在不同位置:

    • 如上图,除了输入,一般one-stage的目标检测算法通常由提取特征的backbone,传输到检测网络的Neck部分和负责检测的Head部分。而two-stage的算法通常还包括空间预测部分。网络中常用的模块为:

      • Input: 图像,图像金字塔等
      • Backbone: VGG16,Resnet-50,ResNeXt-101,Darknet53,……
      • Neck: FPN,PANet,Bi-FPN,……
      • Head: Dense Prediction:RPN,YOLO,SSD,RetinaNet,FCOS,……
      • Head: Sparse Prediction:Faster RCNN,Fast RCNN,R-CNN,……
  • 作为one-stageYOLO网络主要由三个主要组件组成:

      • Backbone -在不同图像细粒度上聚合并形成图像特征的卷积神经网络。
      • Neck:一系列混合和组合图像特征的网络层,并将图像特征传递到预测层。
      • Head:对图像特征进行预测,生成边界框和并预测类别。
    • CSPNet解决了其他大型卷积神经网络框架Backbone中网络优化的梯度信息重复问题,将梯度的变化从头到尾地集成到特征图中,因此减少了模型的参数量和FLOPS数值,既保证了推理速度和准确率,又减小了模型尺寸

    • CSPNet实际上是基于Densnet的思想,复制基础层的特征映射图,通过dense block发送副本到下一个阶段,从而将基础层的特征映射图分离出来。这样可以有效缓解梯度消失问题(通过非常深的网络很难去反推丢失信号) ,支持特征传播,鼓励网络重用特征,从而减少网络参数数量。

  • 输入网络分辨率/卷积层数量/参数数量/输出维度。一个模型的分类效果好不见得其检测效果就好,想要检测效果好需要以下几点:

    • 更大的网络输入分辨率——用于检测小目标
    • 更深的网络层——能够覆盖更大面积的感受野
    • 更多的参数——更好的检测同一图像内不同size的目标
  • SPP-Net全称Spatial Pyramid Pooling Networks,当时主要是用来解决不同尺寸的特征图如何进入全连接层的,直接看下图,下图中对任意尺寸的特征图直接进行固定尺寸的池化,来得到固定数量的特征。

    • 3个尺寸的池化为例,对特征图进行一个最大值池化,即一张特征图得取其最大值,得到1*d(d是特征图的维度)个特征;对特征图进行网格划分为2x2的网格,然后对每个网格进行最大值池化,那么得到4*d个特征;同样,对特征图进行网格划分为4x4个网格,对每个网格进行最大值池化,得到16*d个特征。 接着将每个池化得到的特征合起来即得到固定长度的特征个数(特征图的维度是固定的),接着就可以输入到全连接层中进行训练网络了。用到这里是为了增加感受野。

  • MiWRCMulti-input weighted residual connections的简称, 在BiFPN中,提出了用MiWRC来执行标尺度级重加权,添加不同尺度的特征映射。根据BiFPN的论文,该设计具有更好的准确性和效率权衡。

  • Mish是一个平滑的曲线,平滑的激活函数允许更好的信息深入神经网络,从而得到更好的准确性和泛化;在负值的时候并不是完全截断,允许比较小的负梯度流入。实验中,随着层深的增加,ReLU激活函数精度迅速下降,而Mish激活函数在训练稳定性、平均准确率(1%-2.8%)、峰值准确率(1.2% - 3.6%)等方面都有全面的提高。

  • 对于分类问题,特别是多分类问题,常常把向量转换成one-hot-vector,而one-hot带来的问题: 对于损失函数,我们需要用预测概率去拟合真实概率,而拟合one-hot的真实概率函数会带来两个问题:

      • 无法保证模型的泛化能力,容易造成过拟合;
      • 全概率和0概率鼓励所属类别和其他类别之间的差距尽可能加大,而由梯度有界可知,这种情况很难适应。会造成模型过于相信预测的类别。
    • 对预测有100%的信心可能表明模型是在记忆数据,而不是在学习。标签平滑调整预测的目标上限为一个较低的值,比如0.9。它将使用这个值而不是1.0来计算损失。这个概念缓解了过度拟合。说白了,这个平滑就是一定程度缩小labelminmax的差距,label平滑可以减小过拟合。所以,适当调整label,让两端的极值往中间凑凑,可以增加泛化性能。

  • 为了提升准确度,可以针对训练过程进行一些优化,比如数据增强、类别不平衡、成本函数、软标注…… 这些改进不会影响推理速度,可被称为「Bag of freebies」。另外还有一些改进可称为「bag of specials」,仅需在推理时间方面做少许牺牲,就能获得优良的性能回报。这类改进包括增大感受野、使用注意力机制、集成跳过连接(skip-connection)或 FPN等特性、使用非极大值抑制等后处理方法。

  • YoloHead利用获得到的特征进行预测,是一个解码的过程

    • 在特征利用部分,YoloV4提取多尺度特征进行目标检测,一共提取三个特征层,分别位于中间层,中下层,底层,三个特征层的shape分别为(19,19,255),(38,38,255),(76,76,255) 在Yolov3的设计中,每个特征图的每个格子中,都配置3个不同的先验框,所以最后三个特征图,这里暂且reshape为19 × 19 × 3 × 85、38 × 38 × 3 × 85、76 × 76 × 3 × 85,这样更容易理解,在代码中也是reshape成这样之后更容易操作

    • 三张特征图就是整个Yolo输出的检测结果,检测框位置(4维)、检测置信度(1维)、类别(80维)都在其中,加起来正好是85维。特征图最后的维度85,代表的就是这些信息,而特征图其他维度N × N × 3,N × N代表了检测框的参考位置信息,3是3个不同尺度的先验框。

  • 先验框(anchor box)

    • YOLO3采用了K-means聚类得到先验框的尺寸,YOLO4延续了这种方法,为每种下采样尺度设定3种先验框,总共聚类出9种尺寸的先验框。

    • 在COCO数据集中(原始图片全部resize为608 × 608),九个框分别是 [[12, 16], [19, 36], [40, 28], [36, 75], [76, 55], [72, 146], [142, 110], [192, 243], [459, 401]],顺序为w × h。 将前三个先验框分配给7676255的特征图,中间三个框分配给38*38*255的特征图,最后三个框分配给19*19*255的特征图.

  • 解码检测框

    • 有了先验框与输出特征图后,就可以解码检测框 x,y,w,h。 例如:(19,19,3,85),分别对应着19*19个网格,每个网格3种anchors,85=(x,y,w,h,confident),此时box的x,y是相对于网格的偏移量,所以还需要经过一些列的处理,处理方式见下图:

Bag of freebies

  • 通常,传统的目标探测器是离线训练的。因此,研究人员总是喜欢利用这一优势,开发更好的训练方法,使目标检测器在不增加推理成本的情况下获得更好的精度。本文将这些只改变训练策略或只增加训练成本的方法称为“免费包”。

  • 对象检测方法通常采用的并且符合免费包定义的是数据增强。数据增强的目的是增加输入图像的可变性,使设计的目标检测模型对不同环境下获得的图像具有较高的鲁棒性。例如,光度畸变和几何畸变是两种常用的数据增强方法,它们肯定有利于目标检测任务。

  • 在处理光度失真时,本文调整图像的亮度、对比度、色调、饱和度和噪声。对于几何扭曲,添加了随机缩放、裁剪、翻转和旋转。

  • 上述数据增强方法都是逐像素调整,并保留调整区域中的所有原始像素信息。此外,一些从事数据增强的研究人员将重点放在模拟对象遮挡问题上。它们在图像分类和目标检测方面取得了良好的效果。

  • 例如,random erase和CutOut可以随机选择图像中的矩形区域,并填充随机或互补值零。至于隐藏和搜索和网格掩码,它们随机或均匀地选择图像中的多个矩形区域,并将其全部替换为零。

  • 如果将类似概念应用于特征图,则有DropOut、DropConnect和DropBlock方法。此外,一些研究人员提出了将多幅图像结合起来进行数据增强的方法。例如,MixUp使用两个图像以不同的系数比率进行相乘和叠加,然后使用这些叠加比率调整标签。至于CutMix,它是将裁剪的图像覆盖到其他图像的矩形区域,并根据混合区域的大小调整标签。除上述方法外,样式转换GAN还用于数据增强,这样的使用可以有效地减少CNN学习到的纹理偏差。

  • 与上面提出的各种方法不同,其他一些免费方法致力于解决数据集中的语义分布可能有偏差的问题。在处理语义分布偏差问题时,一个非常重要的问题是不同类之间存在数据不平衡的问题,这个问题通常通过两阶段对象检测器中的hard negative example mining或 online hard example mining来解决

  • 但example mining不适用于单阶段对象检测器,因为这种检测器属于密集预测结构。因此,Lin等人提出了focal loss来处理不同类别之间存在的数据不平衡问题。另一个非常重要的问题是,很难用one-hot hard representation来表示不同类别之间关联程度的关系。

  • 在执行标记时,通常使用此表示方案。[Rethinking the inception architecture for computer vision]中提出的标签平滑是将硬标签转换为软标签进行训练,这样可以使模型更加健壮。为了获得更好的软标签,Islam等人引入了知识蒸馏的概念来设计标签细化网络。

  • 最后一Bag of freebies是边界框(BBox)回归的目标函数。传统的目标检测器通常使用均方误差(MSE)直接对中心点坐标和BBox的高度和宽度进行回归,即{xcenter、ycenter、w、h}\{x_{center}、y_{center}、w、h\}{xcenter​、ycenter​、w、h},或左上点和右下点,即{xtopleft、ytopleft,xbottomright、ybotomright}\{x_{topleft}、y_{topleft},x_{bottomright}、y_{botomright}\}{xtopleft​、ytopleft​,xbottomright​、ybotomright​}。对于基于锚的方法,它是估计相应的偏移量,例如{Xcenter_offset,Ycenter_offset,Woffset,Hoffset}和{Xtop-left_offset,Ytop-left_offset,Xbottom-right-offset,Ybotom-right-offset}。然而,直接估计BBox每个点的坐标值是将这些点视为自变量,但实际上并不考虑对象本身的完整性。

  • 为了更好地处理这个问题,一些研究人员最近提出了IoU损失,它将预测的BBox区域和GT BBox面积的覆盖范围考虑在内。IoU损失计算过程将触发BBox四个坐标点的计算,方法是使用地面真相执行IoU,然后将生成的结果连接到一个完整的代码中。由于IoU是一种尺度不变的表示,它可以解决传统方法计算{x,y,w,h}的l1或l2损失时,损失会随着尺度的增加而增加的问题。最近,一些研究人员继续改善IOU loss。例如,GIoU损失除了覆盖区域外,还包括对象的形状和方向。他们建议找到能够同时覆盖预测BBox和GT BBox的最小面积BBox,并使用该BBox作为分母来替换IoU损失中最初使用的分母。至于DIoU损耗,它还考虑了对象中心的距离和CIoU损耗,另一方面,它同时考虑了重叠区域、中心点之间的距离和纵横比。CIoU可以在BBox回归问题上取得更好的收敛速度和精度。

Bag of specials

  • 对于那些只会少量增加推理成本但能显著提高对象检测精度的插件模块和后处理方法,b本文称之为“Bag of specials”。一般来说,这些插件模块是为了增强模型中的某些属性,如扩大接受域、引入注意机制或增强特征集成能力等,后处理是筛选模型预测结果的一种方法。

  • 可用于增强感受野的常见模块有SPP、ASPP和RFB。SPP模块源自空间金字塔匹配(Spatial Pyramid Matching,SPM),SPM最初的方法是将特征图分割成若干个d×d相等的块,其中d可以是{1、2、3、…},从而形成空间金字塔,然后提取单词袋特征。

  • SPP将SPM集成到CNN中,并使用最大池操作代替单词包操作。由于He等人提出的SPP模块将输出一维特征向量,因此不可能应用于全卷积网络(FCN)。因此,在YOLOv3的设计中,Redmon和Farhadi将SPP模块改进为将最大池输出与内核大小k×k串联,其中k={1,5,9,13},步幅等于1。

  • 在这种设计中,相对较大的k×k最大池有效地增加了主干特征的接受野。在添加了改进版的SPP模块后,YOLOv3-608将MS-COCO对象检测任务的AP50升级了2.7%,增加了0.5%的计算量。ASPP模块与改进的SPP模块在操作上的差异主要来自原始的k×k内核大小,步长的最大池等于1到几个3×3内核大小,扩展比等于k,在扩展卷积操作中步长等于1。RFB模块使用k×k核的多个扩展卷积,扩展比等于k,步幅等于1,以获得比ASPP更全面的空间覆盖。RFB只需7%的额外推理时间,就可以将MS COCO上SSD的AP50提高5.7%。

  • 物体检测中常用的注意模块主要分为通道式注意和点式注意,这两种注意模型的代表分别是挤压和激发(SE)和空间注意模块(SAM)。虽然SE模块可以将ResNet50在ImageNet图像分类任务中的能力提高1%的top-1精度,但只需增加2%的计算工作量,但在GPU上通常会增加约10%的推理时间,因此更适合在移动设备中使用。但对于SAM,它只需要支付0.1%的额外计算,并且可以在ImageNet图像分类任务中提高ResNet50 SE 0.5%的top-1精度。最重要的是,它根本不会影响GPU上的推理速度。

  • 在特征集成方面,早期的实践是使用跳跃连接或超列将底层物理特征集成到高层语义特征。由于多尺度预测方法(如FPN)已经流行起来,因此提出了许多集成不同特征金字塔的轻量级模块。

  • 此类模块包括SFAM、ASFF和BiFPN。SFAM的主要思想是使用SE模块对多尺度级联特征地图执行信道级重加权。对于ASFF,它使用softmax作为逐点级别重加权,然后添加不同比例的特征地图。在BiFPN中,提出了多输入加权残差连接来执行尺度级重加权,然后添加不同尺度的特征图。

  • 在深度学习的研究中,一些人把重点放在寻找良好的激活功能上。一个好的激活函数可以使梯度更有效地传播,同时不会导致太多额外的计算开销。2010年,Nair和Hinton建议ReLU实质性地解决传统tanh和sigmoid激活函数中经常遇到的梯度消失问题。

  • 随后,提出了LReLU、PReLU、ReLU6、标度指数线性单位(SELU)、Swish、hard Swish和Mish等也用于解决梯度消失问题的方法。LReLU和PReLU的主要目的是解决输出小于零时ReLU的梯度为零的问题。至于ReLU6和hard Swish,它们是专门为量化网络设计的。对于神经网络的自归一化,提出了SELU激活函数来满足这一目标。需要注意的一点是,Swish和Mish都是连续可微的激活函数

  • 基于深度学习的对象检测中常用的后处理方法是NMS,它可以用来过滤那些对同一对象预测不佳的BBox,并且只保留响应较高的候选BBox。NMS试图改进的方式与优化目标函数的方法一致。NMS提出的原始方法不考虑上下文信息,因此Girshick等人在R-CNN中添加了分类置信度得分作为参考,并根据置信度得分的顺序,贪婪的NMS按高分数到低分数的顺序执行。

  • 对于软NMS,它考虑了对象的遮挡可能导致具有IoU分数的贪婪NMS的置信度下降的问题。DIoU NMS开发人员的思路是在软NMS的基础上,将中心点距离信息添加到BBox筛选过程中。值得一提的是,由于上述后处理方法均未直接涉及捕获的图像特征,因此在随后开发无锚方法时不再需要后处理。

Methodology

  • 其基本目标是在产生式系统和并行计算优化中提高神经网络的运行速度,而不是使用低计算量理论指标(BFLOP)。本文提供了两种实时神经网络选项:

    • 对于GPU,在卷积层中使用少量组(1-8):CSPResNeXt50/CSPDarknet53

    • 对于VPU,使用分组卷积,但避免使用挤压和兴奋(SE)块,具体来说,这包括以下模型:EfficientNet lite/MixNet/GhostNet/MobileNetV3

Selection of architecture

  • 本文的目标是在输入网络分辨率、卷积层编号、参数编号(滤波器尺寸2*滤波器*信道/组)和层输出数量(滤波器)之间找到最佳平衡。例如,本文的大量研究表明,就ILSVRC2012(ImageNet)数据集上的对象分类而言,CSPResNext50比CSPDarknet53要好得多。然而,相反,就检测MS COCO数据集上的对象而言,CSPDarknet53比CSPResNext50更好。

  • 下一个目标是为不同的检测器级别选择额外的块来增加感受野,并从不同的主干级别选择最佳的参数聚集方法:例如FPN、PAN、ASFF、BiFPN。

  • 分类最佳的参考模型并不总是检测器的最佳模型。与分类器相反,检测器需要以下各项:

    • 更高的输入网络大小(分辨率)–用于检测多个小型对象

    • 更多层–更高的感受野,以覆盖增加的输入网络

    • 更多参数–使模型能够在单个图像中检测多个不同大小的对象

  • 假设地说,可以假设应该选择一个具有更大感受野大小(卷积层数量更大,为3×3)和更多参数的模型作为主干。下表显示了CSPResNeXt50、CSPDarknet53和EfficientNet B3的信息。CSPResNeXt50仅包含16个卷积层3×3、425×425感受野和20.6 M参数,而CSPDarknet53包含29个卷积层数3×3,725×725感受野以及27.6 M参数。这一理论证明,再加上本文的大量实验,表明CSPDarknet53神经网络是作为探测器主干的这两种网络的最佳模型

    • 用于图像分类的神经网络参数。

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

    • 最大对象大小-允许查看整个对象

    • 最大网络大小-允许查看对象周围的上下文

    • 超过网络大小-增加映像点和最终激活之间的连接数

  • 在CSPDarknet53上添加SPP块,因为它显著增加了感受野,分离出了最重要的上下文特征,并且几乎不会降低网络运行速度,使用PANet作为不同检测器级别的不同主干级别的参数聚合方法,而不是YOLOv3中使用的FPN。

  • 最后,选择CSPDarknet53主干、SPP附加模块、PANet路径聚合颈部和YOLOv3(基于锚的)头部作为YOLOv 4的架构。

  • 未来,计划大幅扩展探测器的Bag of Freebies(BoF)内容,理论上可以解决一些问题,提高探测器精度,并以实验方式依次检查每个特征的影响。

  • 本文不使用跨GPU批量规范化(CGBN或SyncBN)或昂贵的专用设备。这使得任何人都可以在传统图形处理器(例如GTX 1080Ti或RTX 2080Ti)上复制我们的最新成果。

Selection of BoF and BoS

  • 为了改进目标检测训练,CNN通常使用以下方法:

    • 激活:ReLU, leaky-ReLU, parametric-ReLU, ReLU6, SELU, Swish, or Mish

    • 边界框回归损失:MSE、IoU、GIoU、CIoU、DIoU

    • 数据增强:CutOut、MixUp、CutMix

    • 正则化方法:DropOut、DropPath、Spatial DropOut或DropBlock

    • 通过均值和方差对网络激活进行归一化:批量归一化(BN) 、跨GPU批量归一化(CGBN或SyncBN)、滤波器响应归一化(FRN) 或跨迭代批量归一化(CBN)

    • Skip-connections: Residual connections, Weighted residual connections, Multi-input weighted residual connections, or Cross stage partial connections (CSP)

  • 至于训练激活函数,由于PReLU和SELU更难训练,而ReLU6是专门为量子化网络设计的,因此将上述激活函数从候选列表中删除。在正则化的方法上,发表DropBlock的人已经把他们的方法和其他方法进行了详细的比较,他们的正则化方法胜出不少。

  • 因此,本文毫不犹豫地选择DropBlock作为本文的正则化方法。至于归一化方法的选择,由于侧重于只使用一个GPU的训练策略,所以不考虑syncBN。

Additional improvements

  • 为了使设计的检测器更适合在单个GPU上训练,做了如下额外的设计和改进:

    • 介绍了一种新的数据增强拼接方法,以及自我对抗训练(SAT)Self-Adversarial Training

    • 在应用遗传算法时,选择最佳的超参数

    • 修改了一些现有的方法,使本文的设计适用于有效的训练和检测-修改的SAM,修改的PAN和交叉小批量归一化(CmBN)

  • Mosaic代表了一种混合4幅训练图像的新数据增强方法。因此,混合了4个不同的上下文,而CutMix仅混合了2个输入图像。这允许检测正常环境之外的对象。此外,批量标准化计算每层上4个不同图像的激活统计数据。这显著降低了对大的小批量的需求。

  • 自我对抗训练(SAT)也代表了一种新的数据增强技术,在两个向前向后的阶段中操作。在第一阶段,神经网络改变原始图像而不是网络权重。通过这种方式,神经网络对自身进行对抗性攻击,改变原始图像以制造图像上没有所需对象的假象。在第二阶段,训练神经网络以正常方式检测该修改图像上的对象。

  • CmBN代表CBN的修改版本,如下图所示,定义为交叉小批量标准化(CmBN)。这仅在单个批次内的小批次之间收集统计数据。

    • 交叉小批量标准化。

  • 将SAM从空间方式注意修改为点方式注意,并将平移的快捷连接替换为连接,分别如下图所示

    • Modified SAM.

    • Modified PAN.

YOLOv4

  • YOLOv4包括:

    • Backbone: CSPDarknet53

    • Neck: SPP, PAN

    • Head: YOLOv3

  • YOLO v4使用:

    • 主干网的Bag of Freebies(BoF ): cutmix和Mosaic数据增强、DropBlock正则化、类标签平滑

    • 主干网的Bag of Specials(BoS):Mish激活、跨级部分连接(CSP)、多输入加权剩余连接(MiWRC)

    • detector的Bag of Freebies(BoF ): CIoU-loss、CmBN、DropBlock正则化、马赛克数据增强、自我对抗训练、消除网格敏感性、使用多个锚来实现单个ground-truth、余弦退火调度程序、最佳超参数、随机训练形状

    • detector的Bag of Specials(BoS):Mish激活、SPP-block、SAM-block、PAN路径聚合阻塞、欧弟-NMS

Experiments

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

Experimental setup

  • 在ImageNet图像分类实验中,默认的超参数如下:训练步数为800万;批量大小和小批量大小分别为128和32;采用多项式衰减学习率调度策略,初始学习率为0.1;热身步骤是1000;动量和重量衰减分别设置为0.9和0.005。

  • 所有的BoS实验都使用相同的超参数作为默认设置,在BoF实验中,增加了额外的50%训练步骤。在BoF实验中,验证了MixUp、CutMix、Mosaic、模糊数据增强和标签平滑正则化方法。在BoS实验中,比较了LReLU、Swish和Mish激活功能的效果。所有实验都是用1080 Ti或者2080 Ti的GPU训练的。

  • 在MS COCO目标检测实验中,默认的超参数如下:训练步数为500500;采用步长衰减学习率调度策略,初始学习率为0.01,分别在400000步和450000步乘以系数0.1;动量和重量衰减分别设置为0.9和0.0005。所有架构都使用单个GPU来执行批量为64的多尺度训练,而小批量为8或4,具体取决于架构和GPU内存限制。

  • 除了使用遗传算法进行超参数搜索实验外,其他所有实验都使用默认设置。遗传算法使用YOLOv3-SPP以GIoU损失进行训练,并搜索300个epoch以获得最小值5k集合。采用搜索学习率0.00261,动量0.949,IoU阈值0.213,损失归一化器0.07进行遗传算法实验。已经验证了大量的BoF,包括网格敏感性消除、镶嵌数据增加、IoU阈值、遗传算法、类别标签平滑、交叉小批量归一化、自我对抗训练、余弦退火调度器、动态小批量大小、DropBlock、优化锚、不同类型的IoU损失。还在各种BoS上进行实验,包括Mish、SPP、SAM、RFB、BiFPN和高斯YOLO 。对于所有实验,只使用一个GPU进行训练,因此不使用syncBN等优化多个GPU的技术

不同特征对分类器训练的影响

  • 首先,研究不同特征对分类器训练的影响;具体来说,类别标签平滑的影响,不同数据增强技术的影响,双边模糊,MixUp,CutMix和Mosaic,如下图所示,以及不同激活的影响,如Leaky-ReLU(默认),Swish和Mish。

    • 各种数据扩充方法。

  • 在本文的实验中,如下表所示,通过引入以下功能提高了分类器的准确性:CutMix和Mosaic数据扩充、类标签平滑和Mish激活。因此,我们用于分类器训练的BoF backbone(Bag of Freebies)包括以下内容:CutMix和Mosaic数据增强和类标签平滑。此外,使用Mish激活作为补充选项,如下表所示。

    • BoF和Mish对CSPResNeXt-50分级机精度的影响。

    • BoF和Mish对CSPDarknet-53分级机精度的影响。

不同特征对探测器训练的影响

  • 如下表所示,进一步的研究涉及不同的袋式除尘器(BoF-探测器)对探测器训练精度的影响。通过研究在不影响FPS的情况下提高检测器精度的不同特性,显著扩展了BoF列表:

    • Bag-of-Freebies的消融研究。(CSPResNeXt50-PANet-SPP,512x512)。

    • s:消除网格敏感性等式bx = σ(tx)+ cx,by = σ(ty) +cy,其中cx和cy总是整数,在YOLOv3中用于评估物体坐标,因此,对于接近cx或cx + 1值的bx值,需要极高的tx绝对值。通过将sigmoid乘以一个超过1.0的因子来解决这个问题,从而消除了无法检测到对象的网格的影响。

    • M: Mosaic data augmentation-在训练期间使用4幅图像的镶嵌图来代替单幅图像

    • IT: IoU阈值-对单个接地使用多个锚真值IoU(真值,锚)> IoU阈值

    • GA:遗传算法——在前10%的时间周期中,使用遗传算法在网络训练期间选择最佳超参数

    • LS:类标签平滑-使用类标签平滑来激活sigmoid

    • CBN:CmBN——使用交叉小批量标准化来收集整个批量中的统计信息,而不是收集单个小批量中的统计信息

    • CA:余弦退火调度程序——在正弦训练中改变学习率

    • DM:动态小批量——通过使用随机训练形状,在小分辨率训练期间自动增加小批量

    • OA:优化锚点-使用优化锚点进行512x512网络分辨率的训练

    • GIoU, CIoU, DIoU, MSE -使用不同的损失算法进行有界框回归

  • 进一步的研究涉及不同的Bagof-Specials (BoS-detector)对检测器训练精度的影响,包括PAN、RFB、SAM、高斯YOLO (G)和ASFF,如下表所示。在本文的实验中,当使用SPP、PAN和SAM时,检测器获得最佳性能。

    • Ablation Studies of Bag-of-Specials. (Size 512x512).

不同backbones和预训练重量对Detector训练的影响

  • 进一步,本文研究了不同主干模型对检测器精度的影响,如下表所示。注意到,以最佳分类精度为特征的模型在检测器精度方面并不总是最佳的。

    • 使用不同的分类器预训练权重用于检测器训练(所有其他训练参数在所有模型中是相似的)。

  • 首先,尽管与CSPDarknet53模型相比,用不同特征训练的CSPResNeXt50模型的分类精度更高,但是CSPDarknet53模型在对象检测方面显示出更高的精度。

  • 第二,将BoF和Mish用于CSPResNeXt50分类器训练增加了其分类精度,但是进一步将这些预训练的权重应用于检测器训练降低了检测器精度。然而,将BoF和Mish用于CSPDarknet53分类器训练增加了使用该分类器预训练权重的分类器和检测器的准确性。最终结果是主干CSPDarknet53比CSPResNeXt50更适合检测器

  • 本文观察到CSPDarknet53型号由于各种改进而表现出更强的提高检测机准确度的能力。

不同小批量对Detector训练的影响

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

    • 使用不同的小批量进行检测器训练。

Results

  • 在下图中示出了与其他最先进的物体检测器获得的结果的比较。本文的YOLOv4位于帕累托最优曲线上,在速度和准确度方面都优于最快和最准确的检测机。

    • 不同物体探测器速度和精度的比较。(一些文章只陈述了其中一种GPU的检测器的FPS:Maxwell/Pascal/V olta)

  • 由于不同的方法使用不同架构的GPU进行推理时间验证,本文在普遍采用的Maxwell,Pascal和Volta架构的GPU上运行YOLOv4,并将它们与其他最先进的方法进行比较。

  • 下表列出了使用Maxwell GPU的帧率对比结果,可以是GTX Titan X (Maxwell)或者Tesla M40 GPU。

    • 在MS COCO数据集(testdev 2017)上比较不同物体探测器的速度和精度。(此处突出显示FPS 30或更高的实时检测器。在不使用tensorRT的情况下比较batch=1的结果。)

  • 下表列出了使用Pascal GPU的帧率对比结果,可以是Titan X (Pascal)、Titan Xp、GTX 1080 Ti,也可以是Tesla P100 GPU。至于表10,列出了使用V olta GPU的帧率对比结果,可以是Titan V olta,也可以是Tesla V100 GPU。

    • 在MS COCO数据集(test-dev 2017)上比较不同物体探测器的速度和精度。(此处突出显示FPS 30或更高的实时检测器。我们在不使用tensorRT的情况下比较batch=1的结果。)

Conclusions

  • 本文提供更快(FPS)和更精确(MS COCO AP50)的先进检测器…95和AP50)。所描述的检测器可以在具有8-16 GB-VRAM的常规GPU上训练和使用,这使得它的广泛使用成为可能。一级锚基探测器的最初概念已经证明了它的可行性。已经验证了大量的特征,并选择使用这些特征来提高分类器和检测器的准确性。这些特性可以作为未来研究和开发的最佳实践。
    a GPU的帧率对比结果,可以是Titan V olta,也可以是Tesla V100 GPU。

【读点论文】YOLOv4: Optimal Speed and Accuracy of Object Detection,讲明目标检测结构,分析先进的涨点tricks,实现一种精度与速度的平衡相关推荐

  1. 【论文翻译】YOLOv4: Optimal Speed and Accuracy of Object Detection

    <YOLOv4: Optimal Speed and Accuracy of Object Detection> 链接地址 发表会议: CVPR 2020 Alexey Bochkovsk ...

  2. Paper:《YOLOv4: Optimal Speed and Accuracy of Object Detection》的翻译与解读

    Paper:<YOLOv4: Optimal Speed and Accuracy of Object Detection>的翻译与解读 目录 YOLOv4的评价 1.四个改进和一个创新 ...

  3. AI实战: YOLOv4: Optimal Speed and Accuracy of Object Detection

    前言 YOLOv4: Optimal Speed and Accuracy of Object Detection [Submitted on 23 Apr 2020] [是的,你没看错,2020年0 ...

  4. 论文笔记-YOLOv4: Optimal Speed and Accuracy of Object Detection

    论文地址:https://arxiv.org/pdf/2004.10934v1.pdf code:https://github.com/AlexeyAB/darknet. 摘要 有大量的技巧可以提高C ...

  5. 【论文笔记】YOLOv4: Optimal Speed and Accuracy of Object Detection

    简介: 笔者原本计划接着解读一篇有关NAS的文章的,奈何今天YOLOv4突然闪亮登场,经不住诱惑,那篇有关NAS的文章就只能后面再写了.好了,废话不多说,进入正题. 论文链接 代码链接 本文链接 前言 ...

  6. 论文精读:YOLOv4: Optimal Speed and Accuracy of Object Detection

    Abstract  大量的特征据说可以提高卷积神经网络(CNN)的精度.需要在大数据集上对这些特征的组合进行实际测试,并对结果进行理论证明.有些特性只适用于某些模型,只适用于某些问题,或仅适用于小规模 ...

  7. 论文翻译YOLOv4: Optimal Speed and Accuracy of Object Detection YOLOv4:目标检测的最佳速度和精度 论文中文翻译

    摘要 有大量的特征被认为可以提高卷积神经网络(CNN)的精度.需要在大型数据集上对这些特性的组合进行实际测试,并对结果进行理论验证.某些特性在特定的建模中起决定性作用,而在特定的强制确定问题中起决定性 ...

  8. YOLOv4阅读笔记(附思维导图)!YOLOv4: Optimal Speed and Accuracy of Object Detection

    今天刷看到了YOLOv4之时,有点激动和兴奋,等了很久的YOLOv4,你终究还是出现了 论文地址:https://arxiv.org/pdf/2004.10934.pdf GitHub地址:https ...

  9. 深度学习论文阅读目标检测篇(七)中英对照版:YOLOv4《Optimal Speed and Accuracy of Object Detection》

    深度学习论文阅读目标检测篇(七)中英对照版:YOLOv4<Optimal Speed and Accuracy of Object Detection> Abstract 摘要 1. In ...

最新文章

  1. python property
  2. Serverless 与容器决战在即?有了弹性伸缩就不一样了
  3. C语言函数题-取子串 (10分)
  4. ++i和i++哪个效率更高
  5. C++新特性探究(六):auto
  6. idea插件sonar字体背景颜色修改
  7. js sdk demo java_微信JS-SDK DEMO页面和示例代码
  8. 小学计算机教案 插入艺术字,小学信息技术《在幻灯片中插入艺术字》说课及反思...
  9. ubuntu1804系统设置在哪里_Ubuntu 1804.4 server版本的安装及配置网络和图形化界面
  10. 电脑和开发板如何串口连接
  11. Python爬虫:爬取酷狗音乐!动不动就给我来个付费音乐!没用的!
  12. 去掉svn的蓝色问号
  13. 十分钟接入WO+能力共享平台
  14. 因果森林总结:基于树模型的异质因果效应估计
  15. Java小程序 —— 简单五子棋
  16. 全新趣味测试威信小程序源码
  17. NLP资源汇总和工具汇总
  18. 用计算机遥感技术图片,遥感简答题
  19. 大学生如何进行个人理财
  20. 2023司法考试报名条件是什么 非法本能考吗

热门文章

  1. Neo4j 图数据库高级应用系列 / 服务器扩展指南 APOC 8.7 - 图生成 无标度网络
  2. android根据当前系统设置语言在app实现中英文切换
  3. 计算机动画作业:图像morphing
  4. 存储程序通用计算机设计方案,第1章计算机设计方案基本原理.doc
  5. Threejs之粒子动画/点击交互
  6. 冬天论、拐点论都是扯淡
  7. 人类大脑基本控制系统图
  8. kafka(1.1版本)源码阅读记——深入kafka-server-start.sh脚本
  9. 关于汽车相关产品的功能安全及其认证
  10. 游戏服务器修复,服务器内怪物不攻击问题修复方法