YOLOv4之trick总结(1)

YOLOv4: Optimal Speed and Accuracy of Object Detection

近期目标检测领域最惹人注目的论文应该就属YOLOv4了,这篇论文除了提出速度与精度兼备的v4模型外,还总结了一大批目标检测领域中涨点常用的trick与即插即用模块。作者将现有的目标检测涨点方法分为两类:在推理阶段不增加计算损耗的trick(Bag of freebies)、仅增加微小的计算损耗的trick(Bag of specials),如下所示(可能存在遗漏)。本次笔记将较详细地记录这些涨点利器。

  • 不增加计算损耗的trick(Bag of freebies):

  1. 像素级数据增强(亮度、对比度、色彩、饱和度、噪声;随机尺度、裁剪、翻转、旋转)

  2. 模拟目标遮挡(Random Erase、Cutout、Hide-and-seek、Grid-mask;Dropout、DropConnect、DropBlock)

  3. 使用多张图混合增强(Mixup、CutMix)

  4. 样本不平衡问题(困难样本挖掘(HEM、OHEM)、Focalloss)

  5. Onehot类标无法表示各类之间关系(Labelsmooth、Label refinement network)

  6. 边框回归损失函数(IoU、GIoU、DIoU、CIoU loss)

  • 仅增加微小的计算损耗的trick(Bag of specials):

  1. 增加感受野(SPP、ASPP、RFB)

  2. 注意力机制(SE、SAM)

  3. 特征融合(SFAM、ASFF、BiFPN)

  4. 激活函数(LReLU、PReLU、ReLU6、Scaled Exponential Linear Unit(SELU)、Swish、hard-Swish、Mish)

  5. 非极大值抑制(GreedyNMS、softNMS、DIoUNMS)

 

1.不增加计算损耗的trick:

  1. 像素级数据增强:此类增强主要分为光学操作与几何操作两类,其中光学操作包括了图像的亮度、对比度、色彩、饱和度、噪声调整,而几何操作包括常用的随机尺度调整、图像裁剪、图像水平与垂直翻转、图像旋转等。这一类trick中最为常用的就是图像水平垂直翻转,一般的目标检测算法都会默认采用该增强方式,即将图像及其目标的标注左右翻转。在类方法就不一一列举了,都是图像处理的基本操作。

  2. 模拟目标遮挡增强:此类方法分为两类,一类是通过随机地遮挡、抹除一部分图像来增强模型(Random Erase、Cutout、Grid-mask、HaS),另一类是用类似的理念来随机地遮挡、抹除一部分网络节点、特征图以增强模型的鲁棒性(Dropout、DropConnect、DropBlock)。         

                        YOLOv4之trick总结(1)_第1张图片

 

  • Random Erase:训练时,在输入图像上随机选择一个矩形区域,将该区域的像素替换为随机值。该增强策略可以使训练图片受到不同程度的遮挡,从而降低过拟合的风险并提高模型的鲁棒性。

  • Cutout:训练时,利用固定大小的矩形对图像进行遮挡,在矩形范围内所有的值都被设置为0,或者其他纯色值。

  • Grid-mask:训练时,生成一个与原图相同分辨率的mask,然后将该mask与原图相乘得到增强后的图像。如下图所示,mask图中黑色区域值为0,其余区域值为1。

                                                    YOLOv4之trick总结(1)_第2张图片

 

Grid-mask

  • HaS(Hide-and-seek):该方法原本是用于解决弱监督目标检测中网络激活区域仅聚焦在物体的个别部位的问题。其将图像按网格划分,各网格的大小及隐藏率相同,在每次训练时随机隐藏一些网格,从而解决激活区域过于集中的问题。对于隐藏区域,文中采用整个数据集的均值来对其进行填充。

                              YOLOv4之trick总结(1)_第3张图片

 

  • Dropout、DropConnect、DropBlock:Dropout不用多说,最基本的神经网络正则方法;DropConnect与Dropout不同的地方是在训练过程中,它不是随机的将隐层节点的输出变成0,而是将节点中的每个与其相连的输入权值以1-p的概率变成0(不丢节点,丢连接权值);DropBlock则是随机丢特征图,按伯努利分布随机采点,之后按预设的blocksize生成将要丢弃的区域(所有通道可以共享该mask,也可以各通道采用不同mask,实验证明后者优)。

                             YOLOv4之trick总结(1)_第4张图片

                            YOLOv4之trick总结(1)_第5张图片

 

3. 使用多张图混合增强:此类方法包括Mixup、CutMix以及文中所提出的Mosaic,其中 Mixup、CutMix都是将两张图像进行融合训练而YOLOv4中提出的Mosaic是同时将四张图像 融合训练的。

  • Mixup:将两张训练图片以一定权重逐像素相加后输入训练,融合后的图像的尺寸取两张图片尺寸中的最大值。

  • CutMix:类似于Cutout与Mixup,将一部分区域cut掉但不填充0像素而是随机填充训练集中的其他数据的区域像素值。

                             YOLOv4之trick总结(1)_第6张图片

 

 

                                YOLOv4之trick总结(1)_第7张图片

  • Mosaic:YOLOv4提出了该增强方法,训练时拼接四张图像(不同大小、比例)将其输入网络训练,近期还有一项类似工作(Stitcher: Feedback-driven Data Provider for Object Detection)也是拼接四张图像输入训练,Stitcher的拼接过程中令四张图大小相同,而Mosaic是拼接了四张大小比例不同的图。

 

                          YOLOv4之trick总结(1)_第8张图片

4. 样本不均衡问题:面对目标检测领域常见的样本不均衡问题(政府样本不均衡、难易样本不均衡、类别不均衡),通常采用OHEM与Focalloss减轻该问题。

  • OHEM:即在线难例样本挖掘,在检测器训练阶段根据各RoI的loss值,选择loss值最大的一部分样本进行反向传播(根据loss度量,无论正负样本,传统的难例挖掘技术只针对负样本)。

  • Focalloss:这几年单阶段检测器的必备loss,与OHEM不同,focalloss通过度量预测概率来判断难易样本,自适应调整训练损失。

                      YOLOv4之trick总结(1)_第9张图片

 

5. Onehot类标无法表示各类之间关系:(Labelsmooth、Label refinement network)

  • Label Smooth:通过软化传统的one-hot类型标签,使得在计算损失值时能够有效抑制过拟合现象。如下图所示,label smooth相当于减少真实样本标签的类别在计算损失函数时的权重,最终起到抑制过拟合的效果。

                                 YOLOv4之trick总结(1)_第10张图片 

                                    

  • Label refinement network:这个网络也比较好理解,就是使用级联标签的方式,在多个级别上施加监督信息,并且逐级从粗到细的细化特征。该文中提到的Refinement module也是将前一层输出的label map与卷积特征图进行融合输出更大尺寸的label map。

 

                                 YOLOv4之trick总结(1)_第11张图片

 

                                 YOLOv4之trick总结(1)_第12张图片

6. 边框回归损失函数:YOLOv4文中提到在边框回归任务中,损失函数的选择也至关重要,传统通常采用MSE、L1loss进行度量,然而这些损失是会随着目标的尺寸改变而改变的,不具有尺度不变性,故拥有尺度不变性的IoU类型的损失近些年被更多的应用(IoU、GIoU、DIoU、CIoU)

  • IoU:IoU可以度量预测检测框与真实检测框的检测效果,且具有尺度不变性(scale invariant), 在回归任务中,判断predict box和gt的距离最直接的指标就是IoU。(满足非负性;同一性;对称性;三角不等性)

                                                               

 

  • GIoU:IoU损失存在一些缺陷,若两个框没有相交,IoU=0不能反映两者的距离大小,并且没有梯度回传,无法进行学习训练。因此CVPR2019一文提出了GIoU,先计算两个框的最小闭包区域面积A_{c}(同时包含了预测框和真实框的最小框的面积),再计算出IoU,再计算闭包区域中不属于两个框的区域占闭包区域的比重,最后用IoU减去这个比重得到GIoU。

与IoU只关注重叠区域不同,GIoU不仅关注重叠区域,还关注其他的非重合区域,能更好的反映两者的重合度。

                                                   

  • DIoU:DIoU要比GIou更加符合目标框回归的机制,将目标与anchor之间的距离,重叠率以及尺度都考虑进去,使得目标框回归变得更加稳定,不会像IoU和GIoU一样出现训练过程中发散等问题。

其中,b,b^{gt}分别代表了预测框和真实框的中心点,且\rho代表的是计算两个中心点间的欧式距离。c代表的是能够同时包含预测框和真实框的最小闭包区域的对角线距离。DIoU loss可以直接最小化两个目标框的距离,因此比GIoU loss收敛快得多。

                                                              

                                                 YOLOv4之trick总结(1)_第13张图片

你可能感兴趣的:(目标检测)