YOLO v4 论文:https://arxiv.org/abs/2004.10934
YOLO v4 开源代码:https://github.com/AlexeyAB/darknet
参考图片笔记:https://www.cnblogs.com/pprp/p/12771430.html
Yolov4应用了两个数据增强的方法,一个是马赛克法,一个自对抗训练,前者将四张图片进行拼接处理,简单明了;后者通过注入对抗样本进行训练,从而提升模型对于微小扰动的鲁棒性。【对抗样本在原文中说的是更改原始图像,但具体引入噪声的标准,用什么方法没有提及。】
Yolov4对CBN、SAM、PANet进行了改进。跨mini-batch归一化(CmBN)仅收集单个batch中的mini-batch之间的统计信息;SAM从空间注意改为点注意(图5);PAN的加法替换为串联(图6)。【没有给出和改动前的实验对比数据,原理也没有提及,也许是太明显没必要讲了吗。以下是我的推测:
- Cross-Iteration BN(CBN)也是今年2月提出的,指出小batchsize(<16)会直接降低BN的有效性,在这种情况下利用前k个均值和方差来提高统计质量。从图来看,CmBN处于BN和CBN(k=3)之间,把单个迭代计算(calculate)替换成了多个迭代计算(accumulate),将参与计算的迭代数量限制在一个batch里,很明显做了折中,减少了CBN计算量,另外,在CBN论文中曾提及近似误差的累积使得CBN效果略受影响,CmBN的改进有没有减轻这种累积的可能。
- 去除了SAM中的池化以及特征连接操作,避免了池化操作的信息丢失,注意力从空间层面细化到了点层面,或许会对小目标的检测有帮助。
- 特征融合由特征图相加改为了通道合并【有一种说法是相乘,我不是很明白】,直接结果就是维数的增加,PANet在yolov4的neck部分,连接head yolov3,多维的特征直接输入或许有助于精度的提高。
【这张图总结的太好啦!赞美作者】
0.
许多功能可以提高卷积神经网络(CNN)的准确性。需要在大型数据集上对这些特征的组合进行实际测试,并在理论上证明结果的正确性。某些功能只能在某些模型上运行,而某些功能只能在小型数据集上运行;而某些功能(例如批归一化和残差连接)适用于大多数模型,任务和数据集。我们假设此类通用功能包括加权残差连接(WRC),跨阶段部分连接(CSP),跨小批量标准化(CmBN),自对抗训练(SAT)和Mish激活。我们使用以下新功能:WRC,CSP,CmBN,SAT,Mish激活,马赛克数据增强,CmBN,DropBlockRegularization和CIoUloss,以及使它们达到最新技术水平的组合:MS COCO数据集实时获得43.5%的AP(65.7%的AP50)特斯拉V100的速度约为65 FPS。
1.
大多数基于CNN的物体检测器仅适用于推荐系统。例如,通过慢速精确模型执行通过城市摄像机搜索空闲停车位的过程,而汽车碰撞警告则与快速不准确的模型有关。提高实时物体检测器的准确性,不仅可以将它们用于提示生成推荐系统,还可以用于独立的流程管理和减少人工输入。常规图形处理单元(GPU)上的实时对象检测器操作允许它们以可承受的价格进行大量使用。最精确的现代神经网络无法实时运行,并且需要大量的GPU来进行大型微型批次的训练。我们通过创建CNN来解决此类问题,该CNN在常规GPU上实时运行,并且训练仅需要一个常规GPU。
这项工作的主要目标是设计生产系统中目标检测器的快速运行速度并优化并行计算,而不是低计算量理论指标(BFLOP)。我们希望可以轻松地训练和使用设计的对象。例如,任何使用常规GPU进行训练和测试的人都可以获得实时,高质量和令人信服的对象检测结果,如图1所示。
YOLOv4结果如下:1.我们开发了一种高效的和强大的目标检测模型。它使每个人都可以使用1080 Ti或2080 Ti GPU训练超快速和准确的物体检测器。2.我们在探测器培训期间,验证了最新的免费赠品袋和特殊赠物袋检测方法的影响。3.我们修改了最先进的方法,使它们更有效,更适合单GPU训练,包括CBN [89],PAN [49],SAM [85]等。
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]系列,包括快速R-CNN [18],fasterR-CNN [64],R-FCN [9]和Libra R-CNN [58]。。也有可能使二级对象检测器成为无锚对象检测器,例如RepPoints [87]。对于一级目标检测器,最具代表性的模型是YOLO [61、62、63],SSD [50]和RetinaNet [45]。近年来,开发了无锚的一级物体检测器。这种检测器是CenterNet [13],CornerNet [37、38],FCOS [78]等。近年来开发的对象检测器通常在骨架和头部之间插入一些层,这些层通常用于收集特征图。从不同的阶段。我们可以称其为对象检测器的颈部。通常,颈部由几个自下而上的路径和几个自上而下的路径组成。配备此机制的网络包括功能金字塔网络(FPN)[44],路径聚合网络(PAN)[49],BiFPN [77]和NAS-FPN [17]。除上述模型外,一些研究人员将重点放在直接构建用于对象检测的新主干(DetNet [43],DetNAS [7])或新的整个模型(SpineNet [12],HitDetector [20])上。
总而言之,一个普通的物体检测器由几部分组成:
•输入::图像,斑块,图像金字塔
•骨干::VGG16 [68],ResNet-50 [26],SpineNet [12],EfficientNet-B0 / B7 [75]],CSPResNeXt50 [81],CSPDarknet53 [81]
•颈部::
•其他块:SPP [25],ASPP [5],RFB [47],SAM [85]
•路径聚集块:FPN [44],PAN [49],NAS-FPN [17],全连接式FPN,BiFPN [77],ASFF [48],SFAM [98]
•头::
•密集预测(一阶段):
◦RPN [64],SSD [50],YOLO [61],RetinaNet [45](基于锚)
◦CornerNet [37],CenterNet [13],MatrixNet [60],FCOS [78](无锚)
•稀疏预测(两阶段):
◦fasterR-CNN [64],R-FCN [9],Mask RCNN [23](基于锚)
◦RepPoints [87](无锚)
2.2。一袋免费赠品
通常,传统的物体检测器需要离线培训。因此,研究人员总是喜欢利用这一优势,并开发出更好的训练方法,以使物体检测器获得更好的精度而又不增加推理成本。我们称这些方法为“免费赠品”,仅改变培训策略或仅增加培训成本。数据增强是对象检测方法经常采用的并符合免费赠品袋定义的数据。数据增强的目的是增加输入图像的可变性,从而使设计的物体检测模型对从不同环境获得的图像具有更高的鲁棒性。例如,光度畸变和几何畸变是两种常用的数据增强方法,它们无疑有益于物体检测任务。在处理光度失真时,我们会调整图像的亮度,对比度,色相,饱和度和噪点。对于几何变形,我们添加了随机缩放,裁剪,翻转和旋转。
上面提到的数据扩充方法都是逐像素调整,并且保留了调整区域中的所有原始像素信息。此外,一些从事数据增强的研究人员将重点放在模拟对象遮挡问题上。他们在图像分类和目标检测中取得了良好的效果。例如,随机擦除[100]和CutOut [11]可以随机选择图像中的矩形区域,并填充零的随机或互补值。至于捉迷藏[69]和网格遮罩[6],他们随机或均匀地选择图像中的多个矩形区域,并将它们替换为全零。如果类似的概念应用于特征图,则有DropOut [71],DropConnect [80]和DropBlock [16]方法。另外,一些研究人员提出了使用多个图像一起执行数据增强的方法。例如,MixUp [92]使用两个图像以不同的系数比率进行乘法和叠加,然后使用这些叠加比率来调整标签。对于CutMix [91],它是将裁切后的图像覆盖到其他图像的矩形区域,并根据混合区域的大小调整标签。除了上述方法之外,样式转移GAN [15]还用于数据扩充,这种用法可以有效地减少CNN所学习的纹理偏差。
与上面提出的各种方法不同,其他一些免费赠品方法专用于解决数据集中语义分布可能存在偏差的问题。在处理语义分布偏差问题时,一个非常重要的问题是,不同类之间存在数据不平衡的问题,而该问题通常可以通过以下方式来解决:在两级物体检测器中的负样本挖掘[72]或在线困难样本挖掘[67]。但是样本挖掘方法不适用于一级目标检测器,因为这种检测器属于密集预测体系结构。因此林等。[45]提出了焦点损失,以解决各种类别之间存在的数据不平衡问题。另一个非常重要的问题是,很难用//1*n维内部无关稀疏表示//(one-hot)硬表示来表达不同类别之间的关联度的关系。执行标记时经常使用此表示方案。[73]中提出的标签平滑是将硬标签转换为软标签以进行训练,这可以使模型更健壮。为了获得更好的软标签,Islam等。[33]介绍了知识蒸馏的概念来设计标签优化网络。
最后一袋免费赠品是边界框(BBox)回归的目标函数。传统的物体检测器通常使用均方误差(MSE)直接对BBox的中心点坐标以及高度和宽度执行回归,即{xcenter,ycenter,w,h}或左上角和右下角点,即{xtop left,ytop left,xbottom right,ybottom right}。对于基于锚的方法,将估计相应的偏移量,例如{xcenter的offset,ycenter的offset,w的的offset,h的的offset}和{xtop lef t的offset,ytop left的offset,xbottom right的offset,ybottom right的offset}。但是,直接估计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。特价袋
对于那些仅增加少量推理成本但可以显着提高对象检测准确性的插件模块和后处理方法,我们将其称为“特价袋”。一般而言,这些插件模块用于增强模型中的某些属性,例如扩大接受域,引入注意力机制或增强特征集成能力等,而后处理是用于筛选模型预测结果的方法。
可以用来增强感受野的常用模块是SPP [25],ASPP [5]和RFB [47]。SPP模块起源于空间金字塔匹配(SPM)[39],SPM的原始方法是将特征图分割为几个d×d个相等的块,其中d可以为{1,2,3,...},因此形成空间金字塔,然后提取词袋特征。SPP将SPM集成到CNN中,并使用最大池操作而不是单词袋操作。由于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内核大小,膨胀比等于k,步幅等于在膨胀卷积运算中为1。RFB模块将使用k×k个核的几个膨胀卷积,膨胀比等于k,步幅等于1,以获得比ASPP更全面的空间覆盖。RFB [47]仅花费7%的额外推理时间,即可将MS COCO上SSD的AP50提高5.7%。
物体检测中经常使用的注意力模块主要分为通道注意和点注意,这两种注意模型的代表是挤压和激发(SE)[29]和空间注意模块(SAM)[85]。尽管SE模块可以将ImageNet图像分类任务中的ResNet50的功能提高1%至top-1精度,但其代价仅是将计算工作量增加2%,但在GPU上通常会增加大约10%的推理时间,因此更适合在移动设备中使用。但是对于SAM,它只需要支付0.1%的额外费用,就可以在ImageNet图像分类任务上将ResNet50-SE的top-1准确性提高0.5%。最好的是,它根本不影响GPU上的推理速度。
在特征集成方面,早期的实践是使用跳过连接[51]或超列[22]-hyper-column将低层物理特征集成到高层语义特征。由于诸如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。对于软NMS[1],它考虑到一个问题,即物体的遮挡可能会导致带有IoU分数的贪婪的网络管理系统的置信度得分下降。DIoU NMS [99]开发人员的思维方式是在软NMS的基础上将中心点距离的信息添加到BBox筛选过程中。值得一提的是,由于上述后处理方法均未直接涉及捕获的图像特征,因此在随后的无锚定方法开发中不再需要后处理。
3.方法论
基本目标是在生产系统中使用神经网络以更快的速度运行,并优化并行计算,而不是使用低计算量理论指标(BFLOP)。我们提供了两种实时神经网络选项:
•对于GPU,我们在卷积层中使用少量组(1-8):CSPResNeXt50 / CSPDarknet53
•对于VPU-我们使用分组卷积,但不要使用Squeeze-和激励(SE)块-具体来说,它包括以下模型:EfficientNet-lite / MixNet [76] / GhostNet [21] / MobileNetV3
3.1。架构选择
我们的目标是在输入网络分辨率,卷积层数,参数数(过滤器大小2 *过滤器*通道/组)和层输出(过滤器)数目之间找到最佳平衡。例如,我们的大量研究表明,就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.6 M参数,而CSPDarknet53包含29个卷积层3×3,一个725×725接收场和27.6 M参数。这种理论上的论证,再加上我们的大量实验,表明CSPDarknet53神经网络是两者的最佳模型,是检测器的骨干。
不同大小的接收场的影响总结如下:
•达到对象大小-允许查看整个对象
•达到网络大小-允许查看对象周围的上下文
•超出网络大小-增加图像点和最终激活之间的连接数
我们在CSPDarknet53上面添加了SPP块,因为它显着增加了接收范围,因此将最重要的上下文特征分离出来,并且几乎不会降低网络运行速度。我们使用PANet作为来自不同主干级别,针对不同检测器级别的参数聚合方法,而不是YOLOv3中使用的FPN。最后,我们选择CSPDarknet53骨干网,SPP附加模块,PANet路径聚合瓶颈和YOLOv3(基于锚)头作为YOLOv4的体系结构。将来,我们计划大幅扩展用于探测器的免费赠物袋(BoF)的内容,从理论上讲,它可以解决一些问题并提高探测器的准确性,并以实验方式依次检查每个功能的影响。我们不使用跨GPU批量标准化(CGBN或SyncBN)或昂贵的专用设备。这使任何人都可以在常规图形处理器上重现我们的最新技术成果,例如GTX 1080Ti或RTX 2080Ti。
3.2。BoF和BoS的选择
为了改进对象检测训练,CNN通常使用以下内容:
•激活:ReLU,leaky-ReLU,参数化ReLU,ReLU6,SELU,Swish或Mish
•边界框回归损失:MSE,IoU,GIoU,CIoU,DIoU
•数据扩充:CutOut,MixUp,CutMix
•正则化方法:DropOut,DropPath [36],空间DropOut [79]或DropBlock
•通过均值和方差对网络激活进行归一化:批量归一化(BN)[32],跨GPU批处理规范化(CGBN或SyncBN)[93],过滤器响应规范化(FRN)[70]或跨迭代批处理规范化(CBN)[89]
•跳过连接:残余连接,加权残差连接,多输入加权残差连接或跨阶段局部连接(CSP)
至于训练激活功能,由于PReLU和SELU较难训练,并且ReLU6是专门为量化网络设计的,因此,我们从候选列表中删除了上述激活函数。在重新量化方法中,DropBlock的发布者已将其方法与其他方法进行了详细的比较,并且其正则化方法更胜一筹。因此,我们毫不犹豫地选择了DropBlock作为我们的正则化方法。至于标准化方法的选择,由于我们专注于仅使用一个GPU的训练策略,因此不考虑syncBN。【补课——BN:https://zhuanlan.zhihu.com/p/115949091——CBN:https://arxiv.org/pdf/2002.05712.pdf】
3.3。附加改进
为了使设计的检测器更适合在单个GPU上进行训练,我们进行了附加设计和改进,如下所示:
•我们引入了一种新的数据增强镶嵌和自我专业训练(SAT)方法
•我们选择了最佳超应用遗传算法时的参数
•我们修改了一些现有方法,使我们的设计适合进行有效的训练和检测-修改的SAM,修改的PAN和交叉小批量归一化(CmBN)
马赛克代表了一种新的数据增强方法,该方法混合了4个训练图像。因此,有4种不同的环境混合,而CutMix仅混合2个输入图像。这样可以检测正常上下文之外的对象。此外,批量归一化从每层上的4张不同图像计算激活统计信息。这大大减少了对大批量生产的需求。
自我对抗训练(SAT)也代表了一项新的数据增强技术,该技术可在向前和向后的2个阶段进行操作。在第一阶段,神经网络会更改原始图像,而不是网络权重。以这种方式,神经网络对其自身执行对抗攻击,从而改变原始图像以产生对图像上没有期望物体的欺骗。(非GAN)在第二阶段,训练神经网络以正常方式检测此修改图像上的对象。
CmBN表示CBN修改版本,如图4所示,定义为交叉微型批处理规范化(CmBN)。这仅收集单个批次中的mini-batch之间的统计信息。我们将SAM从空间注意改为点注意,并将PAN的快捷连接替换为串联,分别如图5和图6所示。
3.4。YOLOv4
在本节中,我们将详细介绍YOLOv4。
YOLOv4包括:
•骨干:CSPDarknet53 [81]
•脖子:SPP [25],PAN [49]
•头部:YOLOv3 [63]
YOLO v4的用途:
•骨干袋赠品(BoF):CutMix和Mosaic数据增强,DropBlock正则化,类标签平滑
•骨干专用袋(BoS):激活盲肠,跨阶段部分连接(CSP),多输入加权残余连接(MiWRC)
•赠品袋(BoF),用于检测器:CIoU损失,CmBN,DropBlock正则化,镶嵌数据增强,自我专家训练,消除网格敏感性,对单个地面真实情况使用多个锚点,余弦退火调度器[52],最佳超参数,随机训练形状
•用于检测器的特价商品(BoS):mish激活,SPP块,SAM块,PAN路径聚合块,DIoU-NMS
网络结构【CSPResNeXt50-PANet-SPP-SAM】也是参考了链接中大神的分析
4.
在ImageNet图像分类实验中,默认的超参数如下:训练步骤为8,000,000;批量大小和最小批量大小分别为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进行培训。
6.
我们提供最先进的检测器,其速度(FPS)和准确度(MS COCO AP50 ... 95和AP50)比所有可用的替代检测器都要高。所描述的检测器可以训练并在具有8-16 GB-VRAM的常规GPU上使用,这使得它的广泛使用成为可能。一阶段基于锚的探测器的原始概念已经证明了其可行性。我们已经验证了大量功能,并选择使用这些功能以提高分类器和检测器的准确性。这些功能可以用作未来研究和开发的最佳实践。