YOLO那些事儿【YOLOv4详解】

目录

1. YOLOv4创新点

2. 输入端

2.1 Mosaic数据增强

2.2 SAT自对抗训练

2.3 CmBN策略

3. Backbone

3.1 CSPDarknet53

3.2 Mish激活函数 

3.3 Dropblock

4. Neck 

4.1 SPP结构

4.2 PAN结构 

4.3 注意力机制

5. Head

5.1 CIOU_Loss

5.2 DIOU_NMS 


1. YOLOv4创新点

YOLOv4结合了大量前人研究技术,加以组合并进行适当创新的算法,实现了速度和精度的完美平衡——“超级缝合怪”,集百家之所长

  • 输入端:Mosaic数据增强、cmBN、SAT自对抗训练
  • BackBone:CSPDarknet53、Mish激活函数、Dropblock
  • Neck:特征增强模块,目标检测网络在BackBone和最后的输出层之间插入SPP模块、FPN+PAN结构
  • Head:特征预测,锚框机制和Yolov3相同,主要改进的是回归框位置损失函数CIOU_Loss,以及预测框筛选的NMS变为DIOU_NMS

2. 输入端

2.1 Mosaic数据增强

Mosaic是参考CutMix数据增强的方式,CutMix只使用了两张图片进行拼接,而Mosaic数据增强则采用了4张图片,随机缩放、随机裁剪、随机排布的方式进行拼接。

优点:

  • 丰富数据集:随机使用4张图片,随机缩放,再随机分布进行拼接,大大丰富了检测数据集,特别是随机缩放增加了很多小目标,让网络的鲁棒性更好
  • 减少GPU:Mosaic增强训练时,可以直接计算4张图片的数据,使得Mini-batch大小并不需要很大,一个GPU就可以达到比较好的效果

2.2 SAT自对抗训练

SAT为一种数据增强方式:

  • 第一阶段:使用神经网络去改变图片数据,而不是更新权重数据,可以理解为图像数据生成
  • 第二阶段,神经网络以正常方式在扩充后的图像数据集上进行训练

2.3 CmBN策略

 

  • batch:指代与 BN 层的统计量实际想要相对应的数据池,也就是图片样本数
  • mini-batch:由于整个 batch 独立计算时,受到资源限制可能不现实,于是需要将 batch 拆分成数个 mini-batch,每个 mini-batch 单独计算后汇总得到整个 batch 的统计量,从而归一化特征

Reference:BN、CBN、CmBN 的对比与总结_有为少年的博客-CSDN博客

日常在使用 BN 时,此时如果不使用特殊的设定,那么 batch 与 mini-batch 是一样的。CBN 和 CmBN所做的就是如何使用多个独立的 mini-batch 的数据获得一个近似于更大 batch 的统计量以提升学习效果

CBN 主要用来解决在 Batch-Size 较小时,BN 的效果不佳问题。CBN 连续利用多个迭代的数据来变相扩大 batch size 从而改进模型的效果。这种用前几个 iteration 计算好的统计量来计算当前迭代的 BN 统计量的方法会有一个问题:过去的 BN 参数是由过去的网络参数计算出来的特征而得到的,而本轮迭代中计算 BN 时,它们的模型参数其实已经过时了。

CmBN 是基于 CBN 改进的,主要的差异在于从滑动窗口变为固定窗口。每个 batch 中的统计不会使用 batch 之前的迭代的信息,仅会累积该窗口内的 4 次迭代以用于最后一次迭代的更新。这一策略基本与梯度累积策略仍有不同,梯度累加仅仅累加了梯度,BN 的统计量实际上也累积了起来。

3. Backbone

3.1 CSPDarknet53

 

  • 采用的主干网络为CSPDarknet53,CSPDarknet53是在Yolov3主干网络Darknet53的基础上借鉴CSPNet,其中包含了5个CSP模块
  • CSPNet全称是Cross Stage Partial Networks,跨阶段局部网络。CSPNet解决了其他大型卷积神经网络框架Backbone中网络优化的梯度信息重复问题,将梯度的变化从头到尾地集成到特征图中,因此减少了模型的参数量和FLOPS数值,既保证了推理速度和准确率,又减小了模型尺寸
  • CSPNet实际上是基于Densnet的思想,复制基础层的特征映射图,通过dense block发送副本到下一个阶段,从而将基础层的特征映射图分离出来

3.2 Mish激活函数 

  • 无上界有下界无上界是任何激活函数都需要的特性,因为它避免了导致训练速度急剧下降的梯度饱和
  • 非单调函数:这种性质有助于保持小的负值,从而稳定网络梯度流。大多数常用的激活函数,如ReLU, Leaky ReLU,由于其差分为0,不能保持负值,因此大多数神经元没有得到更新
  • 无穷阶连续性和光滑性:Mish是光滑函数,具有较好的泛化能力和结果的有效优化能力
  • 计算量较大,效果更好:与ReLU相比,计算量大,但在深度神经网络中显示了比ReLU更好的结果 

3.3 Dropblock

  • DropBlock方法的引入是为了克服Dropout随机丢弃特征的主要缺点,Dropout是全连接网络的有效策略,但在特征空间相关的卷积层中效果不佳
  • DropBlock在相邻相关区域中丢弃特征,这样既可以实现生成更简单模型的目的,又可以在每次训练迭代中引入学习部分网络权值的概念,对权值矩阵进行补偿,从而减少过拟合

4. Neck 

4.1 SPP结构

  • SPP-Net全称Spatial Pyramid Pooling Networks
  • 主要是用来解决不同尺寸的特征图如何进入全连接层
  • 对任意尺寸的特征图直接进行固定尺寸的池化,来得到固定数量的特征

4.2 PAN结构 

  • FPN自顶向下的模式,顶部信息逐层地往下传,计算量比较大
  • PANet(Path Aggregation Network),是一种特征图融合方式,引入了自底向上的路径,使得底层信息更容易传递到高层顶部
  • YOLOv4使用PANet代替FPN进行参数聚合以适用于不同level的目标检测,PANet论文中融合的时候使用的方法是Addition,YOLOv4算法将融合的方法由加法改为Concatenation

4.3 注意力机制

YOLOv4中引入注意力机制,希望网络能够自动学出来图片需要注意的地方,比如人眼在看一幅画的时候,不会将注意力平等地分配给画中的所有像素,而是将更多注意力分配给人们关注的地方。

从实现的角度来讲,注意力机制就是通过神经网络的操作生成一个掩码mask,mask上的值一个打分,重点评价当前需要关注的点,注意力机制可以分为:

  • 通道注意力机制:对通道生成掩码mask进行打分——SENet, Channel Attention Module
  • 空间注意力机制:对空间进行掩码mask进行打分——Spatial Attention Module
  • 混合域注意力机制:同时对通道注意力和空间注意力进行评价打分——BAM, CBAM

YOLOv4源代码中使用了SE注意力机制:通过对卷积的到的feature map进行处理,得到一个和通道数一样的一维向量作为每个通道的评价分数,然后将分数分别加到对应的通道上。

5. Head

5.1 CIOU_Loss

IOU LOSS 存在的问题是,如果预测框和目标框不相交的话,IOU=0,损失函数不可导:

YOLOv4用CIOU损失(考虑了长和宽的比值)代替了YOLOv3的box位置损失,取代了预测框和真实框的中心点坐标以及宽高信息设定MSE(均方误差)损失函数或者BCE损失函数,其他部分损失没改变(总Loss为三个特征图Loss之和)。


补充:

  • IOU Loss:考虑了重叠面积,归一化坐标尺度
  • GIOU Loss:考虑了重叠面积,基于IOU解决边界框不相交时loss等于0的问题
  • DIOU Loss:考虑了重叠面积和中心点距离,基于IOU解决GIOU收敛慢的问题
  • CIOU Loss:考虑了重叠面积、中心点距离、纵横比,基于DIOU提升回归精确度
  • EIOU Loss:考虑了重叠面积,中心点距离、长宽边长真实差,基于CIOU解决了纵横比的模糊定义,并添加Focal Loss解决预测框回归中的样本不平衡问题

5.2 DIOU_NMS 

NMS过滤掉预测相同对象的其他边界框,并保留具有最高可信度的边界框。

  • YOLOv4三个特征图一共可以解码出 19 × 19 × 3 + 38 × 38 × 3 + 76 × 76 × 3 = 22743个box以及相应的类别、置信度。 首先,设置一个置信度阈值,筛选掉低于阈值的box,再经过DIOU_NMS(非极大值抑制)后,输出整个网络的预测结果
  • DIOU_NMS在抑制冗余框的同时,采用IoU和两个边界盒中心点之间的距离,这使得它在有遮挡的情况下更加健壮 

猜你喜欢

转载自blog.csdn.net/daydayup858/article/details/130782443