YoloV4是Alexey Bochkovskiy在小马哥的yolo系列基础上的新的续作,主要是利用了许多trick在速度和效果上进行了提升。
截止2020,目标检测网络主要是以下这些类型:
Bag of freebies
这种提升效果的方法原理是利用线下训练过程,使用更好的训练方式,在不提升推理时间的前提下,提高检测精度,最常见的就是
图像细节增强
数据增强(例如,光学畸变和几何畸变是两种常用的数据增强方法;利用光学畸变,调整图像的亮度、对比度、色调、饱和度和噪声。对于几何畸变,添加随机缩放,裁剪,翻转和旋转。)
另一种常见方法为数据遮挡,即将图片中部分位置像素置为0,例如随机擦除和剪切,在特征图中使用DropOut、DropConnect、DropConnect
多图片训练,即将多个图片作为输入图片,例如MixUp、CutMix,将两张不同缩放系数的图片相乘并相加,新样本的标签也是进行线性组合得到。
mixup也可以增加数据集的多样性,从而降低模型的方差,提高模型的鲁棒性。
总之,mixup是一种非常实用的数据增强技术,它可以用于各种机器学习任务中,可以有效地防止过拟合,并且可以提高模型的泛化能力。在实际应用中,mixup可以帮助我们更好地利用有限的数据集,并且提高模型的性能
相关链接:【pytorch】使用mixup技术扩充数据集进行训练_pytorch mixup-CSDN博客
CutMix:裁剪部分矩形区域,用于训练
相关链接:高阶数据增强:Cutmix 原理讲解&零基础程序实现-CSDN博客
利用GAN网络进行数据增强:使用 GAN 进行数据增强和生成-CSDN博客
由于CNN学习的是图片的纹理特征,因此利用GAN网络融合纹理特征,实现数据增强
语义分布偏置
即某一类class对象较多,数据集分布不平衡,解决方法:
难例挖掘:将hard sample 补充到数据集里,重新丢进网络当中,就好像给网络准备一个错题集,哪里不会点哪里。抑制简单负例,增加困难负例(一半是目标一半不是)(仅适用于两阶段检测算法)分为以下两种:
hard negative example mining:只注重在难负例,
Online Hard Example Mining:只要是loss高的例子,不论正负
对于单阶段的检测算法,更适用于focal loss
focal loss:用于解决数据集中各类别不平衡,提高精度
相关链接:Focal Loss的理解以及在多分类任务上的使用(Pytorch)-CSDN博客
label smoothing:标签平滑将hard label 变为 soft label使网络优化更加平滑。
增加类间距离,减少类内距离,提高泛化性
相关链接:标签平滑(Label Smoothing)详解-CSDN博客
公式:
label smoothing结合了均匀分布,用更新的标签向量 来替换传统的ont-hot编码的 标签向量
:
其中K为多分类的类别总个数,αα是一个较小的超参数(一般取0.1),即
这样,标签平滑后的分布就相当于往真实分布中加入了噪声,避免模型对于正确标签过于自信,使得预测正负样本的输出值差别不那么大,从而避免过拟合,提高模型的泛化能力。
Bounding Box (BBox) regression
传统的方法是使用MSE(1、对于每个观测值,计算模型的预测值。2、对于每个观测值,计算预测值与实际观测值之间的差异,并将其平方。3、对所有差异值进行求和,并除以观测值的总数,得到平均差异值,即 MSE。MSE 的优点是对差异值进行平方操作,因此较大误差值对拟合度的影响会更大,这有助于更加敏感地捕捉模型的预测误差。需要注意的是,MSE 受异常值的影响较大,因为异常值的平方差异会被放大。在使用 MSE 进行模型评估时,需要注意异常值的处理和模型的鲁棒性。)对BBOX进行回归,对于anchor-based 的检测方法,是估计BBOX偏移,每个点之间是相互联系的,因此提出了IOU.(相关链接:深度学习笔记(十三):IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU、WIOU损失函数分析及Pytorch实现-CSDN博客)由于IoU是一种尺度不变(两个框按照任意比例同时缩放,求出的IOU值不变)的表示,因此它可以解决传统方法计算l1或l2损失(【深度学习基础知识 - 01】L1和L2损失函数的区别-CSDN博客
- L1损失函数又称为MAE(mean abs error),即平均绝对误差,也就是预测值和真实值之间差值的绝对值。
- L2损失函数又称为MSE(mean square error),即平均平方误差,也就是预测值和真实值之间差值的平方。
-
L1的问题在于它的梯度在极值点会发生跃变,并且很小的差异也会带来很大的梯度,不利于学习,因此在使用时通常会设定学习率衰减策略。而L2作为损失函数的时候本身由于其函数的特性,自身就会对梯度进行缩放,因此有的任务在使用L2时甚至不会调整学习率,不过随着现在的行业认知,学习率衰减策略在很多场景中依然是获得更优模型的手段。
-
L1和L2图像:
-
原文链接:https://blog.csdn.net/yanyuxiangtoday/article/details/119788949)时的问题。
GIOU loss:未完待续。。。。