【论文阅读】Bag of Tricks for Image Classification with Convolutional Neural Networks
原文:https://arxiv.org/pdf/1812.01187.pdf
首先介绍一下本文构建的Baseline——
Training:
- 随机采样图像并将其解码为[0,255]中的32位浮点原始像素值。
- 随机裁剪长宽比以[3/4,4/3]随机采样的矩形区域,以[8%,100%]随机采样的区域,然后将裁剪后的区域调整为224 x 224的正方形图像。
- 以0.5的概率随机水平翻转。
- 缩放色相、饱和度和亮度,其系数均由[0.6,1.4]统一得出。
- 将PCA噪声与从正态分布N~(0,0.1)采样的系数相加。
- 标准化RGB通道:分别减去123.68、116.779、103.939并除以58.393、57.12、57.375。
- 权重用Xavier初始化,BN将γ和β分别初始化为1和0。
- 使用Nesterov Accelerated梯度下降法训练。
- 学习率初始化为0.1,并在第30、60和90个时期除以10。
- 每个模型在8个Nvidia V100 GPU上进行了120个时期的训练,总批量为256个。
Validation:
- 我们将每张图片的较短边缘调整为256个像素,同时保持其宽高比。
- 裁剪中心的224 x 224区域并标准化类似于训练的RGB通道。
验证期间不会执行任何随机数据增强。
Tricks
Large-batch training
- 线性缩放学习率。初始学习率为0.1*bs/256。因为BS增大,mini-batch梯度的噪声减少,随机梯度的期望不变,但是方差降低,因此初试学习率可以变大。
- 预热学习率。假设初始学习率为0.1,决定让前4个epoch作为预热,那么,学习率分别设置为0.1*i/5,i表示epoch。
- Zero γ。对于BN层来说,γx+β,一般来说γ初始化为1。初始化所有residual block的最后一层BN层的γ= 0,那么所有residual的块只返回它们的输入,模拟的网络层数较少,而且在初始阶段更容易训练。
- 没有bias decay。将权值衰减应用于卷积层和全连通层的权值。其他参数,包括bias和BN层的γ、β都不衰变。
个人观点:不考虑大BS的话,我们能常用到的就是第二个和第三个了。
Low-precision training
新的硬件增强了用于较低精度数据类型的算术逻辑单元。使用FP16代替FP32,训练速度会更快。
Training Refinement
余弦学习速率衰减
与阶跃衰减相比,余弦衰减从一开始学习就开始衰减,但一直保持较大,直到阶跃衰减使学习速率降低10x,这可能会提高训练进度。
标签平滑(label smoothing)
知识蒸馏
使用教师模型来帮助训练当前模型(被称为学生模型)。教师模型通常是具有更高准确率的预训练模型,因此通过模仿,学生模型能够在保持模型复杂性相同的同时提高其自身的准确率。一个例子是使用 ResNet-152 作为教师模型来帮助训练 ResNet-50。
混合训练(mixup)
也是一种数据增强的方法。