关于Mu Li关于图像分类优化技巧的文章见
图像分类优化技巧(Bag of Tricks for Image Classification with Convolutional Neural Networks)
Bag of Freebies for Training Object Detection Neural Networks,李沐大神19年2月的新作,用卷积神经网络进行目标检测的一些技巧。
论文:Bag of Freebies for Training Object Detection Neural Networks
本文主要讨论训练目标检测网络过程中的一些tricks,在不改变模型结构、不改变损失函数、不牺牲推断时间的前提下,提高目标检测mAP的一些 tricks。
1 视觉相关图像混合(Visually Coherent Image Mixup for Object Detection)
提出了一种用于训练目标检测网络的 visually coherent image mixup 方法,该方法被证明在提高模型通用能力方面非常有效。
Zhang 等人在 mixup: Beyond Empirical Risk Minimization 中引入的mixup 被证明在分类网络中减少对抗干扰方面非常成功。他们提出的混合算法中混合比例的分布来自β分布(a = 0.2, b = 0.2)。大多数的混合几乎都是这种β分布的噪声。
这里,作者从三个角度去改进mixup,使之应用于目标检测。
- 用了较高的混合比(mixup ratio),理由是:通过增加混合比例由此产生的帧中的目标更有活力,也更符合自然表现,类似于低 FPS 电影中常见的过渡帧
- 通过采用保留几何形状并对齐的方式以避免在初始步骤中扭曲图像;
- 选取a>=1,b>=1的beta distribution,因为这种分布视觉相干性更强。
分析:
- 图像分类任务中也可以使用Mixup的策略,但是混合比率的分布如图 Fig.4 中红色线所示,显然大多数时候混合比率的值接近0或者1,也即合成图片等价于添加噪声的过程。
- 目标检测任务中使用的Mixup策略,混合比例的分布如图 Fig.4 中黄色线所示,显然大多数时候混合比率的值接近0.5
- PyTorch实现:
参考资料:
1 mixup: Beyond Empirical Risk Minimization
2 如何评价mixup: BEYOND EMPIRICAL RISK MINIMIZATION?
3 从SamplePairing到mixup:神奇的正则项
2 标签平滑策略(Classification Head Label Smoothing)
检测任务有两个输出分支,包括Classification Head和 Regression Head,对于分类的分支可以采用图像分类算法中常用的标签平滑策略。
label smoothing的思想就是对真实标签q进行改造,使其不再是one-hot形式,公式如下所示,
其中K表示类别数,e是一个很小的常数。举个例子,假设K=5,e=0.1,那么原来q=[0,0,1,0,0],现在q’=[0.02,0.02,0.92,0.02,0.02]。这样在中,当q‘处于非真实标签时仍然有损失值(比如0.02),就使得pi不会非常接近1,这就降低了过拟合风险。
参考资料:
1 Rethinking the inception architecture for computer vision
2 label smoothing pytorch版本
3 数据预处理(Data Pre-processing)
本文将数据增强分为两类,几何形变和颜色抖动。
- 随机几何变换。包括随机裁剪(带约束),随机扩展,随机水平翻转和随机缩放(随机插值)。
- 随机颜色抖动(jittering),包括亮度,色调,饱和度和对比度。
分析:
- 分类任务鼓励几何形变以提升准确率,然而检测任务中需要谨慎因为检测网络对这类形变较为敏感。
- 多阶段方法与一阶段在数据增强方面相比较,多了大量的裁剪等空间变化操作,因此不需要太多的几何增强。而几何增强对于缺少空间形变一阶段网络尤为重要。
4 学习率变化策略(Training Scheduler Revamping)
本文比较了三种不同的学习率
- the step schedule
- cosine learning rate adjustment
- Warm up learning rate
发现 cosine schedule + proper warmup 的组合可以获得更好的性能。
参考资料:
1 SGDR: Stochastic Gradient Descent with Warm Restarts
5 跨卡同步 Batch Normalization(Synchronized Batch Normalization)
图像分类由于每张卡上的batch-size较大,所以影响较小,但是对于目标检测和语义分割来说,每张卡上的batch-size很小, 效果就很明显,尤其当网络很深时,更严重。
在使用单机多卡训练检测模型时,默认情况下,每个卡的样本是相互独立的,也即只对当前卡上的样本做batchnorm操作,当每个卡上的样本量很少时,会导致大的偏差,使效果反而变差。跨卡的Synchronize batchnorm可以使用全局的样本做归一化操作,模型的收敛效果更好。
参考资料:
1 Batch normalization: Accelerating deep network training by reducing internal covariate shift 2 Megdet: A large mini-batch object detector 3 跨卡同步 Batch Normalization
6 随机尺度训练(Random shapes training for single-stage object detection networks)
现实中的训练图像的尺寸通常是各不相同的,为了提高检测模型的鲁棒性,可以考虑将训练集图像分成若干个桶,例如每个桶的图像尺寸分别为320,480,512 {320, 480, 512}320,480,512。在训练的过程中,随机地从一个桶中选取batch图像,用来更新模型的参数。
作者验证了YOLOv3: An Incremental Improvement中提出的多尺度训练方法。
参考资料:
1 YOLOv3: An Incremental Improvement