【论文阅读】目标检测--YOLOv4 论文笔记(翻译+理解)


论文地址: https://arxiv.org/abs/2004.10934

摘要

有许多特征被认为可以提高卷积神经网络(CNN)的准确性。需要在大规模数据集上对这些特征的组合进行实际测试,并对结果进行理论上的解释。一些特征仅适用于某些特定模型和特定问题,或仅适用于小规模数据集;而另一些特征,如批归一化(batch-normalization)和残差连接(residual-connections),则适用于大多数模型、任务和数据集。我们假设这些通用特征包括加权残差连接(Weighted-Residual-Connections, WRC)、跨阶段部分连接(Cross-Stage-Partial-connections, CSP)、跨小批量归一化(Cross mini-Batch Normalization, CmBN)、自对抗训练(Self-adversarial-training, SAT)和Mish激活函数(Mish-activation)。我们使用了一些新特征:WRC、CSP、CmBN、SAT、Mish激活函数、Mosaic数据增强、CmBN、DropBlock正则化和CIoU损失函数,并将其中一些特征组合起来,取得了最先进的结果:在MS COCO数据集上达到了43.5%的平均精度(AP)(65.7% AP50),并在Tesla V100上以约65 FPS的实时速度运行。代码地址:https://github.com/AlexeyAB/darknet

1 引言

大多数基于CNN的目标检测器主要仅适用于推荐系统。例如,通过城市摄像头寻找空闲停车位是由速度较慢但精度较高的模型执行的,而汽车碰撞预警则与速度快但精度较低的模型相关。提高实时目标检测器的准确性,不仅使其能够用于生成提示的推荐系统,还能用于独立的流程管理和减少人工输入。在常规图形处理器(GPU)上运行的实时目标检测器能够以可承受的价格大规模使用。目前最精确的现代神经网络无法实时运行,并且需要大量GPU进行大批量训练。我们通过创建一个在常规GPU上实时运行的CNN来解决这些问题,并且该网络的训练仅需一个常规GPU即可完成。
这项工作的主要目标是设计一个在生产系统中运行速度快的目标检测器,并优化其并行计算能力,而不是追求低计算量的理论指标(BFLOP)。我们希望设计的检测器能够易于训练和使用。例如,任何使用常规GPU进行训练和测试的人都可以实现实时、高质量且令人信服的目标检测结果,如图1中所示的YOLOv4结果。我们的贡献总结如下:
 我们开发了一个高效且强大的目标检测模型。它使得每个人都可以使用1080 Ti或2080 Ti GPU来训练一个超快速且准确的目标检测器。
 我们验证了当前最先进的Bag-of-Freebies和Bag-of-Specials方法在目标检测训练中的影响。
 我们对当前最先进的方法进行了改进,使其更高效且适合单GPU训练,包括CBN [89]、PAN [49]、SAM [85]等。
在这里插入图片描述
图1:提出的YOLOv4与其他最先进目标检测器的对比。YOLOv4的运行速度是EfficientDet的两倍,同时性能相当。YOLOv4将YOLOv3的平均精度(AP)和每秒帧数(FPS)分别提高了10%和12%。

2 相关工作

2.1 目标检测模型

现代检测器通常由两部分组成:一个是在ImageNet上预训练的骨干网(backbone),另一个是用于预测物体类别和边界框的头部(head)。对于运行在GPU平台上的检测器,其骨干网络可以是VGG [68]、ResNet [26]、ResNeXt [86]或DenseNet [30]。对于运行在CPU平台上的检测器,其骨干网络可以是SqueezeNet [31]、MobileNet [28, 66, 27, 74]或ShuffleNet [97, 53]。至于头部部分,通常分为两类,即单阶段目标检测器(one-stage object detector)和两阶段目标检测器(two-stage object detector)。最具代表性的两阶段目标检测器是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]等。近年来开发的目标检测器通常在骨干网络和头部之间插入一些层,这些层通常用于从不同阶段收集特征图。我们可以将其称为目标检测器的颈部(neck)。通常,颈部由若干自底向上(bottom-up)路径和若干自顶向下(top-down)路径组成。采用这种机制的网络包括特征金字塔网络(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]
 颈部(Neck):
 附加模块:SPP [25]、ASPP [5]、RFB [47]、SAM [85]
 路径聚合模块:FPN [44]、PAN [49]、NAS-FPN [17]、全连接FPN(Fully-connected FPN)、BiFPN [77]、ASFF [48]、SFAM [98]
 头部(Heads):
 密集预测(单阶段检测器):
基于锚框:RPN [64]、SSD [50]、YOLO [61]、RetinaNet [45]
无锚框:CornerNet [37]、CenterNet [13]、MatrixNet [60]、FCOS [78]
 稀疏预测(两阶段检测器):
基于锚框:Faster R-CNN [64]、R-FCN [9]、Mask R-CNN [23]
无锚框:RepPoints [87]

2.2 免费技巧包

通常,传统的目标检测器是离线训练的。因此,研究人员总是喜欢利用这一优势,开发更好的训练方法,使目标检测器在不增加推理成本的情况下获得更高的精度。我们将这些仅改变训练策略或仅增加训练成本的方法称为免费技巧包(bag of freebies)。目标检测方法中经常采用的、符合“免费技巧包”定义的是数据增强(data augmentation)。数据增强的目的是增加输入图像的多样性,从而使设计的目标检测模型对从不同环境中获取的图像具有更高的鲁棒性。例如,光度失真(photometric distortions)和几何失真(geometric distortions)是两种常用的数据增强方法,它们无疑对目标检测任务有益。在处理光度失真时,我们调整图像的亮度、对比度、色调、饱和度和噪声。对于几何失真,我们添加随机缩放、裁剪、翻转和旋转等操作。
上述提到的数据增强方法都是基于像素级别的调整,并且调整区域内的所有原始像素信息都被保留。此外,一些从事数据增强的研究人员将重点放在模拟物体遮挡问题上,并在图像分类和目标检测中取得了良好的效果。例如,随机擦除(Random Erase)[100]和CutOut [11]可以随机选择图像中的矩形区域,并用随机值或零值填充。Hide-and-Seek [69]和GridMask [6]会随机或均匀地选择图像中的多个矩形区域并将其替换为零值。如果将类似的概念应用于特征图,则有DropOut [71]、DropConnect [80]和DropBlock [16]等方法。此外,一些研究人员提出了使用多张图像一起进行数据增强的方法。例如,MixUp [92]使用两张图像以不同的系数比例进行乘法和叠加,然后根据叠加比例调整标签。CutMix[91]是将裁剪的图像覆盖到其他图像的矩形区域上,并根据混合区域的大小调整标签。除了上述方法外,风格迁移生成对抗网络(Style Transfer GAN)[15]也被用于数据增强,这种用法可以有效减少CNN学习到的纹理偏差。
与上述提出的各种方法不同,还有一些其他的技巧包致力于解决数据集中语义分布可能存在偏差的问题。在处理语义分布偏差问题时,一个非常重要的问题是不同类别之间可能存在数据不平衡问题,这一问题通常在两阶段目标检测器中使用难例挖掘(hard negative example mining)[72]或在线难例挖掘(online hard example mining)[67]来解决。然而,难例挖掘方法并不适用于单阶段目标检测器,因为这类检测器属于密集预测架构。因此,Lin 等人[45]提出了focal loss方法来处理不同类别之间数据不平衡的问题。另一个非常重要的问题是,使用one-hot硬标签表示法难以表达不同类别之间的关联程度。这种表示方法通常用于执行标注时。[73]中提出的标签平滑(label smoothing)方法将硬标签转换为软标签进行训练,使模型更加鲁棒。为了获得更好的软标签,Islam等人[33]引入了知识蒸馏(knowledge distillation)的概念,设计了标签优化网络(label refinement network)。
最后一个技巧包关于边界框回归目标函数。传统的目标检测器通常使用均方误差(Mean Square Error, MSE)直接对边界框的中心点坐标和高度、宽度(即 {x_center, y_center, w, h})或左上角和右下角坐标(即 {x_top_left, y_top_left, x_bottom_right, y_bottom_right})进行回归。对于基于锚框(anchor-based)的方法,则是估计相应的偏移量,例如{x_center_offset, y_center_offset, w_offset, h_offset}或{x_top_left_offset, y_top_left_offset, x_bottom_right_offset, y_bottom_right_offset}。然而,直接估计边界框每个点的坐标值是将这些点视为独立变量,但实际上并未考虑目标本身的完整性。为了更好地解决这一问题,一些研究者最近提出了IoU损失[90],将预测边界框与真实边界框的重叠区域纳入考虑。IoU损失的计算过程通过计算与GT框的IoU来触发对边界框四个坐标点的计算,并将生成的结果连接成一个整体代码。由于IoU是一种尺度不变的表示方法,它可以解决传统方法在计算{x, y, w, h}的L1或L2损失时,损失会随尺度增大的问题。最近,一些研究者继续改进IoU损失。例如,GIoU损失[65]除了考虑重叠区域外,还将目标的形状和方向纳入考虑。他们提出找到能够同时覆盖预测边界框和GT框的最小区域边界框,并使用该边界框作为分母来替代IoU损失中原本使用的分母。至于DIoU损失[99],它额外考虑了目标中心点的距离,而CIoU损失[99]则同时考虑了重叠区域、中心点之间的距离以及宽高比。CIoU在边界框回归问题上可以实现更好的收敛速度和精度。

2.3 特殊技巧包

对于那些仅略微增加推理成本但能显著提高目标检测精度的插件模块和后处理方法,我们称之为特殊技巧包(bag of specials)。一般来说,这些插件模块用于增强模型的某些属性,例如扩大感受野、引入注意力机制或加强特征整合能力等,而后处理则是一种用于筛选模型预测结果的方法。
常用于增强感受野的模块包括SPP[25]、ASPP[5]和RFB[47]。SPP模块起源于空间金字塔匹配(Spatial Pyramid Matching, SPM)[39],SPM的原始方法是将特征图分割成若干个d×d的等大小块(其中d可以是{1, 2, 3, …}),从而形成空间金字塔,然后提取词袋特征(bag-of-word features)。SPP将SPM集成到CNN中,并使用最大池化操作替代词袋操作。由于He等人[25]提出的SPP模块会输出一维特征向量,无法直接应用于全卷积网络(Fully Convolutional Network, 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模块的主要区别在于操作方式:ASPP将原始的k×k核大小、步长为1的最大池化操作替换为多个3×3核大小、膨胀率(dilated ratio)为k、步长为1的膨胀卷积(dilated convolution)操作。
RFB模块则是使用多个k×k核大小、膨胀率为k、步长为1的膨胀卷积,以获得比ASPP更全面的空间覆盖。RFB[47]仅增加了7%的推理时间,就将SSD在MS COCO上的AP50提升了5.7%。
目标检测中常用的注意力模块主要分为通道注意力(channel-wise attention)和点注意力(point-wise attention),这两种注意力模型的代表分别是Squeeze-and-Excitation (SE) [29] 和Spatial Attention Module (SAM) [85]。尽管SE模块可以在ImageNet图像分类任务中将ResNet50的top-1准确率提高1%,而计算成本仅增加2%,但在GPU上通常会使推理时间增加约10%,因此它更适合用于移动设备。而对于SAM模块,它只需要额外增加0.1%的计算量,就可以在ImageNet图像分类任务中将ResNet50-SE的top-1准确率提高0.5%。最重要的是,它完全不会影响GPU上的推理速度。
在特征整合方面,早期的做法是使用跳跃连接(skip connection)[51]或超列(hyper-column)[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的主要目的是解决ReLU在输出小于零时梯度为零的问题。ReLU6和hard-Swish则是专门为量化网络设计的。而SELU激活函数为了实现神经网络的自我归一化。需要注意的是,Swish和Mish都是连续可微的激活函数。
在基于深度学习的目标检测中,常用的后处理方法是NMS,它可以过滤掉那些对同一目标预测效果较差的边界框,只保留响应较高的候选边界框。NMS的改进方式与优化目标函数的方法一致。最初提出NMS方法没有考虑上下文信息,因此Girshick等人在R-CNN [19]中添加了分类置信度分数作为参考,并根据置信度分数的高低顺序,从高分到低分执行贪心NMS(greedy NMS)。而soft NMS [1]则考虑了物体遮挡可能导致贪心NMS中IoU分数的置信度下降的问题。DIoU NMS [99]的开发者的思路是在soft NMS的基础上,将中心点距离的信息添加到边界框筛选过程中。值得一提的是,由于上述后处理方法都没有直接引用捕获的图像特征,因此在后续无锚框方法的发展中,不再需要后处理。

3 方法

基本目标是实现神经网络在生产系统中的快速运行,并优化并行计算,而不是追求低计算量的理论指标(BFLOP)。我们提出了两种实时神经网络的方案:
 针对GPU:我们在卷积层中使用少量分组(1-8组),例如CSPResNeXt50/CSPDarknet53。
 针对VPU:我们使用分组卷积,但避免使用压缩激励(SE)模块——具体包括以下模型:EfficientNet-lite/MixNet[76]/GhostNet[21]/MobileNetV3。

3.1 架构选择

我们的目标是找到输入网络分辨率、卷积层数、参数数量(卷积核大小²×卷积核数量×通道数/分组数)以及层输出数(卷积核数量)之间的最佳平衡。例如,我们的多项研究表明,在ILSVRC2012(ImageNet)数据集上进行目标分类时,CSPResNext50的表现明显优于CSPDarknet53[10]。然而,相反地,在MS COCO数据集上进行目标检测时,CSPDarknet53的表现优于CSPResNext50 [46]。
接下来的目标是选择额外的模块以增加感受野,并为不同检测器层级选择最佳的参数聚合方法,这些参数来自不同的骨干网络层级:例如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神经网络是两者中更适合作为检测器骨干网络的最优模型。
表1: 图像分类任务中神经网络的参数。
在这里插入图片描述
不同大小感受野的影响总结如下:
 达到目标大小:能够看到整个目标。
 达到网络大小:能够看到目标周围的上下文信息。
 超过网络大小:增加了图像点与最终激活之间的连接数。
我们在CSPDarknet53上添加了SPP模块,因为它显著增加了感受野,分离出最重要的上下文特征,并且几乎不会降低网络的运行速度。我们使用PANet作为从不同骨干网络层级聚合参数的方法,用于不同的检测器层级,而不是YOLOv3中使用的FPN。
最终,我们选择了CSPDarknet53作为骨干网络,SPP作为附加模块,PANet作为路径聚合的颈部结构,以及YOLOv3(基于锚点)的头部结构,作为YOLOv4的架构。
接下来我们计划显著扩展检测器的“免费礼包”内容,理论上可以解决一些问题并提高检测器的准确性,并通过实验逐一验证每个特性的影响。
我们没有使用跨GPU批归一化(CGBN或SyncBN)或昂贵的专用设备。这使得任何人都可以在常规图形处理器(例如GTX 1080Ti或RTX 2080Ti)上复现我们的最先进成果。

3.2 免费技巧包和特殊技巧包选择

为了提高目标检测训练的效果,卷积神经网络通常使用以下方法:
 激活函数:ReLU、Leaky-ReLU、Parametric-ReLU、ReLU6、SELU、Swish或Mish
 边界框回归损失函数:MSE(均方误差)、IoU(交并比)、GIoU(广义交并比)、CIoU(完全交并比)、DIoU(距离交并比)
 数据增强:CutOut、MixUp、CutMix
 正则化方法:DropOut、DropPath[36]、Spatial DropOut[79]或DropBlock
 网络激活值的归一化方法(通过均值和方差):Batch Normalization(BN)[32]、Cross-GPU Batch Normalization(CGBN 或 SyncBN)[93]、Filter Response Normalization(FRN)[70]或Cross-Iteration Batch Normalization(CBN)[89]
 跳跃连接:残差连接、加权残差连接、多输入加权残差连接或跨阶段部分连接(CSP)
在选择训练激活函数时,由于PReLU和SELU较难训练,而ReLU6是专门为量化网络设计的,因此我们将这些激活函数从候选列表中移除。在正则化方法的选择上,DropBlock 的发布者已经详细比较了他们的方法与其他方法,并且 DropBlock 在正则化方法中表现优异。因此,我们毫不犹豫地选择了DropBlock作为我们的正则化方法。至于归一化方法的选择,由于我们专注于使用单GPU的训练策略,因此不考虑SyncBN。

3.3 其他改进

为了使我们设计的检测器更适合在单GPU上进行训练,我们进行了以下额外的设计和改进:
 引入新的数据增强方法:Mosaic和自对抗训练(Self-Adversarial Training, SAT)
 通过遗传算法选择最优超参数
 对现有方法进行改进,使其更适合高效的训练和检测——改进的SAM(空间注意力模块)、改进的PAN(路径聚合网络)以及跨小批量归一化(Cross mini-Batch Normalization, CmBN)
Mosaic是一种新的数据增强方法,它将4张训练图像混合在一起。与CutMix只混合 2张输入图像不同,Mosaic混合了4种不同的上下文信息。这使得模型能够检测到超出其正常上下文范围的目标。此外,BN在每一层上从4张不同的图像中计算激活统计量,这显著减少了对大批量大小的需求。
在这里插入图片描述

图4: Mosaic是一种新的数据增强方法
自对抗训练(SAT)也是一种新的数据增强技术,它在两个前向-后向阶段中运行。在第一阶段,神经网络对原始图像进行修改,而不是调整网络权重。通过这种方式,神经网络对自己执行对抗攻击,修改原始图像以制造图像上没有目标的假象。在第二阶段,神经网络以正常方式训练,以检测这张修改后的图像中的目标。
CmBN是CBN(Cross-Iteration Batch Normalization)的改进版本,如图4所示,定义为跨小批量归一化(Cross mini-Batch Normalization, CmBN)。它仅在一个批次内的小批量之间收集统计信息。
我们对SAM(空间注意力模块)进行了改进,将其从空间注意力改为点注意力,并将PAN(路径聚合网络)的快捷连接替换为拼接操作,分别如图5和图6所示。
在这里插入图片描述
图4: Cross mini-Batch Normalization
在这里插入图片描述

3.4 YOLOv4

在本节中,我们将详细阐述YOLOv4的具体内容。
YOLOv4由以下部分组成:
 Backbone:CSPDarknet53[81]
 Neck:SPP[25]、PAN[49]
 Head:YOLOv3[63]
YOLOv4使用了以下技术:
 Backbone的免费技巧包:CutMix和Mosaic数据增强、DropBlock正则化、类别标签平滑(Class label smoothing)
 Backbone的特殊技巧包:Mish激活函数、跨阶段部分连接(CSP, Cross-stage partial connections)、多输入加权残差连接(MiWRC, Multi-input weighted residual connections)
 Detector的免费技巧包:CIoU损失函数、CmBN、DropBlock正则化、Mosaic数据增强、自对抗训练(Self-Adversarial Training)、消除网格敏感度(Eliminate grid sensitivity)、为单个GT使用多个锚点(Using multiple anchors for a single ground truth)、余弦退火调度器(Cosine annealing scheduler)[52]、最优超参数(Optimal hyper-parameters)、随机训练形状(Random training shapes)
 Detector的特殊技巧包:Mish激活函数、SPP模块、SAM模块、PAN路径聚合模块、DIoU-NMS

4 实验

我们测试了不同训练改进技术对ImageNet(ILSVRC 2012 val)数据集上分类器精度的影响,以及在MS COCO(test-dev 2017)数据集上检测器精度的影响。

4.1 实验设置

在ImageNet 图像分类实验中,默认的超参数如下:训练步数为8,000,000;batch size为128,mini-batch size为32;采用多项式衰减学习率调度策略,初始学习率为 0.1;预热步数为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损失函数,并在min-val 5k数据集上搜索300个周期。在遗传算法实验中,我们采用了搜索到的学习率0.00261、动量0.949、用于分配GT框的IoU阈值0.213以及损失归一化因子0.07。我们验证了大量的BoF方法,包括:消除网格敏感度(grid sensitivity elimination)、Mosaic数据增强、IoU阈值、遗传算法、类别标签平滑、跨小批量归一化、自对抗训练、余弦退火调度器、动态小批量大小、DropBlock、优化锚点、不同类型的IoU损失函数。我们还对多种BoS方法进行了实验,包括:Mish 激活函数、SPP模块、SAM模块、RFB 模块、BiFPN模块、Gaussian YOLO [8]。在所有实验中,我们仅使用单GPU进行训练,因此未使用如syncBN等多GPU优化技术。

4.2 不同特征对分类器训练的影响

首先,我们研究了不同特征对分类器训练的影响;具体包括类别标签平滑的影响、不同数据增强技术的影响(如双边模糊、MixUp、CutMix和Mosaic,如图7所示),以及不同激活函数的影响(如默认的Leaky-ReLU、Swish和Mish)。
在这里插入图片描述
图7:不同的数据增强方法
在我们的实验中,如表2所示,通过引入以下特征,分类器的准确率得到了提升:CutMix和Mosaic数据增强、类别标签平滑以及Mish激活函数。因此,我们用于分类器训练的BoF骨干网络包括以下内容:CutMix和Mosaic数据增强以及类别标签平滑。此外,我们还使用Mish激活函数作为补充选项,如表2和表3所示。
表 2:BoF和Mish对CSPResNeXt-50分类器准确率的影响。
在这里插入图片描述
表 3:BoF和Mish对CSPDarknet-53分类器准确率的影响。
在这里插入图片描述

4.3 不同特征对检测器训练的影响

进一步的研究涉及不同BoF对检测器训练准确率的影响,如表4所示。我们通过研究不同特征大大扩展了BoF列表,这些特征在不影响FPS的情况下提高了检测器的准确率:
 S:消除网格敏感度。在YOLOv3中,使用公式bx = σ(tx)+cx; by = σ(ty)+cy来评估目标坐标,其中cx和cy为整数。因此,当bx接近cx或cx +1需要极高的tx绝对值。我们通过将sigmoid乘以一个超过1.0的因子来解决此问题,从而消除目标在网格上不可检测的影响。
 M:Mosaic数据增强。在训练期间使用4张图像拼接代替单张图像。
 IT:IoU阈值。使用多个锚框来匹配单个GT框,条件是GT框和锚框的IoU>阈值。
 GA:遗传算法。在网络训练的前10%时间段内使用遗传算法选择最佳超参数。
 LS:类别标签平滑。对sigmoid激活函数使用类别标签平滑。
 CBN:CmBN。使用跨小批量归一化在整个批次内收集统计信息,而不是在单个小批次内收集统计信息。
 CA:余弦退火调度器。在正弦曲线训练期间调整学习率。
 DM:动态小批量大小。在小分辨率训练期间通过使用随机训练形状自动增加小批量大小。
 OA:优化锚框。在512x512网络分辨率训练中使用优化后的锚框。
 GIoU、CIoU、DIoU、MSE。使用不同的损失算法进行边界框回归。
进一步的研究还涉及不同BoS对检测器训练准确率的影响,包括PAN、RFB、SAM、Gaussian YOLO(G)和ASFF,如表 5 所示。在我们的实验中,当使用SPP、PAN和SAM时,检测器获得了最佳性能。
表4:Bag-of-Freebies的消融实验。(CSPResNeXt50-PANet-SPP,512x512)
在这里插入图片描述
表5:Bag-of-Specials的消融实验。(尺寸 512x512)
在这里插入图片描述

4.4 不同骨干模型对检测器准确性的影响

接下来,我们研究了不同骨干模型对检测器准确性的影响,如表6所示。我们注意到,在分类准确性上表现最好的模型并不总是在检测器准确性上表现最佳。
首先,尽管使用不同特征训练的CSPResNeXt-50模型的分类准确性高于CSPDarknet53模型,但CSPDarknet53模型在目标检测方面的准确性更高。
其次,在CSPResNeXt50分类器训练中使用BoF和Mish提高了其分类准确性,但在检测器训练中应用这些预训练权重却降低了检测器的准确性。然而,在CSPDarknet53分类器训练中使用BoF和Mish不仅提高了分类器的准确性,也提高了使用这些预训练权重的检测器的准确性。最终结果表明,CSPDarknet53骨干网络比CSPResNeXt50更适合用于检测器。
我们观察到,CSPDarknet53模型由于各种改进措施,表现出更强的能力来提高检测器的准确性。
表 6:在检测器训练中使用不同的分类器预训练权重(所有其他训练参数在所有模型中均相同)。
在这里插入图片描述

4.5 不同小批量大小对检测器训练的影响

最后,我们分析了使用不同小批量大小训练的模型所获得的结果,结果如表7所示。从表7中显示的结果可以看出,在添加了BoF和BoS训练策略后,小批量大小对检测器的性能几乎没有影响。这一结果表明,在引入BoF和BoS后,不再需要使用昂贵的GPU进行训练。换句话说,任何人都可以使用常规的GPU来训练一个优秀的检测器。
表 7:在检测器训练中使用不同的小批量大小。
在这里插入图片描述

5 结果

与其他最先进的目标检测器获得的结果对比如图 8 所示。我们的YOLOv4位于帕累托最优曲线上,在速度和精度方面均优于最快和最准确的检测器。
在这里插入图片描述
图 8:不同目标检测器的速度和精度对比。(部分文章仅针对一种GPU(Maxwell/Pascal/Volta)提供了其检测器的FPS数据。)

由于不同方法使用不同架构的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)的帧率对比结果。(表略)

6 结论

我们提出了一种最先进的检测器,其速度和精度均优于所有可用的替代检测器。该检测器可以在具有8-16 GB显存的常规GPU上进行训练和使用,这使其广泛应用成为可能。基于单阶段锚框的检测器的原始概念已证明其可行性。我们验证了大量特征,并选择了其中一些用于提高分类器和检测器的准确性。这些特征可以作为未来研究和开发的最佳实践。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值