目标检测 | yolov4 原理和介绍

1. 简介

 YOLOv4是一种高效且准确的目标检测模型,它在YOLOv3的基础上引入了多项改进,这些改进主要集中在网络结构的优化和训练技巧的更新上。以下是YOLOv4中的一些关键技术或模块,它们对提高目标检测性能起到了重要作用:

  1. CSPDarknet53:作为YOLOv4的骨干网络,CSPDarknet53通过Cross-Stage Partial Network结构减少了计算量,同时保持了特征提取的能力 。
  2. SPP(Spatial Pyramid Pooling)模块:YOLOv4继续使用SPP模块来增大感受野并提取多尺度的特征,有助于检测不同大小的目标 。
  3. FPN+PAN结构:YOLOv4采用了特征金字塔网络(FPN)和路径聚合网络(PAN)的组合,这种结构通过自顶向下和自底向上的连接增强了特征的融合,提升了小目标的检测能力 。
  4. Mish激活函数:YOLOv4使用了Mish激活函数,它在不同层次的激活性能上提供了更好的结果,有助于提高模型的表达能力 。
  5. 数据增强技术:YOLOv4采用了包括Mosaic数据增强和CutMix在内的多种数据增强技术,这些技术通过增加输入图像的多样性来提高模型的泛化能力 。
  6. DropBlock正则化:YOLOv4使用了DropBlock正则化来防止网络在训练过程中过度拟合,提高了模型的鲁棒性 。
  7. CIoU损失函数:YOLOv4使用了CIOU损失函数代替传统的Smooth L1 Loss函数,更准确地衡量预测框和真实框之间的差异,有助于提高检测精度 。
  8. DIOU NMS:YOLOv4在预测框筛选过程中使用了DIOU NMS代替传统的NMS,这种改进的非极大值抑制方法考虑了预测框和真实框的重叠面积、中心点距离等因素,进一步提高了检测性能 。

论文链接:https://arxiv.org/abs/2004.10934
时间:2020年
作者:Alexey Bochkovskiy
代码参考:https://github.com/Tianxiaomo/pytorch-YOLOv4
 大量的特征据说可以提高卷积神经网络(CNN)的精度。需要在大数据集上对这些特征的组合进行实际测试,并对结果进行理论证明。有些特性只适用于某些模型,只适用于某些问题,或仅适用于小规模数据集;而一些特性,如批处理标准化和残差连接,适用于大多数模型、任务和数据集。我们假设这些普遍特征包括加权残差连接(WRC)、跨阶段部分连接(CSP)、交叉小批归一化(CmBN)、自我对抗训练(SAT)和Mish激活。我们使用新功能:WRC,CSP,CmBN,SAT,Mish激活,Mosaic数据增强、CmBN,DropBlock正则化和CIoU损失,并结合其中一些实现最先进的结果:43.5%AP,(65.7%AP50)的实时速度∼65FPS Tesla V100。源代码是在https://github.com/AlexeyAB/darknet.
在这里插入图片描述

2. 相关工作

2.1 Object detection models—目标检测模型

 现代探测器通常由两部分组成,一个是在ImageNet上预先训练的主干,另一个是用于预测物体的类和边界框的头部。对于那些运行在GPU平台上的检测器,它们的主干可以是VGG、ResNet、ResNeXt或DenseNet。对于那些运行在CPU平台上的检测器,它们的主干可以是SqueezeNet 、MobileNet或ShufflfleNet。对于头部部分,通常可分为一级目标探测器和两级目标探测器两类。最具代表性的两级目标探测器是R-CNN系列,包括Fast R-CNN、Faster R-CNN、R-FCN和Libra R-CNN.也可以使一个两级目标检测器成为一个无锚点的目标检测器,如反应点。对于单级目标探测器,最具代表性的模型是YOLO、SSD和RetinaNet。近年来,无锚的单级目标探测器已经发展起来。这类检测器有CenterNet、CornerNet 、FCOS等。近年来开发的目标探测器经常在主干和头部之间插入一些层,这些层通常用于收集不同阶段的特征图。我们可以称之为物体探测器的颈部。通常,颈部由几条自下向上的路径和几条自上向下的路径组成。配备这种机制的网络包括特征金字塔网络(FPN)、路径聚合网络(PAN)、BiFPN和NAS-FPN。
 除了上述模型外,一些研究人员还强调了直接构建一个新的主干(DetNet,DetNAS)或一个新的整体模型(SpineNet,HitDetector)用于目标检测。
 综上所述,一个普通的物体探测器由以下几个部分组成:
在这里插入图片描述

VGG (Visual Geometry Group)
 VGG是由牛津大学的视觉几何组(Visual Geometry Group)提出的深度CNN,主要贡献者是K. Simonyan和A. Zisserman。VGG网络的主要特点包括:

  1. 深度网络:VGG网络非常深,最初的VGG16包含13个卷积层和3个全连接层,而VGG19则包含16个卷积层和3个全连接层。
  2. 小卷积核:VGG在所有卷积层中统一使用了3x3的小卷积核,这使得网络可以更深入地学习图像的特征。
  3. 连续的卷积层:VGG网络倾向于在每个卷积层后面紧跟另一个卷积层,然后使用最大池化层来降低特征图的维度。
  4. 全连接层:在所有卷积层之后,VGG网络使用几个全连接层来进行分类。

 VGG网络在ImageNet挑战赛中取得了优异的成绩,并且由于其简洁的设计和强大的性能,它成为了很多后续研究和应用的基础。

ResNet (Residual Network)
 ResNet是由微软研究院的Kaiming He等人提出的,它引入了残差学习框架来解决随着网络深度增加时训练困难的问题。ResNet的主要特点包括:

  1. 残差块:ResNet引入了残差块(Residual Block),它允许网络中的信号直接跳过一层或多层,通过添加输入和输出来简化梯度的流动。
  2. 深度网络:ResNet可以非常深,例如ResNet50、ResNet101、ResNet152等,这些网络的深度远远超过了以前的模型。
  3. 恒等映射:残差块中的恒等映射使得网络可以在学习残差函数的同时,保持输入和输出的一致性,这使得网络可以在更深的层次上进行有效训练。
  4. 批量归一化:ResNet在每个卷积层之后使用批量归一化(Batch Normalization),这有助于加速训练过程并提高模型的稳定性。
    ResNet在多个视觉识别任务中取得了突破性的成绩,并且其残差学习的思想对后续的深度学习模型产生了深远的影响。

 VGG和ResNet都是深度学习领域中非常重要的网络架构,它们在图像分类、目标检测、语义分割等多种视觉任务中都有广泛的应用。

 SPP(Spatial Pyramid Pooling)是一种空间金字塔池化模块,由何恺明在2015年提出。它主要用于解决CNN需要固定输入图像尺寸的问题,同时解决了R-CNN对候选区域进行重复卷积计算导致的计算冗余问题。SPP通过将特征图分割成不同尺寸的网格,并在每个网格内进行最大池化操作,无论输入图像大小如何,都能输出固定长度的特征向量。
 ASPP(Atrous Spatial Pyramid Pooling)是SPP在语义分割领域的应用,结合了空洞卷积,可以在不丢失分辨率的情况下扩大卷积核的感受野。ASPP通过使用不同采样率的多个并行空洞卷积层,捕获多尺度物体信息,并将输出结果融合,以生成最终的分割结果。
 FPN(Feature Pyramid Networks)是一种特征金字塔网络,用于目标检测任务中,通过构建金字塔式的特征图来提取不同尺度下的目标特征,提高检测精度。FPN通过自底向上的路径传递高分辨率的特征,并自顶向下地传递高层的语义信息,增强了模型对不同尺度目标的检测能力。
 PAN(Path Aggregation Network)是另一种特征融合网络,它通过自下而上的路径将低层的定位信息传递到高层,增强了模型对小目标的检测能力。PAN通过将低分辨率的特征图上采样并与高分辨率的特征图级联,然后进行卷积操作,以获得最终的特征表示。

1.主干backbone: 在ImageNet上预先训练的网络用来特征提取。
在GPU平台上运行的检测器,主干可以是VGG、ResNet、ResNeXt或DenseNet。
在CPU平台上运行的检测器,主干可以是SqueezeNet、MobileNet或ShuffleNet。
2.颈部neck: 近年来发展起来的目标检测器常常在主干和头部之间插入一系列混合和组合图像特征的网络层,并将图像特征传递到预测层。称之为目标检测器的颈部neck。
3.头部head: 对图像特征进行预测,生成边界框和并预测类别。通常分为两类即单阶段目标检测器和两阶段目标检测器。
two stage: R-CNN系列,包括fast R-CNN、faster R-CNN、R-FCN和Libra R-CNN。
one stage: 最具代表性的模型有YOLO、SSD和RetinaNet。
 通常,一个颈部neck由几个自下而上的路径和几个自上而下的路径组成。具有该机制的网络包括特征金字塔网络(FPN)、路径汇聚网络(PAN)、BiFPN和NAS-FPN。
 综上所述,一个普通的物体探测器是由“特征输入、骨干网络、颈部和头部”四部分组成的

2.2 Bag of freebies

 通常,一个传统的目标检测器是离线训练的。因此,研究者总是喜欢利用这一优势,开发出更好的训练方法,使目标检测器在不增加推理成本的情况下获得更好的精度。我们把这些只会改变培训策略或只增加培训成本的方法称为“bag of freebies”。

2.2.1 数据增强

  • 像素级调整
    光度失真: brightness(亮度)、contrast(对比度)、hue(色度)、saturation(饱和度)、noise(噪声)
    几何失真: scaling(缩放尺寸)、cropping(裁剪)、flipping(翻转)、rotating(旋转)
  • 模拟目标遮挡
    erase(擦除)、CutOut(剪切): 随机选择图像的矩形区域,并填充随机或互补的零值
    hide-and-seek和grid mask: 随机或均匀地选择图像中的多个矩形区域,并将它们替换为全零
    将上述方式作用于特征图上: DropOut、DropConnect、DropBlock
  • 将多张图像组合在一起
    MixUp: 使用两个图像以不同的系数比率相乘后叠加,利用叠加比率调整标签
    CutMix: 将裁剪的图像覆盖到其他图像的矩形区域,并根据混合区域大小调整标签
  • 使用style transfer GAN进行数据扩充,有效减少CNN学习到的纹理偏差。

2.2.2 解决数据集中语义分布偏差问题

  • 两阶段对象检测器: 使用硬反例挖掘或在线硬例挖掘来解决。不适用于单级目标检测。
  • 单阶段目标检测器: focal损来处理各个类之间存在的数据不平衡问题。

 Focal Loss是一种在目标检测等任务中广泛使用的损失函数,它由何恺明等人在2017年提出,旨在解决类别不平衡问题 。Focal Loss的核心思想是降低易分类样本的权重,增加难分类样本的权重,从而使得模型更加关注那些难以正确分类的样本 。
Focal Loss的公式定义如下:
F L ( p t ) = − α t ( 1 − p t ) γ l o g ( p t ) FL(p_t)=−α_t(1−p_t)^γlog(pt) FL(pt)=αt(1pt)γlog(pt)
 其中, p t p_t pt​ 代表模型预测为正样本的概率, α α α γ γ γ是超参数。 α α α用于平衡正负样本的权重,而 γ γ γ用于调节模型对难易样本的关注程度 。

在PyTorch中实现Focal Loss的方式如下:

torch.nn.functional as F

class FocalLoss(nn.Module):
    def __init__(self, gamma=2.0, alpha=0.25):
        super(FocalLoss, self).__init__()
        self.gamma = gamma
        self.alpha = alpha

    def forward(self, inputs, targets):
        BCE_loss = F.binary_cross_entropy_with_logits(inputs, targets, reduction='none')
        pt = torch.exp(-BCE_loss)
        focal_loss = self.alpha * (1 - pt) ** self.gamma * BCE_loss
        return focal_loss.mean() ```

 在这段代码中,首先计算二元交叉熵损失(BCE_loss),然后根据Focal Loss的公式计算调整后的损失值,并取平均值作为最终的损失 。
 Focal Loss的优势在于它能够有效地解决类别不平衡问题,尤其是在目标检测任务中,背景和目标的类别可能极度不平衡。
 通过降低易分类样本的损失权重,Focal Loss鼓励模型专注于难以分类的样本,从而提高模型对少数类别的检测能力 。
 然而,Focal Loss也有一些缺点,比如需要手动调整超参数 γ γ γ α α α,而且在某些情况下可能导致模型训练不稳定。
此外,Focal Loss最初是为二分类问题设计的,虽然可以扩展到多分类问题,但在多分类任务中的应用效果可能不如二分类任务显著 。
 总的来说,Focal Loss是一个强大的工具,可以帮助改善模型在处理不平衡数据集时的性能,但使用时需要仔细考虑超参数的选择和模型训练的稳定性 。

2.2.3 边界框(BBox)回归的目标函数

  • IoU损失: 将预测BBox区域的区域和真实BBox区域考虑在内。由于IoU是尺度不变的表示,它可以解决传统方法在计算{x, y, w, h}的l1或l2损耗时,损耗会随着尺度的增大而增大的问题。
  • GIoU loss: 除了覆盖区域外,还包括了物体的形状和方向。他们提出寻找能够同时覆盖预测BBox和地面真实BBox的最小面积BBox,并以此BBox作为分母来代替IoU损失中原来使用的分母。
  • DIoU loss: 它额外考虑了物体中心的距离。
  • CIoU loss : 同时考虑了重叠区域、中心点之间的距离和纵横比。对于BBox回归问题,CIoU具有更好的收敛速度和精度。

2.3 Bag of specials

 对于那些只增加少量推理成本但又能显著提高目标检测精度的插件模块和后处理方法,我们称它们为“bag of specials"。一般来说,这些插件模块是用于增强模型中的某些属性,如扩大接受域、引入注意机制或增强特征整合能力等,而后处理是筛选模型预测结果的一种方法。
 可用于增强感受野的常见模块是SPP[25]、ASPP[5]和RFB[47]。SPP模块起源于空间金字塔匹配(SPM)[39],SPMs的原始方法是将特征映射分割成几个 d × d d×d d×d相等的块,其中d可以是 { 1 , 2 , 3 , … } \{1,2,3,…\} {1,2,3,},从而形成空间金字塔,然后提取bag-of-word特征。SPP将SPM集成到CNN中,使用最大池化操作,而不是bag-of-word操作。由于He等人[25]提出的SPP模块将输出一维特征向量,因此在全卷积网络(FCN)中应用是不可行的。因此,在YOLOv3[63]的设计中,Redmon和Farhadi将SPP模块改进为核大小为 k × k k×k k×k,其中 k = { 1 , 5 , 9 , 13 } k=\{1,5,9,13\} k={1,5,9,13},步幅等于 1 1 1。在这种设计下,相对较大的最大池有效地增加了主干特征的接受域。 在添加改进版本的SPP模块后,YOLOv3-608在MS COCO目标检测任务上将AP50升级了 2.7 % 2.7\% 2.7%,额外计算 0.5 % 0.5\% 0.5%。ASPP[5]模块与改进的SPP模块在操作上的差异主要是从原始的 k × k k×k k×k核大小,步幅最大池化等于1到多个 3 × 3 3×3 3×3核大小,扩张比等于 k k k,步幅等于 1 1 1。RFB模块采用k×k核的多个扩张卷积,扩张比等于 k k k,步幅等于 1 1 1,以获得比ASPP更全面的空间覆盖。RFB[47]只需要花费 7 % 7\% 7%的额外推理时间,就可以使MS COCO上的SSD的AP50增加 5.7 % 5.7\% 5.7%
 目标检测中常用的注意模块主要分为通道式注意和点态注意,这两种注意模型的代表分别是Squeeze-and-Excitation (SE)[29]和空间注意模块(SAM)[85]。虽然SE模块可以提高ResNet50的力量在ImageNet图像分类任务1%top-1精度的只增加 2 % 2\% 2%计算,但在GPU通常将使推理时间增加约 10 % 10\% 10%,所以它更适合用于移动设备。但对于SAM,它只需要额外支付 0.1 % 0.1\% 0.1%的计算量,就可以将ResNet50-SE提高到ImageNet图像分类任务的 0.5 % 0.5\% 0.5%的top-1精度。最重要的是,它根本不影响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和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,它可以用于过滤那些预测同一对象不好的预测框,并且只保留响应率较高的候框。NMS试图改进的方法与优化目标函数的方法是一致的。NMS提出的原始方法不考虑上下文信息,因此Girshick等[19]在R-CNN中添加分类置信分数作为参考,根据置信分数的顺序,按照高到低的顺序进行greedy NMS。对于soft NMS[1],它考虑了对象的遮挡在greedy NMS中可能导致置信度分数下降的问题。DIoU NMS[99]开发者的思维方式是在soft NMS的基础上,将中心点距离的信息添加到BBox的筛选过程中。值得一提的是,由于上述所有的后处理方法都没有直接涉及到所捕获的图像特征,因此在后续的无锚定方法的开发中,不再需要后处理。

2.3.1 插件模块之增强感受野

  • 改进的SPP模块
    在这里插入图片描述

  • ASPP模块
    在这里插入图片描述

  • RFB模块
    在这里插入图片描述

2.3.2 插件模块之注意力机制

  • channel-wise注意力: 代表是Squeeze-and-Excitation挤压激励模块(SE)。
    在这里插入图片描述

  • point-wise注意力: 代表是Spatial Attention Module空间注意模块(SAM)。
    在这里插入图片描述

2.3.3 插件模块之特征融合

  • SFAM: 主要思想是利用SE模块在多尺度的拼接特征图上进行信道级重加权。
    在这里插入图片描述

  • ASFF: 使用softmax对多尺度拼接特征图在点维度进行加权。
    在这里插入图片描述

  • BiFPN: 提出了多输入加权剩余连接来执行按比例的水平重加权,然后添加不同比例的特征图。
    在这里插入图片描述

2.3.4 激活函数

  • LReLU和PReLU: 主要目的是解决输出小于0时ReLU的梯度为零的问题。
  • ReLU6和hard-Swish: 专门为量化网络设计的。
  • SELU: 针对神经网络的自归一化问题。
  • Swish和Mish: 都是连续可微的激活函数。

2.3.5 后处理

  • NMS: 目标检测中常用的后处理方法是NMS, NMS可以对预测较差的bbox进行过滤,只保留响应较高的候选bbox。NMS试图改进的方法与优化目标函数的方法是一致的。NMS提出的原始方法没有考虑上下文信息,所以在R-CNN中加入了分类的置信分作为参考,按照置信分的顺序,从高到低依次进行贪心NMS。
  • Soft NMS: 考虑了对象的遮挡可能导致带IoU分数的贪婪NMS的信心分数下降的问题。
  • DIoU NMS: 在soft NMS的基础上,将中心点距离信息添加到BBox筛选过程中。值得一提的是,由于以上的后处理方法都没有直接引用捕获的图像特征,因此在后续的无锚方法开发中不再需要后处理。

3. 方法

3.1 Selection of architecture 架构选择

 我们的目标是在输入网络分辨率、卷积层数、参数数(滤波器大小2滤波器通道/组)和层输出数(滤波器)之间找到最优的平衡。例如,我们的大量研究表明,在ILSVRC2012(ImageNet)数据集[10]上,CSPResNext50比CSPDarknet53要好得多。然而,相反地,在检测MS COCO数据集[46]上的对象方面,CSPDarknet53比CSPResNext50更好。
 下一个目标是选择额外的块来增加感受野,以及从不同检测器级别的参数聚合的最佳方法:例如FPN、PAN、ASFF、BiFPN。
 对于分类最优的参考模型对于探测器来说并不总是最优的。与分类器相比,该探测器需要以下条件:

  • 更高的输入网络大小(分辨率)
  • 用于检测多个小大小的物体更多的层
  • 更高的接受域以覆盖增加的输入网络大小更多的参数
  • 模型更大的能力来检测单一图像中多个不同大小的物体

 假设来说,我们可以假设应该选择一个具有更大的接受场大小(具有更多的卷积层 3 × 3 3×3 3×3)和更多的参数的模型作为主干。表1显示了CSPResNeXt50、CSPDarknet53和efficientnetB3的信息。CSPResNext50只包含16个卷积层 3 × 3 3×3 3×3、一个 425 × 425 425×425 425×425感受野和 20.6 M 20.6 M 20.6M参数,而CSPDarknet53包含 29 29 29个卷积层 3 × 3 3×3 3×3、一个 725 × 725 725×725 725×725感受野和 27.6 M 27.6 M 27.6M参数。这一理论证明,加上我们进行的大量实验,表明CSPDarknet53神经网络是两者作为探测器主干的最佳模型。
 不同大小的感受野的影响总结如下:

  • 到对象大小,允许查看整个对象到网络大小
  • 允许查看对象周围的上下文
  • 增加图像点和最终激活之间的连接数量

 我们在CSPDarknet53上添加了SPP块,因为它显著地增加了接受域,分离出了最重要的上下文特征,并且几乎不会导致降低网络运行速度。我们使用PANet作为来自不同检测器级别的不同主干级别的参数聚合的方法,而不是在YOLOv3中使用的FPN。
 最后,我们选择CSPDarknet53主干、SPP附加模块、PANet路径聚合颈和YOLOv3(基于锚点)的头作为YOLOv4的体系结构。
 未来,我们计划显著扩展检测器的f Bag of Freebies(BoF)的内容,理论上可以解决一些问题,提高检测器的精度,并以实验方式依次检查每个特征的影响。
 我们不使用Cross-GPU批处理归一化(CGBN或SyncBN)或昂贵的专用设备。这允许任何人都可以在传统的图形处理器上再现我们最先进的结果,例如GTX 1080Ti或RTX 2080Ti。

总结: YOLOv4模型 = CSPDarkNet53 + SPP + PANet(path-aggregation neck) + YOLOv3-head

3.2 Selection of BoF and BoS BoF和BoS的选择

为了改进目标检测训练,CNN通常使用以下:

  • 激活:ReLU, leaky-ReLU, parametric-ReLU,ReLU6, SELU, Swish, or Mish
  • 边界盒回归损失:MSE,IoU、GIoU、CIoU、DIoU
  • 数据增强:CutOut, MixUp, CutMix
  • 正则化方法:DropOut, DropPath,Spatial DropOut [79], or DropBlock
  • 规范化的网络激活(通过均值和方差):批标准化(BN)[32],Cross-GPU Batch Normalization(CGBN或SyncBN)[93],Filter Response Normalization(FRN)[70],或交叉迭代批标准化(CBN)[89]
  • Skip-connections:Residual connections,加权Residual connections、多输入加权Residual connections或Cross stage partial连接(CSP)

 对于训练激活函数,由于PReLU和SELU更难训练,而且ReLU6是专门为量化网络设计的,因此我们将上述激活函数从候选列表中删除。在需求化方法上,发表DropBlock的人将其方法与其他方法进行了详细的比较,其正则化方法获得了很大的成功。因此,我们毫不犹豫地选择了DropBlock作为我们的正则化方法。至于归一化方法的选择,由于我们关注于只使用一个GPU的训练策略,因此不考虑syncBN。

3.3 Additional improvements 进一步改进

 为了使设计的探测器更适合训练单GPU上,我们做了额外的设计和改进如下:
 我们引入了一种新的数据增强Mosic,和自我对抗训练(SAT)
 我们选择最优超参数而应用遗传算法
 我们修改一些现有方法使设计适合有效的训练和检测,modifified SAM,modifified PAN,和交叉小批归一化(CmBN)
 Mosaic代表了一种新的数据增强方法,它混合了4个训练图像。因此,混合了4种不同的上下文,而CutMix只混合了2个输入图像。这允许检测其正常上下文之外的对象。此外,批归一化计算每一层上4个不同图像的激活统计信息,这大大减少了对大型小批量处理的需求。
 自对抗训练(SAT)也代表了一种新的数据增强技术,可以在2个向前向后的阶段运行。在第一阶段,神经网络改变了原始图像,而不是网络的权值。通过这种方式,神经网络对自己进行敌对性攻击,改变原始图像,以制造出图像上没有想要的目标的欺骗。在第二阶段,神经网络被训练以正常的方式检测修改后的图像上的对象。
在这里插入图片描述

 CmBN表示CBN修改版本,如图4所示,定义为交叉小批量归一化(CmBN)。这只收集单个批次中的小批次之间的统计数据。我们将SAM从空间注意修改为点注意,并将PAN的快捷连接替换为(shortcut)级联,分别如图5和图6所示。
在这里插入图片描述

3.4 YOLOV4

在这里插入图片描述
YOLOv4包括

  • 主干(backbone): CSPDarknet53
  • 颈部(neck): SPP , PAN
  • 头(head): YOLOv3
    YOLO v4使用
  • Bag of Freebies 外在引入技巧: CutMix和Mosaic数据增强,DropBlock正则化,类标签平滑
  • Bag of Specials 网络改进技巧: Mish激活、跨级部分连接(CSP)、多输入加权剩余连接(MiWRC)
  • Bag of Freebies 外在检测器引入技巧: CIoU loss, CmBN, DropBlock正则化,Mosaic数据增强,自对抗训练,消除网格敏感性,为一个真值使用多个锚,余弦退火调度,最优超参数,随机训练形状
  • Bag of Specials检测器网络改进技巧: Mish激活、SPP-block、SAM-block、PAN路径聚合块、DIoU-NMS

4 Experiments 实验

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

4.1 Experimental setup 实验设置

 在ImageNet图像分类实验中,默认的超参数如下:训练步骤为8000000;批大小和小批量大小分别为128和32;采用多项式衰减学习率调度策略,初始学习率为0.1;预热步骤为1000;动量衰减和权重衰减分别设置为0.9和0.005。我们所有的BoS实验都使用与默认设置相同的超参数,在BoF实验中,我们额外添加了50%的训练步骤。在BoF实验中,我们验证了MixUp、CutMix、Mosaic、模糊数据增强和标签平滑正则化方法。在BoS实验中,我们比较了LReLU、Swish和Mish激活功能的影响。所有实验均采用1080 Ti或2080TiGPU进行训练。
 在MS COCO目标检测实验中,默认的超参数如下:训练步长为500,500;采用步长衰减学习率调度策略,初始学习率为0.01,在400000步和450000步时分别乘以0.1倍;动量和权重衰减分别设置为0.9和0.0005。所有架构都使用一个GPU来执行批处理大小为64的多规模训练,而小批处理大小为8或4,这取决于架构和GPU内存限制。除在超参数搜索实验中使用遗传算法外,所有其他实验均使用默认设置。遗传算法使用YOLOv3-SPP对GIoU损失进行训练,并搜索300个时元的最小值5k集。我们采用搜索学习率0.00261,动量0.949,IoU阈值分配地面真值0.213,遗传算法实验采用损失归一化器0.07。我们验证了大量的BoF,包括网格灵敏度消除、Mosaic数据增强、IoU阈值、遗传算法、类标签平滑、交叉小批归一化、自对抗训练、余弦退火调度器、动态小批大小、dropblock、优化锚点、不同类型的IoU损失。我们还在各种BoS上进行了实验,包括Mish、SPP、SAM、RFB、BiFPN和高斯YOLO[8]。对于所有的实验,我们只使用一个GPU来进行训练,因此不使用优化多个GPU的像syncBN这样的技术。

4.2 Influence of different features on Classifier training 不同特征对分类器训练的影响

 首先,我们研究了不同特征对分类器训练的影响;具体来说,类标签平滑的影响,不同数据增强技术的影响,bilateral blurring, MixUp, CutMix and Mosaic,如Figure7所示,以及不同激活的影响,如Leaky-relu(默认)、Swish和Mish。
在这里插入图片描述

 在我们的实验中,如表2所示,通过引入:CutMix和Mosaic数据增强、类标签平滑和Mish激活等特征,提高了分类器的精度。因此,我们用于分类器训练的BoF backbone(Bag of Freebies)包括以下内容:CutMix和Mosaic数据增强和类标签平滑。此外,我们使用Mish激活作为补充,结果在下表2和表3。

4.3 Influence of different features on Detector training 不同特征对检测器训练的影响

 进一步研究了不同的Bag-of Freebies(BoF-detector)对探测器训练精度的影响,如表4所示。通过研究在不影响FPS的情况下提高检测器精度的不同特征,我们显著地扩展了BoF列表:

  • S:消除网格敏感的公式 YOLOV3中使用方程 b x = σ ( t x ) + c x b_x=\sigma(t_x)+c_x bx=σ(tx)+cx b y = σ ( t y ) + c y b_y=\sigma(t_y)+c_y by=σ(ty)+cy,其中 c x c_x cx c y c_y cy总是整数,在YOLOv3中用于计算对象坐标,因此,接近 c x c_x cx c x + 1 c_x+1 cx+1值的 b x b_x bx值需要极高的 t x t_x tx绝对值。我们通过将sigmoid乘以超过 1.0 1.0 1.0的因子来解决这个问题,从而消除了对象无法检测到的网格的影响。
  • M:Mosaic data-在训练期间使用4张图像的马赛克,而不是单一的图像
  • IT:IoU阈值-使用多个锚作为单一的真实IoU(truth, anchor) >IoU阈值
  • GA:Genetic algorithms-在前10%的时间段内使用遗传算法选择最优超参数
  • LS:类标签平滑-使用类标签平滑的s型符号激活
  • CBN:CmBN-使用交叉小批标准化来收集整个批内的统计信息,而不是在单个小批内收集统计数据
  • CA:余弦退火调度器-改变正弦波训练过程中的学习速率
  • DM:动态小批量大小-在小分辨率训练中,通过使用随机训练形状自动增加小批量大小
  • OA:优化的锚-使用优化的锚与 512 × 512 512\times512 512×512网络分辨率进行训练
  • GIoU,CIoU,DIoU,MSE-使用不同的损失算法进行边界框回归

 进一步研究了不同的Bag-of-Specials (bos-检测器)对检测器训练精度的影响,包括PAN、RFB、SAM、高斯YOLO(G)和ASFF,如表5所示。在我们的实验中,检测器在使用SPP、PAN和SAM时性能最好
在这里插入图片描述
在这里插入图片描述

4.4 Influence of different backbones and pre- trained weightings on Detector training 不同的backbone和预先训练权重对检测器训练的影响

 进一步研究了不同主干模型对检测器精度的影响,如表6所示。我们注意到,具有最佳分类精度特征的模型在检测器精度方面并不总是最好的
 首先,虽然使用不同特征训练的CSPResNeXt-50模型的分类精度高于CSPDarknet53模型,但CSPDarknet53模型在目标检测方面具有更高的精度
 其次,使用CSPResF和Mish进行50分类器训练可以提高分类精度,但进一步应用这些预先训练的权重用于检测器训练会降低检测器的精度。然而,在CSPDarknet53分类器训练中使用BoF和Mish可以提高分类器和使用该分类器预训练的加权的检测器的准确性。最终的结果是,主干CSPDarknet53比CSPResNeXt50更适合用于检测器。
 我们观察到,CSPDarknet53模型由于各种改进,显示出更大的能力来提高探测器的精度
在这里插入图片描述

4.5. Influence of different mini-batch size on Detector training 不同小批量对探测器训练的影响

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

5. Results 结果

 与其他最先进的对象检测器所获得的结果的比较如图8所示。我们的YOLOv4位于Pareto最优性曲线上,在速度和精度方面都优于最快和最精确的探测器。
 由于不同的方法使用不同架构的gpu进行推理时间验证,我们在通常采用的Maxwell、Pascal和Volta架构的gpu上操作YOLOv4,并将它们与其他最先进的方法进行比较。表8列出了使用MaxwellGPU的帧率比较结果,它可以是GTX TitanX(Maxwell)或TeslaM40GPU。表9列出了使用PascalGPU的帧率比较结果,可以是TitanX(Pascal)、TitanXp、GTX 1080Ti或特斯拉P100GPU。如表10所述,它列出了使用VoltaGPU的帧率比较结果,可以是Titan Volta或Tesla V100GPU。
在这里插入图片描述

  • 22
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值