YOLOv4在结构上没有额外的创新,但是收集了目标检测中各种tricks,并进行实验分析了各种tricks的有效性,相对于对近些年来目标检测领域中从数据,网络结构,和后处理等过程做了很好的总结。最终,在速度和准确性上达到了最好的balance。
论文:《YOLOv4: Optimal Speed and Accuracy of Object Detection》
论文链接:https://arxiv.org/pdf/2004.10934.pdf
代码链接:https://github.com/AlexeyAB/darknet
摘要
据说有许多特征可以提高卷积神经网络(CNN)的准确性。需要在大型数据集上对这些特征的组合进行实际测试,并对结果进行理论证明。某些特征仅在某些模型上运行,并且仅在某些问题上运行,或者仅在小型数据集上运行;而某些特征(例如批归一化和残差连接)适用于大多数模型,任务和数据集。我们假设此类通用特征包括加权残差连接(Weighted-Residual-Connections,WRC),跨阶段部分连接(Cross-Stage-Partial-connections, CSP),跨小批量标准化( Cross mini-Batch
Normalization, CmBN),自对抗训练(Self-adversarial-training, SAT)和Mish激活。我们使用以下新特征:WRC,CSP,CmBN,SAT,Mish激活,Mosaic数据增强,CmBN,DropBlock正则化和CIoU loss,并结合使用其中的一些特征以实现最新的结果:43.5%的AP(65.7在Tesla V100上,MS COCO数据集的实时速度约为65 FPS。源代码位于https://github.com/AlexeyAB/darknet。
1 引言
大多数基于CNN的目标检测器仅适用于推荐系统。 例如,通过慢速精确模型执行通过城市摄像机搜索空闲停车位的过程,而汽车碰撞警告则与快速不准确的模型有关。 提高实时目标检测器的准确性,不仅可以将它们用于提示生成推荐系统,还可以用于独立的流程管理和减少人工输入。 常规图形处理单元(GPU)上的实时对象检测器操作允许它们以可承受的价格进行大量使用。 最精确的现代神经网络无法实时运行,并且需要大量的GPU来进行大量mini-batch size的训练。 我们通过创建CNN来解决此类问题,该CNN在常规GPU上实时运行,并且训练仅需要一个常规GPU。
这项工作的主要目标是设计生产系统中目标检测器的快速运行速度并优化并行计算,而不是低计算量理论指标(BFLOP)。 我们希望可以轻松地训练和使用设计的对象。 例如,任何使用常规GPU进行训练和测试的人都可以获得实时,高质量和令人信服的目标检测结果,使用YOLOv4结果如图1所示。我们的贡献总结如下:
图1:提出的YOLOv4与其他最新对目标检测器的比较。 YOLOv4的运行速度比EfficientDet快两倍,并且性能相当。 将YOLOv3的AP和FPS分别提高了10%和12%。
1,我们开发了一种高效而强大的物体检测模型。 它使每个人都可以使用1080 Ti或2080 Ti GPU训练超快速和准确的物体检测器。
2,我们在探测器训练过程中验证了最新的Bag-of-Freebies和Bag-of-Specials方法的影响。
3,我们修改了最先进的方法,使它们更有效且更适合单个GPU训练,包括CBN [89],PAN [49],SAM [85]等。
2 相关工作
2.1 目标检测模型
现代检测器通常由两部分组成,一个是在ImageNet上经过预训练的backbone,另一个是用来预测物体的类别和边界框的头部。对于在GPU平台上运行的那些检测器,其backbone可能是VGG [68],ResNet [26],ResNeXt [86]或DenseNet [30]。对于在CPU平台上运行的那些检测器,其backbone可以是SqueezeNet [31],MobileNet [28、66、27、74]或ShuffleNet [97、53]。至于头部,通常分为两类,即单阶段目标检测器和两阶段目标检测器。最有代表性的两阶段目标检测器是R-CNN [19]系列,包括Fast R-CNN [18],Faster R-CNN [64],R-FCN [9]和Libra R-CNN [58]。也有可能使两阶段目标检测器成为anchor-free的目标检测器,例如RepPoints [87]。对于单阶段目标检测器,最具代表性的模型是YOLO [61、62、63],SSD [50]和RetinaNet [45]。近年来,开发了anchor-free的单阶段目标检测器。这种检测器是CenterNet [13],CornerNet [37、38],FCOS [78]等。近年来开发的目标检测器通常在backbone和头部之间插入一些层,这些层通常用于从不同的阶段收集特征图。我们可以称其为目标检测器的颈部(neck)。通常,颈部由几个自下而上的路径和几个自上而下的路径组成。配备此机制的网络包括特征金字塔网络(FPN)[44],路径聚合网络(PAN)[49],BiFPN [77]和NAS-FPN [17]。
除上述模型外,一些研究人员将重点放在直接构建用于目标检测的新backbone(DetNet [43],DetNAS [7])或新的整个模型(SpineNet [12],HitDetector [20])上。
综上所述,普通的目标检测器由以下几部分组成:
•输入:images,patches,图像金字塔
•backbone:VGG16 [68],ResNet-50 [26],SpineNet [12],EfficientNet-B0 / B7 [75],CSPResNeXt50 [81],CSPDarknet53 [81]
• Neck:
• 额外的blocks: SPP [25], ASPP [5], RFB[47], SAM [85]
• Path-aggregation blocks: FPN [44], PAN [49],NAS-FPN [17], Fully-connected FPN, BiFPN[77], ASFF [48], SFAM [98]
• Heads:
•密集预测(单阶段):
◦ RPN [64], SSD [50], YOLO [61], RetinaNet[45] (anchor based)
◦ CornerNet [37], CenterNet [13], MatrixNet[60], FCOS [78] (anchor free)
•稀疏预测:
◦ Faster R-CNN [64], R-FCN [9], Mask RCNN [23] (anchor based)
◦ RepPoints [87] (anchor free)
图2 目标检测器
2.2 Bag of freebies
通常,常规的目标检测器是离线训练的。因此,研究人员总是喜欢利用这一优势,并开发出更好的训练方法,以使目标检测器获得更好的精度而又不增加推理成本。我们称这些仅改变训练策略或仅增加训练成本方法为“bag of freebies”。数据增强是目标检测方法经常采用的并符合bag of freebies定义。数据增强的目的是增加输入图像的可变性,从而使设计的目标检测模型对从不同环境获得的图像具有更高的鲁棒性。例如,photometric distortions和geometric distortions是两种常用的数据增强方法,它们无疑有益于目标检测任务。在处理photomet如此 distortions时,我们会调整图像的亮度,对比度,色度,饱和度和噪点。对于几何变形,我们添加了随机缩放,裁剪,翻转和旋转。
上面提到的数据扩充方法都是逐像素调整,并且保留了调整区域中的所有原始像素信息。此外,一些从事数据增强的研究人员将重点放在模拟目标遮挡问题上。他们在图像分类和目标检测中取得了良好的效果。例如,随机擦除[100]和CutOut [11]可以随机选择图像中的矩形区域,并填充零的随机或互补值。至于hide-and-seek[69]和grid mask[6],它们随机或均匀地选择图像中的多个矩形区域并将其替换为全零。如果类似的概念应用于特征图,则有DropOut [71],DropConnect [80]和DropBlock [16]方法。另外,一些研究人员提出了使用多个图像一起执行数据增强的方法。例如,MixUp [92]使用两个图像以不同的系数比率进行乘法和叠加,然后使用这些叠加比率来调整标签。对于CutMix [91],它是将裁切后的图像覆盖到其他图像的矩形区域,并根据混合区域的大小调整标签。除了上述方法之外,style transfer GAN [15]还用于数据扩充,这种用法可以有效地减少CNN所学习的纹理偏差。
与上面提出的各种方法不同,其他一些bag of freebies方法专用于解决数据集中语义分布可能存在偏差的问题。在处理语义分布偏差问题时,一个非常重要的问题是,不同类之间存在数据不平衡的问题,而该问题在两阶段物体检测器中通常可以通过以下方式来解决:硬负样本挖掘[72]或在线硬挖掘[67]。但是样本挖掘方法不适用于单阶段目标检测器,因为这种检测器属于密集预测体系结构。因此林等。 [45]提出了focal loss,以解决各种类别之间存在的数据不平衡问题。另一个非常重要的问题是,执行标记时很难用one-hot hard表示来表达不同类别之间的关联度的关系。 [73]中提出的label smooth是将hard label转换为soft label以进行训练,这可以使模型更健壮。为了获得更好的soft label,Islam等。 [33]介绍了知识蒸馏的概念来设计标签细化网络。
最后个bag of freebies是边界框(BBox)回归的目标函数。传统的目标检测器通常使用均方误差(MSE)直接对BBox的中心点坐标以及高度和宽度执行回归,即 {xcenter,ycenter,w,h}或左上点和右下点,即,,ybottom rightg}。对于anchor-base的方法,将估计相应的偏移量,例如{xcenter_offset,ycenter_offset,woffset,hoffsetg和fxtop left_offset,ytop_left_offset,xbottom_right_offset,ybottom_right_offset}。但是,直接估计BBox的每个点的坐标值是将这些点视为独立变量,但实际上并未考虑目标本身的完整性。为了使这个问题得到更好的处理,一些研究者最近提出了IoU loss[90],该方法考虑了预测的BBox区域和ground truth BBox区域的覆盖范围。 IoU loss计算过程将通过使用基本事实执行IoU,然后将生成的结果连接到整个代码中,触发BBox的四个坐标点的计算。因为IoU是尺度不变表示,所以可以解决传统方法计算{x,y,w,h}的l1或l2损失时,损失会随着尺度增加而增加的问题。最近,一些研究人员继续改善IoU损失。例如,GioU loss[65]除了覆盖区域外还包括对象的形状和方向。他们建议找到可以同时覆盖预测的BBox和ground truth BBox的最小面积BBox,并使用该BBox作为分母来代替最初用于IoU loss的分母。至于DIoU loss[99],它还考虑了目标中心的距离,而CIoU loss[99]同时考虑了重叠区域,中心点之间的距离和纵横比。 CIoU可以在BBox回归问题上实现更好的收敛速度和准确性。
2.3 Bag of specials
对于那些仅增加少量推理成本但可以显着提高目标检测准确性的插件模块和后处理方法,我们将其称为“bag of specials”。 一般而言,这些插件模块用于增强模型中的某些属性,例如扩大感受野,引入注意力机制或增强特征集成能力等,而后处理是用于筛选模型预测结果的方法。
可以用来增强感受野的常用模块是SPP [25],ASPP [5]和RFB [47]。 SPP模块起源于空间金字塔匹配(SPM)[39],而SPM的原始方法是将特征图分割为几个d×d个相等的blocks,其中d可以为{1, 2,3m ...},从而形成空间金字塔,然后提取bag-of-word特征。 SPP将SPM集成到CNN中,并使用最大池操作而不是bag-of-word操作。由于He等人提出的SPP模块 [25]将输出一维特征向量,在全卷积网络(FCN)中应用是不可行的。因此,在YOLOv3的设计中[63],Redmon和Farhadi将SPP模块用大小为k×k的kernel改为最大池输出的级联,其中k = {1, 5, 9, 13},stride等于1。在这种设计下,相对较大的k×k maxpooling有效地增加了backbone特征的感受野。在添加了改进版本的SPP模块之后,YOLOv3-608在MS COCO对目标测任务上将AP50升级了2.7%,而额外的计算代价为0.5%。 ASPP [5]模块和改进的SPP模块之间在操作上的差异主要在于原始k×k内核大小,max-pooling的步幅等于1到几个3×3内核大小,扩张比等于k,在dilated卷积运算中stride为1。 RFB模块将使用k×k kernel的几个膨胀卷积,膨胀比等于k,步幅等于1,以获得比ASPP更全面的空间覆盖。 RFB [47]仅花费7%的额外推理时间,即可将MS COCO上SSD的AP50提高5.7%。
目标检测中经常使用的注意力模块主要分为channel-wise注意力和point-wise注意力,这两种注意力模型的代表 分别是Squeeze-and-Excitation(SE)[29]和空间注意力模块(SAM)[85]。 尽管SE模块可以将ImageNet图像分类任务中的ResNet50的功能提高1%至top-1精度,但其代价仅是将计算工作量增加2%,但在GPU上通常会增加大约10%的推理时间, 因此更适合在移动设备中使用。 但是对于SAM,它只需要支付0.1%的额外计算,就可以在ImageNet图像分类任务上将ResNet50-SE的top-1准确性提高0.5%。 最好的是,它根本不影响GPU上的推理速度。
在特征集成方面,早期的实践是使用skip connection[51]或hyper-colmn[22]将低层物理特征集成到高层语义特征。 由于诸如FPN的多尺度预测方法已变得流行,因此提出了许多集成了不同特征金字塔的轻量级模块。 这种模块包括SFAM [98],ASFF [48]和BiFPN [77]。 SFAM的主要思想是使用SE模块在多尺度级联特征图上执行通道级重新加权。 对于ASFF,它使用softmax作为逐点级别的权重,然后添加不同比例的特征图。 在BiFPN中,提出了多输入加权残差连接以执行按比例的级别重新加权,然后添加不同尺度的特征图。
在深度学习的研究中,有些人专注于寻找良好的激活函数。良好的激活函数可以使梯度更有效地传播,同时不会引起过多的额外计算成本。 Nair和Hinton [56]在2010年提出ReLU来基本上解决传统的tanh和sigmoid激活函数中经常遇到的梯度消失问题。随后,LReLU [54],PReLU [24],ReLU6 [28],Scaled Exponential线性单元(SELU)[35],Swish [59],hard-Swish [27]和Mish [55]等。还提出了用于解决梯度消失问题的方法。 LReLU和PReLU的主要目的是解决输出小于零时ReLU的梯度为零的问题。至于ReLU6和Hard-Swish,它们是专门为量化网络设计的。为了对神经网络进行自归一化,提出了SELU激活函数来满足这一目标。要注意的一件事是,Swish和Mish都是连续可区分的激活函数。
基于深度学习的目标检测中常用的后处理方法是NMS,它可以用来过滤那些不好地预测为同一目标的BBox,并仅保留更高响应的候选BBox。 NMS尝试改进的方法与优化目标函数的方法一致。 NMS提出的原始方法没有考虑上下文信息,因此Girshick等。 [19]在R-CNN中添加了分类置信度得分作为参考,并且根据置信度得分的顺序,从高分到低分的顺序执行了贪婪的NMS。对于soft NMS[1],它考虑到一个问题,即物体的遮挡可能会导致带有IoU分数的贪婪的NMS的置信度得分下降。 DIoU NMS [99]开发人员的思维方式是在soft NMS的基础上将中心点距离的信息添加到BBox筛选过程中。值得一提的是,由于上述后处理方法均未直接涉及捕获的图像特征,因此在后续的anchor-free方法开发中不再需要后处理。
3 方法
对生产系统和并行计算的优化,基本目的是神经网络的快速操作速度,而不是并优化并行计算,而不是低计算量理论指标(BFLOP)。 我们提供了实时神经网络的两种选择:
•对于GPU,我们在卷积层中使用少量组(1-8):CSPResNeXt50 / CSPDarknet53
•对于VPU-我们使用分组卷积,但不要使用Squeeze-and-Excitement(SE)blocks-具体来说,它包括以下模型:EfficientNet-lite / MixNet [76] / GhostNet [21] / MobileNetV3
3.1 结构选择
我们的目标是在输入网络分辨率,卷积层数,参数数(filter大 size^ 2 *fileter * channel/groups)和层输出(filter)的数量之间找到最佳平衡。 例如,我们的大量研究表明,就ILSVRC2012(ImageNet)数据集上的目标分类而言,CSPResNext50与CSPDarknet53相比要好得多[10]。 但是,相反,在检测MS COCO数据集上的目标方面,CSPDarknet53比CSPResNext50更好。
下一个目标是针对不同的检测器level从不同的backbone level中选择额外的blocks来增加感受野和参数聚集:例如 FPN,PAN,ASFF,BiFPN。
对于分类最佳的参考模型对于检测器并非总是最佳的。 与分类器相比,检测器需要满足以下条件:
•更高的输入网络size(分辨率)– 用于检测多个小型物体
•更多的 layers – 更高的感受野,以覆盖输入网络size的增加
•更多参数 – 具有更大的模型容量,可在单个图像中检测不同大小的多个目标
假设说,我们可以假设应该选择一个具有较大感受野大小(具有大量3×3卷积层)和大量参数的模型作为backbone。 表1显示了CSPResNeXt50,CSPDarknet53和EfficientNet B3的信息。 CSPResNext50仅包含16个3×3卷积层,一个425×425感受野和20.6 M参数,而CSPDarknet53包含29个3×3卷积层,一个725×725感受野和27.6 M参数。 这种理论上的论证,再加上我们的大量实验,表明CSPDarknet53神经网络是两者的最佳模型,是检测器的backbone。
不同 size 感受野的影响总结如下:
• 达到目标size - 允许查看整个目标
• 达到网络size - 允许查看目标附近的背景
• 超过网络size-增加image-point和最终激活之间的连接数
我们在CSPDarknet53上添加了SPP block,因为它显着增加了感受野,分离出最重要的上下文(contex)特征,并且几乎没有降低网络运行速度。 针对不同检测器level,我们使用PANet作为来自不同backbone level的参数聚合方法,而不是YOLOv3中使用的FPN。
最后,我们选择CSPDarknet53 的backbone,SPP附加模块,PANet路径聚合neck和YOLOv3(基于anchor)head作为YOLOv4的体系结构。
将来,我们计划大幅扩展用于探测器的Bag of Freebies(BoF)的内容,从理论上讲,它可以解决一些问题并提高探测器的准确性,并以实验方式依次检查每个功能的影响。
我们不使用跨GPU Batch Notmalize(CGBN或SyncBN)或昂贵的专用设备。 这使任何人都可以在常规图形处理器上重现我们的最新技术成果,例如 GTX 1080Ti或RTX 2080Ti。
3.2 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: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: 残差连接,加权残差连接,multi-input加权残差连接, 跨阶段部分连接(CSP)
至于训练激活函数,由于PReLU和SELU更难以训练,并且ReLU6是专门为量化网络设计的,因此我们从候选列表中删除了上述激活功能。 在重新量化方法中,发布DropBlock的人们已将其方法与其他方法进行了详细的比较,并且其正则化方法赢得了很多。 因此,我们毫不犹豫地选择了DropBlock作为我们的正则化方法。 至于标准化方法的选择,由于我们专注于仅使用一个GPU的训练策略,因此不考虑syncBN。
3.3 额外的改进
为了使设计的检测器更适合在单个GPU上进行训练,我们进行了以下额外设计和改进:
•我们引入了一种新的数据增强Mosaic方法,以及自对抗训练(SAT)
•我们在应用遗传算法时选择最佳超参数
•我们修改了一些现有方法,使我们的设计适合进行有效的训练和检测-修改后的SAM,修改后的PAN和交叉mini-batch Normalization(CmBN)
Mosaic表示一种新的数据增强方法,该方法混合了4个训练图像。 因此,混合了4个不同的上下文(contex),而CutMix仅混合了2个输入图像。 这样可以检测正常上下文之外的目标。 此外,批量归一化从每层上的4张不同图像计算激活统计信息。 这大大减少了对大mini-batch size的需求。
自对抗训练(SAT)也代表了一项新的数据增强技术,该技术可在2个forward和backWord段进行操作。 在第一阶段,神经网络会更改原始图像,而不是网络权重。 以这种方式,神经网络对其自身执行对抗攻击,从而改变原始图像以产生对图像上没有期望物体的欺骗。 在第二阶段,训练神经网络以正常方式检测此修改图像上的目标。
CmBN表示CBN修改版本,如图4所示,定义为cross mini-batch normalization(CmBN)。 这仅收集单个batch中的mini-batch之间的统计信息。
我们将SAM从空间注意(spatial-wise attention)改为点注意(point-wise attention),并将PAN的快捷连接(shortconnection)替换为串联,分别如图5和图6所示。
3.4 YOLOv4
在本节中,我们将详细介绍YOLOv4。
YOLOv4的组成:
• Backbone: CSPDarknet53 [81]
• Neck: SPP [25], PAN [49]
• Head: YOLOv3 [63]
YOLOv4使用:
• backbone的Bag of Freebies (BoF):CutMix和 Mosaic数据增强,DropBlock正则化,类标签平滑(label smooth)
•backbone的 Bag of Specials (BoS): Mish 激活,跨阶段部分连接(CSP), multi-input加权残差连接(MiWRC)
•检测器的Bag of Freebies (BoF) :CIOU-loss, CMBN, DropBlock正则化, Mosaic数据增强, 自对抗训练,Eliminate grid sensitivity, 对单ground truth 采用多个anchor, 余弦衰减scheduler, 最优超参数, 随机训练shapes
•检测器的Bag of Specials (BoS) :Mish 激活,SPP-Block, SAM-block, PAN路径聚合block, DIou-NMS
4 实验
我们测试了不同训练改进技术对ImageNet(ILSVRC 2012 val)数据集上分类器的准确性的影响,然后测试了MS COCO(test-dev 2017)数据集上检测器的准确性。
4.1 实验设置
在ImageNet图像分类实验中,默认的超级参数如下:训练steps为8,000,000; batch size和mini-batch size分别为128和32; 采用多项式衰减(polynomial decay)学习率调度策略,初始学习率为0.1。 warm-up steps为1000; momentum和weight decay分别设置为0.9和0.005。 我们所有的BoS实验都使用与默认设置相同的超参数,并且在BoF实验中,我们添加了额外的50%训练步骤。 在BoF实验中,我们验证了MixUp,CutMix,Mosaic,Bluring数据增强和标签平滑正则化方法。 在BoS实验中,我们比较了LReLU,Swish和Mish激活函数的效果。 所有实验均使用1080 Ti或2080 Ti GPU进行训练。
在MS COCO目标检测实验中,默认的超级参数如下:训练steps为500,500;采用步阶衰减(step decay)学习率调度策略,初始学习率为0.01,并分别在400,000步和450,000步处乘以系数0.1。momentum和weight decay分别设置为0.9和0.0005。所有架构都使用单个GPU以64的batch size执行多尺度训练,而mini-batch-size是8或4,这取决于架构和GPU内存限制。除了使用遗传算法进行超参数搜索实验外,所有其他实验均使用默认设置。遗传算法使用YOLOv3-SPP训练GIoU loss,并对mini-val5k sets搜索300个epochs。对于遗传算法实验,我们采用搜索学习率0.00261,momentum 0.949,IoU阈值0.213来分配ground truth,并使用0.07的loss normalizer。我们已经验证了许多BoF,包括grid sensitivity elimination,mosaic数据增强,IoU阈值,遗传算法,类标签平滑,交叉mini-batch normalization,自对抗训练,余弦退火scheduler,动态mini-batch size,DropBlock,优化的anchors,不同类型的IoU loss。我们还对各种BoS进行了实验,包括Mish,SPP,SAM,RFB,BiFPN和高斯YOLO [8]。对于所有实验,我们仅使用一个GPU进行训练,因此未使用可优化多个GPU的诸如syncBN之类的技术。
4.2 不同特征对分类器训练的影响
首先,我们研究不同特征对分类器训练的影响; 具体来说,如标图7所示,类别标签平滑化的影响,不同数据增强技术的影响,双边模糊,MixUp,CutMix和Mosaic的影响,以及Leaky-ReLU(默认情况下),Swish等不同激活 和Mish的影响。
图7 数据增强的各种方法
在我们的实验中,如表2所示,通过引入以下特征提高了分类器的准确性:CutMix和Mosaic数据增强,类标签平滑和Mish激活。 因此,我们用于分类器训练的BoFbackbone(Bag of Freebies)包括以下内容:CutMix和Mosaic数据增强和类标签平滑。 此外,我们使用Mish激活作为补充选项,如表2和表3所示。
4.3 不同特征对检测器训练的影响
进一步的研究涉及到不同的 Bag-ofFreebies (BoF-detector)对检测器训练accuracy的影响,如表4所示。我们通过研究在不影响FPS的情况下提高检测器精度的各种功能来显着扩展BoF列表:
• S:Eliminate grid sensitivity,方程bx =σ(tx)+ cx; by =σ(ty)+ cy,其中cx和cy始终是整数,在YOLOv3中用于评估目标坐标,因此,对于接近cx或cx + 1值的bx值,需要非常高的tx绝对值。 我们通过将sigmoid乘以超过1.0的factor来解决此问题,从而消除了无法检测到物体的网格的影响。
• M:Mosaic 数据增强-在训练时采用4张图片的mosaic 而不是单张图片
• IT:IoU门限值-为一个ground truth IoU(truth, anchor)> IoU_threshould采用多个anchors
• GA:遗传算法-在网络训练的前10%的时间内采用遗传算法来算则最优的超参数
• LS:类标签平滑-对sigmoid激活采用类标签平滑
• CBN:CmBN-使用跨mini-batch Normalizaiton来收集整个batch处理中的统计信息,而不是在单个mini-batch处理中收集统计信息
• CA:余弦消退scheduler - 正弦训练时调整学习率
• DM:动态mini-batch size -使用随机训练shapes在小分辨率训练期间自动增加mini-batch size
• OA:优化后的 Anchors - 采用优化后的anchor用512 x512的分辨率进行训练
• GIoU, CIOU, DIoU, MSE - 对边界框回归采用不同的loss 算法
进一步的研究涉及不同的Bagof-Specials(BoS-检测器)对检测器训练精度的影响,包括PAN,RFB,SAM,高斯YOLO(G)和ASFF,如表5所示。在我们的实验中,探测器获得了 使用SPP,PAN和SAM时的最佳性能。
4.4 不同backbones 和预训练权重对检测器训练时的影响
进一步,我们研究了不同backbone模型对检测器精度的影响,如表6所示。我们注意到,具有最佳分类精度的模型在检测器精度方面并不总是最佳的。
首先,尽管与CSPDarknet53模型相比,经过不同特征训练的CSPResNeXt50模型的分类准确性更高,但是CSPDarknet53模型在对目标测方面显示出更高的准确性。
其次,将BoF和Mish用于CSPResNeXt50分类器训练可提高其分类精度,但是将这些预训练权重进一步用于检测器训练会降低检测器准确性。 但是,对CSPDarknet53分类器训练使用BoF和Mish可以提高分类器和使用该分类器预训练加权的检测器的准确性。 最终结果是,backbone CSPDarknet53比CSPResNeXt50更适合于检测器。
我们观察到,由于各种改进,CSPDarknet53模型显示出提高检测器精度的更大能力。
4.5 不同mini-batch size对检测器训练的影响
最后,我们分析了使用不同mini-batch size训练的模型获得的结果,结果显示在表7中。从表7中显示的结果中,我们发现在添加BoF和BoS训练策略之后,mini-batch size 对检测器的性能几乎没有影响。 该结果表明,在引入BoF和BoS之后,不再需要使用昂贵的GPU进行训练。 换句话说,任何人只使用常规的GPU也能训练出色的检测器。
5 结果
与其他最先进的目标检测器获得的结果的比较如图8所示。我们的YOLOv4位于帕累托最优曲线上,在速度和准确性方面均优于最快,最精确的探测器。
图8 比较不同目标检测器的速度和准确性。 (一些文章指出,它们的探测器的FPS仅适用于其中一种GPU:Maxwell / Pascal / Volta)
由于不同的方法使用不同架构的GPU进行推理时间验证,因此我们在Maxwell,Pascal和Volta架构的通用GPU上运行YOLOv4,并将它们与其他最新方法进行比较。 表8(见文章)列出了使用Maxwell GPU的帧速率比较结果,它可以是GTX Titan X(Maxwell)或Tesla M40 GPU。 表9(见文章)列出了使用Pascal GPU的帧速率比较结果,可以是Titan X(Pascal),Titan Xp,GTX 1080 Ti或Tesla P100 GPU。 至于表10,它列出了使用Volta GPU的帧率比较结果,可以是Titan Volta或Tesla V100 GPU。