论文题目: YOLOv4: Optimal Speed and Accuracy of Object Detection
论文链接:https://arxiv.org/pdf/2004.10934.pdf
论文代码:https://github.com/AlexeyAB/darknet
yolov4 其实相对创新点很少,可以理解为基于各种trick进行的一个grid search,找出最好的组合。下面就简单介绍一下yolov4中用到的trick。如果需要深入了解,每个对应的trick在文中都有论文链接,供大家参考。
YOLOv4
Backbone:
CSPDarkNet53
Neck:
SPP
PAN
Head:
YOLOv3
Tricks(backbone):
CutMix
Mosaic
DropBlock
Label Smoothing
Modified(backbone):
Mish
CSP
MiWRC
Tricks(detector):
CIoU
CMBN
DropBlock
Mosaic
SAT
Eliminate grid sensitivity
Multiple Anchor
Cosine Annealing scheduler
Random training shape
Modified(detector):
Mish
SPP
SAM
PAN
DIoU-NMS
Backbone
CSPDarkNet53
论文链接:CSPNET: A NEW BACKBONE THAT CAN ENHANCE LEARNING CAPABILITY OF CNN
作者研究表明:CSPResNeXt50在分类方面优于CSPDarkNet53,而在检测方面反而表现要差。对于分类而言最好的模型可能并不适合于检测,相反,检测模型需要具有以下特性:
- 更高的输入分辨率,为了更好的检测小目标;
- 更多的层,为了具有更大的感受野;
- 更多的参数,更大的模型可以同时检测不同大小的目标。
选择具有更大感受野、更大参数的模型作为backbone。
CSPResNeXt50仅仅包含16个卷积层,其感受野为425x425,包含20.6M参数;而CSPDarkNet53包含29个卷积层,725x725的感受野,27.6M参数。从理论与实验角度表明:CSPDarkNet53更适合作为检测模型的Backbone。具体CSPNet见CSP部分。
Neck
SPP
论文链接:Spatial pyramid pooling in deep convolutional networks for visual recognition
Spatial Pyramid Pooling
yolov3中有一个版本就是yolov3-spp。yolov4在CSPDarkNet53基础上,作者添加了SPP模块,因其可以提升模型的感受野、分离更重要的上下文信息、不会导致模型推理速度的下降;
原始SPP结构:
yolov3+ spp结构:见下图
PAN
作者还采用PANet中的不同backbone级的参数汇聚方法替代FPN。
FPN是自顶向下,将高层的强语义特征传递下来,对整个金字塔进行增强,不过只增强了语义信息,对定位信息没有传递。而PANet在FPN的后面添加一个自底向上的金字塔,这样的操作是对FPN的补充,将低层的强定位特征传递上去。
- 自底向上的路径增强,为了缩短信息传播路径,同时利用低层特征的精准定位信息
- 动态特征池化,每个proposal利用金字塔所有层的特征,为了避免proposal的随意分配,对分类及定位更加有利。
- 全连接层融合,为了给掩码预测增加信息来源
将PAN的short-cut连接改为拼接:
Head
YOLOv3
yolov3+spp结构
spp模块结构
Tricks(backbone)
CutMix
论文链接:CutMix: Regularization Strategy to Train Strong Classifiers
with Localizable Features
数据增强:Mixup,Cutout,CutMix
- Mixup:将随机的两张样本
按比例混合,分类的结果按比例分配; - Cutout:随机的将样本中的部分区域cut掉,并且
填充0像素值,分类的结果不变; - CutMix:就是将一部分区域cut掉但不填充0像素而是随机填充训练集中的
其他数据的区域像素值,分类结果按一定的比例分配
是二进制掩码,是逐像素相乘,属于Beta分布。
对二进制掩进行采样,先对剪裁区域的边界框进行采样:
Mosaic
mosaic dataloader在https://github.com/ultralytics/yolov3提出
数据增强Mosaic data augmentation,是一种将4张训练图片混合成一张的新数据增强方法,这样可以丰富图像的上下文信息,提高小物体的检测效果。如下图所示:
这种做法的好处是允许检测上下文之外的目标,增强模型的鲁棒性。此外,在每一层从4个不同的图像批处理标准化计算**统计,这大大减少了对大mini-batch处理size的需求。
DropBlock
论文链接:DropBlock: A regularization method for convolutional networks
在卷积层进行dropout来防止网络过拟合。在featuremap上去一块一块的找,进行归零操作,类似于dropout,叫做dropblock。
(a)原始输入图像(b)绿色部分表示**的特征单元,b图表示了随机dropout**单元,但是这样dropout后,网络还会从drouout掉的**单元附近学习到同样的信息©绿色部分表示**的特征单元,c图表示DropBlock,通过dropout掉一部分相邻的整片的区域,网络就会去注重学习别的部位的特征,来实现正确分类,从而表现出更好的泛化。
dropblock有三个比较重要的参数,一个是block_size,用来控制进行归零的block大小;一个是γ,用来控制每个卷积结果中,到底有多少个channel要进行dropblock;最后一个是keep_prob,作用和dropout里的参数一样。
Label Smoothing
论文链接:Rethinking the inception architecture for computer vision
may be useful:When Does Label Smoothing Help?
Label Smoothing 是一种正则化的方法,对标签平滑化处理以防止过拟合。
one-hot编码标签可能存在:模型对于预测过于自信,以至于忽略到可能的小样本标签;导致过拟合。Label smoothing让分类之间的cluster更加紧凑,增加类间距离,减少类内距离,避免over high confidence的adversarial examples。
Modified(backbone)
Mish
论文链接:Mish: A Self Regularized Non-Monotonic Neural Activation Function
Mish:新的深度学习**函数
CSP
论文链接:CSPNET: A NEW BACKBONE THAT CAN ENHANCE LEARNING CAPABILITY OF CNN
Cross Stage Partial Network(CSPNet)设计的主要目的是在减少计算量的同时实现更丰富的梯度组合。这一目标是通过将基础层的特征映射划分为两部分,然后通过提出的跨阶段层次结构将它们合并。
CSPNet是一种处理的思想,可以和不同的backbone结合使用。CSPNet提出主要是为了解决三个问题:
- 增强CNN的学习能力,能够在轻量化的同时保持准确性。
- 降低计算瓶颈
- 降低内存成本
CSPNet和PRN都是一个思想,将feature map拆成两个部分,一部分进行卷积操作,另一部分和上一部分卷积操作的结果进行concate。
MiWRC
Weighted-Residual-Connections加权残差连接Tricks(detector)
CIoU
论文链接:Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression
文章提出两个Loss :Distance-IoU(DIoU) Loss和Complete IoU(CIoU) Loss用于目标检测的Bbox回归,并与IoU Loss和GIoU Loss做了对比。此外,DIoU很容易用在NMS中。
-
IOU Loss: -
GIoU Loss:引入了一个惩罚项,其中C表示能覆盖候选框和真实框的最小box.由于惩罚项的引入,在不重叠的情况下,预测框会向目标框移动。 -
DIoU Loss:出现下面情况时,GIoU Loss完全降级成IoU Loss,因此引入DIoU Loss,DIoU Loss是在IoU Loss基础上引入一个惩罚项。,是,的中心点,为欧氏距离,为覆盖,最小box的对角线长度。惩罚使中心点距离最小。 -
CIoU Loss:CIoU Loss又引入一个box长宽比的惩罚项,该Loss考虑了box的长宽比
CMBN
BN论文链接:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
CBN论文链接:Cross-Iteration Batch Normalization
- CBN,将前几次iteration的BN参数保存起来,当前iteration的BN参数由当前batch数据求出的BN参数和保存的前几次的BN参数共同推算得出
- CMBN,CBN的修改版本,如下图所示,定义为Cross mini-Batch Normalization(CmBN)。这仅收集单个批中的小批之间的统计信息。
SAT
self adversarial training ,这是一种新的数据扩充技术,该技术分前后两个阶段进行。
- 在第一阶段,神经网络改变原始图像而不是网络权值。通过这种方式,神经网络对自身执行一种对抗性攻击,改变原始图像,从而造成图像上没有目标的假象。
- 在第二阶段,训练神经网络对修改后的图像进行正常的目标检测。
Eliminate grid sensitivity
消除网格敏感度Multiple Anchor
为单个 ground truth设置多个anchorsCosine Annealing scheduler
Random training shape
随机训练形状,yolov2,Multi-Scale TrainingModified(detector)
SAM
SENet只关注通道的注意力
CBAM:Channel attention module+Spatial attention module
在yolov4中采用了Spatial attention module(SAM)将SAM从空间上的attention修改为点上的attention:
DIoU-NMS
论文链接:Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression
DIoU-NMS在hard-nms的基础上,用DIoU替换IoU。DIoU Loss是在IoU Loss基础上引入一个惩罚项。,是,的中心点,为欧氏距离,为覆盖,最小box的对角线长度。惩罚使中心点距离最小。