图像分类训练tricks

图像分类训练tricks

    • 1. 优化器
    • 2. 学习率及学习率下降策略
      • 2. 1 选择合适的学习率
    • 3. weight_decay
    • 4. label_smoothing
    • 5. 通过验证集和测试集的准确度确定调优策略
    • 6. 数据增强
      • 6.1 图像变换类
      • 6.2 图像裁剪类
      • 6.3 图像混叠类
    • 7. 参考资料

  本文简单整理了一些图像分类训练tricks,后续可能会陆续加以补充。

1. 优化器

  带momentum(=0.9)的SGD优化器的使用最多,收敛精度常常更好,但收敛速度慢,初始学习率设置要靠经验设置(参考值0.1)。

  自适应优化器Adam、RMSProp、Adamw等收敛精度稍差,但收敛速度更快更稳定,Adam学习率参考值1e-4.

  AdaBound在某些任务上数据集上,收敛速度可媲美Adam,收敛精度可媲美SGD,调节参数更少。

2. 学习率及学习率下降策略

  SGD一般配合分段衰减策略piecewise_decay,例如初始学习率设为0.1,每30个epoch下降为原来的1/10

  Adam等优化器可搭配余弦衰减策略cosine_decay,因学习率小的epoch较少,故最终模型精度欠佳,所以建议增加训练epoch

  Batchsize增大时,线性增大学习率,可使收敛精度几乎不受影响

warmup 训练初期不宜使用较大的学习率,可采用warmup策略,在batch_size较大时,效果明显。结合cosine_decay,可采用带有warmup的cosine_decay策略。

2. 1 选择合适的学习率

  利用一个epoch来获取学习率。首先设置一个非常小的学习率,对每个batch数据训练后,对初始学习率乘上一个常数,记录每个batch后的loss。根据一个epoch内的loss画图,选择即将使得loss最低的batch对应的学习率作为整个训练的初始学习率。

3. weight_decay

  weight_decay等价于在最终的损失函数后添加L2正则化,可使网络参数倾向于选择更小的值,趋于0,模型的泛化性能更好。
  weight_decay越大,正则化越强,模型越容易趋于过拟合,所以小模型使用较小的weight_decay系数,大模型使用较大的weight_decay系数。如MobileNet系列网络较小,weight_decay可取1e-5~4e-5,训练ImageNet的网络常常较大,weight_decay常取1e-4。

4. label_smoothing

  将one-hot标签软化,使得网络训练的标签不再是hard label,而是有概率值的soft label。
图像分类训练tricks_第1张图片

5. 通过验证集和测试集的准确度确定调优策略

  训练时,打印每一个epoch的训练集、验证集的准确率。训练集的准确率比验证集的准确率微高,或相当,则是合适的表现;
  若训练集的准确率比验证集高很多,则说明已经过拟合,需要加入更多的正则化,如增大weight_decay的值,或加入更多的数据增强策略,或加入label_smoothing;
  若训练集的准确率低于验证集,则模型欠拟合,需减弱正则效果,如减少weight_decay的值,或减少数据增强方式,或去掉label_smoothing

6. 数据增强

6.1 图像变换类

AutoAugment 在一系列数据增强的搜索空间内,通过搜索算法找到合适的特定数据集的图像数据增强方案。针对ImageNet数据集,最终搜索出来的数据增强方案含25个子策略组合,每个子策略组合包含2种变换,针对每张图随机挑选一个子策略组合,以一定的概率来决定是否执行子策略中的变换。
RandAugment 所搜方法更暴力,所有的策略都以相同的概率被选到。相比AutoAugmentRandAugment搜索策略迁移性更好

6.2 图像裁剪类

cutout 直接对图像进行遮挡

randomerasing 随机擦除图像中一部分,擦除的mask长宽随机生成

hideandseek 图像分成若干区域,每个区域以一定概率生成掩码

gridmask 通过生成一个与原图分辨率相同的mask,并将mask进行随机翻转,与原图相乘,通过超参数控制生成的mask网格的大小

6.3 图像混叠类

mixup 通常在一个batch中,随机选择两张图进行相加作为参与训练的图像,两张一样的图相加也可能

cutmix 将一张图像的一块区域ROI,利用其它图像对应的ROI覆盖

7. 参考资料

1.图像分类任务中的训练奇技淫巧
2.图像分类中常用的tricks
3.Practical Advice for Building Deep Neural Networks
4.paddle图像增广
5.选择合适的初始化学习率

你可能感兴趣的:(模型训练,深度学习,神经网络)