闲谈:
今年初 YOLO 之父Joseph Redmon宣布推出CV界,引起轩然大波,大家纷纷猜测YOLO是否不会再出v4版,退出历史舞台。
今天,YOLOv4重磅发布,作者为俄罗斯开发者 Alexey Bochkovskiy 和两位中国台湾开发者 Chien-Yao Wang、Hong-Yuan Mark Liao
YOLOv4 没有理论创新,而是在原有YOLO目标检测架构的基础上增加了近年CNN改进的众多技术,从数据处理到网络训练再到损失函数,遵行“拿来主义”,加上漂亮的工程实践,打造实现最佳速度与精度平衡的目标检测新基准!在MS COCO 数据集 实现 43.5% AP (65.7% AP50 ), 速度也更快了,在Tesla V100 GPU上 ∼65 FPS!
Abstract:
大量的特征提高卷积神经网络的准确性。 对大型数据集上的特征的组合进行实践测试,并从理论上证明实验结果的正确性。针对特定的问题,一些特征仅在特定模型上运行,或者仅在小规模数据集上运行; 然而某些功能(例如批归一化和残差连接)适用于大多数模型,任务和数据集。 我们假设常见的特征包括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正则化和CIoU loss,并将其中的一部分以实现最新的结果:43.5% 在Tesla V100上以65 FPS的实时速度获得MS COCO数据集的AP(65.7%AP50)。
Source code:https://github.com/AlexeyAB/darknet.
paper:https://arxiv.org/pdf/2004.10934v1.pdf
Introduction:
多数基于CNN的物体探测器在很大程度上仅适用于recommendation systems。 例如,低精度模型已经被用在城市摄像机寻找免费停车位中,而汽车碰撞警告与快速不准确的模型有关。 改善中实时物体检测器的准确性使得它们不仅用于生成提示的recommendation systems,而且也用于独立的进程管理和减少人工投入。 运行在GPU上实时目标检测器可以以合适的价格实现大规模生产。 最准确的现代神经网络不能实时运行并且在小批量训练需要多个GPU。我们利用一个CNN来处理这些问题,并且执行这些实时的检测在一个传统的GPU上,同时训练只需要一个传统的GPU。
这项工作的主要目标是设计生产系统中目标检测器快速运行速度并优化并行计算,而不是低计算量理论指标(BFLOP)。 例如,任何使用常规GPU进行训练和测试的人都可以获得实时、高质量以及可信的目标检测结果。我们的贡献总结如下:
Related work
2.1 Object detection models
作者首先对现有目标检测方法进行了总结,无论是one-stage 、two-stage 还是 anchor free 、anchor based,均包含 Input、Backbone 、Neck、Heads(Dense Prediction或者Sparse Prediction)四部分。
近期的检测器通常由两部分组成,在ImageNet上预先训练的骨干和头部用于预测对象的类和边界框。对于在GPU平台上运行的检测器,backbone网可能是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],更快的R-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]等。j近年来开发的目标探测器经常是在骨干网络和头部网络中插入一些层,间,这些层通常是
用于收集不同阶段的特征图。我们可以称之为物体检测器的颈部。通常颈部是 由几个自下而上的路径和几个自上而下的路径构成。具有该机制的网络包括Feature Pyramid Network (FPN) [44], Path Aggregation Network (PAN) [49], BiFPN [77], and NAS-FPN [17].除了上述模型外,一些研究者还着重于直接构建一个新的主干(DetNet [43], DetNAS[7])或一个新的整体模型(SpineNet [12], HitDetector[20])用于目标检测。
通常目标检测包括以下几个部分:
2.2 Bag of freebies
通常,传统的目标探测器是离线训练的。因此,研究人员总是希望利用这一优势,开发出更好的训练方法,使目标探测器在不增加推理成本的情况下获得更好的精度。我们称这些方法为只改变训练策略或增加训练成本的免费赠品。目标检测方法中经常采用的是数据扩充。数据扩充的目的是增加输入图像的可变性,以至于所设计的目标检测模型对不同环境下获得的图像具有更高的鲁棒性。例如,photometric distortions 和 geometric distortions是两种常用的数据增强方法,它们对目标检测任务有明显的好处。在处理photometric distortions时,我们调整图像的亮度、对比度、色调、饱和度和噪声。对于geometric distortions,我们添加了随机缩放、剪切、翻转和旋转。
上述数据增强方法均为像素级调整,调整区域内的所有原始像素信息均保留。此外,一些从事数据扩充的研究人员把重点放在模拟物体遮挡问题上。在图像分类和目标检测方面取得了良好的效果。例如,random wipe[100]和CutOut[11]可以随机选择图像中的矩形区域,并填充一个随机的或互补的0值。对于hide-and-seek [69]和grid mask [6],它们随机或均匀地选择图像中的多个矩形区域,并将其全部替换为零。如果将类似的概念应用于feature map,则有DropOut[71]、DropConnect[80]和DropBlock[16]方法。此外,一些研究者提出了将多幅图像结合在一起进行数据扩充的方法。例如,MixUp[92]使用两幅图像以不同的系数比率进行相乘和叠加,然后利用这些叠加比率调整标签。CutMix[91]是将裁剪后的图像覆盖到其他图像的矩形区域,并根据混合区域的大小调整标签。除了上述方法外,style transfer GAN[15]也被用于数据扩充,这样的使用可以有效的减少CNN学习到的纹理偏差。
不同于上面提出的各种方法,还有一些其他的免费赠品方法是专门用来解决的数据集中可能存在的语义分布问题有偏见。在处理语义分布偏差问题时,语义分布偏差是一个很重要的问题:不同类之间的数据不平衡,以及这个问题常通过难例样本挖掘[72]或在两阶段目标检测中的在线难例样本挖掘[67]。但样本挖掘方法不适用于单级目标检测,因为这种类型的检测属于稠密预测结构。因此,林[45]等人提出了焦点损失函数来解决这一问题不同类别之间存在的数据不平衡。另一个非常重要的问题是,它是难以表达的带有那one-hot 表示的不同分类之间的关联程度。这种表示法常用于执行标记。。文献[73]提出的标签平滑是对硬标签的转换变成软标签进行训练,这样可以使模型更完善健壮。为了获得更好的软标签,Islam等人[33]将知识蒸馏的概念引入到设计中标签细化网络。
最后一个freebies是边界盒(BBox)回归的目标函数。传统的目标检测器通常使用均方误差(Mean Square Error, MSE)直接对BBox的中心点坐标和高度、宽度进行回归,即或左上点和右下点,即
。对于基于锚的方法,是对相应的偏移量进行估计,
。但是,直接估计BBox中每个点的坐标值,就是把这些点当作自变量,而实际上并不考虑对象本身的完整性。为了更好地处理这个问题,一些研究者最近提出了IoU损失[90],将预测的BBox区域的覆盖范围和地面真实BBox区域考虑在内。IoU的丢包计算过程通过执行带有ground truth的IoU,触发BBox的四个坐标点的计算,然后将生成的结果连接成一个完整的代码。由于IoU是一种尺度不变的表示,它解决了传统方法在计算fx、y、w、hg的l1或l2损耗时,损耗随尺度增大而增大的问题。最近,一些研究人员继续改进 Giou loss 。例如GIoU loss[65],除了覆盖区域外,还包括了物体的形状和方向。他们提出寻找能够同时覆盖预测的BBox和ground truth BBox的最小面积BBox,用这个BBox作为分母来代替IoU损失中原来使用的分母。对于DIoU loss[99],它额外考虑了物体中心的距离,而CIoU loss[99],同时考虑了重叠区域、中心点之间的距离和长宽比。在BBox回归问题上,CIoU具有较好的收敛速度和精度。
2.3 2.3. Bag of specials
对于那些仅增加少量推理消耗,却能显著提高目标检测精度的插件模块和后处理方法,我们称之为特殊bags。这些插件模块一般用于增强模型中的某些属性,如扩大感受野、引入注意机制、增强特征聚合能力等,后处理是筛选模型预测结果的一种方法。
可以用来增强感受野的常用组件有SPP[25]、ASPP[5]和RFB[47]。SPP组件源于空间金字塔匹配(SPM) [39], SPMs原始方法是将特征图分割成若干个d *d 等大的块,其中d可以为1,2,3....,从而形成空间金字塔,然后提取bag-of-word特征。SPP将SPM集成到CNN中,使用max-pooling操作代替bag-of-word操作。由于He等人提出的SPP模块会输出一维特征向量,因此在全卷积网络(FCN)中应用是不可行的。因此,在YOLOv3[63]的设计中,Redmon和Farhadi将SPP模块改进为最大池输出与内核大小 k *k级联,其中k = 1,5,9,13g,步长等于1。在本设计中,较大的k*k 最大池化有效地增加了骨干特征的感受域。在添加SPP模块的改进版本后,YOLOv3-608在MS COCO对象检测任务上对更新AP50了2.7%,增加了0.5%的额外计算量。ASPP[5]模块与改进后的SPP模块在运算上的区别主要体现在原始的 k*k内核大小上,stride的最大池大小为1*1到几个3*3个内核大小,膨胀率为k,扩展卷积运算的stride为1。RFB模块是利用k*k内核的几个空洞卷积,膨胀率为k, 步长等于1,得到比ASPP更全面的空间覆盖。RFB[47]只需额外花费7%的推理时间,就可以将MS COCO上SSD的AP50增加5.7%。
在目标检测中经常使用的关注是模块主要分为两种:通道和点,这两种注意模型的代表分别是Squeeze-and-Excitation (SE) [29] and Spatial Attention Module (SAM) [85]。尽管SE模块可以提升了ResNet50在 ImageNet图像分类任务中1%top-1准确率的仅增加2%的计算量,但是在GPU通常会增加推理时间约10%,所以它更适合用于移动设备。但是对于SAM,它只需要额外花费0.1%的计算量,它可以提高ResNet50-SE在ImageNet图像分类任务上的0.5% top-1准确率。最重要的是,它完全不影响GPU上的推理速度。
在特征融合方面,早期的实践是使用跳跃连接[51]或超列[22]将低级物理特征融合到高级语义特征。随着FPN等多尺度预测方法的流行,人们提出了许多融合不同特征金字塔的轻量级模型。这类模块包括SFAM[98]、ASFF[48]和BiFPN[77]。SFAM的主要思想是利用SE模块对多尺度的拼接特征图进行通道权重更新。对于ASFF,它使用softmax作为点向水平上权重更新,然后添加不同尺度的特征映射。在BiFPN中,提出了多输入加权残差来执行比例级权重更新,然后加入不同尺寸的特征映射。
在深度学习的研究中,一些人把重点放在寻找好的**函数。一个好的**函数可以使梯度更有效地传播,同时也不会造成过多的计算消耗。2010年,Nair和Hinton[56]提出ReLU,从本质上解决了传统tanh和sigmoid**函数中经常遇到的梯度消失问题。随后,LReLU[54]、PReLU[24]、ReLU6[28]、Scaled Exponential Linear Unit (SELU)[35]、Swish[59]、hard-Swish[27]、Mish[55]等也被用于解决梯度消失问题。 LReLU和PReLU的主要目的是解决输出小于0时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筛选过程中。值得一提的是,由于以上的后处理方法都不直接引用捕获的图像特征,因此在后续的无锚方法开发中不再需要后处理。