大量的技巧可以提高卷积神经网络(CNN)的准确性:
(1)专用特性:一些特征只针对某一模型,某一问题,或仅为小规模数据集;
(2)通用特性:一些特性,如批处理规范化和残差连接,则适用于大多数模型、任务和数据集。这些通用特性包括加权剩余连接(WRC)、跨阶段部分连接(CSP)、跨小批标准化(CmBN)、自反训练(SAT)和Mish 激活函数。
YOLOv4使用的技巧:
使用新特性:WRC、CSP、CmBN、SAT、Mish 激活函数、Mosaic数据增强、CmBN、DropBlock正规化、CIoU损失,结合这些技巧实现先进的结果。
动机:
(1)性能动机:大多数基于cnn的目标检测器主要只适用于推荐系统,例通过城市摄像机寻找免费停车位,这是由缓慢准确的检测模型执行的,而汽车碰撞预警与快速实时的模型相关。因此需要提高实时目标探测器的准确性。
(2)单GPU训练:最精确的现代神经网络不能实时运行,需要大量的gpu来进行小批量的训练。我们通过创建一个在传统GPU上实时运行的CNN来解决这些问题,而训练只需要一个传统GPU。
这项工作的主要目标是设计一个快速运行的目标探测器,并容易训练和使用。例使用任何传统GPU进行训练和测试都可以实现实时、高质量、令人信服的对象检测结果。
YOLOv4贡献:
(1)开发了一个高效、强大的目标检测模型。使用单个1080 Ti或2080 Ti GPU就能训练一个超级快速和精确的目标探测器。
(2)验证了在检测器训练过程中,最先进的Bag-of-Freebies 和Bag-of-Specials对目标检测方法的影响。
(3)修改了最先进的方法,使其更有效,更适合于单GPU训练。
现代目标检测器组成:
(1)主干backbone:在ImageNet上预先训练的网络用来特征提取。在GPU平台上运行的检测器,主干可以是VGG、ResNet、ResNeXt或DenseNet。在CPU平台上运行的检测器,主干可以是SqueezeNet、MobileNet或ShuffleNet。
(2)头部head:用来预测物体的类和边界盒的头部。通常分为两类即单阶段目标检测器和两阶段目标检测器。
两阶段目标检测器:最具代表性是R-CNN系列,包括fast R-CNN, faster R-CNN , R-FCN, Libra R-CNN。也可以使两级对象检测器成为无锚对象检测器,如RepPoints。
单级目标探测器最具代表性的有YOLO、SSD、RetinaNet。近年来,无锚单级目标探测器得到了广泛的应用,例CenterNet、CornerNet、FCOS等。
(3)颈部neck:近年来发展起来的目标检测器常常在主干和头部之间插入一些层,这些层通常用来收集不同阶段的特征图----------称之为目标检测器的颈部neck。
通常,一个颈部neck由几个自下而上的路径和几个自上而下的路径组成。具有该机制的网络包括特征金字塔网络(Feature Pyramid Network, FPN)、路径汇聚网络(Path Aggregation Network, PAN)、BiFPN和NAS-FPN。
综上所述,一个普通的物体探测器由以下几个部分组成:
Bag of freebies定义:
通常,传统的目标检测器是离线训练的。研究人员总是希望利用这一优势开发出更好的训练方法,使目标检测器在不增加推理成本的情况下获得更好的精度。这种只改变训练策略或只增加训练成本的方法称为Bag of freebies“免费包”。
Bag of freebies方法:
(1)Bag of freebies方法1:数据增强
目标检测常用的Bag of freebies的方法是数据增强。数据增强的目的是增加输入图像的可变性,使所设计的目标检测模型对不同环境下获得的图像具有更高的鲁棒性。
①像素级别的数据增强:例如,光度畸变和几何畸变是两种常用的数据增强方法,它们有利于对象检测任务。在处理光度失真时,调整图像的亮度、对比度、色调、饱和度和噪声。对于几何畸变,添加了随机缩放、剪切、翻转和旋转。
②模拟遮挡问题进行数据增强:一些从事数据扩充的研究人员将重点放在模拟物体遮挡问题上,在图像分类和目标检测方面取得了较好的效果。例random erase和CutOut可以随机选择图像中的矩形区域,并填充一个随机的或互补的零值。对于hide-and-seek和grid mask ,它们随机或均匀地选择图像中的多个矩形区域,并将其全部替换为零。如果将类似的概念应用于特征图,则有DropOut、DropConnect和DropBlock方法。
③将多幅图像结合在一起进行数据增强:例如,MixUp使用两张图像以不同的系数比率进行相乘和叠加,然后用这些叠加比率调整标签。CutMix是将裁剪后的图像覆盖到其他图像的矩形区域,并根据混合区域的大小调整标签。
④使用style transfer GAN进行数据扩充,有效减少CNN学习到的纹理偏差。
(2)Bag of freebies方法2:解决数据集中语义分布偏差问题:
在处理语义分布偏差问题时,一个非常重要的问题是不同类之间存在数据不平衡的问题。
①两阶段对象检测器:使用硬反例挖掘或在线硬例挖掘来解决。不适用于单级目标检测。
②单阶段目标检测器:focal损来处理各个类之间存在的数据不平衡问题。
(另一个非常重要的问题是,很难用一个one-hot表示法来表达不同类别之间关联程度的关系。这种表示法常用于执行标记。文献提出标签平滑是将硬标签转换为软标签进行训练,使模型更加稳健。为了获得更好的软标签,Islam等人引入了知识蒸馏的概念来设计标签细化网络。)
(3)Bag of freebies方法3:边界框(BBox)回归的目标函数:
传统的目标检测器通常使用均方误差(MSE)直接对BBox的中心点坐标和高度、宽度进行回归,即, {xcenter, ycenter, w, h},或 {xtop_left, ytop_lef t, xbottom_right, ybottom_right}。基于anchor的方法是估计相应的偏移量,例{xcenter of set, ycenter of f set, w of f set,h of f set}和{xtop left of set, ytop left of set,x bottom right of set, ybottom right of fset}。
直接估计BBox中每个点的坐标值,就是把这些点当作自变量,而实际上并不考虑对象本身的完整性。处理这个问题:
①IoU损失:将预测BBox区域的区域和真实BBox区域考虑在内。由于IoU是尺度不变的表示,它可以解决传统方法在计算{x, y, w, h}的l1或l2损耗时,损耗会随着尺度的增大而增大的问题。
②GIoU loss:除了覆盖区域外,还包括了物体的形状和方向。他们提出寻找能够同时覆盖预测BBox和地面真实BBox的最小面积BBox,并以此BBox作为分母来代替IoU损失中原来使用的分母。
③DIoU loss:它额外考虑了物体中心的距离。
④CIoU loss :同时考虑了重叠区域、中心点之间的距离和纵横比。对于BBox回归问题,CIoU具有更好的收敛速度和精度。
Bag of specials定义:
仅增加少量推理成本,却能显著提高目标检测精度的插件模块和后处理方法,称之为Bag of freebies“特价包”。一般来说,插件模块是为了增强模型中的某些属性,如扩大接受域、引入注意机制、增强特征集成能力等。后处理是筛选模型预测结果的一种方法。
Bag of specials方法:
(1)Bag of specials方法1:插件模块之增强感受野
增强感受野的常用模块有SPP、ASPP、RFB。
①改进的SPP模块:起源于空间金字塔匹配(SPM) , SPMs原始方法是将feature map分割成若干个d×d等块,其中d可以是{1,2,3,…,}从而形成空间金字塔,然后提取bag-of-word特征。SPP将SPM集成到CNN中,使用max-pooling操作,而不是bag-of-word操作。由于SPP模块将输出一维特征向量,因此在全卷积网络(FCN)中应用是不可实现的。因此,在YOLOv3的设计中,将SPP模块改进为最大池输出的串联,其内核大小为k×k,其中k = {1,5,9,13}, stride = 1。在本设计中,较大的k×k maxpooling有效地增加了主干特征的接受域。在添加SPP模块的改进版本后,YOLOv3-608在MS COCO对象检测任务上对AP50进行了2.7%的提升,增加了0.5%的额外计算量。
②ASPP模块:与改进后的SPP模块在运算上的差异主要来自于原始的k×k核大小,stride的最大池等于1到几个3×3核大小,扩展比等于k,在扩展卷积运算中stride等于1。
③RFB模块:利用k×k kernel的几个膨胀卷积,膨胀比等于k, stride等于1,得到比ASPP更全面的空间覆盖。RFB仅增加7%的推断时间,使MS COCO上SSD的ap50增加5.7%。
(2)Bag of specials方法1:插件模块之注意力模块
目标检测中常用的注意模块主要分为:
①channel-wise注意力:代表是Squeeze-and-Excitation挤压激励模块(SE)。SE模块可以提高ResNet50在 ImageNet图像分类任务中1% top-1准确率,只会增加2%的计算工作代价,但是在GPU通常会增加推理时间,约10%,所以它更适合用于移动设备。
②point-wise注意力:代表是Spatial Attention Module空间注意模块(SAM)。对于SAM来说,它只需要额外增加0.1%的计算量,就可以在ImageNet图像分类任务中提高ResNet50-SE 0.5% top-1准确率。最重要的是,它完全不影响GPU的推理速度。
(3)Bag of specials方法1:插件模块之特征集成
在特征集成方面,早期的实践是使用跳跃连接或hyper-column将低级物理特征集成到高级语义特征。随着FPN等多尺度预测方法的流行,人们提出了许多融合不同特征金字塔的轻量级预测模块。这类模块包括SFAM、ASFF和BiFPN。
①SFAM:主要思想是利用SE模块在多尺度的拼接特征图上进行信道级重加权。
②ASFF:使用softmax作为点向水平重加权,然后添加不同尺度的特征图。
③BiFPN:提出了多输入加权剩余连接来执行按比例的水平重加权,然后添加不同比例的特征图。
(4)Bag of specials方法2:激活函数
在深度学习的研究中,一些人把重点放在寻找好的激活功能上。一个好的激活函数可以使梯度更有效地传播,同时也不会造成过多的计算开销。
2010年,提出ReLU从本质上解决传统tanh和sigmoid激活函数中经常遇到的梯度消失问题。随后,LReLU、PReLU、ReLU6、标度指数线性单元(SELU)、Swish、hard-Swish、Mish等也被用于解决梯度消失问题。
①LReLU和PReLU:主要目的是解决输出小于0时ReLU的梯度为零的问题。
②ReLU6和hard-Swish:专门为量化网络设计的。
③SELU:针对神经网络的自归一化问题。
④Swish和Mish:都是连续可微的激活函数。
(5)Bag of specials方法3:后处理
①NMS:目标检测中常用的后处理方法是NMS, NMS可以对预测较差的bbox进行过滤,只保留响应较高的候选bbox。NMS试图改进的方法与优化目标函数的方法是一致的。NMS提出的原始方法没有考虑上下文信息,所以在R-CNN中加入了分类的置信分作为参考,按照置信分的顺序,从高到低依次进行贪心NMS。
②soft NMS:考虑了对象的遮挡可能导致带IoU分数的贪婪NMS的信心分数下降的问题。 ③DIoU NMS:在soft NMS的基础上,将中心点距离信息添加到BBox筛选过程中。值得一提的是,由于以上的后处理方法都没有直接引用捕获的图像特征,因此在后续的无锚方法开发中不再需要后处理。
目标:在生产系统和并行计算优化中提高神经网络的运行速度,而不是低计算量理论指标(BFLOP)。提出了实时神经网络的两种选择:
(1)GPU:我们在卷积层使用少量的组(1 - 8):CSPResNeXt50 / CSPDarknet53•
(2) VPU:我们避免使用Squeeze-and-excitement (SE)块,具体来说包括以下模型:EfficientNet-lite /MixNet/ GhostNet / MobileNetV3
架构选择的目标:
目标1:在输入网络分辨率、卷积层数、参数数(filter size2×filters × channel / groups)和层输出数(filters)之间找到最优平衡。
分类来说是最优的参考模型对于检测器来说并不总是最优的。与分类器相比,检测器需要满足以下条件:
目标2:选择额外的块来增加感受野
不同大小的感受野的影响总结如下:
目标3:选择不同的主干层对不同的检测器层(如FPN、PAN、ASFF、BiFPN)进行参数聚合的最佳方法。
YOLOv4架构:
(1)CSPDarknet53主干(backbone):
大量研究表明,在ILSVRC2012 (ImageNet)数据集上的分类方面,CSPResNext50要比CSPDarknet53好得多。然而在MS COCO数据集检测目标方面,CSPDarknet53比CSPResNext50更好。
表显示了CSPResNeXt50, CSPDarknet53,和efficient entnet B3的信息。CSPResNext50只包含16个卷积层3×3,一个425×425的接受域和20.6 M的参数,而CSPDarknet53包含29个卷积层3×3,一个725×725的接受域和27.6 M的参数。表明CSPDarknet53神经网络是两个作为骨干的检测器的最佳模型。
(2)SPP附加模块增加感受野:
在CSPDarknet53上添加了SPP块,因为它显著增加了接受域,分离出了最重要的上下文特性,并且几乎不会降低网络运行速度
(3)PANet路径聚合(neck):
使用PANet作为不同检测层的不同主干层的参数聚合方法,而不是YOLOv3中使用的FPN。
(4)基于锚的YOLOv3头部(head):
为了提高目标检测训练,CNN通常使用以下方法:
(1)激活函数选择:由于PReLU和SELU难训练,而ReLU6是专门为量化网络设计的,因此我们将上述激活函数从候选列表中删除。
(2)reqularization:选择了DropBlock作为regularization方法。
(3)归一化:由于只使用一个GPU的训练策略,所以没有考虑syncBN。
额外的设计和改进:
(1)新的数据增强:
①Mosaic:混合4幅训练图像的数据增强方法。因此4种不同的上下文:混合,而CutMix只混合了2张输入图像。这允许检测正常上下文之外的对象。此外,批处理归一化计算激活统计从4个不同的图像在每一层。这大大减少了对大型迷你批处理大小的需求。
②自对抗训练(SAT):两个阶段。在第一阶段,神经网络改变原始图像而不是网络权值。通过这种方式,神经网络对自己执行一种对抗性攻击,改变原始图像,以制造图像上没有期望对象的假象。在第二阶段,神经网络以正常的方式对这个修改后的图像进行检测。
(2)应用遗传算法选择最优超参数
(3)修改现有的方法,使设计适合于有效的训练和检测
①修改的SAM:将SAM从空间上的注意修改为点态注意
②修改PAN:将PAN的快捷连接替换为拼接
③交叉小批量标准化(CmBN):CmBN表示CBN修改后的版本,如图所示,只在单个批内的小批之间收集统计信息。
YOLOv4包括:
主干(backbone):CSPDarknet53
颈部(neck):SPP , PAN
头(head):YOLOv3
YOLO v4使用:
主干免费包(BoF): CutMix和Mosaic数据增强,DropBlock正则化,类标签平滑
主干专用包(BoS): Mish激活、跨级部分连接(CSP)、多输入加权剩余连接(MiWRC)
检测器免费包(BoF): CIoU loss, CmBN, DropBlock正则化,Mosaic数据增强,自对抗训练,消除网格敏感性,为一个真值使用多个锚,余弦退火调度,最优超参数,随机训练形状
检测器专用包(BoS): Mish激活、SPP-block、SAM-block、PAN路径聚合块、DIoU-NMS
在ImageNet图像分类实验中,默认超参数为:
训练步骤为8,000,000;批大小和小批大小分别为128和32;采用多项式衰减学习率调度策略,初始学习率为0.1; warm-up步长1000;动量衰减为0.9,重量衰减为0.005。所有的BoS实验都使用与默认设置相同的超参数,在BoF实验中,我们添加了额外的50%的训练步骤。在BoF实验中,我们验证了MixUp, CutMix, Mosaic, Bluring数据增强和标签平滑正则化等方法。在BoS实验中,我们测试了LReLU,Swish, Mish激活函数的效果。所有实验均使用1080 Ti或2080 Ti GPU进行训练。
在MS COCO对象检测实验中,默认的超参数为:
训练步骤为500500;采用衰减学习率调度策略,初始学习率为0.01,在400,000步和450,000步分别乘以因子0.1;动量衰减为0.9,权重衰减为0.0005。所有的架构都使用一个GPU来执行批处理大小为64的多尺度训练,而小批处理大小为8或4取决于架构和GPU内存限制。除超参数搜索实验采用遗传算法外,其他实验均采用默认设置。遗传算法利用YOLOv3-SPP进行带GIoU损失的训练,搜索最小值5k集的300个epoch。遗传算法实验采用搜索学习率0.00261、动量0.949、IoU阈值分配ground truth 0.213和损失正态值0.07。我们已经验证了大量的BoF,包括网格敏感性消除、Mosaic数据增强、IoU阈值、遗传算法、类标记平滑、交叉小批量标准化、自对抗训练、余弦退火调度器、动态小批量大小、DropBlock、优化锚,不同类型的IoU损失。我们还对各种BoS进行了实验,包括Mish、SPP、SAM、RFB、BiFPN和Gaussian YOLO。对于所有的实验,我们只使用一个GPU进行训练,所以像syncBN这样的优化多个GPU的技术并没有被使用。
首先,研究了不同特征对分类器训练的影响:
类标签平滑的影响,不同数据增强技术的影响,如双边模糊, MixUp,CutMix和Mosaic的影响,不同的激活的影响,如 Leaky-ReLU (by default), Swish,和Mish。
在我们的实验中,如表2所示,通过引入特征如:CutMix和Mosaic数据增强、类标签平滑、Mish激活等,提高了分类器的准确率。因此,用于分类器训练的主干免费包(BoF)包括以下内容:CutMix和Mosaic数据增强和类标签平滑。此外,使用Mish激活作为补充选项,如表2和表3所示。
进一步的研究关注不同Bag-of-Freebies免费包 (BoF-detector)对检测器训练精度的影响,如表4所示。通过研究不同的特征显著地扩展了BoF列表,在不影响FPS的情况下提高了检测器的准确性:
进一步研究不同backbone模型对检测精度的影响,如表6所示。在检测器精度方面具有最佳分类精度的模型并不总是最佳的。
首先,虽然CSPResNeXt-50的分类精度比CSPDarknet53模型更高,但CSPDarknet53模型在目标检测方面显示出更高的精度。
其次,在CSPResNeXt50分类器训练中使用BoF和Mish可以提高分类精度,但是在检测器训练中进一步使用这些预训练权重会降低检测器的精度。然而,在CSPDarknet53分类器训练中使用BoF和Mish提高了分类器和使用预先训练权重的检测器的准确性。结果表明,基干CSPDarknet53比CSPResNeXt50更适合于检测器。
CSPDarknet53模型由于各种改进而显示出更大的提高检测器准确度的能力。
最后,对不同小批尺寸训练模型的结果进行了分析,结果如表7可以看出,加入BoF和BoS训练策略后,小批量大小对检测器的性能几乎没有影响。这一结果表明,在引入BoF和BoS之后,不再需要使用昂贵的gpu进行训练。换句话说,任何人都只能使用传统的GPU来训练优秀的检测器。
得到的结果与其他最先进的物体探测器的比较如图8所示。我们的YOLOv4位于Pareto最优曲线上,无论是速度还是精度都优于最快最准确的检测器。
由于不同的方法使用不同架构的gpu进行推理时间验证,我们在Maxwell架构、Pascal架构和Volta架构常用的gpu上运行YOLOv4,并与其他最先进的方法进行比较。