淘先锋技术网

首页 1 2 3 4 5 6 7

YOLO系列目标检测算法目录 - 文章链接


本文总结:

  1. 为提高神经网络准确率,迄今为止有很多的方法和技巧,本文挑选其中的一些方法并结合起来,实现了最佳的性能。
  2. 现阶段的目标检测器主要有两部分组成,backbone和head,近年来,通常在backbone和head之间插入一些层,用于收集不同阶段的特征图,本文称之为Neck。
  3. 将只改变训练策略或只增加训练成本,而不增加推理成本的方法称为“bag of freebies”(BoF)。
  4. 将那些只会少量增加推理成本,但能显著提高目标检测精度的模块和后处理方法,称之为“bag of specoals”(BoS)。
  5. BoF中包含的方法有数据增强、正则化函数、标签细化网络、框回归函数等。
  6. BoS中包含的方法有增强感受野、注意力模块、特征集成、激活函数、后处理等。
  7. 通过对比多种方法和技巧,YOLOv4最终选用CSPDarknet53作为backbone,选用SPP+PAN作为Neck,选用YOLOv3-head作为Head。
  8. 从BoF中挑选保留的方法有,用于Backbone的CutMix、Mosaic数据增强、DropBlock正则化、Class label smoothing;用于检测器中的CIoU-loss、CmBN、DropBlock正则化、Mosaic数据增强、Self-Adversarial Training、Eliminate grid sensitivity、一个GT使用多个anchors、Cosine annealing scheduler、超参数调优、随机训练图片大小。
  9. 从BoS中挑选保留的方法有,用于Backbone的Mish激活函数、Cross-stage partial connections (CSP)、Multiinput weighted residual connections (MiWRC);用于检测器的Mish激活函数、SPP-block、SAM-block、PAN path-aggregation block、DIoU-NMS。

深度学习知识点总结

专栏链接:
https://blog.csdn.net/qq_39707285/article/details/124005405

此专栏主要总结深度学习中的知识点,从各大数据集比赛开始,介绍历年冠军算法;同时总结深度学习中重要的知识点,包括损失函数、优化器、各种经典算法、各种算法的优化策略Bag of Freebies (BoF)等。



5. YOLO系列目标检测算法-YOLOv4

5.1 简介

  目前,有很多提高卷积神经网络准确率的方法。其中有些方法只适用于部分模型和部分问题,或只适用于小规模数据集;也有些方法,如批量标准化(BN)和残差连接(residual-connections),适用于大多数模型、任务和数据集。这些通用的方法包括Weighted-Residual-Connections (WRC)、Cross-Stage-Partial-connections (CSP)、 Cross mini-Batch、Normalization (CmBN)、Self-adversarial-training (SAT)和Mish-activation等。本文通过使用WRC、CSP、CmBN、SAT、Mish激活、Mosaic数据增强、CmBN、DropBlock正则化和CIoU Loss等方法,并将其中一些方法结合起来,实现了在MS COCO数据集上最好的结果:在Tesla V100上实时速度为65FPS,43.5% AP(65.7%AP50)。YOLOv4的结果如图1所示。
在这里插入图片描述

YOLOv4主要贡献点如下:

  1. 开发了一种高效、强大的目标检测模型。它使每个人都可以使用1080 Ti或2080 Ti GPU直接来训练超快速和精确的目标探测器;
  2. 在模型训练期间验证了最先进的Bag-of-Freebies(一般指那些不会增加模型复杂度和推理计算量的方法)和Bag-of-Specials(一般指会增加一些模型复杂度和计算量,推理时耗时稍微长一点的方法)等方法的性能和影响;
  3. 使用包括CBN/PAN/SAM等在内的最先进的方法,使其更有效,更适用于单GPU训练。

  现阶段的目标检测器主要有两部分组成,backbone和head。Backbone主要在ImageNet等数据集上进行预训练,然后通过head去预测目标类别和坐标。对于GPU平台,backbone一般使用VGG、ResNet、ResNeXt或者DenseNet等。对于CPU平台,backbone一般选择SqueezeNet、MobileNet和ShuffleNet等。head部分,主要分为两阶段的和一阶段的目标检测器,两阶段的目标检测器主要是anchor-based的,主要是R-CNN系列,包括fast R-CNN、faster R-CNN、R-FCN、Libra R-CNN等,也有anchor-free的,例如RepPoints。对于一阶段的目标检测器主要是YOLO系列、SSD和RetinaNet等,这些都是anchor-based,近年来,有好些anchor-free的一阶段目标检测器,例如CenterNet、CornerNet和FCOS等等。

  近年来开发的目标检测器通常在backbone和head之间插入一些层,这些层通常用于收集不同阶段的特征图。可以称之为目标检测器的颈部Neck。通常,Neck由多个自下而上的路径和多个自上而下的路径组成。配备该机制的网络包括特征金字塔网络(Feature Pyramid Network,FPN)、路径聚合网络(Path Aggregation Network,PAN)、BiFPN和NAS-FPN等等。

  除上述模型外,一些研究人员还将重点放在直接构建用于目标检测的新backbone(DetNet,DetNAS)或新的整体模型(SpineNet,HitDetector)。
综上所述,普通目标检测器由以下几个部分组成:

  • Input:Image,Patches,Image Pyramid
  • Backbones:VGG16,ResNet-50,SpineNet,EfficientNet-B0/B7,CSPResNeXt50,ResNeXt-101,CSPDarkNet53
  • Neck:
    • Additional blocks:SPP,ASPP,RFB,SAM
    • Path-aggregation blocks:FPN,PAN,NAS-FPN,Fully-connected FPN,BiFPN,ASFF,SFAM
  • Heads:
    • Dense Prediction(one-stage):
      • anchor-based:RPN,SSD,YOLO,RetinaNet
      • anchor-free:CornerNet,CenterNet,MatrixNet,FCOS
    • Sparse Prediction(two-stage):
      • anchor-based:Faster R-CNN,R-FCN,Mask R-CNN
      • anchor-free:RepPoints

5.2 Bag of freebies

  通常,传统的目标检测器是离线训练的。因此,可以利用这一优势,开发更好的训练方法,使目标检测器在不增加推理成本的情况下获得更好的精度。本文将这些只改变训练策略或只增加训练成本的方法称为“bag of freebies”。

  目标检测方法中通常采用的就是数据增强。数据增强的目的是增加输入图像的可变性,使得所设计的目标检测模型对从不同环境获得的图像具有更高的鲁棒性。例如,光度变形和几何变形是两种常用的数据增强方法。在处理光度变形时,调整图像的亮度、对比度、色调、饱和度和噪声等。对于几何变形,添加随机缩放、裁剪、翻转和旋转等。

  上述数据增强方法都是逐像素调整,并且保留调整区域中的所有原始像素信息。此外,也有一些数据增强的方法将重点放在模拟目标遮挡的问题上,同样也取得了很好的分类和定位准确率。例如,随机擦除(random erase)和CutOut(剪切)可以随机选择图像中的矩形区域,并填充零或者随机的像素值。至于hide-and-seek和grid mask,它们是随机或均匀地选择图像中的多个矩形区域,并将其全部替换为零。

  同样在特征图处理中,类似的方法有DropOut、DropConnect和DropBlock等。此外,一些研究人员提出了将多个图像一起使用以执行数据增强的方法。例如,MixUp使用两个图像以不同的系数比率相乘和叠加,然后使用这些叠加比率调整标签。对于CutMix,它将裁剪图像覆盖到其他图像的矩形区域,并根据混合区域的大小调整标签。除上述方法外,风格转移GAN也可用于数据增强,这种方法可以有效减少CNN学习的纹理偏差。

  与上面提出的各种方法不同,其他一些bag-of-freeibies方法致力于解决数据集中的语义分布可能有偏差的问题。在处理语义分布偏差问题时,一个非常重要的问题是不同类之间存在数据不平衡的问题,在两阶段目标检测算法中,该问题通常通过困难样本挖掘(hard negative example mining)或在线困难样本挖掘(online hard example mining,OHEM)来解决。但这些挖掘方法不适用至一阶段目标检测器,因为这种检测器属于密集预测架构。因此,有人提出了FocalLoss,以解决不同类别之间存在的数据不平衡问题。另一个非常重要的问题是,很难用one-hot来表达不同类别之间的关联度关系。这种表示方案通常在进行数据标注时使用。后来提出的标签平滑是将hard标签转换为soft标签进行训练,这可以使模型更加鲁棒。为了获得更好的soft标签,有人引入了知识蒸馏的概念来设计标签细化网络( label refinement network)。

  最后一个bag-of-freebies是边界框(BBox)回归的目标函数。传统的目标检测器通常使用均方误差(MSE)直接对中心点坐标和BBox的高度和宽度进行回归,例如回归中心点坐标和宽高,或者回归左上角和右下角坐标。而对于anchor-based的方法,是预测相应的偏移值。然而,直接预测BBox的每个点的坐标值是将这些点视为独立变量,但实际上这并没有考虑目标本身的完整性。为了更好地处理这一问题,一些研究人员提出了IoU loss,其中考虑了预测的BBox和GT的BBox相交的面积区域。由于IoU是尺度不变的,它可以解决传统方法遇到的问题,例如l1和l2 loss计算x、y、w、h的损失时,损失会随着尺度的增加而增加的问题。最近,一些研究人员继续改善IoU loss。例如,除覆盖区域外,GIoU Loss还考虑的目标的形状和方向。DIoU Loss,它还考虑了目标中心的距离。CIoU Loss,它同时考虑了重叠区域、中心点之间的距离和纵横比。CIoU可以在BBox回归问题上获得更好的收敛速度和精度。

5.3 Bag of specoals

  对于那些会少量增加推理成本,但能显著提高目标检测精度的模块和后处理方法,称之为“bag of specoals”。一般来说,这些模块用于增强模型中的某些属性,如扩大感受野、引入注意机制或增强特征集成能力等,后处理是筛选模型预测结果的方法。
在这里插入图片描述
  可用于增强感受野的常见模块有SPP、ASPP和RFB。SPP模块源于空间金字塔匹配(Spatial Pyramid Matching,SPM),而SPM的原始方法是将特征图分割成若干个d×d相等的块,其中d可以是1/2/3等等,从而形成空间金字塔,然后提取bag-of-word特征。SPP将SPM集成到CNN中,并使用最大池操作替换bag-of-word操作。由于何凯明等人提出的SPP模块将输出一维特征向量,因此不适用于全卷积网络(FCN)。因此,在YOLOv3的设计中,将SPP模块改进为具有核大小k×k的最大池化输出的级联,其中k={1,5,9,13},步幅等于1。在这种设计下,相对较大的k×k最大池化有效地增加了backbone特征的感受野。在添加了改进版的SPP模块后,YOLOv3-608在MS COCO目标检测任务上AP50提升了2.7%,额外计算成本多了仅0.5%。
在这里插入图片描述
  ASPP模块和改进的SPP模块之间的差异是,ASPP并不是采用max pool得到不同感受野的特征图,而是采用卷积实现,且其kernel size全部是3,但是引入了不同的空洞率来变相扩大感受野。其余操作和SPP一致。
在这里插入图片描述
在这里插入图片描述
  RFB模块k=1/3/5卷积核配合空洞卷积实现了感受野的增大及不同感受野特征图的融合,扩展比等于k,步长等于1,以获得比ASPP更全面的空间覆盖。RFB仅花费7%的额外推断时间,将MS COCO上SSD的AP50增加了5.7%。

  在目标检测中经常使用的注意力模块,主要分为channel-wise注意力和point-wise注意力,这两种注意力模型的代表分别是 Squeeze-and-Excitation(SE)和空间注意力模块(Spatial Attention Module,SAM)。虽然SE模块可以将ResNet50在ImageNet图像分类任务中的能力提高1%的top-1精度,但只需增加2%的计算工作量,但在GPU上通常会增加约10%的推理时间,因此更适合在移动设备中使用。但对于SAM,它只需要额外0.1%的计算,就可以在ImageNet图像分类任务上提高ResNet50-SE 0.5%的top-1精度。最重要的是,它根本不影响GPU上的推理速度。

  在特征集成方面,早期实践是使用skip connection或hyper-column将低级物理特征集成到高级语义特征。由于FPN等多尺度预测方法已变得流行,因此提出了许多集成不同特征金字塔的轻量级模块。此类模块包括SFAM、ASFF和BiFPN。SFAM的主要思想是使用SE模块对多尺度级联特征映射执行通道权重加权。对于ASFF,它使用softmax作为point-wise级别加权,然后添加不同比例的特征地图。在BiFPN中,提出了多输入加权残差连接,以执行按比例级别的重新加权,然后添加不同尺度的特征图。

  在深度学习的研究中,一些人把重点放在寻找好的激活函数上。一个好的激活函数可以使梯度更有效地传播,同时不会导致太多额外的计算成本。2010年,提出的ReLU实质性地解决传统tanh和sigmoid激活函数中经常遇到的梯度消失问题。随后,提出了LReLU、PReLU、ReLU6、Scaled Exponential Linear Unit(SELU)、Swish、hard-Swish和Mish等,它们也用于解决梯度消失问题。LReLU和PReLU的主要目的是解决当输出小于零时ReLU的梯度为零的问题。至于ReLU6和hard-Swish,它们是专门为量化网络设计的。为了自归一化神经网络,提出了SELU激活函数以满足这一目标。需要注意的是,Swish和Mish都是连续可微的激活函数。

  基于深度学习的目标检测中常用的后处理方法是NMS,它可以用来过滤那些对同一目标预测不佳的BBox,并且只保留响应较高的候选BBox。NMS试图改进的方法与优化目标函数的方法一致。NMS提出的原始方法没有考虑上下文信息,因此在R-CNN中添加了分类置信度作为参考,并根据置信度的顺序,按照从高分到低分的顺序执行NMS。对于soft NMS,它考虑了目标的遮挡可能导致具有IoU分数的NMS中置信分数的降低的问题。DIoU NMS开发人员的思维方式是在soft NMS的基础上,将中心点距离信息添加到BBox筛选过程中。值得一提的是,由于上述后处理方法都不直接涉及捕获的图像特征,因此在anchor-free方法上不再需要后处理。

5.4 YOLOv4方法集合

  目标检测的基本目标是神经网络在生产系统中快速的运行速度和并行计算的优化,而不是低计算量理论指标(BFLOP)。本文提出了两种实时神经网络选项 :

  • 对于GPU,在卷积层中使用少量groups(1-8个):CSPResNeXt50/CSPDarknet53
  • 对于VPU(Video Processing Unit,视频处理单元),使用分组卷积,但避免使用Squeeze-and-excitement (SE)块,包括以下模型:EfficientNet-lite / MixNet / GhostNet / MobileNetV3

5.4.1 网络结构选择

  本文的目标是在输入网络分辨率、卷积层数、参数数量(卷积核尺寸^2卷积核数通道数/groups)和层输出数(卷积核数)之间找到最佳平衡。例如,大量研究表明,就ILSVRC2012(ImageNet)数据集上的分类而言,CSPResNext50比CSPDarknet53好得多。然而,相反,在MS COCO数据集上的目标检测方面,CSPDarknet53比CSPRESNET50更好。

  下一个目标是选择用于增加感受野的附加块,以及针对不同检测器级别(例如FPN、PAN、ASFF、BiFPN)从不同backbone级别进行参数聚合的最佳方法。
对于分类最优的模型用于检测中并不总是最优的。与分类器不同,检测器要求:

  • 更高的输入大小(分辨率):用于检测小尺寸目标
  • 更多的层:用于获得更高的感受野,以覆盖增大的输入网络
  • 更多的参数:为了使模型具有更大的容量,可以在单个图像中检测不同大小的多个目标

  可以假设一个具有更大感受野大小(具有更多3×3卷积层)和更多参数的模型应被选为backbone。表1展示了CSPResNeXt50、CSPDarknet53和EfficientNet-B3的对比结果。
在这里插入图片描述
  CSPResNext50仅包含16个3×3卷积层、425×425接收场和20.6 M参数,而CSPDarknet53包含29个3×3卷积层、725×725接收场和27.6 M的参数。这一理论论证以及大量实验表明,CSPDarknet53是作为检测器backbone的最佳模型。

  不同大小的感受野的影响总结如下:

  • 最大为目标大小:允许查看整个目标
  • 最大网络规模:允许查看目标周围的上下文
  • 超过网络大小:增加图像点和最终激活之间的连接数

  将SPP块添加到CSPDarknet53上,因为它显著增加了感受野,分离出最重要的上下文特征,并且几乎不会降低网络操作速度。不再使用YOLOv3中使用的FPN,改为使用PANet作为参数聚合方法。

  最终,本文选择CSPDarknet53 backbone、SPP附加模块、PANet Neck和YOLOv3(anchor-based)Head作为YOLOv4的架构。

5.4.2 BoF和BoS选择

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

  • 激活函数:ReLU, leaky-ReLU, parametric-ReLU,ReLU6, SELU, Swish, or Mish
  • BBOX回归损失函数:MSE, IoU, GIoU,CIoU, DIoU
  • 数据增强:CutOut, MixUp, CutMix
  • 正则化方法:DropOut, DropPath ,Spatial DropOut , DropBlock
  • 标准化方法:Batch Normalization (BN) ,Cross-GPU Batch Normalization (CGBN or SyncBN), Filter Response Normalization (FRN) , Cross-Iteration Batch Normalization (CBN)
  • Skip-connections:Residual connections, Weighted residual connections, Multi-input weighted residual connections, Cross stage partial connections (CSP)

  由于PReLU和SELU更难训练,而ReLU6是专门为量化网络设计的,因此将上述激活函数从候选列表中删除PPReLU和SELU。

  在正则化方法中,发表DropBlock的人将他们的方法与其他方法进行了详细的比较,他们的正则化方法取得了很多成果。因此,本文毫不犹豫地选择DropBlock作为正则化方法。

  对于标准化方法的选择,因为本文只关注使用一个GPU的训练策略,所以不考虑syncBN。

5.4.3 额外的提升策略

  为了使所设计的检测器更适合在单个GPU上进行训练,进行了以下额外的设计和改进:

  • 使用了新的数据增强方法:Mosaic和Self-Adversarial Training (SAT)
  • 在应用遗传算法时选择最优超参数
  • 修改了一些现有的方法,使其适合于有效的训练和检测:modified SAM, modified PAN和Cross mini-Batch Normalization (CmBN)

  Mosaic是一种新的数据增强方法,它混合了4幅训练图像。因此,混合了4种不同的上下文,而CutMix仅混合2个输入图像。这允许检测正常上下文之外的目标。此外,批处理归一化从每个层上的4个不同图像计算激活统计信息,这大大减少了对大的mini-batch size的需求(例如,如果训练资源限制,每次只能训练一张图片,有了Mosaic数据增强方法后,相当于训练的一张图片中包含4中图片信息)。

  自我对抗训练(SAT)也是一种新的数据增强技术,分为两个前后阶段。在第一阶段,神经网络改变原始图像,而不是网络权重。通过这种方式,神经网络对自身执行对抗性攻击,改变原始图像,从而产生图像上没有所需目标的欺骗。在第二阶段,训练神经网络以正常方式检测修改后图像上的目标。
在这里插入图片描述
  CmBN表示CBN修改后的版本,如图4所示,定义为Cross mini-Batch Normalization(CmBN)。这仅收集单个批次中的小批次之间的统计信息。
在这里插入图片描述
在这里插入图片描述
  将SAM从spatial-wise attention修改为point-wise attention,并将PAN的快捷连接替换为串联,分别如图5和图6所示。

5.5 YOLOv4

  YOLOv4的组成:

  • Backbone: CSPDarknet53
  • Neck: SPP , PAN
  • Head: YOLOv3

YOLOv4使用以下bag:

  • Backbone中使用的Bag of Freebies (BoF):CutMix和Mosaic数据增强、DropBlock正则化、Class label smoothing
  • Backbone中使用的Bag of Specials (BoS) :Mish激活函数、Cross-stage partial connections (CSP)、Multiinput weighted residual connections (MiWRC)
  • 检测器中使用的Bag of Freebies (BoF):CIoU-loss、CmBN、DropBlock正则化、Mosaic数据增强、Self-Adversarial Training、Eliminate grid sensitivity、一个GT使用多个anchors、Cosine annealing scheduler、超参数调优、随机训练图片大小
  • 检测器中使用的Bag of Specials (BoS):Mish激活函数、SPP-block、SAM-block、PAN path-aggregation block、DIoU-NMS
    在这里插入图片描述