论文链接:Bag of Tricks for Image Classification with Convolutional Neural Networks
针对cnn图像分类的一些tricks
迁移到其他任务比如检测语义分割上也有很好的效果
2019 cvpr
- baseline 的选择
- 在新的硬件上有效训练tricks
- 对ResNet-50进行微调
- 其他的一些训练tricks
- 其他应用上的迁移
baseline training procedure
根据http://torch.ch/blog/2016/02/04/resnets.html中优化的ResNet作为baseline。
-
训练
- 随机采样图片,decoder为float-32bit,[0,255]
- 随机裁剪矩形区域,比例[3/4,4/3],面积随机采样[8%,100%]。之后resize到224*224
- 0.5的概率水平翻转
- [0.6,1.4]色调,饱和度,亮度,uniform系数
- 增加PCA噪音,正态分布
- 归一化rgb通道,&&
-
验证
- 保持图片长宽比,resize最短边为256
- crop中心区域224*224
- normalize RGB channels similar to training.
-
初始化
- 卷积全连接 weights :Xavier初始化 参数值 from , ,和是输入输出的channel sizes
- biases初始化为0
- batch normalization, 为1, 为0
-
training:NAG(Nesterov Accelerated Gradient)
-
每个模型,120epoch ,8 Nvidia V100 GPUs
-
batchsize:256
-
lr:0.1 ,30th,60th,90th,divided by 10
Efficient Training
随着GPU的发展,很多与performance相关的trade-offs已经改变。其中包括
-
更大的batchsize
使用更大的batchsize会减缓训练进度。对于凸问题,收敛速度会随着batchsize的增加而降低。即,在相同的epoch下,使用更大的batch size可能会导致验证集accuracy更低。论文采用4个tricks来解决Linear scaling learning rate.batchsize增加batchsize没有改变均值,但是降低了方差。大的batchsize减少了梯度的噪音,所以可以适当增加学习率。例如lr:01,bs:256,当batchsize增加到b,同时可以增加lr到 0.1*b/256。Learning rate warmup.开始训练的时候,所有参数都是初始化的,所有离最优解很远。学习率太大,不稳定。在warmup机制中,在开始的时候先用小的学习率,当训练过程稳定,增加至初始学习率,然后再开始正常decay。假设使用前个 batches 来warmup,初始学习率是,对于batch ,,设置lr为zero γ.在residual block中的BN中,BN层首先标准化输入 ,得到 ,然后进行线性变化,其中和 都是可以学习的参数,其值被初始化为1s和0s。而论文在所有residual block尾部初始化 ,因此,所有residual block只是返回它们的输入,模拟网络的层数更少,更容易在初始阶段训练。No bias decay.为了避免过拟合,对于权重weight和偏差bias,我们通常会使用weight decay。论文仅对weight使用decay,其他参数包括bias,和 are left unregularized. -
使用低精度的数值
神经网络通常使用32-bit浮点数精度(FP32)来训练。但是现在的新的硬件增强了低精度数据类型的算术逻辑单元。例如Nvidia V100对FP32提供14 TFLOPS,而对FP16提供100 TFLOPS。因此,使用FP16时,总的训练速度加速了2~3倍。尽管性能不粗,但精度下降的范围更窄,这使得结果更有可能超出范围,进而干扰训练的进展。Micikevicius等人提出在FP16中存储所有参数和**,并使用FP16计算梯度。同时,所有的参数在FP32中都有一个拷贝,用于参数的更新。此外,将标量与损耗相乘以更好地将梯度范围对齐到FP16也是一个实用的解决方案。
Model Tweaks
回顾两种经典的Tweaks,ResNet-A和ResNet-B,并提出本文新的微调ResNet-D。
-
ResNet-B.观察发现ResNet,path A中的卷积忽略了输入特征图的四分之三,因为它使用的核大小为1×1,步长为2。所以ResNet-B改变ResNet下采样的block,交换了path A前两个卷积的步长。 -
ResNet-C.观察发现卷积的计算成本是核宽或核高的平方。一个7×7的卷积比一个3×3的卷积的计算量多5.4倍。所以ResNet-C使用三个传统的3×3卷积来替代7×7卷积。 -
ResNet-D.受ResNet-B的启发,论文注意到下行采样块path B中的1×1卷积也忽略了输入feature map的3/4,忽略了部分信息。根据经验,论文发现在卷积之前添加一个步长为2的2×2的平均池化层,使其步长变为1,在实践中效果良好,对计算成本的影响很小。
Training Refinements
继续介绍4个tricks,提高模型准确性Cosine Learning Rate Decay.通常学习率衰减的策略一般是"step decay",即每隔一定的epoch,学习率才进行一次指数衰减。而现在,学习率随着epoch的增大不断衰减,总的batch数是,是初始学习率,warmup阶段忽略,在batch 的时候,学习率为:
可以看出 cosine decay一开始减少的很慢,中间几乎变为了线性,之后缓慢下降。Label Smoothing.论文中Knowledge Distillation. 假设是真实的概率分布,和是student 模型和teacher模型全连接的输出,是temperature 超参数来使softmax更加平滑, loss:
论文里面,teacher model 是预训练的ResNet-152-D with cosine decay 和label smoothing
Mixup Training. drawn from 分布
论文中选择,增加epoch从120到200,因为mixed 需要训练一定长的时间来达到更好的收敛。
Transfer Learning
Object Detection.Semantic Segmentation.
随着cnn的飞速发展,nas的提出和发展,现在越来越倾向人工/自动搜索一个通用的准则。