【YOLO V4】目标检测模型之YOLO V4框架

 

【YOLO V4】目标检测模型之YOLO V4框架_第1张图片

 

这篇文章的贡献如下:

  • 我们设计了一个高效并且强大的目标检测模型。它使每个人都可以使用1080 Ti或2080 TiGPU来训练一个超级快速和精确的目标探测器。
  • 我们验证了在检测器训练过程中,最先进的“Bag of freebies(免费包)”和“Bag of specials(特价包)” 的目标检测方法的影响。
  • 我们修改了当前最先进的一些方法(包括CBN、PAN、SAM etc.),使其更有效,更适合于单GPU训练。
  • 总之,在速度差不多的情况下,精度最好;在精度差不多的情况下,速度最好。

 

YOLOv4 使用了以下特征组合:

  • 加权残差连接(Weighted-Residual-Connections,WRC)
  • 跨阶段部分连(Cross-Stage-Partial-connection,CSP)
  • 跨小批量标准化(Cross mini-Batch Normalization,CmBN)
  • 自对抗训练(Self-adversarial-training,SAT)
  • Mish 激活(Mish-activation)
  • Mosaic 数据增强
  • DropBlock 正则化
  • CIoU 损失

2.4.1 目标检测分析

【YOLO V4】目标检测模型之YOLO V4框架_第2张图片

根据上图,对于目标检测器的结构分类如下:

Input

Image, Patches, Image Pyramid

Backbones

VGG16 [68], ResNet-50 [26], SpineNet[12], EficientNet-B0/B7 [75], CSPResNeXt50 [81],CSPDarknet53 [81]

Neck

Additional blocks

SPP [25], ASPP [5], RFB[47], SAM [85]

Path-aggregation blocks

FPN [44], PAN [49],NAS-FPN [17],Fully-connected FPN, BiFPN[77], ASFF [48], SFAM [98]

Heads

Dense Prediction (one-stage)

RPN [64], SSD [50], YOLO [61], RetinaNet[45] (anchor based),CornerNet [37], CenterNet [13], MatrixNet[60], FCOS [78] (anchor free)

Sparse Prediction (two-stage)

Faster R-CNN [64], R-FCN [9], Mask R-CNN [23] (anchor based),RepPoints [87] (anchor free)

2.4.2 调优手段

作者把所有的调优手段分为了两大类“Bag of freebies(免费礼包)”和“Bag of specials(特价包)”

免费包(Bag of freebies,BOF)

是指在离线训练阶段为了提升精度而广泛使用的调优手段,而这种技巧并不在预测中使用,不会增加预测时间。即:只是改变训练策略或者增加训练代价的方法。

数据类

数据增强:random erase/CutOut/hide-and-seek/grid mask/MixUp/CutMix/GAN

数据分布:two-stage的有example mining,one-stage的有focal loss

特征图类

DropOut/DropConnect/DropBlock

边界框回归损失

MSE/ IoU loss/l1、l2 loss/GIoU loss/DIoU loss/CIoU loss

特价包(Bag of Specials,BOS)

对于那些仅增加少量推理成本,却能显著提高目标检测精度的插件模块后处理方法,称之为“特价包”。插件模块是为了提高模型中的某一属性,扩大感受野、引入注意力机制、增强特征集成能力和激活函数;后处理是为了筛选模型预测结果。

插件模块

增大感受野

SPP/ASPP/RFB

注意力

Squeeze-and-Excitation (SE)/Spa-tial Attention Module (SAM)

特征集成

SFAM/ASFF/BiFPN

激活函数

ReLu/LReLU/PReLU/ReLU6/Scaled ExponentialLinear Unit (SELU)/Swish/hard-Swish/Mish

后处理类

soft NMS/DIoU NMS

2.4.3 YOLO V4 方法

Backbone:

CSPDarknet53

Neck:

SPP[25], PAN

Head:

YOLOv3

 

具体而言,YOLO v4 使用了:

  • 用于骨干网络的BoF:CutMix 和 Mosaic 数据增强、DropBlock 正则化和类标签平滑;
  • 用于骨干网络的BoS:Mish 激活、CSP 和多输入加权残差连接(MiWRC);
  • 用于检测器的BoF:CIoU-loss、CmBN、DropBlock 正则化、Mosaic 数据增强、自对抗训练、消除网格敏感性(Eliminate grid sensitivity)、针对一个真值使用多个锚、余弦退火调度器、优化超参数和随机训练形状;
  • 用于检测器的BoS:Mish 激活、SPP 块、SAM 块、PAN 路径聚合块和 DIoU-NMS。

架构选择

【YOLO V4】目标检测模型之YOLO V4框架_第3张图片

作者选择架构主要考虑几方面的平衡:输入网络分辨率/卷积层数量/参数数量/输出维度。

 

一个模型的分类效果好不见得其检测效果就好,想要检测效果好需要以下几点:

  • 更大的网络输入分辨率——用于检测小目标——作者使用:CSPDarknet53
  • 更深的网络层——能够覆盖更大面积的感受野——作者使用:SPP-block
  • 更多的参数——更好的检测同一图像内不同size的目标——作者使用:PANet

最终YOLOv4的架构:

  • backbone:CSPResNext50
  • additional block:SPP-block
  • path-aggregation neck:PANet
  • heads:YOLOv3的heads

 

BoF(免费礼包)和BoS(特价包)的选择

  • 对于训练激活函数,由于PReLU和SELU更难训练,而ReLU6是专门为量化网络设计的,因此将上述其余激活函数从候选列表中删除。
  • regularization方法上,发表Drop-Block的人将其方法与其他方法进行了详细的比较,其regularization方法取得了很大的成果。因此,作者毫不犹豫地选择DropBlock作为regularization方法。
  • 归一化方法的选择上,由于关注的是只使用一个GPU的训练策略,所以没有考虑syncBN。

 

 

 

其他改进

为了使设计的检测器更适合于单GPU上的训练,作者做了如下的附加设计和改进:

  • 介绍了一种新的数据增强Mosaic法和Self-AdversarialTraining自对抗训练法。
  • 应用遗传算法选择最优超参数。
  • 改进SAM,改进PAN,和跨小批量标准化(CmBN),使我们的设计适合于有效的训练和检测

 

 

 

2.4.4 算法中用到的方法

马赛克数据增强(Mosaic data augmentation)

【YOLO V4】目标检测模型之YOLO V4框架_第4张图片

作者是基于CutMix做的改进,将4张训练图片混合成一张的新数据增强方法,这样可以丰富图像的上下文信息。标签是根据所占面积大小给与. 这种做法的好处是允许检测上下文之外的目标,增强模型的鲁棒性。此外,在每一层从4个不同的图像批处理标准化计算激活统计,这大大减少了对大mini-batch处理size的需求。

【YOLO V4】目标检测模型之YOLO V4框架_第5张图片

自对抗训练(Self-Adversarial Training,SAT)

【YOLO V4】目标检测模型之YOLO V4框架_第6张图片

这是一种新的数据扩充技术,该技术分前后两个阶段进行。

  • 在第一阶段,神经网络改变原始图像而不是网络权值。通过这种方式,神经网络对自身执行一种对抗性攻击,改变原始图像,从而造成图像上没有目标的假象。
  • 在第二阶段,训练神经网络对修改后的图像进行正常的目标检测。

 

DropBlock 正则化(DropBlock regularization)

【YOLO V4】目标检测模型之YOLO V4框架_第7张图片

  1. 像图b,网络还会从drouout掉的激活单元附近学习到同样的信息。
  2. 图c,通过dropout掉一部分相邻的整片的区域(比如头和脚),网络就会去注重学习狗的别的部位的特征,来实现正确分类,从而表现出更好的泛化。

 

类标签平滑(Class label smoothing)

[0, 0, 1]   —>  [0.01, 0.01, 0.98]

[…]·(1-a) + a/n·[1,1…,1]

Eg:a = 0.03 class num = 3,

[0,0,1]*(1-0.03) + 0.03 / 3 *[1,1,1] = [0.01,0.01,0.98]

 

 

CIoU 损失(CIoU-loss)

【YOLO V4】目标检测模型之YOLO V4框架_第8张图片

 

DIoU-NMS

【YOLO V4】目标检测模型之YOLO V4框架_第9张图片

 

跨小批量标准化(Cross mini-Batch Normalization,CmBN)

【YOLO V4】目标检测模型之YOLO V4框架_第10张图片

1、Batch Normalization

BN我们都知道他主要由四个参数:均值,方差,和两个重构参数γ、β。在每一次的前向传播中,他会收集mini-batch的均值和方差,通过均值和方差去学习γ和β,从而重构一个原始网络的分布,保证后层数据输入的一直性。一般情况下使用BN,可以增加学习率,进而使训练的速度得到提升等优点[1]。

https://img-blog.csdn.net/20160312190113493

https://img-blog.csdn.net/20160312190323411  https://img-blog.csdn.net/20160312190336072

https://img-blog.csdn.net/20160312190726792

2、Cross-Iteration Batch Normalization

 

 

CBN是去估计几个连续batch的统计参数。

1.背景

还是为了解决BN在小batchsize时效果不好的问题

2.CBN

(1)作者认为连续几次训练iteration中模型参数的变化是平滑的

(2)作者将前几次iteration的BN参数保存起来,当前iteration的BN参数由当前batch数据求出的BN参数和保存的前几次的BN参数共同推算得出(顾名思义 Cross-Interation BN)

(3)训练前期BN参数记忆长度短一些,后期训练稳定了可以保存更长时间的BN参数来参与推算,效果更好

3.我个人的理解:

可以将CBN粗糙地总结为 “前几次训练的BN(LN/GN应该都可以)参数” + 当前batch数据计算的BN(LN/GN)参数 来计算得出当前次训练iteration真正的CBN参数。

【YOLO V4】目标检测模型之YOLO V4框架_第11张图片

3、Cross mini-Batch Normalization,CmBN

最终论文中结合了BN和CBN方法。它只收集单个批次中的小批次之间的统计信息。这样做的好处是可以在batch size比较小的情况下维持精度在一个合理的范围下。同时这样做也是为了论文中提到的适合单卡GPU训练。

 

 

 

 

网格消除敏感(Eliminate grid sensitivity)

【YOLO V4】目标检测模型之YOLO V4框架_第12张图片

【YOLO V4】目标检测模型之YOLO V4框架_第13张图片

通过将sigmoid乘以一个超过1.0的因子来解决这个问题

 

 

 

 

模拟余弦退火(Cosine annealing scheduler)

这是针对学习率的。

【YOLO V4】目标检测模型之YOLO V4框架_第14张图片

 

 

Mish激活(Mish activation)

Mish=x * tanh(ln(1+e^x))

 

 

 

理论上对负值的轻微允许允许更好的梯度流,而不是像ReLU中那样的硬零边界。

平滑的激活函数允许更好的信息深入神经网络,从而得到更好的准确性和泛化。

【YOLO V4】目标检测模型之YOLO V4框架_第15张图片

 

跨阶段部分连接(Cross-Stage-Partial-connection,CSP)

CSPNet可以大大减少计算量,提高推理速度和准确性

一部分经过密集块和过渡层,另一部分与传输的特征映射结合到下一阶段

 

【YOLO V4】目标检测模型之YOLO V4框架_第16张图片

 

空间金字塔池化(Spatial Pyramid Pooling,SPP)

不管输入尺寸是怎样,SPP层 可以产生固定大小的输出 ,用于多尺度训练

【YOLO V4】目标检测模型之YOLO V4框架_第17张图片

 

 

 

Spatial Attention Module,SAM

作者基于原先的SAM进行了改进。

原先的:不仅在通道上加上了SE注意力机制,在空间上也加入了SE注意力机制

【YOLO V4】目标检测模型之YOLO V4框架_第18张图片

【YOLO V4】目标检测模型之YOLO V4框架_第19张图片

图b作者修改后的,SE结构变成了先进行卷积,在进行sigmoid,然后和原始的特征进行点点相乘。从空间注意力机制(spatial-wise attention)修改为点注意力机制(point-wise attention)

 

路径聚合网络(Path Aggregation Network,PAN)

PAN基于FPN和Mask RCNN模型之上提出了三点创新:

1、PANet改进了主干网络结构,加强了特征金字塔的结构,缩短了高低层特征融合的路径

2、提出了更灵活的RoI池化。之前FPN的RoI池化只从高层特征取值,现在则在各个尺度上的特征里操作;

3、预测mask的时候使用一个额外的fc支路来辅助全卷积分割支路的结果。

PANet在COCO 17实例分割竞赛中取得了第一名的成绩,在检测任务中取得了第二的成绩。

下图展示PANet的细节:

【YOLO V4】目标检测模型之YOLO V4框架_第20张图片

【YOLO V4】目标检测模型之YOLO V4框架_第21张图片

 

由原来的addition对其修改为级联(concatenation)

【YOLO V4】目标检测模型之YOLO V4框架_第22张图片

 

 

 

TODO.....

 

 

 

你可能感兴趣的:(#,深度学习框架)