YOLOv4中的tricks概念总结——Bag of freebies

简介: YOLOv4中的tricks概念总结——Bag of freebies

以下内容是对YOLOv4总结出的Bag of freebies进行一个汇总记录,也就是一个分支


通常,传统的目标检测器是离线训练的。因此,研究人员总是喜欢利用这一优势,开发更好的训练方法,使目标检测器在不增加推理代价的情况下获得更好的准确率。我们把这些只会改变培训策略或只会增加培训成本的方法称为“Bag of freebies”。


以下我对这些方法进行一个简要的汇总与介绍:

image.png


1.pixel-wise调整


满足Bag of freebies定义的目标检测方法经常采用的是数据扩增。数据增强的目的是增加输入图像的可变性,使所设计的目标检测模型对不同环境下获得的图像具有更高的鲁棒性。

image.png


1)photometric distortion

  • Brightness(亮度)
  • Contrast(对比度)
  • Hue(色调)
  • Saturation(饱和度)
  • Noise(噪声)

通过调整输入图片的亮度、对比度、色调、饱和度和添加噪声来进行数据增强。


2)geometric distortion

  • Random Scaling(随机缩放)
  • Random Cropping(随机裁剪)
  • Random Flipping(随机翻转)
  • Random Rotating(随机旋转)

随机翻转和随机旋转的区别在于,随机翻转是通常对输入图片以某个轴进行翻转,随机旋转是随输入图片进行顺时针角度旋转。


2.物体遮挡


1)random erase 、CutOut

random erase 、CutOut可以随机选择图像中的矩形区域,并填充一个随机或互补值为零


  • random erase

论文:Random Erasing Data Augmentation

arxiv:https://arxiv.org/pdf/1708.04896v2.pdf

github源码:https://github.com/zhunzhong07/Random-Erasing


Random Erase称为随机擦除,随机选择一个区域,采用随机值进行覆盖,所选区域一定在图像内。把物体遮挡一部分也能被正确识别分类,这样就迫使网络利用局部数据进行训练识别,增大了训练难度,一定程度提高模型的泛化能力。

image.png


  • 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,但需要注意的是,随机选择的区域可能不在图像内,也就是说正方形区域可能只有部分处在图像内,因而模拟了任意形状的擦除操作。

image.png


2)hide-and-seek 、grid mask

hide-and-seek 、grid mask在图像中随机或均匀地选择多个矩形区域,并将其全部替换为零


  • 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都可能改变训练集的数据分布,作者经过计算,采用整个数据集的均值影响最小。

image.png


  • grid mask

论文:GridMask Data Augmentation

arxiv:https://arxiv.org/pdf/2001.04086v2.pdf


该方法是前三个遮挡方法的改进,因为Random Erase、CutOut和Hide-and-Seek都可能存在一个问题,就是把图像的可判别区域全部删除或者保留,引入噪声并且效果不佳。


怎么解决上述问题,在删除信息和保留信息之间做权衡呢?只需结构化drop操作,例如均匀分布地删除正方形区域,并且通过控制密度和size参数,来达到平衡,密度就是正方形个数,size就是正方形大小。

image.png

四种遮当方法的对比:

image.png


3)DropOut、DropConnect、DropBlock

类似于输入图像遮挡,在特征图上丢弃某些信息的方法常叫做正则化,也就是将类似的概念应用到特性映射中,最终目的还是防止模型过拟合。正则化的操作方式有:DropOut、DropConnect、DropBlock


  • DropOut

DropOut是在训练过程中随意按概率丢弃一些神经元,丢弃的神经元输出置0;也就是随机删除减少神经元的数量,使网络变得更简单。

image.png


  • 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


中间Dropout的方式会随机的删减丢弃一些信息,但Dropblock的研究者认为,卷积层对于这种随机丢弃并不敏感,因为卷积层通常是三层连用:卷积+激活+池化层,池化层本身就是对相邻单元起作用。而且即使随机丢弃,卷积层仍然可以从相邻的激活单元学习到相同的信息。因此,在全连接层上效果很好的Dropout在卷积层上效果并不好。所以右图Dropblock的研究者则干脆整个局部区域进行删减丢弃。

image.png

如图:

图中(b)绿色的部分就是语义信息,该图模拟了Dropout的做法,随机丢弃一些位置的特征,但是作者认为这样并没有什么效果,因为网络依旧可以从相邻位置元素推断出来。

图(c)就是DropBlock的做法,既然丢弃某个单独位置不行,那么就按照一块一块地随意丢弃,迫使网络去学习到更加鲁棒的特征。


3.用多张图来进行数据增强


1)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也需要按照比例融合,对应的lable值就是[0.2,0.8],比如,原图如下所示:

image.png

而MixUp处理后的图像如图所示,需要注意,对于的标签也需要进行处理:

image.png


2)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的结合,将图片的一部分区域擦除并随机填充训练集中的其他数据区域像素值

image.png


4.GAN实现数据增强


1)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


style transfer GAN论文发现了一个结论:CNN训练学习到的实际是纹理特征(texture bias)而不是形状特征,这与人类的认知相反,因而通过gan引入风格化的ImageNet数据集,平衡纹理和形状偏置,提高模型的泛化能力。可以实现数据增强,可以有效减少CNN学习到的纹理偏差。

image.png

作者使用了6份数据,正常的猫、灰度图、只包含轮廓的、只包含边缘的、只有纹理没有形状的、猫的形状大象的纹理的,由结果可知,对于正常的图片和灰度图,网络识别率都很高,对于只包含轮廓和边缘的,网络识别率较低,对于只包含纹理的,网络识别率也较高。对于猫的形状大象的纹理的图片,网络误识别为大象的概率较高,因而可以推断网络学习的实际是纹理特征。因而可以通过GAN随机将物体的纹理替换,从而增强网络的学习特征能力。

image.png


5.数据分布不平衡


与上面提出的各种方法不同,其他一些Bag of freebies方法致力于解决数据集中的语义分布可能存在偏差的问题。在处理语义分布偏差问题时,一个非常重要的问题是不同类别之间存在数据不平衡的问题。


1)hard negative example mining( two-stage)

hard negative example mining解释为难例挖掘,一般用在two-step网络中。


在目标检测中我们会事先标记好ground_truth,接下来在图片中随机提取一系列sample,与ground_truth重叠率IoU超过一定阈值的(比如0.5),则认为它是positive sample,否则为negative sample,考虑到实际负样本数>>正样本数,我们为了避免network的预测值少数服从多数而向负样本靠拢,取正样本数:负样本数大约为1:3,显而易见,用来训练网络的负样本为提取的负样本的子集,那么,我们当然选择负样本中容易被分错类的困难负样本来进行网络训练啰。


那么负样本中哪些是困难负样本(hard negative)呢?困难负样本是指哪些容易被网络预测为正样本的proposal,即假阳性(false positive),如roi里有二分之一个目标时,虽然它仍是负样本,却容易被判断为正样本,这块roi即为hard negative,训练hard negative对提升网络的分类性能具有极大帮助,因为它相当于一个错题集。


如何判断它为困难负样本呢?也很简单,我们先用初始样本集(即第一帧随机选择的正负样本)去训练网络,再用训练好的网络去预测负样本集中剩余的负样本,选择其中得分最高,即最容易被判断为正样本的负样本为困难样本,加入负样本集中,重新训练网络,循环往复。


参考链接:https://blog.csdn.net/qq_36570733/article/details/83444245


2)online hard example mining( two-stage)

online hard example mining在线难例挖掘也一般用在two-step目标检测网络中。


简单来说就是从ROI中选择hard,而不是简单的采样。

Forward: 全部的ROI通过网络,根据loss排序;

Backward:根据排序,选择B/N个loss值最大的(worst)样本来后向传播更新model的weights.

这里会有一个问题,即位置相近的ROI在map中可能对应的是同一个位置,loss值是相近的,所以针对这个问题,提出的解决方法是:对hard做nms,然后再选择B/N个ROI反向传播,这里nms选择的IoU=0.7。

在后向传播时,直觉想到的方法就是将那些未被选中的ROI的loss直接设置为0即可,但这实际上还是将所有的ROI进行反向传播,时间和空间消耗都很大,所以作者在这里提出了本文的网络框架,用两隔网络,一个只用来前向传播,另一个则根据选择的ROIs进行后向传播,的确增加了空间消耗(1G),但是有效的减少了时间消耗,实际的实验结果也是可以接受的。


详细可以查看参考:https://blog.csdn.net/u013608402/article/details/51275486


3)Focal Loss(one-stage)

Focal loss主要是为了解决one-stage目标检测中正负样本比例严重失衡的问题。该损失函数降低了大量简单负样本在训练中所占的权重,也可理解为一种困难样本挖掘。


主要过程就是将又来的二分类交叉熵损失函数:

image.png

其中:gamma>0使得减少易分类样本的损失。使得更关注于困难的、错分的样本。例如gamma为2,对于正类样本而言,预测结果为0.95肯定是简单样本,所以(1-0.95)的gamma次方就会很小,这时损失函数值就变得更小。而预测概率为0.3的样本其损失相对很大。对于负类样本而言同样,预测0.1的结果应当远比预测0.7的样本损失值要小得多。对于预测概率为0.5时,损失只减少了0.25倍,所以更加关注于这种难以区分的样本。这样减少了简单样本的影响,大量预测概率很小的样本叠加起来后的效应才可能比较有效。


此外,加入平衡因子alpha,用来平衡正负样本本身的比例不均:文中alpha取0.25,即正样本要比负样本占比小,这是因为负例易分。


详细可以参考:https://www.cnblogs.com/king-lps/p/9497836.html


6.one-hot类别之间没有关联


另一个非常重要的问题是,不同类别之间关联程度的关系很难用one-hot表示。


1)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操作,比如[0 1]的one-hot编码,经过label smooth变成[0.05 0.95]。label smooth核心就是对label进行soft操作,不要给0或者1的标签,而是有一个偏移,相当于在原label上增加噪声,让模型的预测值不要过度集中于概率较高的类别,把一些概率放在概率较低的类别。


2)知识蒸馏

论文: Label refinement network for coarse-to-fine semantic segmentation

arxiv:https://arxiv.org/pdf/1703.00551.pdf


为了获得更好的软标签,Islam 等人引入了知识蒸馏的概念来设计标签细化网络。


7.边界框(BBox)回归


最后一包Bag of freebies是Bounding Box(BBox)回归的目标函数。

image.png


1)Smooth L1 Loss

实际目标检测框回归任务中的损失loss为:

image.png


Smooth L1 Loss缺点:

image.png


2)IoU_loss

paper:https://arxiv.org/pdf/1608.01471.pdf


考虑了预测BBox区域和地面真实BBox区域的覆盖范围。由于欠条是尺度不变的表示,可以解决传统方法在计算{x, y, w, h}的L1 loss 或者 L2loss时,损失会随着尺度的增大而增大的问题。

image.png

IoU Loss,其将4个点构成的box看成一个整体进行回归

image.png

IoU_loss的损失函数为:

image.png

IoU_loss缺点:


  • 当预测框和目标框不相交时,IoU(A,B)=0时,不能反映A,B距离的远近,此时损失函数不可导,IoU Loss 无法优化两个框不相交的情况。
  • 假设预测框和目标框的大小都确定,只要两个框的相交值是确定的,其IoU值是相同时,IoU值不能反映两个框是如何相交的。


3)GIoU_loss

paper:https://arxiv.org/abs/1902.09630

github:https://github.com/generalized-iou/g-darknet


GIoU损失是在覆盖区域之外还包括对象的形状和方向。他们提出寻找能够同时覆盖预测的BBox和ground truth BBox的最小面积BBox,并用这个BBox作为分母来代替原来IoU loss中使用的分母。

image.png

如上图所示,三种不同相对位置的框拥有相同的IoU=0.33值,但是拥有不同的GIoU=0.33,0.24,-0.1。当框的对齐方向更好一些时GIoU的值会更高一些。


GIoU_loss定义为:

image.png

其中:公式中的A c 指的是如图所示的外围蓝色的边界框;u uu指的是预测边界框与真实边界框之间的并集面积。当两个边界框处于同一水平线或者是同一竖直线上时,会退化成IoU


GIoU_loss的损失函数为:

image.png

分析:

image.png

GIoU_loss缺点:

image.png

当目标框完全包裹预测框的时候,IoU和GIoU的值都一样,此时GIoU退化为IoU, 无法区分其相对位置关系


4)DIoU_loss

好的目标框回归损失应该考虑三个重要的几何因素:重叠面积,中心点距离,长宽比。DIoU Loss,相对于GIoU Loss收敛速度更快,该Loss考虑了重叠面积和中心点距离,但没有考虑到长宽比。


DIoU Loss function定义为:

image.png

image.png


(上图中绿色框为目标框,黑色框为预测框,灰色框为两者的最小外界矩形框,d表示目标框和真实框的中心点距离,c表示最小外界矩形框的距离。)

image.png


5)CIoU_loss

paper:https://arxiv.org/pdf/1911.08287.pdf

github:https://github.com/Zzh-tju/DIoU-darknet


同时考虑了重叠面积、中心点之间的距离和长宽比。CIoU可以在BBox回归问题上获得更好的收敛速度和精度。CIou Loss改进了DIOU Loss,把重叠面积,中心点距离,长宽比都考虑进来了。


CIoU Loss function定义为:

image.png

其中:

image.png



参考链接:

https://blog.csdn.net/weixin_38688399/article/details/106692156

https://www.cnblogs.com/yymn/articles/13672236.html

opencv学堂的文章:想读懂YOLOV4,你需要先了解下列技术(一)

https://zhuanlan.zhihu.com/p/104236411

https://www.bilibili.com/video/BV1yi4y1g7ro?p=4


目录
相关文章
|
1月前
|
机器学习/深度学习 Web App开发 人工智能
轻量级网络论文精度笔(一):《Micro-YOLO: Exploring Efficient Methods to Compress CNN based Object Detection Model》
《Micro-YOLO: Exploring Efficient Methods to Compress CNN based Object Detection Model》这篇论文提出了一种基于YOLOv3-Tiny的轻量级目标检测模型Micro-YOLO,通过渐进式通道剪枝和轻量级卷积层,显著减少了参数数量和计算成本,同时保持了较高的检测性能。
35 2
轻量级网络论文精度笔(一):《Micro-YOLO: Exploring Efficient Methods to Compress CNN based Object Detection Model》
|
5月前
|
机器学习/深度学习 计算机视觉 知识图谱
【YOLOv8改进】ACmix(Mixed Self-Attention and Convolution) (论文笔记+引入代码)
YOLO目标检测专栏探讨了YOLO的改进,包括卷积和自注意力机制的创新结合。研究发现两者在计算上存在关联,卷积可分解为1×1卷积,自注意力也可视为1×1卷积的变形。由此提出ACmix模型,它整合两种范式,降低计算开销,同时提升图像识别和下游任务的性能。ACmix优化了移位操作,采用模块化设计,实现两种技术优势的高效融合。代码和预训练模型可在相关GitHub和MindSpore模型库找到。 yolov8中引入了ACmix模块,详细配置参见指定链接。
|
5月前
|
机器学习/深度学习 测试技术 计算机视觉
【YOLOv8改进】DAT(Deformable Attention):可变性注意力 (论文笔记+引入代码)
YOLO目标检测创新改进与实战案例专栏探讨了YOLO的有效改进,包括卷积、主干、注意力和检测头等机制的创新,以及目标检测分割项目的实践。专栏介绍了Deformable Attention Transformer,它解决了Transformer全局感受野带来的问题,通过数据依赖的位置选择、灵活的偏移学习和全局键共享,聚焦相关区域并捕获更多特征。模型在多个基准测试中表现优秀,代码可在GitHub获取。此外,文章还展示了如何在YOLOv8中应用Deformable Attention。
|
机器学习/深度学习 存储 JSON
YOLOv5的Tricks | 【Trick10】从PyTorch Hub加载YOLOv5
YOLOv5的Tricks | 【Trick10】从PyTorch Hub加载YOLOv5
1163 0
YOLOv5的Tricks | 【Trick10】从PyTorch Hub加载YOLOv5
|
计算机视觉 索引
YOLOv5的Tricks | 【Trick14】YOLOv5的val.py脚本的解析
YOLOv5的Tricks | 【Trick14】YOLOv5的val.py脚本的解析
1360 0
YOLOv5的Tricks | 【Trick14】YOLOv5的val.py脚本的解析
|
数据可视化 计算机视觉
Backbone | What?没有Normalize也可以起飞?全新Backbone之NF-ResNet(文末获取论文与源码)
Backbone | What?没有Normalize也可以起飞?全新Backbone之NF-ResNet(文末获取论文与源码)
91 1
|
机器学习/深度学习 人工智能 自然语言处理
论文解读系列| 04:【NER】FLAT模型详解
FLAT也是一种将词汇信息融入character-based模型的解决方案。有2个创新点(1)将lattice结构转为由spans组成的平铺结构,每个span可以是字符或者词及其在原始lattice结构中的位置;(2)基于Transformer设计了一种巧妙position encoding来充分利用lattice结构信息,从而无损地引入词汇信息。
|
机器学习/深度学习 编解码 并行计算
深度学习论文阅读目标检测篇(七)中文版:YOLOv4《Optimal Speed and Accuracy of Object Detection》
大多数基于 CNN 的目标检测器基本上都仅适用于推荐系统。例 如:通过城市摄像头寻找免费停车位,它由精确的慢速模型完成,而 汽车碰撞警报需要由快速、低精度模型完成。改善实时目标检测器的 精度,使其能够不仅可以用于提示生成推荐系统,也可以用于独立的 流程管理和减少人力投入。传统 GPU 使得目标检测可以以实惠的价 格运行。最准确的现代神经网络不是实时运行的,需要大量的训练的 GPU 与大的 mini bacth size。我们通过创建一个 CNN 来解决这样的 问题,在传统的 GPU 上进行实时操作,而对于这些训练只需要一个 传统的 GPU。
267 0
|
机器学习/深度学习 编解码 并行计算
深度学习论文阅读目标检测篇(七)中英对照版:YOLOv4《Optimal Speed and Accuracy of Object Detection》
 有大量的技巧可以提高卷积神经网络(CNN)的精度。需要在大 数据集下对这种技巧的组合进行实际测试,并需要对结果进行理论论 证。某些技巧仅在某些模型上使用和专门针对某些问题,或只针对小 规模的数据集;而一些技巧,如批处理归一化、残差连接等,适用于 大多数的模型、任务和数据集。我们假设这种通用的技巧包括加权残 差连接(Weighted-Residual-Connection,WRC)
346 0
|
机器学习/深度学习 自然语言处理 JavaScript
R-Drop: Regularized Dropout for Neural Networks 论文笔记(介绍,模型结构介绍、代码、拓展KL散度等知识)
R-Drop: Regularized Dropout for Neural Networks 论文笔记(介绍,模型结构介绍、代码、拓展KL散度等知识)
下一篇
无影云桌面