【论文阅读】Bag of Tricks for Image Classification with Convolutional Neural Networks

原文:https://arxiv.org/pdf/1812.01187.pdf
首先介绍一下本文构建的Baseline——
Training:

  1. 随机采样图像并将其解码为[0,255]中的32位浮点原始像素值。
  2. 随机裁剪长宽比以[3/4,4/3]随机采样的矩形区域,以[8%,100%]随机采样的区域,然后将裁剪后的区域调整为224 x 224的正方形图像。
  3. 以0.5的概率随机水平翻转。
  4. 缩放色相、饱和度和亮度,其系数均由[0.6,1.4]统一得出。
  5. 将PCA噪声与从正态分布N~(0,0.1)采样的系数相加。
  6. 标准化RGB通道:分别减去123.68、116.779、103.939并除以58.393、57.12、57.375。
  7. 权重用Xavier初始化,BN将γ和β分别初始化为1和0。
  8. 使用Nesterov Accelerated梯度下降法训练。
  9. 学习率初始化为0.1,并在第30、60和90个时期除以10。
  10. 每个模型在8个Nvidia V100 GPU上进行了120个时期的训练,总批量为256个。

Validation:

  1. 我们将每张图片的较短边缘调整为256个像素,同时保持其宽高比。
  2. 裁剪中心的224 x 224区域并标准化类似于训练的RGB通道。
    验证期间不会执行任何随机数据增强。

Tricks

Large-batch training

  1. 线性缩放学习率。初始学习率为0.1*bs/256。因为BS增大,mini-batch梯度的噪声减少,随机梯度的期望不变,但是方差降低,因此初试学习率可以变大。
  2. 预热学习率。假设初始学习率为0.1,决定让前4个epoch作为预热,那么,学习率分别设置为0.1*i/5,i表示epoch。
  3. Zero γ。对于BN层来说,γx+β,一般来说γ初始化为1。初始化所有residual block的最后一层BN层的γ= 0,那么所有residual的块只返回它们的输入,模拟的网络层数较少,而且在初始阶段更容易训练。
  4. 没有bias decay。将权值衰减应用于卷积层和全连通层的权值。其他参数,包括bias和BN层的γ、β都不衰变。
    个人观点:不考虑大BS的话,我们能常用到的就是第二个和第三个了。

Low-precision training

新的硬件增强了用于较低精度数据类型的算术逻辑单元。使用FP16代替FP32,训练速度会更快。

Training Refinement

余弦学习速率衰减

与阶跃衰减相比,余弦衰减从一开始学习就开始衰减,但一直保持较大,直到阶跃衰减使学习速率降低10x,这可能会提高训练进度。

标签平滑(label smoothing)

知识蒸馏

使用教师模型来帮助训练当前模型(被称为学生模型)。教师模型通常是具有更高准确率的预训练模型,因此通过模仿,学生模型能够在保持模型复杂性相同的同时提高其自身的准确率。一个例子是使用 ResNet-152 作为教师模型来帮助训练 ResNet-50。

混合训练(mixup)

也是一种数据增强的方法。

原文地址:https://www.cnblogs.com/lvjincheng/p/13805134.html