一文总结YOLOv4所列的Bag of freebies
YOLOv4
YOLOv4其实是一个结合了大量前人研究技术,加以组合并进行适当创新的高水平论文,实现了速度和精度的完美平衡。
论文总结了大量的目标检测提点技巧(tricks),分为Bag of Freebies和Bag of Specials,本人在阅读该论文时就想着把这些技巧全部总结起来,以便日后所需。
yolov4论文:YOLOv4: Optimal Speed and Accuracy of Object Detection
arxiv:https://arxiv.org/abs/2004.10934
github源码:https://github.com/AlexeyAB/darknet
目标检测架构
论文把当前目标检测架构分为了四部分:
- 输入(Input): 图像、图像金字塔等;
- 骨干网络(Backbone):用于提取图片的特征图,常用的有VGG16、ResNet-50、SpineNet、EfficientNet-B0/B7、CSPResNetXt50、CSPDarknet53等;
- 颈部网络(Neck):
- 额外模块:SPP、ASPP、RFB、SAM
- 融合模块:FPN、PAN、NAS-FPN、Full-connected FPN、BiFPN、ASFF、SFAM
- 头部网络(Head):
- Dense Prediction(one-stage)
- RPN、SSD、YOLO、RetinaNet(anchor based)
- CornerNet、CenterNet、MatrixNet、FCOS(anchor free)
- Sparse Prediction(two-stage)
- Faster R-CNN、R-FCN、Mask R-CNN(anchor based)
- RepPoints(anchor free)
- Dense Prediction(one-stage)
Bag of freebies
Bag of freebies是指只增加训练成本而不增加推理成本来提高检测精度的方法,通常指的是数据增强。
像素级调整
几何畸变
- Random Scaling(随机缩放)
- Random Cropping(随机裁剪)
- Random Flipping(随机翻转)
- Random Rotating(随机旋转)
随机翻转和随机旋转的区别在于,随机翻转是通常对输入图片以某个轴进行翻转,随机旋转是随输入图片进行顺时针角度旋转。
光照变化
- Brightness(亮度)
- Contrast(对比度)
- Hue(色调)
- Saturation(饱和度)
- Noise(噪声)
通过调整输入图片的亮度、对比度、色调、饱和度和添加噪声来进行数据增强。
遮挡
遮挡操作是对输入图片进行遮挡来进行数据增强。
Random Erase
论文:Random Erasing Data Augmentation
arxiv:https://arxiv.org/pdf/1708.04896v2.pdf
github源码:https://github.com/zhunzhong07/Random-Erasing
Random Erase称为随机擦除,随机选择一个区域,采用随机值进行覆盖,所选区域一定在图像内。把物体遮挡一部分也能被正确识别分类,这样就迫使网络利用局部数据进行训练识别,增大了训练难度,一定程度提高模型的泛化能力。
CutOut
论文:Improved Regularization of Convolutional Neural Networks with Cutout
arxiv:https://arxiv.org/pdf/1708.04552v2.pdf
github源码:https://github.com/uoguelph-mlrg/Cutout
思路比Random Erase简单,随机选择一个固定大小的正方形区域,像素值全部用0填充即可,但为了避免0填充对训练数据有影响,需要对训练数据进行归一化处理,norm到0,但需要注意的是,随机选择的区域可能不在图像内,也就是说正方形区域可能只有部分处理图像内,因而模拟了任意形状的擦除操作。
Hide-and-Seek
论文:Hide-and-Seek: A Data Augmentation Technique for Weakly-Supervised Localization and Beyond
arxiv:https://arxiv.org/pdf/1811.02545.pdf
github源码:https://github.com/kkanshul/Hide-and-Seek
将图像切分成S*S网络,每个网络使用一定概率进行遮挡,从而模拟出Random Erase和CutOut的效果。
但是遮挡值设置为何值比较关键,如果填0或者255都可能改变训练集的数据分布,作者经过计算,采用整个数据集的均值影响最小。
GridMask
论文:GridMask Data Augmentation
arxiv:https://arxiv.org/pdf/2001.04086v2.pdf
该方法是前三个遮挡方法的改进,因为Random Erase、CutOut和Hide-and-Seek都可能存在一个问题,就是把图像的可判别区域全部删除或者保留,引入噪声并且效果不佳。
怎么解决上述问题,在删除信息和保留信息之间做权衡呢?只需结构化drop操作,例如均匀分布地删除正方形区域,并且通过控制密度和size参数,来达到平衡,密度就是正方形个数,size就是正方形大小。
正则化
类似于输入图像遮挡,在特征图上丢弃某些信息的方法常叫做正则化,最终目的还是防止模型过拟合
Dropout
Dropout就不多解释了,在训练过程中随意按概率丢弃一些神经元,丢弃的神经元输出置0
DropConnect
DropConnect是国人提出的一个方法,思路和Dropout类似,但是DropConnect是在训练过程中把神经元的输入权值按概率置0,由于DropConnect处理起来比Dropout麻烦,效果和Dropout差不多,故没有成为主流技术。
DropBlock
论文:DropBlock: A regularization method for convolutional networks
arxiv:https://arxiv.org/pdf/1810.12890.pdf
github源码:https://github.com/miguelvr/dropblock
DropBlock其实是Dropout在卷积层上的推广,作者认为Dropout多是作用在全连接层上,在卷积层上使用Dropout意义不大,因为每个特征图位置都有一个感受野范围,卷积层的特征图中相邻位置元素在空间上共享语义信息,单单对某一个像素进行dropout并不能降低特征图学习的特征范围,换一句话来说,网络仍然可以通过相邻位置元素学习相应的语义信息,也不会促使网络去学习更加鲁棒的特征了。
如图,图中(b)绿色的部分就是语义信息,该图模拟了Dropout的做法,随机丢弃一些位置的特征,但是作者认为这样并没有什么效果,因为网络依旧可以从相邻位置元素推断出来。
图(c)就是DropBlock的做法,既然丢弃某个单独位置不行,那么就按照一块一块地随意丢弃,迫使网络去学习到更加鲁棒的特征。
多图数据增强
多图数据增强一般是指将多张图片融合一起的数据增强操作。
Mixup
论文:mixup: BEYOND EMPIRICAL RISK MINIMIZATION
arxiv:https://arxiv.org/pdf/1710.09412.pdf
Mixup就是将两张图片采用比例混合,label也按照比例混合。
例如将图片1的像素值乘以0.2+图片2的像素值乘以0.8,相应的one-hot的label也需要按照比例融合。
CutMix
论文:CutMix: Regularization Strategy to Train Strong Classifiers with Localizable Features
arxiv:https://arxiv.org/pdf/1905.04899.pdf
github源码:https://github.com/clovaai/CutMix-PyTorch
CutMix是CutOut和Mixup的结合,将图片的一部分区域擦除并随机填充训练集中的其他数据区域像素值。
Mosaic数据增强
Mosaic数据增强是YOLOv4的创新点,也是CutMix的拓展,CutMix是混合两张图,Mosaic数据增强是混合了四张具有不同语义信息的图片,可以让检测器检测出超乎常规语境的目标,增强鲁棒性,并减少对大的mini-batch的依赖。
Style Transfer GAN
论文:ImageNet-trained cnns are biased towards texture; increasing shape bias improves accuracy and robustness
arxiv:https://arxiv.org/pdf/1811.12231.pdf
论文发现了一个结论:CNN训练学习到的实际是纹理特征(texture bias)而不是形状特征,这与人类的认知相反,因而通过gan引入风格化的ImageNet数据集,平衡纹理和形状偏置,提高模型的泛化能力。
作者使用了6份数据,正常的猫、灰度图、只包含轮廓的、只包含边缘的、只有纹理没有形状的、猫的形状大象的纹理的,由结果可知,对于正常的图片和灰度图,网络识别率都很高,对于只包含轮廓和边缘的,网络识别率较低,对于只包含纹理的,网络识别率也较高。对于猫的形状大象的纹理的图片,网络误识别为大象的概率较高,因而可以推断网络学习的实际是纹理特征。
因而可以通过GAN随机将物体的纹理替换,从而增强网络的学习特征能力。
数据分布不均衡
two stage
- Hard Negative Example Mining
- Online Hard Example Mining
核心思想都是将误分类的图片再次输入网络进行训练。
one stage
- Focal Loss
核心思想是降低易分类样本的下降的损失,让网络关注困难的、错分的样本。
类别之间没有关联
Label Smoothing
论文:ImageNet-trained cnns are biased towards texture; increasing shape bias improves accuracy and robustness
arxiv:https://arxiv.org/pdf/1512.00567.pdf
思想就是对one-hot的label进行soft操作,相当于对label也添加了噪声,如[0 1]的one-hot编码,经过label smooth变成[0.05 0.95],常用于防止模型过拟合,让模型也能关注概率较低的类别。
知识蒸馏
论文: Label refinement network for coarse-to-fine semantic segmentation
arxiv:https://arxiv.org/pdf/1703.00551.pdf
用于获得更好的soft label。
BBox回归
IOU Loss
IOU Loss就是比较真实框与预测框交集和并集之比。
(图片引用知乎作者CrazyVertigo)
GIOU Loss
- 当预测框和目标框不相交时,IoU(A,B)=0时,不能反映A,B距离的远近,此时损失函数不可导,IoU Loss 无法优化两个框不相交的情况。
- 假设预测框和目标框的大小都确定,只要两个框的相交值是确定的,其IoU值是相同时,IoU值不能反映两个框是如何相交的。
(图片引用知乎作者CrazyVertigo)
(三种不同相对位置的框拥有相同的IoU=0.33值,但是拥有不同的GIoU=0.33,0.24,-0.1。当框的对齐方向更好一些时GIoU的值会更高一些。)
GIOU的实现方式就是找到真实框和预测框外接的最小矩形C,用C减去真实框和预测框的并集再除以C得到一个数值,再用真实框和预测框的IOU减去这个数值得到GIOU。
DIOU Loss
- 当真实框完全包裹预测框的时候,IoU和GIoU的值都一样,此时GIoU退化为IoU, 无法区分其相对位置关系。
(图片引用知乎作者CrazyVertigo)
好的目标框回归损失应该考虑三个重要的几何因素:重叠面积,中心点距离,长宽比。DIoU Loss,相对于GIoU Loss收敛速度更快,该Loss考虑了重叠面积和中心点距离,但没有考虑到长宽比。
(图片引用知乎作者CrazyVertigo)
(上图中绿色框为目标框,黑色框为预测框,灰色框为两者的最小外界矩形框,d表示目标框和真实框的中心点距离,c表示最小外界矩形框的距离。)
DIOU定义为:
CIOU Loss
CIou Loss改进了DIOU Loss,把重叠面积,中心点距离,长宽比都考虑进来了。
CIOU定义为:
参考
想读懂YOLOV4,你需要先了解下列技术(一)
目标检测回归损失函数简介:SmoothL1/IoU/GIoU/DIoU/CIoU Loss