论文标题:YOLOv4: Optimal Speed and Accuracy of Object Detection
论文作者:Alexey Bochkovskiy, Chien-Yao Wang, Hong-Yuan Mark Liao
论文地址:https://arxiv.org/abs/2004.10934.pdf
参考的 YOLO V4 翻译博客:https://www.machunjie.com/translate/695.html
YOLO V4 的源码:https://github.com/AlexeyAB/darknet
声明:小编翻译论文仅为学习,如有侵权请联系小编删除博文,谢谢!
小编是一个机器学习初学者,打算认真研究论文,但是英文水平有限,所以论文翻译中用到了Google,并自己逐句检查过,但还是会有显得晦涩的地方,如有语法/专业名词翻译错误,还请见谅,并欢迎及时指出。
如果需要小编其他论文翻译,请移步小编的GitHub地址
传送门:请点击我
如果点击有误:https://github.com/LeBron-Jian/DeepLearningNote
YOLO v4 算法就是在原有 YOLO 目标检测架构的基础上,采用了近些年 CNN 领域中最优秀的优化策略,从数据处理,主干网络,网络训练,激活函数,损失函数等各个方面都有着不同程度的优化,虽没有理论上的创新,但是会受到许许多多的工程师喜欢,各个优化算法的尝试。文章就像目标检测的 trick 综述,效果达到了实现 FPS 与 Precision 平衡的目标检测 new baseline。
论文主要有下面三点贡献:
- 1,开发了一个高效而强大的模型,使得任何人都可以使用一张 1080Ti 或者 2080Ti GPU 去训练一个超级快速和精确的目标检测器。
- 2,验证了一系列的 state-of-the-art 的目标检测器训练方法的影响
- 3,修改了 state-of-the-art 方法,使得他们在使用单个 GPU 进行训练的时候更加有效和适配,包括 CBN,PAN,SAM等。
作者把训练的方法分为了两类:
- 1,Bag of freebies:只改变训练策略或者只增加训练成本,比如数据增强
- 2,Bag of specials:插件模块和后处理方法,他们仅仅增加一点推理成本,但是可以极大地提升目标检测的精度。
1,摘要
有大量的特征来提高卷积神经网络(CNN)的准确率。需要在大数据集下对这张技巧的组合进行实际测试,并对结果进行理论论证要求。某些技巧仅在某些模型上使用和专门针对某些问题,或只针对小规模的数据集;而一些技巧,如批处理归一化,残差连接等,适用于大多数的模型,任务和数据集。我们假设这种通用的技巧包含 Weighted-Residual-Connection(WRC), Cross-Stage-Partial-Connections(CSP),跨小型批量连接(CMBN), Self-adversatial-trainin(SAT)和 Mish-activation。 我们在本文中使用这些新的技巧:WRC,CSP,CMBN,SAT,Mish-activation,Mosaic data augmentation,CMBN,DropBlock 正则化和CIoU损失,以及组合技巧,以达到最好的效果。在MS COCO数据集中的 AP 43.5%(65.7% AP50),在实际应用中,Tesla V100 显卡上上速度可达 65 FPS。Source code is at https://github.com/AlexeyAB/darknet。
1,引言
大多数基于CNN的目标检测器基本上都仅适用于推荐系统。例如:通过城市摄像头寻找免费停车位,它由精确的慢速模型执行,而汽车碰撞警示由快速精度低模型执行。改善实时目标检测器的精度,使其能够不但用于提示生成推荐系统,也用于独立的流程管理和减少人力投入。GPU使得实时目标检测可以以合理的价格进行,最准确的现代神经网络不是实时运行的,需要大量的训练的GPU与大的 batch size。我们通过创建一个CNN来解决这样的问题。在传统的GPU上实时生成,而对于这些训练只需要一个传统的 GPU。
这项工作(YOLO-v4)的主要目标是设计一个应用于生产环境中的快速目标检测器,并且进行并行计算优化,而不是刻意去追求理论上的低计算量指标(BFLOP)。同时YOLOv4的作用希望所设计的算法能易于训练和使用。也就是说任何使用传统GPU训练和测试可以实现实时,高质量,有说服力的目标检测结果。YOLOv4 的结果如图1所示。现将我们的贡献总结如下:
- 1,我们构建了一个简单且高效的目标检测模型,该算法降低了训练门槛,这使得普通人员都可以使用 1080Ti 或 2080 Ti GPU 来训练一个超快,准确的(super fast and accurate)目标检测器。
- 2,我们验证了最先进的 Bag-of-Freebies 和 Bag-of-Specials 方法在训练期间的影响。
- 3,我们修改了最先进的方法,并且使其更为有效,适合单GPU训练。包括 CBN【89】, PAN【49】, SAM【85】等,从而使得 YOLO-v4 能够在一块 GPU 上就可以训练起来。
一个检测算法可以理解为:Object detector = backbone + neck + head
Backbone:可以理解为是提取图像特征的部分,由于图像中的浅层特征(low-level)是比较类似的,例如提取边缘,颜色,纹理这些。因此这部分可以很好的借鉴一些设计好并且已经训练好的网络,例如(VGG16, 19, ResNet-50, ResNeXt-101,DarkNet53),同时还有一些轻量级的 backbone(MobileNetV1,2,3, ShuffleNet1,2)。
Neck:这部分大佬的理解是特征增强模块,前面的 backbone已经提取到了一些相关的浅层特征,由这部分对 backbone 提取到的浅层特征(low-level feature)进行加工,增强。从而使得模型学习到的特征是我想要的特征。这部分典型的有(SPP,ASPP in deeplabV3+, RFB,SAM),还有一些(FPN, PAN, NAS-FPN, BiFPN, ASFF, SFAM)。
Head:检测头,这部分就到了算法最关键的部分,就是来输出你想要的结果,例如想得到一个 heatmap,(如在 conternet 中),那就增加一些反卷积层来一层一层反卷积回去。如果想直接得到 Bbox,那就可以接 conv 来输出结果,例如 YOLO,SSD这些。亦或是想输出多任务(mask-RCNN),那就输出三个 head:classification, regression, segmentation(就mask那部分)。
2,相关工作
2.1 目标检测模型
现代目标检测器通常由两部分组成,ImageNet 上预训练的 backbone 和用于预训练的 BBOX 的检测器的 head。对于那些在 GPU 平台上运行的探测器,其 backbone 可以是 VGG【68】, ResNet【26】, ResNeXt【86】, 或 DenseNet【30】。对于那些运行在 CPU 平台上的检测器形式,他们的 backbone 可以是 SqueezeNet【31】, MobileNet【28, 66, 27, 74】,或 ShuffleNet【97, 53】。至于 head 部分,它通常被分为两类:即 One-Stage 目标检测器和 two-stage 目标检测器。最优代表性的 two-stage 检测器是 RCNN【19】系列。包括快速的 R-CNN【18】, Faster R-CNN【64】, R-FCN【9】, Libra R-CNN【58】。也可以做一个 two-stage 目标检测器一个 Anchor-free 目标检测器。如RepPoints【87】。对于One-stage 检测器来说,最代表性的有 YOLO【61, 62, 63】, SSD【50】 RetinaNet【45】。近几年来,Anchor-free one-stage 目标探测器被开发,如 CenterNet【13】, CornerNet【37,38】,FOCS【78】等。近年来发展起来的检测器,往往会在 backbone 和 head 之间插入一些层,这些层用于收集不同阶段的特征图。我们可以称它为检测器的 neck。通常情况下 neck 是由几个 bottom-up paths 和 几个 top-down paths 组成。FPN【44】,PAN【49】, BiFPN【77】,NAS-FPN【17】具有这个机制。
除上述模型外,有的研究者重新构建 backbone(DetNet【43】, DETNAS【7】)或重新构建整个模型(SpineNet【12】, HitDetector【20】)用于目标检测。
总结,通常目标检测模型有如下架构:
2.2 Bag of freebies
什么叫 Bag of Freebies? 字面意思就是免费赠品。在目标检测中是指:用一些比较有用的训练技巧来训练模型,从而使得模型取得更好的准确率但是不增加模型的复杂度,也就是不增加推理(inference)式的计算量(cost)。在目标检测中,提到 bag of freebies,首先会想到的就是 Data augmentation。
本论文中,BoF指的是那些能提升精度而不增加推断时间的技术。
- 1,比如数据增光的方法:图像几何变换,Cutout,grid mask等
- 2,网络正则化的方法:Dropout, DropBlock等
- 3,类别不平衡的处理方法
- 4,难例挖掘方法
- 5,损失函数的设计
通常,传统的目标检测器是离线训练的。因此,研究人员总是喜欢利用这一优势,开发更好的训练方法,使目标检测器在不增加推理成本的情况下获得更好的精度。我们将这些方法称为“免费赠品包”,这些方法仅改变训练策略或仅增加训练成本。目标检测方法通常采用并符合免费赠品包的定义是数据扩充。数据扩增的目的是增加输入图像的可变性。使设计的目标检测模型对从不同环境获得的图像具有更高的鲁棒性。例如,光度失真和几何失真是两种常用的数据扩增方法,他们肯定有利于目标检测任务。在处理光度失真时,我们调整了图像的亮度,对比度,色调,饱和度和噪声。对于几何失真,我们添加随机缩放,裁剪,翻转和旋转。
上面提到的数据扩充方法是所有关于像素的调整,并保留调整后区域中的所有原始像素信息。此外,一些从事数据扩增的研究人员强调模拟物体遮挡问题。他们在图像分类和物体检测方面取得了良好的效果。例如,随机擦除【100】 和 CutOut【11】可以随机选择图像中的矩形区域并填充零的随机或互补值。至于隐藏和查找【69】和网络掩码【6】,他们随机或均匀地选择图像中的多个矩形区域,并将其替换为所有零。如果类似的概念应用于要素地图,则有“Dropout【71】”, DropConnect【80】, DropBlock【16】方法。此外,一些研究者提出将多个图像结合在一起执行数据增强的方法。例如,MixUp【92】使用两个图像以不同的系数比率增和叠加,然后使用这些叠加比率调整标签。至于CutMix【91】,它是将裁剪的图像覆盖到其他图像的矩形区域,并根据混合区域的大小调整标签。除上述方法外,样式传输 GAN【15】还用于数据扩增,这种使用可以有效地减少 CNN 学到的纹理偏差。
MIX-UP:Mix-up 在分类任务中,将两个图像按照不同的比例相加,例如 A*0.1 + B*0.9=C,那么C的 label 就是 [0.1A, 0.9A]。在目标检测中的做法就是将一些框相加,这些 label 中就多了一些不同置信度的框。
Style-transfer GAN:用style-transfer GAN 做数据增强,例如在做街景分割和目标检测的时候,将 GTA-5 的数据做一个 style-transfer,扩充一些数据集。不过更多的是用在了 Domain Adaptation上。
与上述各种方法不同,其他一些免费赠品方法专门用于解决数据集中语义分布可能存在偏差的问题。在处理语义分布偏差问题时,一个很重要的问题是,不同类之间的数据不平衡问题,这个问题往往通过硬负例挖掘【72】或两阶段目标检测器中的联机硬示例挖掘【67】来解决。但实例挖掘方法不适用于一级目标检测器,因为这种检测器属于密集预测架构。因此,Lin 等人【45】提出了解决不同类别之间存在的数据不平衡问题的重点损耗问题。另一个非常重要的问题是,很难表达不同类别与 one-hot 表示的关系。在执行标签时,通常使用此方案。【73】中建议的标签平衡是将硬标签转换为软标签进行训练,这将使模型更加坚固。为了获得更好的软标签,Islam 等人引入了知识蒸馏的概念来设计标签细化网络。
第三个 bag of freebies 就是在 loss function 上进行改动,之前常用的计算 bbox 的loss使用 MSE,现在改为了计算IoU之间的 loss,还有一个叫做 GIoU loss。这里面有一个比较经典的算法就是在 Mask-RCNN 上改动的 Mask scoring RCNN中,这部分的逻辑是这样的:在选择 ROI时,如果按照每个 ROI 的 score 来排序筛选 ROI,会出现一个问题就是,置信度高的 ROI 并不一定 BBOX的位置就准,后来作者尝试了使用 IoU 来筛选 ROI,发现效果要更好。
免费赠品的最后一包是边界框(BBox)回归的目标函数。传统的目标检测器通常使用均方误差(MSE)直接对BBox的中心点坐标和高度和宽度执行回归,即即 {x 居中、y 中心、w、h } 或左上点和右下角,即 {x 左上、左上、x 右下、右下 }。至于基于锚点的方法,它是估计相应的偏移量,例如 [x 中心偏移,y 中心偏移,w偏移,h偏移量} 和 { x 左上偏移量,y 左上偏移量,x 右下偏移量,y 右下角偏移} 。但是,直接估计 BBox 的每个点的坐标值是将这些点视为独立的变量,但实际上不考虑对象本身的完整性。为了更好地处理这一问题,一些研究人员最近提出了 IoU损失【90】, 将预测的的 BBox 区域与真实的 BBox区域的覆盖范围考虑在内。 IoU 损失会计算到 BBox 的四个坐标点,然后连接到生成一个完整的代码。因为 IoU 是一个尺度不变表示。它可以解决当传统方法计算{x, y, w, h} 的 L1 或 L2损失导致尺度增加。最近,一些研究员在不断改善 IoU损失。例如 GIoU损失【65】除覆盖面积也考虑物体的形状和方向,他们建议找到能同时覆盖预测 BBox 和 ground truth BBox的最小面积 BBox,并使用这个 BBox作为分母,以取代IoU损失的分母。至于DIOU损失【99】,它另外还包括考虑物体中心的距离,CIOU损失【99】,另一方面,同时考虑到重叠区域,中心点之间的距离,以及长宽比。CIOU可以在 BBox 回归问题上实现更好的收敛速度和精度。
2.3 Bag of specials
Bag of specials:就是指一些 plugin modules(例如特征增强模块,或者一些后处理),这部分增加的计算量(cost)很少,但是能有效的增加物体检测的准确率,我们将这部分称之为 Bag of specials。这部分插件模块能够增强网络的一些属性,例如增大感受域(ASFF, ASPP, RFB 这些模块),引入注意力机制(有两种,一种是 spatial attention,另一种是 channel attention),增加特征集成能力(FPN, ASFF,BiFPN)。后处理算法是用一些算法来筛选模型预测出来的结果。
BoS 是指那些增加稍许推断代价,但可以提升模型精度的方法。
- 1,比如增加模型感受野的 SPP,ASPP,RFB等
- 2,引入注意力机制 Squeeze-and-Excitation(SE),Spatial Attention Module(SAM)等
- 3,特征集成方法 SFAM, ASFF,BiFPN等
- 4,改进的激活函数 Swish, Mish等
- 5,后处理方法如 Soft NMS,DIOU NMS等
对于那些插入模块和后期处理方法只会增加少量的推理成本,但可显著提高目标检测的准确率,我们称其为“Bag of specials”,一般来说,这些插入模块是用来增强某些属性的,如扩大感受野,引入注意力机制或增强特征整合能力等,而后处理是一种筛选模型预测结果的方法。
增大感受野
可用于扩大感受野的模块有 SPP【25】, ASPP【5】, RFB【47】。SPP模块起源于 Spatial Pyramid Match(SPM)【39】,而SPMs 的原始方法是将特征图分割成几个 d*d 等量的块,其中 d 可以是{1, 2, 3, ....},从而形成空间金字塔,然后提取 Bag-of-word 特征。SPP将 SPM集合成CNN并使用 最大池化操作而不是 Bag-of-word 运算,由于 He 等人提出的 SPP模块【25】将输出一维特征向量,而不可能应用于全卷积网络(FCN)中。因此,在YOLOv3的设计[63]中,Redmon和Farhadi改进了YOLOv3的设计将SPP模块改进为融合k×k核的max-pooling输出,其中k = {1,5,9,13},并且步长等于1。在这种设计下,一个相对较大的k×k有效地增加了backbone的感受野,增加了 SPP模块的改进版后,YOLOv3-608 在 MS COCO上 AP 50 提升 2.7%,但是要付出 0.5%的额外计算成本。ASPP[5]模块和改进后的SPP模块在操作上的区别是主要由原来的步长1、k×k核的max-pooling到几个3×3核的max-pooling、空洞率为k步长1的空洞卷积。RFB模块是使用几个k×k核的空洞卷积,空洞率为k,步长为1以获得比ASPP更全面的空间覆盖率。RFB[47]只需额外增加7%推理时间却在MS COCO上提升SSD的AP50 5.7%。
引入注意力机制
在目标检测中经常使用的注意力模块,通常分为 channel-wise 注意力和 point-wise 注意力。代表模型是 SE【29】和 SAM(Spatial Attention Module )【85】。虽然SE模块可以提高 ReSNet50 在 ImageNet 图像分类任务 1% top-1 准确率而计算量增加 2%,但是在 GPU上,通常情况下,它将增加推理时间的 10% 左右,所以更适合用于移动端。但对于 SAM,它只需要额外 0.1% 计算量提高 ResNet50-SE 0.5% Top-1 精度,且它完全不影响 GPU上的推理速度。
特征融合或特征集成
在特征融合方面,早期的做法是 Skip connection【51】或 hyper-column 【22】来融合低级和高级特征。由于 FPN 等多尺度预测方法已成为流行,许多轻量级模块集成了不同的特征金字塔。包括SFAM【98】, ASFF【48】, BiFPN【77】。SFAM的主要思想是利用 SE 模块在多尺度叠加特征图上来执行 channel-wise 级别的 re-weighting。至于 ASFF,它用 softmax 作为点级别重量化,然后添加不同比例的要素贴图。在 BiFPN 中,建议多输入加权残联执行比例级重新加权,然后添加不同比例的特征映射。
激活函数
在深度学习的研究中,有人注重于寻找好的激活函数。一个好的激活函数可以使梯度更有效的传播,也不会造成太多的额外计算成本。2010年,Nair and 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其主要目的是:是为了解决梯当输出小于零时,ReLU的梯度为零。至于ReLU6 和 Hard-Swish,它们是专为量化网络设计。对于自归一化的神经网络,提出了SELU的激活函数满足子归一化目的。有一点需要注意的是,Swish和Mish都是连续可微激活函数。
后处理
在基于深度学习的目标检测中最常用的后处理方法常用的是 NMS,它可以用于过滤那些预测错误的 BBoxes,并仅保留响应较高的候选 BBox。NMS尝试改进的方式与优化目标函数的方法一致。NMS提出的原始方法不考虑上下文信息,因此 Girshick等人【19】在 R-CNN中添加了分类置信度分数作为参考,并考虑置信度分数的顺序,以高分到低分的顺序进行贪婪的 NMS。至于 soft NMS【1】, 它考虑的问题,对象的遮挡可能会导致在贪婪的 NMS 与 IOU 分数的置信度分数下降的问题。DIOU NMS【99】开发人员的思维方式是在 soft NMS 的基础上将中心点距离的信息添加到 BBox 筛选过程中。值得一提的是,由于上述后处理方法没有一种直接是指捕获的图像特征,因此在后续开发无锚方法时不再需要后处理。
3,方法论
基本目标是加速神经网络的运行速度,在生产系统中优化并行计算,而不是低计算量理论指标(BFLOPS),我们提出了两种实时神经网络的选项。
- 对于 GPU, 我们在卷积层中使用少量组(1~8): CSPResNeXt50 / CSPDarknet53
- 对于 VPU, 我们使用分组卷积,但是不使用SE块,具体来说包含下面几个模块:EfficientNet-lite / MixNet [76] / GhostNet [21] . MobileNetV3。
CSPDarkNet-53 包含 29 个卷积层, 725*725 的感受野,27.6M 参数。
3.1 架构选择
我们的目标是在输入网络分辨率,卷积层数,参数编号(滤波器大小 2 * + 滤波器 + 通道 / 组)和图层输出层(筛选器)之间寻找最佳平衡。例如,我们的大量研究表明,在 ILSVRC 2012(ImageNet) 数据集【10】上,CSPResNext50 比 CSPDarkNet53 要好的多。但是,相反,在检查 MS COCO 数据集【46】上的对象方面,CSPDarknet53 优于 CSPResNeXt50。
下一个目标是选择其他模块,以增加感受野和不同主干级别不同骨干级别参数聚合的最佳方法:例如 FPN, PAN, ASFF,BiFPN。
最佳分类的参考模型并不总是检测器的最佳模型。与分类器相比,检测器需要以下操作:
- 1,更高的输入网络大小(分辨率)——用于检测更多的小尺寸目标
- 2,更多的层——随着输入网络尺寸的增大而获得更大的感受野
- 3,更多的参数——更大的模型容量来检测单幅图像中不同尺寸的目标
假设,我们可以假定一个感受野大小的模型(具有较多的卷积层 3*3)和更多的参数应作为主干。表 1 显示了 CSPResNeXt50, CSPDarkNet53 和高效网络 B3 的信息。CSPResNeXt50 仅包含 16 个卷积层 3*3, 425*425 感受野和 20.6M 参数, CSPDarkNet53 包含 29 个卷积层 3*3, 725*725 感受野和 27.6 M 参数。这一理论论证,加上我们的大量实验,表明 CSPDarkNet53 神经网络是两者作为检测器骨干的最佳模型。
不同大小的感受野的影响总结如下:
- 1,最多到对象大小——允许查看整个对象
- 2,最多网络大小——允许查看对象周围的上下文
- 3,超过网络大小——增加图像点和最终激活之间的连接数
我们在CSPDarkNet53 上添加 SPP块,因为它显著增加了感受野,分离出最重要的上下文功能,并且几乎不降低网络操作速度。我们使用 PANet 作为不同检测器级别的不同骨干级参数聚合方法,而不是 YOLOV3 中使用的 FPN。
最终,我们选择 CSPDarkNet53 作为主干网络,SPP附加模块,PANet路径聚合颈部和 YOLOv3(基于锚)头作为 YOLOv4 的体系结构。
今后,我们计算大幅扩展检测器免费赠品包(BoF)的含量,理论上可以解决一些问题,提高检测器的精度,并按照顺序以实验方式检查每个功能的影响。
我们不使用跨 GPU 批处理规范化(CGBN 或 SyncBN)或昂贵的专用设备。这允许任何人在传统的图形处理器上重现我们最先进的结果,例如GTX 1080Ti 或 RXT 2080Ti。
3.2 BoF 和 BoS 的选择
为了改善目标检测训练,CNN通常会使用以下内容:
关于训练激活功能,因为 PReLU 和 SELU 更难训练,并且 ReLU6 是专门为量化网络设计的,因此我们从候选列表中删除了上述激活功能。在规则化方法中,发布 DropBlock 的人将自己的方法与其他方法进行了详细的比较,其正则化方法赢得了很多。因此,我们毫不犹豫的选择 DropBlock 作为我们的正则化方法。至于正则化方法的选择,由于我们专注于只是有一个 GPU 的训练策略,因此不考虑 syncBN。
3.3 额外的提升
为了使设计的检测器更适合于单GPU的训练,我们进行了如下其他设计和改进:
- 1,我们介绍了一种新的数据扩展马赛克和自我对抗训练(SAT)的方法
- 2,在应用遗传算法时,我们选择最佳的超参数
我们修改了一些外在方法,使我们的设计适合高效的训练和检测——修改的 SAM,修改的 PAN 和交叉微型批处理正则化(CMBN)。
马赛克是一种新的数据扩展方法,它混合了 4 个训练图像。因此,四个不同的上下文混合,而 CutMix 只混合 2 个输入图像。这允许检测其正常上下文之外的对象。此外,批处理规范化计算每个层上 4 个不同图像的激活统计信息。这显著减少了对大量小型批次尺寸的需求。
自对抗训练(SAT)还代表一种新的数据扩增技术,可在 2 个向前向后阶段允许。在第一阶段,神经网络更改原始图像而不是网络权重。通过这种方式,神经网络对自身执行对抗攻击,更改原始图像以创建映象上没有对象的欺骗。在第二阶段,神经网络被训练以正常方式检测此修改图像上的对象。
CMBN 表示 CBN 修改版本,如图4所示,定义为交叉小批量规范化(CMBN)。这仅仅在单个批处理中的微型批处理之间收集统计信息。
我们从空间上的注意力到点注意力来修改 SAM,并将 PAN 的快捷方式连接改为串联,如图5 和 图 6 所示。
BN 是对当前 mini-batch 进行归一化。CBN 是对当前以及当前往前数 3 个 mini-batch 的结果进行归一化,本文提出的 CmBN 则仅仅是在这个 Batch 中进行累积。在实验中,CmBN 要比 BN高出不到一个百分点。
3.4 YOLOV4
在这一节,我们将详细阐述 YOLOv4的细节。
YOLOv4 使用了:
- 1,主干免费赠品袋(BoF):CutMix 和 马赛克数据扩增,DropBlock正则化,类标签平滑。
- 2,主干专用袋(BoS):Mish激活,跨阶段部分连接(CSP),多输入加权剩余连接(MiWRC)
- 3,用于检测器的免费赠品袋(BoF):CIOU损失,CMBN,DropBlock正则,马赛克数据扩增,自我对抗训练,消除网络灵敏度,使用多个锚点作为单一的ground truth,Cosin退火调度程序【52】,最佳超参数,随机训练形状
- 4,用于检测器的特有包(BoS):Mish 激活,SPP块,PAN路径聚合块,DIoU-NMS
4,实验
我们测试了不同的训练改进的影响。包括(ILSVRC 2012 val)ImageNet 数据集分类准确性,然后是 MS COCO(test-dev 2017) 数据集的检测准确性。
4.1 实验设置
在 ImageNet 的图像分类实验中,默认超参数如下:训练步数8 000 000;batch size和mini-batch size为128和32;polynomial decay learning rate scheduling strategy 初始学习率为0.1的调度策略。warm-up steps为1000;momentum and weight decay分别设定为0.9和0.005。我们所有的BoS实验中使用的超参数为默认设置,而在BoF实验中,我们增加了一个额外的50%的训练步数。在BoF实验中,我们验证 MixUp, CutMix, Mosaic, Bluring数据增强、和label smoothing regularization方法。在BoS的经验中我们比较了LReLU、Swish和Mish的效果。所有的实验都是用1080Ti或2080 Ti GPU。
整理一下在 ImageNet 图像分类实验中,默认的超参数是:
- training steps:8000,000
- batch size:128
- mini-batch size:32
- polynomial decay learning rate:initial learning rate 0.1
- warm-up steps:1000
- momentum:0.9
- weight decay:0.005
- BoF实验中,额外增加50%的training steps
在 MS COCO 目标检测实验中,默认参数如下:训练步长为 500,500; the step decay learning rate scheduling strategy 是采用初始学习率为 0.01, 并分别在 40万步 和 45 万步时乘以系数 0.1, momentum and weight decay 分别设置为 0.9 和 0.0005。所有架构执行多尺度训练的都使用单 GPU,batch size 64,mini-batch size 是 8 或 4,取决于架构和 GPU显存容量限制。除了超参数搜索使用遗传算法,所有其他实验使用默认设置。遗传算法实验使用 YOLOv3-SPP 以 GIoU损失进行训练,对 min-val 5k 数据搜索 300 轮。我们采用搜索过的学习率 0.00261,动量 0.949,IoU阈值对 ground truth 为 0.213,loss normalizer 为 0.07。我们已经验证了大量的 BoF,包括 grid sensitivity elimination, mosaic data augmentation, IoU threshold, genetic algorithm,class label smoothing, cross mini-batch normalization, self adversarial training, cosine annealing scheduler, dynamic mini-batch size, DropBlock, Optimized Anchors, different kind of IoU losses。我们还对各种BoS验证,包括Mish、SPP、SAM、RFB、BiFPN、BiFPN和Gaussian YOLO[8]。对于所有的实验,我们只使用一个GPU训练,因此,诸如syncBN这样的技术可以优化多GPU训练并未使用。
在MS COCO目标检测实验中,默认的超参数是:
- training steps:500,500
- step decay learning rate:0~399,999 steps ,learning rate 0.1;400,000~449,999 steps,learning rate 0.01;450,000~500,500 steps, learning rate 0.001
- momentum:0.9
- weight decay:0.0005
- batch size:64
- mini-batch size:8 or 4
除了使用遗传算法寻找最优超参数的实验,其他全部使用默认参数。
4.2 不同技巧对分类训练中的影响
首先,我们研究了不同技巧对分类训练的影响;具体而言,Class label smoothing,不同的数据增强的影响,bilateral blurring,MixUp, CutMix and Mosaic,如图7所示,以及不同激活函数的影响,如Leaky ReLU(默认情况下),Swish和Mish。
在我们的实验中,如表2所示,引入了以下技巧提高了精度,如CutMix和Mosaic 数据增强,Class label smoothing 和 Mish activation。因此,我们的分类器训练 BOF-backbone(Bag of Freebies)是:CutMix 和 Mosaic data augmentation和Class label smoothing,此外我们还使用Mish activation作为补充方案,如表2和表3所示。
4.3 在检测训练中不同技巧对训练的影响
深入研究考虑不同 Bag-of-Freebies(BoF-detector)在检测器训练中的影响,如表4所示,我们通过研究不影响 FPS 的同时提升精度的技巧显著扩展了 BOF的内容。
进一步研究涉及不同的 Bag-of-Specials(BoS-detector)对探测器训练精度的影响,包括 PAN,RFB,SAM,Gaussian YOLO(G)和 ASFF,如表5所示,在我们的实验中,当使用SPP,PAN和SAM 时,检测器获得最佳性能。
4.4 不同backbone 和预训练权重的影响
我们进一步研究不同backbone对精度的影响,如表6所示。我们注意到具有最佳的分类特征精度模型并不总是最好的检测精度。
首先,虽然CSPResNeXt50的分类准确率高于 CSPDarknet53,CSPDarknet53模型在目标检测方面有更高的精度。
第二,使用BoF和Mish对CSPResNeXt50训练,提高了其分类精度,但进一步应用这些预先训练过的权重降低了检测器的精度。然而,使用BoF和Mish用于CSPDarknet53分类器的训练均提高了分类器和检测器的精度。结果是,backbone
CSPDarknet53 比 CSPResNeXt50 更适合用于检测器。
我们观察到,CSPDarknet53 模型显示了更大的能力来提高检测器的精度,这是因为各种改进。
4.5 不同的 mini-batch size 对检测器的影响
最后,我们用模型来分析用不同的 mini-batch size 进行训练,其结果如表 7所示。从表7所示的结果来看,我们发现,在加入 BoF 和 BoS 训练策略后,发现mini-batch size几乎对检测器的每一个batch的检测结果没有任何影响。这一结果表明,在引进了BoF和BoS,它不再需要使用昂贵的GPU进行训练。换句话说,任何人都可以只使用一个传统的GPU来训练一个优秀的探测器。
5, 结果
图8 显示了与其他最先进的目标检测器结果的比较。我们的 YOLOv4位于 Pareto 最佳曲线上,在速度和精度方面优于最快,最精确的检测器。
由于不同方法使用不同体系结构的 GPU进行推理时间验证,因此我们在通常采用的 Maxwell, Pascal 和 Volta 体系解耦的 GPU 上运行 YOLOv4,并将其与其他最先进的方法进行比较。表8 列出了使用 Maxwell GPU 的帧速率比较结果,它可以是 GTX Titan X (Maxwell),Titan Xp, GTX 1080Ti,或 Tesla P100 GPU。至于表10, 它列出了使用 Volta GPU 的帧速率比较结果,它可以是 Titan Volta 或 Tesla V100 GPU。
6,总结
我们提供了最先进的检测器,它比所有可用的替代检测器更快(FPS)和更准确(MS COCO AP50~90 和 AP50)。它所描述的检测器可在具有 8~16 GB-VRAM 的传统 GPU上进行训练和使用,这使得其广泛使用成为可能。一阶锚式检测器的最初概念已证明其可行性。我们已经证明了大量的功能,并选择用于这些功能,以提高分类器和检测器的准确性。这些功能可用作未来研究和发展的最佳实践。