深 度 检 测 模 型 比 赛 训 练 技 巧 ( T r i c k s ) 深度检测模型比赛训练技巧(Tricks) 深度检测模型比赛训练技巧(Tricks)
一 数据增强
离线增强::直接对数据集进行处理,数据的数目会变成增强因子×原数据集的数目,这种方法常常用于数据集很小的时候
在线增强: 这种增强的方法用于,获得batch数据之后,然后对这个batch 的数据进行增强,如旋转、平移、翻折等相应的变化,由于有些数据集不能接受线性级别的增长,这种方法长用于大的数据集,很多机器学习框架已经支持了这种数据增强方式,并且可以使用GPU优化计算。
在线增强常用:
- 空间几何变换:翻转(水平和垂直)、随机裁剪、旋转、放射变换、视觉变换(四点透视变换)、分段放射
- 像素颜色变换类:CoarseDropout、SimplexNoiseAlpha、FrequencyNoiseAlpha、ElasticTransformation
- HSV对比度变换
- RGB颜色扰动
- 随机擦除
- 超像素法
- 边界检测
- 锐化与浮雕
二 训练策略:
warmup :训练初期由于离目标较远,一般需要选择大的学习率,但是使用过大的学习率容易导致不稳定性。所以可以做一个学习率热身阶段,在开始的时候先使用一个较小的学习率,然后当训练过程稳定的时候再把学习率调回去
Label smoothing(标签平滑):(解决 one-hot的缺点)
one-hot带来的问题:
对于损失函数,我们需要用预测概率去拟合真实概率,而拟合one-hot的真实概率函数会带来两个问题:
1)无法保证模型的泛化能力,容易造成过拟合;
2)全概率和0概率鼓励所属类别和其他类别之间的差距尽可能加大,而由梯度有界可知,这种情况很难adapt。绘造成模型过于相信预测的类别
Label smoothing增加了模型的泛化能力,一定程度上防止过拟合。
多折交叉验证(一般是5折)
多折交叉验证的出现是为了解决 :一般情况下,会留一份验证集来计算指标,但是,多留一份验证集,就意味着少了一份训练集,如果能多一份验证集来训练,就很有可能提高指标,所以多折交叉验证出现了,较好解决了这个问题,让所有数据集都参加了训练,又拥有指标
预测方式:
1.将所有训练的KFold进行融合
2最优模型重新训练全部数据后预测
三 推断策略
- NMS
1、NMS(非极大值抑制)
同一个物体可能有好几个框,我们的目标是一个物体只须保留一个最优的框:于是我们就要用到非极大值抑制,来抑制那些冗余的框:抑制的过程是一个迭代-遍历-消除的过程。
2、soft nms
不要粗鲁地删除所有IOU大于阈值的框,而是降低其置信度
离线训练技巧
1.数据增强:增强输入图像的可变性,使检测模型具有更高的鲁棒性
包括:
A、光照处理:调整图像的亮度、对比度、色相、饱和度、噪点
B、几何处理:随机缩放、裁剪、翻转、旋转
2.对象遮挡
- random erase ,
CutOut
随机选择图像中的矩形区域并填充0的随机值或者互补值
- hide-and-seek ,
grid mask
随机或者均匀选择图像中的多个矩形区域并填充0
- 对特征谱的处理
Dropout ,DropConnect , DropBlock(训练的时候用的,预测的时候禁用)
3.用多图来进行增强
MixUp用两张图
CutMix用不同角度的裁剪区域
4.GAN用于数据扩充
5.数据分布不均衡
- OHEM:在线困难样本挖掘
- S-OHEM:基于loss分布采样的在线困难样本挖掘
- A-FAST-RCNN:基于对抗生成网络的方式来生成困难样本
- FOCAL LOSS:损失函数的权重调整
- GHM:损失函数梯度均衡化机制
6.类别关联度
7.目标框回归函数
推断过程中增加些许成本换来较大精度提升的技巧∶
1.增加感受野
特征金字塔SPP、RFB、ASPP
2. attention
通道注意力机制SE、空间注意力机制SAM
3.特征融合
skip connection、hyper-colomn FPN
4.激活函数
Mish激活函数:
Mish优点
- 以上无边界(即正值可以达到任何高度)避免了由于封顶而导致的饱和。理论上对负值的轻微允许允许更好的梯度流,而不是像ReLU中那样的硬零边界。
- 平滑的激活函数允许更好的信息深入神经网络,从而得到更好的准确性和泛化。
5.后处理方式:NMS
参考文献
CVPR 2020 ATSS