今年初 YOLO 之父Joseph Redmon宣布推出CV界,引起轩然大波,大家纷纷猜测YOLO是否不会再出v4版,退出历史舞台。
今天,YOLOv4重磅发布,作者为俄罗斯开发者 Alexey Bochkovskiy 和两位中国台湾开发者 Chien-Yao Wang、Hong-Yuan Mark Liao。
了解:https://mp.weixin.qq.com/s/tjz9Kz7Of8sCnXg0qxNGwQ
献上原论文和源码:
-
原论文:https://pan.baidu.com/s/1_J17pIkPl7KwcR5Sr5HP-w
提取码:acdn -
论文源码:
-
GitHub:https://github.com/AlexeyAB/darknet
-
百度云:https://pan.baidu.com/s/1hEB0JS48Ax85Gnd6IL3new
提取码:rk07 -
权重:https://pan.baidu.com/s/1xB0zUa0zM-4LXq8u5KnQSw
提取码:9mp9 -
结构:
大神画的:https://www.cnblogs.com/pprp/p/12771430.html
自我评价:换了基础结构、增加了SPP-Net提出的金字塔池化、检测时将原有的上下文思想换为上中下文思想。其他的改进太小了。总的来说,创新点不明显,知识点总结/梳理的很好,可以当做学习深度学习部分知识的目标。 -
翻译:
摘要:
有大量的特征被认为可以提高卷积神经网络(CNN)的精度。需要在大型数据集上对这些特征的组合进行实际测试,并对结果进行理论证明。某些特性对特定的模型具有决定性的作用,对于某些特定的问题仅适用于小规模数据集;而某些特性(如批处理规范化和剩余连接)适用于大多数模型、任务和数据集。我们假设这些通用特征包括加权残差连接(WRC)、跨阶段部分连接(CSP)、跨小批量规范化(CmBN)、自对抗训练(SAT)和Mish激活函数。我们使用以下新功能:WRC、CSP、CmBN、SAT、Mish激活、Mosaic数据增强、CmBN、DropBlock正则化和CIoU_loss,并将其中一些功能结合起来,以达到最新的结果:43.5%AP(65.7%AP50)用于MS COCO数据集,在Tesla V100上以65 FPS的实时速度。源代码位于https://github.com/AlexeyAB/darknet
1.引言:
大多数基于CNN的目标检测器大多只适用于推荐系统。例如,通过城市摄像机搜索免费停车位是由低精度模型执行的,而汽车碰撞警告则与高精度模型相关。通过提高实时目标检测的准确性,不仅可以将其用于提示生成推荐系统,还可以用于独立的流程管理并能减少人工输入。常规图形处理单元(GPU)上的实时对象检测器操作允许它们以可承受的价格进行大量使用。最精确的现代神经网络不具备实时性,需要大量的gpu进行小批量的训练。我们通过创建一个CNN来解决这些问题,该CNN在常规GPU上实时运行,并且训练仅需要一个常规GPU。
图1:提出的YOLOv4和其他最新物体探测器的比较。YOLOv4的运行速度比EfficientDet快两倍,性能相当。使YOLOv3的AP和FPS分别提高10%和12%。
本文的主要目的是设计一种快速的目标探测器在生产系统中的工作速度,并对并行计算进行优化,而不是对低计算体积理论指标(BFLOP)进行优化。我们希望所设计的对象可以很容易地训练和使用。例如,任何使用传统GPU进行训练和测试的人都可以获得实时、高质量和令人信服的目标检测结果,如图1所示的YOLOv4结果。我们的贡献总结如下:
1.我们开发了一个高效而强大的目标检测模型。它使得每个人都可以使用1080ti或2080ti GPU来训练一个超快速和精确的目标探测器。
2.我们在探测器训练期间验证了SOTA大礼包(Bag-of Freebies 不增加推理成本的trick)和特价袋 (Bag-of-Specials 增加推理成本的trick)检测方法的影响
3.我们修改了SOTA方法,使它们更有效且更适合单个GPU训练,包括CBN [89],PAN [49],SAM [8]
2.相关工作
2.1目标检测模型
现代检测器通常由两部分组成,一个是在ImageNet数据上经过预训练的骨干网络,另一个是用来预测物体的类别和边界框的头部。对于在GPU平台上运行的那些检测器,其主干可能是VGG [68],ResNet [26],ResNeXt [86]或DenseNet [30]。对于在CPU平台上运行的那些检测器,其主干可以是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]。近年来,开发了无锚的一级物体检测器。这种检测器是CenterNet [13],CornerNet [37、38],FCOS [78]等。近年来开发的对象检测器通常在骨架和头部之间插入一些层,这些层通常用于收集特征图。从不同的阶段。我们可以称其为对象检测器的颈部。通常,颈部由几个自下而上的路径和几个自上而下的路径组成。配备此机制的网络包括特征金字塔(Feature Pyramid Network(FPN))[44], Path Aggregation Network (PAN)[49],BiFPN [77]和NAS-FPN [17]。
除上述模型外,一些研究人员将重点放在直接构建用于对象检测的新主干(DetNet [43],DetNAS [7])或新的整个模型(SpineNet [12],HitDetector [20])上。
综上所述,普通的目标检测器由以下几个部分组成:
-
输入:图像、Patches、图像金字塔
-
骨干网络:VGG16[68]、ResNet-50[26]、SpineNet[12]、EfficientNet-B0/B7[75]、CSPResNeXt50[81]、CSPDarknet53[81]
-
Neck:
- Additional 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:
-
密集预测(一阶段):
(1)RPN[64]、SSD[50]、YOLO[61]、RetinaNet[45](基于锚)
(2)CornerNet[37]、CenterNet[13]、MatrixNet[60]、FCOS[78](无锚)
-
稀疏预测(两阶段):
(1)更快的R-CNN[64]、R-FCN[9]、掩码RCNN[23](基于锚)
(2)RepPoints[87](无锚)
-
2.2Bag of freebies
通常,常规的物体检测器是离线训练的。因此,研究人员总是喜欢利用这一优势,并开发出更好的训练方法,以使物体检测器获得更好的精度而又不增加推理成本。我们称这些方法为“bag of freebies”,即改变训练策略或仅增加训练成本。数据增强是对象检测方法经常采用的并符合bag of freebies定义的数据。数据增强的目的是增加输入图像的可变性,从而使设计的物体检测模型对从不同环境获得的图像具有更高的鲁棒性。例如,光度畸变和几何畸变是两种常用的数据增强方法,它们无疑有益于物体检测任务。在处理光度失真时,我们会调整图像的亮度,对比度,色相,饱和度和噪点。对于几何变形,我们添加了随机缩放,裁剪,翻转和旋转等方式。
上述数据增强方法都是逐像素调整,并且保留了调整区域中的所有原始像素信息。此外,一些从事数据增强的研究者把重点放在模拟物体遮挡问题上。在图像分类和目标检测方面取得了良好的效果。例如,随机擦除[100]和CutOut[11]可以随机选择图像中的矩形区域,并填充0的随机值或互补值。至于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]提出了焦点损失来解决各个类别之间的数据不平衡问题。另一个非常重要的问题是,很难使用one-hot来表达不同类别的相关性之间的关系。执行标记时经常使用此表示方案,在[73]中提出的标签平滑将硬标签转换为软标签以进行训练,这可以使模型更健壮。为了获得更好的软标签,Islam等 [33]介绍了知识蒸馏的概念来设计标签细化网络。
最后bag of freebies是边界框(BBox)回归的目标函数。传统的物体检测器通常使用均方误差(MSE)直接对BBox的中心点坐标以及高度和宽度执行回归,即{xcenter,ycenter,w,h}或左上角和右下角点,即{xtop_left,ytop_left,xbottom_right,ybottom_right }。对于anchor-based的方法,将估计相应的偏移量,例如{xcenter偏移量,ycenter偏移量,woffset,hoffset}和{xtop左偏移量,ytop左偏移量,xbottom右偏移量,ybottom右偏移量}。但是,直接估计BBox的每个点的坐标值是将这些点视为独立变量,但实际上并未考虑对象本身的完整性。为了使这个问题得到更好的处理,一些研究者最近提出了IoU损失[90],该方法考虑了预测的BBox区域和地面真实BBox区域的覆盖范围。IoU损失计算过程将通过使用基本事实执行IoU,然后将生成的结果连接到整个代码中,触发BBox的四个坐标点的计算。因为IoU是尺度不变表示,所以可以解决传统方法计算{x,y,w,h}的L1或者L2损失时会随着尺度增加的问题。最近,一些研究人员继续改善IoU损失。例如,GIoU损失[65]除了覆盖区域外还包括对象的形状和方向。他们建议找到可以同时覆盖预测的BBox和地面真值BBox的最小面积BBox,并使用该BBox作为分母来代替最初用于IoU损失的分母。至于DIoU损失[99],它还考虑了对象中心的距离,而CIoU损失[99]同时考虑了重叠区域,中心点之间的距离和纵横比。CIoU可以在BBox回归问题上实现更好的收敛速度和准确性。
2.3. Bag of specials
对于那些只增加少量推理代价却能显著提高目标检测精度的插件模块和后处理方法,我们称之为“bag of specials”。一般来说,这些插件模块是为了增强模型中的某些属性,如扩大接受域、引入注意机制、增强特征集成能力等,后处理是筛选模型预测结果的一种方法。
可以用来增强感受野的常用模块是SPP [25],ASPP [5]和RFB [47]。SPP模块起源于空间金字塔匹配(SPM)[39],SPM的原始方法是将特征图分割为几个d×d个相等的块,其中d可以为{1,2,3,…},从而形成空间金字塔,然后bag-of-word袋特征。SPP将SPM集成到CNN中,并使用最大池化操作而不是bag-of-word。由于He等人提出的SPP模块[25]将输出一维特征向量,在全卷积网络(FCN)中应用是不可行的。因此,在YOLOv3 [63]的设计中,Redmon和Farhadi将SPP模块改进为内核大小为k×k的最大池化输出的级联,其中k = {1、5、9、13},步幅等于1。在这种设计下,相对较大的k×k最大池化有效地增加了骨干特征的接收场。在添加了改进版本的SPP模块之后,YOLOv3-608在MS COCO对象检测任务上将AP50升级了2.7%,而额外的计算费用为0.5%。ASPP [5]模块和改进的SPP模块之间的操作差异主要在于原始k×k内核大小,步幅的最大池化等于1到几个3×3内核大小,dilated ratio等于k,步幅等于在膨胀卷积运算中为1。RFB模块将使用k×k个核的膨胀卷积,膨胀比等于k,步幅等于1,以获得比ASPP更全面的空间覆盖范围。RFB [47]仅需花费7%的额外推理时间即可将MS COCO上SSD的AP50提高5.7%
物体检测中经常使用的注意力模块主要分为channel-wise注意和point-wise注意,这两种注意模型的代表是Squeeze-and-Excitation(SE)[29]和Spatial Attention Module (SAM) [85]。尽管SE模块可以将ImageNet图像分类任务中的ResNet50的功能提高1%至top-1精度,但其代价仅是将计算工作量增加2%,但在GPU上通常会增加大约10%的推理时间,因此更适合在移动设备中使用。但是对于SAM,它只需要0.1%的额外费用,就可以在ImageNet图像分类任务上将ResNet50-SE的top-1准确性提高0.5%。最好的是,它根本不影响GPU上的推理速度。
在特征集成方面,早期的实践是使用t跳跃连接[51]或hyper-column [22]将低层物理特征集成到高层语义特征。由于诸如FPN的多尺度预测方法已变得流行,因此提出了许多集成了不同特征金字塔的轻量级模块。这种模块包括SFAM [98],ASFF [48]和BiFPN [77]。SFAM的主要思想是使用SE模块在多尺度级联特征图上执行通道级重加权。对于ASFF,它使用softmax作为逐点级别的权重,然后添加不同比例的特征图。在BiFPN中,提出了多输入加权残差连接以执行按比例的级别重新加权,然后添加不同比例的特征图。
在深度学习的研究中,有些人专注于寻找良好的激活功能。良好的激活函数可以使梯度更有效地传播,同时不会引起过多的额外计算成本。Nair和Hinton [56]在2010年提出ReLU来基本上解决传统的tanh和S形激活函数中经常遇到的梯度消失问题。随后,LReLU [54],PReLU [24],ReLU6 [28],比例指数线性单位(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],考虑了物体的遮挡可能会导致贪婪的NMS的IoU评分置信度降低的问题。DIoU NMS [99]开发人员的思维方式是在softNMS的基础上将中心点距离的信息添加到BBox筛选过程中。值得一提的是,由于上述后处理方法均未直接涉及捕获的图像特征,因此在随后的anchor-free方法开发中不再需要后处理。
表1:用于图像分类的神经网络参数。
3.方法
其基本目标是神经网络在生产系统中的快速运行和并行计算的优化,而不是使用低计算量理论指标(BFLOP)。我们提出了两种实时神经网络方案:
- 对于GPU,我们在卷积层中使用少量的群(1-8):CSPResNeXt50/CSPDarknet53
- 对于VPU-我们使用分组卷积,但不要使用Squeeze-and-excitement (SE)块-具体来说,它包括以下模型:EfficientNet-lite / MixNet [76] / GhostNet [21] / MobileNetV3
3.1Selection of architecture
我们的**目标是在输入网络分辨率,卷积层数,参数数量(filter size2 * filters * channel / groups)和层输出(过滤器)的数量之间找到最佳平衡。**例如,我们的大量研究表明,就ILSVRC2012(ImageNet)数据集上的对象分类而言,CSPResNext50与CSPDarknet53相比要好得多[10]。但是,相反,在检测MS COCO数据集上的对象方面,CSPDarknet53比CSPResNext50更好。
下一个目标是针对不同的检测器级别从不同的主干级别中选择其他块来增加接收场和参数聚集的最佳方法: FPN,PAN,ASFF,BiFPN。
对于分类最佳的参考模型对于检测器并非总是最佳的。与分类器相比,检测器需要满足以下条件:
- 更高的输入网络规模(分辨率)-用于检测多个小型物体
- 更高的层数-更高的感受范围,以覆盖输入网络不断扩大的规模
- 更多参数–具有更大的模型容量,可在单个图像中检测不同大小的多个对象
假设,我们可以假设一个感受野较大的模型(卷积层数为3×3)和参数较多的模型作为主干。表1显示了CSPResNeXt50、CSPDarknet53和EfficientNet B3的信息。CSPResNext50仅包含16个卷积层3×3、425×425感受野和20.6M参数,CSPDarknet53包含29个卷积层3×3、725×725感受野和27.6M参数。理论证明和大量实验表明,CSPDarknet53神经网络是二者作为探测器骨干的最优模型。
不同大小的感受野的影响总结如下:
- 最大对象大小-允许查看整个对象
- 最大网络大小-允许查看对象周围的上下文
- 超出网络大小-增加图像点和最终激活之间的连接数
我们在CSPDarknet53上添加了SPP块,因为它显著地增加了接收场,分离出最重要的上下文特征,并且几乎没有降低网络运行速度。我们用PANet代替YOLOv3中的FPN,从不同的主干层对不同的检测器层进行参数聚合。
最后,选择CSPDarknet53骨干网、SPP附加模块、PANet path-aggregation neck和YOLOv3(基于锚的)头部作为YOLOv4的体系结构。(重点,网络结构)
未来,我们计划大幅扩展用于探测器的Bag of Freebies(BoF)的内容,从理论上讲,它可以解决一些问题并提高探测器的准确性,并以实验方式依次检查每个功能的影响。
我们不使用跨GPU批量标准化(CGBN或SyncBN)或昂贵的专用设备。这使任何人都可以在常规图形处理器上重现我们的最新技术成果,例如 GTX 1080Ti或RTX 2080Ti。
3.2. Selection of BoF and BoS
为了改进目标检测训练,CNN通常使用以下方法:
- 激活:ReLU、leaky ReLU、parametric ReLU、ReLU6、SELU、Swish或Mish
- 边界框回归损失:MSE、IoU、GIoU、CIoU、DIoU
- 数据增强:剪切、混合、剪切
- 正则化方法:DropOut、DropPath[36]、space DropOut[79]或DropBlock
- 空间DropOut [79]或DropBlock
- 通过均值和方差对网络激活进行归一化:批归一化(BN)[32],Cross-GPU批归一化(CGBN或SyncBN)[93],过滤器响应归一化(FRN)[70]或交叉迭代批归一化(CBN)[89]
- 跳过连接:残留连接,加权残留连接,多输入加权残留连接或跨阶段局部连接(CSP)
至于训练激活函数,由于PReLU和SELU更难训练,并且ReLU6是专门为量化网络设计的,因此我们将上述激活函数从候选列表中移除。在重新量化方法中,发表DropBlock的人详细比较了他们的方法和其他方法,他们的正则化方法赢得了很多。因此,我们毫不犹豫地选择DropBlock作为正则化方法。至于规范化方法的选择,由于我们关注的是一种只使用一个GPU的训练策略,所以不考虑syncBN。
图3:Mosaic代表了一种新的数据扩充方法。
3.3. 其他改进
为了使所设计的检测器更适合单GPU的训练,我们做了如下的额外设计和改进:
- 我们介绍了一种新的数据增强Mosaic, and Self-Adversarial Training (SAT)方法
- 我们在应用遗传算法的同时选择了最佳超参数
- 我们修改了一些现有方法,使我们的设计适合进行有效的训练和检测-改进的SAM,改进的PAN和Cross mini-Batch Normalization(CmBN)
Mosaic表示一种新的数据增强方法,该方法混合了4个训练图像。因此,有4种不同的上下文混合,而CutMix仅混合2个输入图像。这样可以检测正常上下文之外的对象。此外,批量归一化从每层上的4张不同图像计算激活统计信息。这大大减少了对大批量生产的需求。
Self-Adversarial Training (SAT)也代表了一项新的数据增强技术,该技术可在2个向前和向后的阶段进行操作。在第一阶段,神经网络会更改原始图像,而不是网络权重。以这种方式,神经网络对其自身执行对抗攻击,从而改变原始图像以产生对图像上没有期望物体的欺骗。在第二阶段,训练神经网络以正常方式检测此修改图像上的对象。
CmBN表示CBN修改版本,如图4所示,定义为交叉微型批处理规范化(CmBN)。这仅收集单个批次中的迷你批次之间的统计信息。
我们将SAM从空间注意改为点注意,并将PAN的快捷连接替换为串联,分别如图5和图6所示。
图4:跨小批量标准化。
图5:修改过的SAM。
图6:改性平底锅。
3.4. YOLOv4
在本节中,我们将详细介绍YOLOv4。
YOLOv4包括:
- 主干网:CSPDarknet53[81]
- 颈部:SPP[25],PAN[49]
- 头部:YOLOv3[63]
YOLO v4使用:
- Bag of Freebies (BoF) for backbone:CutMix和Mosaic数据增强,DropBlock正则化,类标签平滑
- 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.实验
在ImageNet(ILSVRC 2012 val)数据集上测试了不同训练改进技术对分类器精度的影响,然后在MS-COCO(test dev 2017)数据集上测试了检测器的精度。
4.1实验设置
在ImageNet图像分类实验中,默认的超参数如下:训练步骤为8,000,000;批量大小和最小批量大小分别为128和32;采用多项式衰减学习率调度策略,初始学习率为0.1。预热步骤(warm-up steps)为1000;动量和权重衰减分别设置为0.9和0.005。我们所有的BoS实验都使用与默认设置相同的超参数,并且在BoF实验中,我们添加了额外的50%训练步骤。在BoF实验中,我们验证了MixUp,CutMix,Mosaic,模糊数据增强和标签平滑正则化方法。在BoS实验中,我们比较了LReLU,Swish和Mish激活功能的效果。所有实验均使用1080 Ti或2080 Ti GPU进行训练
在MS COCO对象检测实验中,默认的超参数如下:训练步骤是500,500;采用步阶衰减学习率调度策略,初始学习率为0.01,并分别在400,000步和450,000步处乘以系数0.1。动量和权重衰减分别设置为0.9和0.0005。所有架构都使用单个GPU以64的批量大小执行多尺度训练,而最小批量大小是8或4,这取决于架构和GPU内存限制。除了使用遗传算法进行超参数搜索实验外,所有其他实验均使用默认设置。遗传算法使用YOLOv3-SPP训练GIoU损失,并搜索300个纪元的最小值5k集。对于遗传算法实验,我们采用搜索学习率0.00261,动量0.949,IoU阈值来分配ground truth 0.213,并使用损失归一化器0.07。我们已经验证了大量BoF,包括消除网格敏感度,镶嵌数据增强,IoU阈值,遗传算法,类标签平滑,交叉小批量标准化,自对抗训练,余弦退火调度程序,动态小批量大小,DropBlock,优化锚,不同类型的IoU损失。我们还对各种BoS进行了实验,包括Mish,SPP,SAM,RFB,BiFPN和高斯YOLO [8]。对于所有实验,我们仅使用一个GPU进行训练,因此未使用可优化多个GPU的诸如syncBN之类的技术。
图7:各种数据扩充方法。
表2:BoF和Mish对CSPRESEXT-50分级机精度的影响。
表3:BoF和Mish对CSPDarknet-53分级机精度的影响。
4.2不同特征对分类器训练的影响
首先,我们研究不同特征对分类器训练的影响;具体来说,如图7所示,类别标签平滑化的影响,不同数据增强技术的影响,双边模糊,MixUp,CutMix和Mosaic的影响,以及Leaky-ReLU(默认情况下),Swish等不同激活的影响和Mish。
在我们的实验中,如表2所示,通过引入以下功能提高了分类器的准确性:**CutMix和Mosaic数据增强,类标签平滑和Mish激活。**因此,我们用于分类器训练的BoFbackbone(Bag of Freebies))包括以下内容:CutMix和Mosaic数据增强和类标签平滑。此外,我们使用Mish激活作为补充选项,如表2和表3所示。
表4:免费包消融研究。(CSPResNeXt50面板SPP,512x512)。
4.3不同特征对探测器训练的影响
进一步的研究涉及到不同的Bag-of Freebies(BoF-detector)对探测器训练精度的影响,如表4所示。我们通过研究在不影响FPS的情况下提高探测器精度的各种功能来显着扩展BoF列表:
- S: 消除网格敏感度,公式bx =σ(tx)+ cx,其中cx和cy始终是整数,在YOLOv3中用于评估对象坐标,因此,对于接近c x或cx + 1值的bx值,需要非常高的tx绝对值。基本事实我们通过将sigmoid乘以超过1.0的因数来解决此问题,从而消除了无法检测到物体的网格的影响。
- M:镶嵌数据扩充-在训练过程中使用4幅图像而非单幅图像
- IT:IoU阈值-对单个ground truth IoU(真相,锚点)> IoU阈值使用多个锚点
- GA:遗传算法-使用遗传算法在网络训练的前10%的时间段内选择最佳超参数•
- LS:类标签平滑-使用类标签平滑进行S型激活
- CBN:CmBN-使用交叉mini-batch收集整个批次内的统计信息,而不是在单个mini-batch内收集统计信息
- CA:余弦退火调度程序-在正弦曲线训练期间更改学习率
- DM:动态微型批次尺寸-在小分辨率下自动增加微型批次尺寸使用随机训练形状进行训练
- OA:优化的锚点-使用优化的锚点以512x512网络分辨率进行训练
- GIoU,CIoU,DIoU,MSE-使用不同的损失算法进行有界框回归
进一步的研究涉及不同的Bagof-Specials(BoS-探测器)对探测器训练精度的影响,包括PAN,RFB,SAM Gaussian YOLO 和ASFF,如表5所示。在我们的实验中,探测器获得了使用SPP,PAN和SAM时的最佳性能。
表5:特殊包的消融研究。(尺寸512x512)。
4.4不同骨干和预训练重量对探测器训练的影响
进一步,我们研究了不同主干模型对检测器精度的影响,如表6所示。我们注意到,具有最佳分类精度的模型在检测器精度方面并不总是最佳的。
首先,尽管与CSPDarknet53模型相比,经过不同功能训练的CSPResNeXt50模型的分类准确性更高,但是CSPDarknet53模型在对象检测方面显示出更高的准确性。
其次,将BoF和Mish用于CSPResNeXt50分类器训练可提高其分类精度,但是将这些预训练权重进一步用于检测器训练会降低检测器准确性。但是,对CSPDarknet53分类器训练使用BoF和Mish可以提高分类器和使用该分类器预训练加权的检测器的准确性。
最终结果是,骨干CSPDarknet53比CSPResNeXt50更适合于检测器。我们观察到,由于各种改进,CSPDarknet53模型显示出提高检测器精度的更大能力。
表6:使用不同的分类器预训练权重进行检测器训练(所有其他训练参数在所有模型中都相似)。
4.5不同小批量对检测器训练的影响
最后,我们分析了使用不同小批量大小训练的模型获得的结果,结果显示在表7中。从表7中显示的结果中,我们发现在添加BoF和BoS训练策略之后,小批量大小对检测器的性能几乎没有影响。该结果表明,在引入BoF和BoS之后,不再需要使用昂贵的GPU进行训练。换句话说,任何人都只能使用常规的GPU来训练出色的检测器。
5.结论
图8显示了与其他最先进的目标探测器的比较结果。我们的YOLOv4位于Pareto最优曲线上,在速度和精度方面都优于最快和最精确的检测器。
由于不同的方法使用不同体系结构的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。
图8:不同目标探测器的速度和精度比较。(有些文章只对其中一个gpu的FPS进行了说明:Maxwell/Pascal/Volta)
表8:MS COCO数据集上不同目标探测器的速度和精度比较(testdev 2017)。(此处突出显示FPS 30或更高的实时探测器。我们将结果与batch=1进行比较,而不使用tensorRT。)
表9:MS COCO数据集上不同目标探测器的速度和精度比较(测试开发2017)。(此处突出显示FPS 30或更高的实时探测器。我们将结果与batch=1进行比较,而不使用tensorRT。)
表10:MS COCO数据集上不同目标探测器的速度和精度比较(测试开发2017)。(此处突出显示FPS 30或更高的实时探测器。我们将结果与batch=1进行比较,而不使用tensorRT。)
6.总结
我们提供最先进的探测器,比所有可用的替代探测器更快(FPS)和更精确(MS COCO AP50…95和AP50)。所述检测器可在8-16gb-VRAM的传统GPU上训练和使用,这使得其广泛应用成为可能。一级锚定探测器的最初概念已经证明了它的可行性。我们已经验证了大量的特征,并选择使用这些特征来提高分类器和检测器的精度。这些特性可以作为今后研究和开发的最佳实践。
7.感谢
作者希望感谢格伦Jocher提出的马赛克数据增强、利用遗传算法选择超参数以及解决网格敏感性问题的思想https://github.com/ultralytics/yolov3
文献
略