最近新出了YOLOV4,我系统的从V1开始整理出稿,传送门:
【YOLOv1原文+翻译】You Only Look Once Unified, Real-Time Object Detection
【YOLOv2原文+翻译】YOLO9000: Better, Faster, Stronger
【YOLOv3原文+翻译】YOLOv3:An Incremental Improvement
【YOLOv4原文+翻译】YOLOv4:Optimal Speed and Accuracy of Object Detection

首先上传原文:百度云盘
提取码:
id14
因为大多数博主所给的都是外链,对于没有梯子的同学来说打开非常痛苦,我直接上传PDF啦

正文开始

YOLOv4:Optimal Speed and Accuracy of Object Detection

  • Abstract(摘要)
  • 1. Introduction(介绍)
  • 2. Related work( 相关工作)
    • 2.1. Object detection model (目标检测模型)
    • 2.2. Bag of freebies(免费包)
    • 2.3. Bag of specials(特殊包)
  • 3. Methodology(方法)
    • 3.1. Selection of architecture(网络结构的选择)
    • 3.2. Selection of BoF and BoS(BoF 和 BoS的选择)
    • 3.3. Additional improvements( 额外的改进)
    • 3.4. YOLOv4
  • 4. Experiments(实验)
    • 4.1. Experimental setup(实验参数配置)
    • 4.2. Influence of different features on Classifier training(不同算法在分类器训练上的影响)
    • 4.3. Influence of different features on Detector training(不同算法在检测器训练上的影响)
  • 4.4. Influence of different backbones and pretrained weightings on Detector training(不同backbones和预训练权重在检测器训练中的影响)
    • 4.5. Influence of different mini-batch size on Detector training(不同的小批量尺寸对检测器训练的影响)
  • 5. Results(结果)
  • 6. Conclusions(结论)
  • 7. Acknowledgements(致谢)

Abstract(摘要)

目前有很多可以提高CNN准确性的算法。这些算法的组合在庞大数据集上进行测试、对实验结果进行理论验证都是非常必要的。有些算法只在特定的模型上有效果,并且只对特定的问题有效,或者只对小规模的数据集有效;然而有些算法,比如batch-normalization和residual-connections,对大多数的模型、任务和数据集都适用。我们认为这样通用的算法包括:Weighted-Residual-Connections(加权残差连接、WRC), Cross-Stage-Partial-connections(跨阶段部分连接、CSP), Cross mini-Batch Normalization(跨小批量归一化、CmBN), Self-adversarial-training(自我对抗训练、SAT)以及Mish-activation(误激活)。我们使用了新的算法:WRC, CSP, CmBN, SAT, Mish activation, Mosaic data augmentation, CmBN, Dropblock regularization 和CIoU loss以及它们的组合,获得了最优的效果:在MS COCO数据集上的AP值为43.5%(65.7% AP50),在Tesla V100上的实时推理速度为65FPS。源代码位于:https://github.com/AlexeyAB/darknet

1. Introduction(介绍)

大部分基于CNN的目标检测器主要只适用于推荐系统。举例来说,通过城市相机寻找免费停车位置的系统使用着慢速但是高精度的模型,然而汽车碰撞警告却使用着快速但是低精度的模型。提高实时目标检测器的精度不仅能够应用在推荐系统上,而且还能用于独立的流程管理以及降低人员数量上。传统图形处理单元 (GPU) 上的实时目标检测器操作允许以实惠的价格大规模使用。但目前大部分高精度的神经网络不仅不能实时运行,并且需要较大的mini-batch-size在多个GPUs上进行训练。我们构建了仅在一块GPU上就可以实时运行的CNN解决了这个问题,并且它只需要在一块GPU上进行训练。

图1:对拟建的YOLOv4和其他最先进的目标检测器进行比较。YOLOv4 的速度比EfficientDet快两倍,却具有同等的性能。YOLOv3 的 AP 和 FPS 分别提高了 10% 和 12%。

我们工作的主要目标就是设计一个仅在单个计算系统(比如单个GPU)上就可以快速运行的目标检测器并且对并行计算进行优化,并非减低计算量理论指标(BFLOP)。我们希望这个检测器能够轻松的训练和使用。具体来说就是任何一个人仅仅使用一个GPU进行训练和测试就可以得到实时的,高精度的以及令人信服的目标检测结果,正如在图1中所示的YOLOv4的结果。我们的贡献总结如下:
(1)我们提出了一个高效且强大的目标检测模型。任何人可以使用一个1080Ti或者2080Ti的GPU就可以训练出一个快速且高精度的目标检测器。

(2)我们在检测器训练的过程中,测试验证了目标检测中最高水准的Bag-of-Freebies(免费包)和Bat-of-Specials(特殊包)检测方法。

(3)我们改进了最高水准的算法,使得它们更加高效并且适合于在单个GPU上进行训练,比如CBN, PAN, SAM等。

图2:目标检测器

2. Related work( 相关工作)

2.1. Object detection model (目标检测模型)

检测器通常由两部分组成:backbone和head。前者是在ImageNet上进行预训练的骨干网,后者是用来预测类别信息和目标物体的边界框的头部。对于在GPU平台上运行的检测器,它们的backbone可能是VGG, ResNet, ResNetXt,或者是DenseNet。在CPU平台上运行的检测器,它们的backbone可能是SqueezeNet,MobileNet或者是ShuffleNet。对于head部分,通常分为两类:one-stage和two-stage的目标检测器。Two-stage的目标检测器的代表是R-CNN系列,包括:fast R-CNN, faster R-CNN,R-FCN和Libra R-CNN。还有基于anchor-free的Two-stage的目标检测器,比如RepPoints。One-stage目标检测器的代表模型是YOLO, SSD和RetinaNet。在最近几年,出现了基于anchor-free的one-stage的算法,比如CenterNet, CornerNet, FCOS等等。在最近几年,目标检测器在backbone和head之间会插入一些网络层,这些网络层通常用来收集不同的特征图。我们将其称之为目标检测器的neck。通常,一个neck由多个bottom-up路径和top-down路径组成。使用这种机制的网络包括Feature Pyramid Network(特征金字塔网络、FPN),Path Aggregation Network(路径聚合网络、PAN),BiFPN和NAS-FPN。

除了上述模型外,一些研究人员还强调直接构建一个新的主干(DetNet [43],DetNAS [7])或新的完整模型(SpineNet [12],HitDetector [20])用于物体检测。

综上所述,一个普通的目标检测器由下面四个部分组成:

2.2. Bag of freebies(免费包)

通常来讲,传统的目标检测器都是进行离线训练的(训练的时候对GPU数量和规格不限制)。因此,研究者总是喜欢扬长避短,开发最好的训练手段,因此可以在不增加推理成本的情况下,获得最好的检测精度。我们将只改变训练策略或者只增加训练成本的方法称之为“bag of freebies"。在目标检测中经常使用并且满足bag of freebies的定义的算法称是①数据增广(data augmentation)。数据增广的目的是增加输入图片的可变性,因此目标检测模型对从不同场景下获取的图片有着更高的鲁棒性。例如,光度失真(photometric distoitions)和几何失真(geometric distortions)是用来数据增强方法的两个常用的手段,它们肯定有利于目标检测任务。在处理photometric distortion中,我们会调整图像的亮度,对比度,色调,饱和度以及噪声。对于geometric distortion,我们会随机增加尺度变化,裁剪,翻转以及旋转。

上面提及的数据增广的手段都是像素级别的调整,它保留了调整区域的所有原始像素信息。此外,一些研究者将数据增广的重点放在了模拟目标物体遮挡问题上。他们在图像分类和目标检测上已经取得了不错的结果。具体来说,随机擦除(random erase)和CutOut可以随机选择图像上的矩形区域,然后进行随机融合或者使用零像素值来进行融合。对于hide-and-seek(隐藏和查找)和grid mask(网络掩码),他们随机地或者均匀地在一幅图像中选择多个矩形区域,并且使用零来代替矩形区域中的像素值。如果将相似的概念用来特征图中,出现了DropOut, DropConnect和DropBlock方法。此外,一些研究者提出一起使用多张图像进行数据增强的方法。举例来说,MixUp使用两张图片进行相乘并且使用不同的系数比进行叠加,然后使用它们的叠加比来调整标签。对于CutMix,它将裁剪的图片覆盖到其他图片的矩形区域,然后根据混合区域的大小调整标签。除了上面提及的方法,style transfer GAN也用来数据增广,这样可以有效减少CNN学习到的纹理偏差。

一些和上面所提及的不同的方法用来解决数据集中的语义分布可能存在偏差的问题。处理语义分布偏差的问题时,一个非常重要的问题就是在不同类别之间存在②数据不平衡,这个问题在two-stage目标检测器中,通常使用hard negative example mining(硬负例挖掘)或者online hard example mining(联机硬例挖掘)来解决。但是example mining 方法并不适用于one-stage的目标检测器,因为这种类型的检测器属于dense prediction(密集预测)架构。因此focal loss算法用来解决不同类别之间数据不均衡的问题。③另外一个非常重要的问题就是使用one-hot很难描述不同类别之间关联度的关系。Label smothing(标签平滑)提出在训练的时候,将hard label转换成soft label,这个方法可以使得模型更加的鲁棒性。为了得到一个最好的soft label, Islam等人引入了知识蒸馏的概念来设计标签细化网络。

最后一个bag of freebies是④设计边界框回归的目标函数。传统的目标检测器通常使用均方根误差(MSE)在Bbox(边界框)的中心坐标以及宽高上进行直接的回归预测,即,
或者左上角和右下角的两个点,即。对于anchor-based(基于锚点的)方法,要去预测相应的offset,比如。但是,直接预测Bbox每个点的坐标值是将这些点作为独立的变量,但是实际上并没有将目标物体当成一个整体进行预测。为了更好的解决这个问题,一些研究者最近提出了IoU损失函数,它能够将Bbox区域和ground truth的BBox区域的作为整体进行考虑。IoU损失函数需要计算BBox四个坐标点以及ground truth的IoU。因为IoU具有尺度不变性,它可以解决传统算法比如l1,l2损失{x,y,w,h}计算存在的问题,这个损失函数会随着尺度的变化而发生变化。最近,一些研究者继续提高IoU损失函数的性能。举例来说,除了覆盖范围,GIoU还包括目标物体的形状和方向。他们建议找到最小区域BBox,可以同时覆盖预测的BBox和ground truth的BBox,然后使用这个BBox作为分母去代替原来Iou损失函数中的分母。至于DIoU损失函数额外考虑了目标物体的中心距离,CIoU另一方面同时将覆盖区域,中心点之间的距离,纵横比考虑在内。CIoU在BBox回归问题上可以获得最好的收敛速度和准确率。

2.3. Bag of specials(特殊包)

对于那些插件模块和后处理方法,它们仅仅稍微的增加了推理成本,但是可以极大地提高目标检测的准确度,我们将其称之为“bag of specials”。一般来说,这些插件模块用来提高一个模型中特定的属性,比如增加感受野,引入注意力机制或者提高特征整合的能力等等;后处理方法是用来抑制模型预测结果的一种方法。

可以用来提升感受野的常规的方法是SPP, ASPP和RFB。SPP模型来源于空间金字塔匹配(SPM),而且SPMs原始的方法将特征图划分成很多d* d个相等的块,其中d可以是{1,2,3,…},因此可以形成空间金字塔,然后提取bag-of-word(词袋)的特征。SPP将SPM应用在CNN中,然后使用max-pooling代替bag-of-word运算。因为SPP输出的是一维的特征向量,因此它不能应用在全卷积网络(FCN)中。在YOLOv3中,Redmon和Farhadi改进了SPP模块,将max-pooling输出和内核尺寸k* k连接起来,其中k={1,5,8,13},stride=1。基于这个设计,一个相对较大的k* k的max-pooling有效地提高了backbone特征的感受野。在添加了改进后的SPP模型之后,YOLO-v3-608在COCO数据集上,虽然增加了0.5%的额外计算量,但是提高了2.7%的AP50。ASPP模块和改进的SPP模块的区别主要在:原始的k* k过滤器尺寸,从stride=1到3* 3内核尺寸的max-pooling,在stride=1的碰撞卷积运算中膨胀比为k。RFB模块使用一些k *k的内核,膨胀比为k,步长为1的碰撞卷积,它比ASPP获得了更全面的空间覆盖率。RFB在MS COCO数据集上仅仅增加了7%的额外推理时间,但是得到了5.7%的AP50提升。

目标检测上经常使用的注意力模块主要分成channel-wise注意力模块和point-wise注意力模块,这两个注意力模块主要的代表分别是Squeeze-and-Excitation(SE)和Spatial Attention Module(SAM)。尽管SE模块在ImageNet图像分类工作上仅仅增加了2%的计算量而提高了1%的top-1准确率,但是在GPU上提高了10%的推理时间,因此SE模块更适合在移动设备上使用。但是对于SAM模块来说,在ImageNet图像分类任务中,它仅仅需要0.1%的额外计算量却能够提升ResNet-SE 0.5%的top-1准确率。最重要的是,它根本不影响在GPU上的推理速度。

关于特征融合,早期的是使用skip connection或者是hyper-column将低级物理特征集成到高级的语义特征。因为多尺度预测方法比如FPN逐渐受到追捧,因此提出了很多将不同特征金字塔融合的轻量级模型。这类别的模型包括SFAM, ASFF和BiFPN。SFAM的主要思想是在多尺度连接特征图上使用channel-wise级别的调整。对于ASFF,它使用softmax作为point-wise级别的调整,然后将不同尺度的特征图加在一起。在BiFPN中,提出使用多输入权重残差连接去执行scale-wise级别的调整,然后将不同尺度的特征图加在一起。

在深度学习的研究中,一些人重点关心去寻找一个优秀的激活函数。一个优秀的激活函数可以让梯度更有效的进行传播,与此同时它不会增加额外的计算量。在2010年,Nair和Hinton提出了ReLU激活函数充分地解决了梯度消失的问题,这个问题在传统的tanh和sigmoid激活函数中会经常遇到。随后,LReLU,PReLU,ReLU6,Scaled Exponential Linear Unit(SELU),Swish,hard-Swish和Mish等等相继提出,它们也用来解决梯度消失的问题。LReLU和PReLU主要用来解决当输出小于零的时候,ReLU的梯度为零的问题。ReLU6和hard-Swish主要为量化网络而设计。对于神经网络的自归一化,提出SELU激活函数去实现这个目的。需要注意的是Swish和Mish都是连续可导的激活函数。

在基于深度学习的目标检测中使用的后处理方法是NMS,它可以用来过滤那些预测统一物体、但是效果不好的BBoxes,然后仅仅保留较好的BBoxes。优化NMS和优化目标方程的方法异曲同工。NMS提出的最初的方法并没有将上下文信息考虑在内,因此Girshick在R-CNN中添加了分类置信度作为参考,然后根据置信度得分的顺序,由高到低执行greedy NMS(贪婪非极大抑制)。对于soft NMS来说,它考虑了这样一个问题:在greedy NMS使用IoU的时候,目标遮挡可能会造成置信度得分的退化。在soft NMS基础上,DIoU NMS将重心坐标的距离信息添加到Bbox的筛选处理中了。值得一提的是,上面提到的后处理方法中都不直接引用捕获的图像特征,后续的anchor-free方法开发中不再需要后处理。

3. Methodology(方法)

我们工作基本的目标是在生产系统和优化并行预算中加快神经网络的速度,而非降低计算量理论指标(BFLOP)。我们提供了两个实时神经网络的选择:

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

(2)对于VPU, 我们使用分组卷积,但是我们不使用Squeeze-and-excitement(SE)模块,具体包括以下模型:EfficientNet-lite / MixNet / GhostNet / MobileNetV3

3.1. Selection of architecture(网络结构的选择)

我们的目标是寻找输入网络的分辨率、卷积层的个数、参数的数量(滤波器大小2 + 滤波器 + 通道/组)以及输出层(filters)的个数之间的最优的平衡。举例来说,大量的研究表明:在ILSVRC2012(ImageNet)的目标检测上,CSPResNext50比CSPDarket53的效果更好,但是在MS COCO的目标检测中,两个的效果恰好相反。

下一个目标就是选择额外的模块去增加感受野以及为不同检测器不同的backbone选择参数聚合的最佳方法。比如:FPN, PAN, ASFF, BiFPN。

在分类任务上最优的模型在检测上未必就是最优的。和分类任务相比,检测器需要以下要求:

(1)更高的输入尺寸(分辨率)- 为了检测多个小物体

(2)更多网络层 - 为了获得更大的感受野去覆盖不断增大的输入尺寸

(3)更多的参数 - 提高模型的能力从而能够在一张图片上检测到不同尺寸的多个物体。

表1:用于图像分类的神经网络参数。

假设说,我们可以认为具有更大感受野(有大量的3* 3的卷积层)和具有大量参数的模型应当作为检测器的backbone。表1展示了CSPResNetXt50, CSPDarkent53以及EfficientNet B3的相关信息。CSPResNetXt50仅仅只有16个3* 3的卷积层,一个425* 425的感受野和20.6M参数,然而CSPDarknet53有29个3* 3的卷积层,725* 725的感受野和27.6M参数。从理论证明和大量的实验表明在这两个模型中,CSPDarknet53是作为检测器的backbone最优的选择

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

(1)等于目标物体的大小时:能够看到整个物体

(2)等于网络的尺寸:能够看到目标物体周围的上下文信息

(3)大于网络的尺寸:增加图像点和最终激活之间连接的数量

我们将SPP模块添加到CSPDarknet53中,因为它极大提高了感受野,能够分离出最重要的上下文特征而且没有降低网络运行的速度。我们使用PANet作为不同检测器不同backbone训练阶段聚集参数的方法,而非YOLOv3的FPN模块。

最后,我们选择CSPDarknet53作为backbone, SPP作为附加模块,PANet 作为neck,使用YOLOv3(基于锚的)head作为YOLOv4架构的结构

未来,我们计划扩展检测器的Bag of freebies(BoF),它们在理论上可以解决某些问题并且能够提高检测器的精度,后续会以实验的形式探究每个算法对检测器的影响。

我们没有使用跨 GPU 批量归一化(Cross-GPU Batch Normalization)(CGBN 或者 SyncBN) 或者昂贵的定制设备。这能够使得任何人在一个GPU上就可以重现我们最先进的结果,比如在GTX 1080Ti或者RTX 2080Ti。

3.2. Selection of BoF and BoS(BoF 和 BoS的选择)

为了改进目标检测的训练,CNN通常使用以下技巧:
Activations激活: ReLU, leaky-ReLU, parametric-ReLU,ReLU6, SELU, Swish, or Mish

Bounding box regression loss边界框回归损失: MSE, IoU, GIoU,CIoU, DIoU

Data augmentation数据增广: CutOut, MixUp, CutMix

Regularization method正则化方法: DropOut, DropPath [36],Spatial DropOut [79], or DropBlock

Normalization of the network activations by their mean and variance通过均值和方差对网络激活进行归一化: Batch Normalization (BN) [32], Cross-GPU Batch Normalization (CGBN or SyncBN) [93], Filter Response Normalization (FRN) [70], or Cross-Iteration Batch Normalization (CBN) [89]

Skip-connections: Residual connections, Weighted residual connections, Multi-input weighted residual connections, or Cross stage partial connections (CSP)
跳过连接:剩余连接、加权剩余连接、多输入加权剩余连接或交叉阶段部分连接 (CSP)

对于训练激活函数,因为PReLU和SELU难以训练,并且ReLU6是专门为量化网络设计的,我们因此不考虑这这三个激活函数。在正则化方法中,提出DropBlok的学者将其算法和其他算法进行了比较,然后DropBolck效果更好。因此我们毫不犹豫的选择DropBlock作为我们的正则化方法。在归一化方法的选择中,因为我们关注在一块GPU上的训练策略,因此我们不考虑syncBN。

3.3. Additional improvements( 额外的改进)

为了让检测器更适合在单个GPU上进行训练,我们做了以下额外的设计和改进:

(1)我们提出了数据增广的新方法:Mosaic和Self-Adversarial Training(SAT,自对抗训练)

(2)在应用遗传算法时选择最优的超参数

(3)我们改进了一些现有的算法,让我们的设计更适合高效的训练和检测 - 改进SAM, 改进PAN以及Cross mini-Batch Normalization(CmBN)

图3:Mosaic表示一种新的数据增广方法。

Mosaic是一种新型的数据增广的方法,它混合了四张训练图片。因此有四种不同的上下文进行融合,然而CutMix仅仅将两张图片进行融合。此外,batch normalization在每个网络层中计算四张不同图片的激活统计。这极大减少了一个大的mini-batch尺寸的需求。

自适应对抗训练(SAT)也表示了一个新的数据增广的技巧,它在前后两阶段上进行操作。在第一阶段,神经网络代替原始的图片而非网络的权重。用这种方式,神经网络自己进行对抗训练,代替原始的图片去创建图片中此处没有期望物体的描述。在第二阶段,神经网络使用常规的方法进行训练,在修改之后的图片上进检测物体。

图4:Cross mini-Batch Normalization.(跨小批量归一化)

正如图4中显示,CmBN(Cross mini-Batch Normalization)代表CBN改进的版本。它只收集了一个批次中的mini-batches之间的统计数据。

我们将SAM的spatial-wise注意力变成了point-wise注意力机制,然后将PAN中的shortcut连接变成了concatenation连接,如图5和图6。

图5:修改的SAM

图6:修改后的PAN。

3.4. YOLOv4

在这个部分,我们会详细介绍YOLOv4的细节:

YOLOv4 consists of:
• Backbone: CSPDarknet53 [81]
• Neck: SPP [25], PAN [49]
• Head: YOLOv3 [63]

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

4. Experiments(实验)

我们测试了不同训练提升技巧在ImageNet(ILSVRC2012 val)数据集上的分类器准确性的影响,然后又验证了在MS COCO(test-dev 2017)数据集上的检测器的准确性。

4.1. Experimental setup(实验参数配置)

在ImageNet图像分类实验中,默认的超参数如下:训练步长为8,000,000;batch size和mini-batch size分别为128和32;polynominal decay learning rate scheduling strategy(多标称衰减学习速率调度策略)初始的学习率为0.1;warm-up步长为1000;momentum和weight decay分别设置为0.9和0.005。所有的BoS实验使用相同的、默认的超参数,在BoF实验中,我们增加了一半的训练步长。在BoF实验中,我们验证了MixUp, CutMix, Mosaic, Bluring数据增广和标签平滑正则化(label smoothing regularization,LSR)方法。在BoS实验中,我们比较了LReLU,Swish和Mish激活函数的影响。所有的实验都在1080Ti或者2080Ti GPU上进行训练。

在MS COCO目标检测实验中,默认的超参数如下:训练步长为500,500;采用步长衰减学习速率调度策略( step decay learning rate scheduling strategy),初始学习速率为0.01,在400000步和450000步分别乘以因子0.1;动量momentum和权重weight衰减 decay分别设置为0.9和0.0005。所有的架构在一块GPU进行多尺度训练,它的batch size为64,然而它的mini-batch为8还是4取决于网络架构和GPU的内存限制。除了对寻找最优的超参数使用遗传算法之外,其他所有的实验都使用默认的设置。遗传算法利用YOLOV3-SPP进行带GIoU损失的训练,搜索300个epochs的min-val 5k 集(sets)。我们采用搜索的学习率为0.00261,momentum为0.949,IoU阈值指定ground truth 0.213,损失标归一化为0.07进行遗传算法实验。

我们还验证了大量的BoF算法,包括网格敏感度消除(grid sensitivity elimination),mosaic数据增强,IoU阈值化,遗传算法,类标签平滑(class label smoothing), 跨小批量归一化(cross mini-batch normalization),自对抗训练(self-adversarial training),余弦退火调度(cosine anneling scheduler), 动态小批量尺寸(dynamic mini-batch size), DropBlock, 优化锚(Optimized Anchors), 不同的IoU损失函数。我们也在不同BoS算法上进行了实验,包括Mish,SPP,SAM,RFB,BiFBN以及Gaussiian YOLO。所有的实验我们仅仅使用一个GPU进行训练,所以不使用syncBN等优化多个GPU的技术用。

4.2. Influence of different features on Classifier training(不同算法在分类器训练上的影响)

首先,我们研究了不同算法在分类器训练上的影响;具体来说,类标签平滑(Class label smoothing)的影响,不同数据增广技巧,双边模糊(bilateral blurring),混合(MixUp),切割混合( CutMix)和Mosaic的影响在图7中显示,以及不同激活函数的影响,比如Leaky-ReLU(默认的),Swish和Mish。

图7:各种数据增强方法

在我们的实验中(如同表2中所示),通过引入一些算法,分类器的准确率得到了提升,这些算法包括:CutMix和Mosaic数据增广,Class label smoothing和Mish激活函数。结果是,我们的用于分类器训练的BoF-backbone(Bag of Freebies)包括:Cutmix 和Mosaic数据增广算法以及Class labelsmoothing。正如表2和表3所示,我们将Mish激活函数作为补充的选项。

表2:BoF和Mish对CSPResNeXt-50分类器精度的影响

表3:BoF和Mish对CSPDarknet-53分类器精度的影响

4.3. Influence of different features on Detector training(不同算法在检测器训练上的影响)

进一步的研究关注不同Bag-of-Freebies(BoF-detector)在检测器训练准确度的影响,如表4所示。通过研究能够提高检测器准确度的算法,我们极大地扩展了BoF的算法选项,而且并没有影响FPS:

表4:BoF消融研究。(512 x512 CSPResNeXt50-PANet-SPP)

  • S:消除网络的敏感度 方程bx = σ(tx)+cx; by = σ(ty)+cy,自重cx和cy通常是整数,在YOLOv3中用于评估目标物体的坐标,因此,当bx的值非常接近cx或者cx+1的时候,tx的绝对值会非常大。我们通过给sigmoid函数乘以一个大于1.0的因子来解决这个问题,因此,这样就消除了网络对不可检测物体的影响。
  • M:Mosaic数据增广 - 在训练过程中,使用四张图片而非一张进行增广处理
  • IT:IoU阈值 - 对一个ground truth的IoU使用多个anchors,(truth, anchor) > IoU 阈值
  • GA:遗传算法 - 在前10%的训练时间内使用遗传算法选择最优的超参数
  • LS:Class label smoothing - 使用类标签平滑进行sigmoid激活
  • CBN:CmBN - 在整个批次中通过使用Cross mini-Batch Normalization收集统计数据,而非在单独的mini-batch中收集统计数据。
  • CA:Cosine annealing scheduler(余弦退火调度器) - 在sinusoid(正弦)训练中改变学习率
  • DM:动态小批量尺寸 - 使用随机训练形状,在低分辨率训练期间自动增加小批量
  • OA: 优化Anchors - 使用用于512x512网络分辨率训练的anchors优化传感器
  • GIoU, CIoU, DIoU, MSE - 为边界框回归使用不同的损失函数。

下一步的研究将关心在检测器训练准确度上,不同Bag-of-Specials(BoS-detector)的影响,包括PAN, RFB, SAM, Gaussian YOLO(G),以及ASFF,如表5所示。在我们的实验中,当使用SPP, PAN和SAM的时候,检测器得到了最好的性能。

表5:BoS消融研究(512X512)

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

下一步我们研究不同backbones模型在检测器准确率上的影响,如表6所示。我们注意到拥有最佳分类准确率的模型,检测准确率未必是最佳的。

首先,尽管使用不同算法训练得到的CSPResNeXt-50模型的分类精度比CSPDarknet53模型的要高,但是CSPDarknet53模型的检测精度更高。

其次,CSPResNeXt-50分类器训练使用BoF和Mish提高了它的分类准确率,但进一步应用这些预训练的权重进行检测训练会降低检测精度。然而,使用分类器预训练权重进行训练的CSPDarknet53分类器,使用BoF和Mish提高了分类器和检测器的准确率。这表示CSPDarknet53比CSPResNeXt-50更适合作为检测器。

我们观察到,通过各种改进,CSPDarknet53模型显示出了更大的能力来提高检测器的精度。

表6:使用不同的分类器预训练权重进行检测器训练(模型的其他所有训练参数都是类似的)。

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

最后,我们分析了不同mini-batch尺寸的训练的模型的结果,并且结果在表7中显示出来。从表7中我们发现在添加了BoF和BoS训练策略之后,mini-batch尺寸几乎对检测的性能没有影响。结果表明,引入了BoF和BoS之后,就不需要使用昂贵的GPU进行训练。换句话说,任何人只要有一个GPU就可以训练一个优秀的检测器。

表7:使用不同的mini-batch尺寸进行检测器训练

5. Results(结果)

图8显示了与其他最先进的目标检测的比较结果。本文的YOLOv4坐落在帕累托最优曲线上,在速度和精度方面都优于目前最快和最精确的检测器。

图8:不同目标检测器速度和精度的比较。(一些文章指出他们的检测器的FPS只适用于单GPU: Maxwell/Pascal/Volta)

由于不同的方法使用不同体系结构的GPU进行推理时间验证,本文在Maxwell、Pascal和Volta体系结构的常用GPU上操作YOLOv4,并将它们与其他最新方法进行比较。

表8列出了使用Maxwell GPU的帧速率比较结果,它可以是GTXTitanX(Maxwell)或Tesla M40 GPU。

表8:在MS COCO数据集(testdev 2017)上不同的目标检测器的速度和准确性的比较。(此处突出显示FPS 30或更高的实时检测器。我们将结果与未使用tensorRT的batch=1进行了比较。)

表9列出了使用Pascal GPU的帧速率比较结果,可以是Titan X(Pascal)、Titan Xp、GTX 1080 Ti或Tesla P100 GPU。

表9:MS COCO数据集(test-dev 2017)上不同的目标检测器的速度和准确性比较。(此处突出显示FPS 30或更高的实时检测器。我们将结果与未使用tensorRT的batch=1进行了比较。)

至于表10,它列出了使用Volta GPU的帧速率比较结果,可以是Titan Volta或Tesla V100 GPU。

表10:MS COCO数据集(test-dev 2017)上不同的目标检测器的速度和准确性比较。(此处突出显示FPS 30或更高的实时检测器。我们将结果与未使用tensorRT的batch=1进行了比较。)

6. Conclusions(结论)

我们提出了一个最先进的目标检测器,它比所有现存可选择的检测器都要快而且更准确。这个检测器可以仅在一块8-16GB的GPU上进行训练,这使得它的广泛应用成为可能。One-stage的anchor-based的检测器的最初概念证明了它的可行性。我们已经验证了大量的特征,并选择使用这些特征来提高分类和检测的精度。这些算法可以作为未来研究和开发的最佳实践。

7. Acknowledgements(致谢)

作者非常感谢Glenn Jocher提出的 Mosaic数据增广、利用遗传算法选择超参数以及解决网格敏感性问题的思路:https://github.com/ultralytics /yolov3。

【YOLOv4原文+翻译】YOLOv4:Optimal Speed and Accuracy of Object Detection相关推荐

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

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

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

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

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

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

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

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

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

    YOLOv4: Optimal Speed and Accuracy of Object Detection Abstract 据说有大量的特征可以提高卷积神经网络(CNN)的准确性.需要在大型数据集 ...

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

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

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

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

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

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

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

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

最新文章

  1. Android:手把手教你 实现Activity 与 Fragment 相互通信(含Demo)
  2. 两个场景怎样合在一起_Spring AOP应用场景你还不知道?这篇一定要看
  3. 第四讲、Linux常用命令
  4. 任务管理平台_软件品质评测系统任务分发管理平台
  5. MacOSX系统怎么开启Root账户?Mac电脑开启root权限教程
  6. python 哪些比赛项目_python能做什么项目
  7. 运维:使用awk命令获取文本的某一行,某一列
  8. win10系统 计算机配置要求高吗,win10流畅配置要求有哪些
  9. 【魔改蜗牛星际】A单主板变“皇帝板”扩展到8个SATA口
  10. opencv之图像二值化处理
  11. PRD文档写作详细说明(希望对大家有用)
  12. 职场:因抢一个月饼,惨遭阿里开除,如今他把生活过成这样
  13. WORD中编辑页码方法大全
  14. 计算机网络拨号,个人拨号上网宽带连接设置图文方法
  15. Go-加密学(四) - 证书/SSL/TLS/https单向认证/思维导图
  16. android2.2应用开发之IccCard(sim卡或USIM卡)第一篇
  17. Ubuntu(linux)添加系统证书信任
  18. gitlab中国官方网站
  19. C++中用 GetModuleFileName()函数 获得程序当前的运行目录
  20. 工商管理专业知识与实务(初级)【6】

热门文章

  1. 智慧社区网格化服务管理信息平台
  2. 前沿科技探究之AI在索引推荐的应用
  3. 基于JAVA黑白图片和上色处理系统(Springboot框架+AI人工智能) 开题报告
  4. Centos7.2安装搜狗拼音
  5. css波浪动画使用图片
  6. Python中文gbk编码输出报错
  7. Suggestion: use tools:overrideLibrary=xxx.xxx.xxx to force usage
  8. 硬件设计之一——电源设计01:电源防护
  9. 说说北大软微那些事儿
  10. python array类型取特定值