Yolo v4

1. 动机

YOLOv4对深度学习中一些常用Tricks进行了大量的测试,最终选择了这些有用的Tricks:WRC、CSP、CmBN、SAT、 Mish activation、Mosaic data augmentation、CmBN、DropBlock regularization 和 CIoU loss。【全都是不知道的trick】

2.方法概要

  1. 输入端:这里指的创新主要是训练时对输入端的改进,主要包括Mosaic数据增强、cmBN、SAT自对抗训练
  2. **BackBone主干网络:**将各种新的方式结合起来,包括:CSPDarknet53、Mish激活函数、Dropblock
  3. Neck:目标检测网络在BackBone和最后的输出层之间往往会插入一些层,比如Yolov4中的SPP模块FPN+PAN结构
  4. Prediction:输出层的锚框机制和Yolov3相同,主要改进的是训练时的损失函数CIOU_Loss,以及预测框筛选的nms变为DIOU_nms
  • Mosaic【缓解小目标数据量小的问题,可以特意针对小目标进行mosaic,施展空间很大】

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

3d目标检测算法分几类 目标检测 模型_3d目标检测算法分几类

  • CmBN:BN是对当前mini-batch进行归一化。CBN是对当前以及当前往前数3个mini-batch的结果进行归一化,本文提出的CmBN则是仅仅在这个Batch中进行累积。在消融实验中,CmBN要比BN高出不到一个百分点。【不知道在说什么】
  • SAT:

SAT是一种自对抗训练数据增强方法,这一种新的对抗性训练方式。在第一阶段,神经网络改变原始图像而不改变网络权值。以这种方式,神经网络对自身进行对抗性攻击,改变原始图像,以制造图像上没有所需对象的欺骗。在第二阶段,用正常的方法训练神经网络去检测目标。

  • CSP:这里的基础单元CBL(conv+BN+LeaklyReLu)和ResUnit(CBL串联,然后skip connection)共同构成了CSPX单元的结构,整体也有skip connection过程。【降低计算瓶颈,降低内存占有,特殊结构增加CNN学习能力】
  • 3d目标检测算法分几类 目标检测 模型_深度学习_02

  • 在特征提取backbone部分使用Mish激活函数,在后面head上仍然是leaklyRELU【保持单边抑制的情况下,也能保留一部分负梯度,继承了LeaklyReLu的优点,同时负梯度的保持是非线性的】
  • 3d目标检测算法分几类 目标检测 模型_宽高_03

  • Drop Block:一种适用于卷积层的DropOut方法。因为普通的dropout用在全连接层中比较好,可以减少网络中neutron的共现性,可是在卷积层中普通的dropout无法消除neutron对featuremap空间位置上的共现性,因此有了dropblock。他思想类似于随机crop或msak掉一部分feature让网络去学。【思想源于Cutout但精细于Cutout,能够在feature上操作】
  • 3d目标检测算法分几类 目标检测 模型_神经网络_04

  • SPP多尺度特征route:接到backbone后面,分别用不同大小(粒度)的maxpooling(1x1,5x5,9x9,13x13)进行stride=1的池化,得到隔行采样的feature,代表了不同细粒度的特征。
  • 3d目标检测算法分几类 目标检测 模型_3d目标检测算法分几类_05

  • PAN+FPN:FPN就不说了,前向过程正常进行feature下采样,降低分辨率,然后在金字塔部分,将低分辨率feature进行上采样,和高分辨率feature交互,就完成了FPN,而PAN的特点是从feature角度出发,再次运行一次类似FPN前向的过程,即把高分辨率feature再次下采样,和低分辨率feature进行交互。下图中最上面的黄色concatenate和右边最上面一个concatenate都是FPN过程,而下面的两个黄色concatenate是PAN过程。【把高分辨率feature中的信息通过PAN呈递到低分辨率上去,让具有更大感受野情况下得到的低分辨率feature也能包含更多低频信息】
  • 3d目标检测算法分几类 目标检测 模型_宽高_06

  • CIoU Loss用于优化bbox回归任务:Bounding Box Regeression的Loss近些年的发展过程是:Smooth L1 Loss-> IoU Loss(2016)-> GIoU Loss(2019)-> DIoU Loss(2020)->CIoU Loss(2020)。
  • IOULoss的问题在于完全没有相对位置关系的概念。
  • GIOULoss用两个bbox的最小外接矩形减差集的方式计算IOU,一定程度上带有相对位置的信息进去了,但是当出现包含情况时会发生退化,也无能为力。
  • DIOULoss: 既然GIOULoss在包含时没有办法,那可不可以找到衡量两个bbox位置关系的度量的,因此DIOULoss就找出来两个bbox中心点距离这个度量和最小外接矩形他的对角线距离。理想情况下,可以衡量两个bbox的包含情况下的对角线上的远近关系了。但是存在一个问题是同一个位置下的不同宽高的bbox会得到相同的IOULoss,忽略了宽高这个因素的影响,同时下图中黄框绕蓝框中心旋转分布时,一样失败。
  • CIOULoss:把宽高也考虑进去了。感觉IOUloss的实现非常的不美观,优化bbox有其他手段可是使用,但偏要用这个优化,可能就是为了朝着具体指标进行显式优化吧。
  • DIOU_NMS:上面提到的IOULOss, GIOULoss, CIOULoss, DIOULoss都可以用来计算IOU值,那用来计算NMS时使用不是很好吗?但是效果最好的CIOU_Loss需要额外的宽高只能用于训练阶段,在测试阶段只能使用DIOU来计算IOU了,效果也是杠杠滴。【DIOU考虑了两个bbox的中心点的距离,当两个物体靠的比较近的时候,普通的IOU可能计算出来会超过阈值,然后其中一个框会被丢掉,但是DIOU计算时,数值上可能会稍小点?但是也不一定,这个反正也不是完全靠谱。】

3.细节或注意事项

4. 评价

已经挺好的了,看YoloV5怎么编吧。