论文链接: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。

  • 训练

    1. 随机采样图片,decoder为float-32bit,[0,255]
    2. 随机裁剪矩形区域,比例[3/4,4/3],面积随机采样[8%,100%]。之后resize到224*224
    3. 0.5的概率水平翻转
    4. [0.6,1.4]色调,饱和度,亮度,uniform系数
    5. 增加PCA噪音,正态分布N(0,0.1)\mathcal{N}(0,0.1)
    6. 归一化rgb通道,[133.68,116.779,103.939]-[133.68,116.779,103.939]&& ÷[58,393,57.12,57.375]\div[58,393,57.12,57.375]
  • 验证

    1. 保持图片长宽比,resize最短边为256
    2. crop中心区域224*224
    3. normalize RGB channels similar to training.
  • 初始化

    1. 卷积全连接 weights :Xavier初始化 参数值 from [a,a][a,-a], a=6/(din+dout)a=\sqrt{6/(d_{in}+d_{out})},dind_{in}doutd_{out}是输入输出的channel sizes
    2. biases初始化为0
    3. batch normalization,γ\gamma 为1, β\beta 为0
  • training:NAG(Nesterov Accelerated Gradient)

  • 每个模型,120epoch ,8 Nvidia V100 GPUs

  • batchsize:256

  • lr:0.1 ,30th,60th,90th,divided by 10
    Bag of Tricks for Image Classification with Convolutional Neural Networks


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。假设使用前mm个 batches 来warmup,初始学习率是η\eta,对于batch ii1im1 \leq i \leq m,设置lr为iη/mi\eta/m
    zero γ. 在residual block中的BN中,BN层首先标准化输入xx ,得到 x^\hat{x},然后进行线性变化γx^+β\gamma\hat{x}+\beta,其中γ\gammaβ\beta 都是可以学习的参数,其值被初始化为1s和0s。而论文在所有residual block尾部初始化 γ=0\gamma=0,因此,所有residual block只是返回它们的输入,模拟网络的层数更少,更容易在初始阶段训练。
    No bias decay.为了避免过拟合,对于权重weight和偏差bias,我们通常会使用weight decay。论文仅对weight使用decay,其他参数包括bias,γ\gammaβ\beta are left unregularized.

  • 使用低精度的数值
            神经网络通常使用32-bit浮点数精度(FP32)来训练。但是现在的新的硬件增强了低精度数据类型的算术逻辑单元。例如Nvidia V100对FP32提供14 TFLOPS,而对FP16提供100 TFLOPS。因此,使用FP16时,总的训练速度加速了2~3倍。尽管性能不粗,但精度下降的范围更窄,这使得结果更有可能超出范围,进而干扰训练的进展。Micikevicius等人提出在FP16中存储所有参数和**,并使用FP16计算梯度。同时,所有的参数在FP32中都有一个拷贝,用于参数的更新。此外,将标量与损耗相乘以更好地将梯度范围对齐到FP16也是一个实用的解决方案。

                                           Bag of Tricks for Image Classification with Convolutional Neural Networks
    Bag of Tricks for Image Classification with Convolutional Neural Networks


Model Tweaks
Bag of Tricks for Image Classification with Convolutional Neural Networks

回顾两种经典的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,在实践中效果良好,对计算成本的影响很小。

Bag of Tricks for Image Classification with Convolutional Neural NetworksBag of Tricks for Image Classification with Convolutional Neural Networks
Training Refinements

继续介绍4个tricks,提高模型准确性
Cosine Learning Rate Decay.通常学习率衰减的策略一般是"step decay",即每隔一定的epoch,学习率才进行一次指数衰减。而现在,学习率随着epoch的增大不断衰减,总的batch数是TTη\eta是初始学习率,warmup阶段忽略,在batch tt的时候,学习率ηt\eta_{t}为:
Bag of Tricks for Image Classification with Convolutional Neural Networks
可以看出 cosine decay一开始减少的很慢,中间几乎变为了线性,之后缓慢下降。
Bag of Tricks for Image Classification with Convolutional Neural Networks
Label Smoothing.论文中ϵ=0.1\epsilon=0.1
Knowledge Distillation. 假设pp是真实的概率分布,zzrr是student 模型和teacher模型全连接的输出,TT是temperature 超参数来使softmax更加平滑, loss:
Bag of Tricks for Image Classification with Convolutional Neural Networks
论文里面T=20T=20,teacher model 是预训练的ResNet-152-D with cosine decay 和label smoothing

Mixup Training.λ[0,1]\lambda\in[0,1] drawn from Beta(α,α)Beta(\alpha,\alpha)分布

Bag of Tricks for Image Classification with Convolutional Neural Networks

论文中选择α=0.2\alpha=0.2,增加epoch从120到200,因为mixed 需要训练一定长的时间来达到更好的收敛。

Bag of Tricks for Image Classification with Convolutional Neural Networks


Transfer Learning

Object Detection.
Bag of Tricks for Image Classification with Convolutional Neural Networks
Semantic Segmentation.
Bag of Tricks for Image Classification with Convolutional Neural Networks


随着cnn的飞速发展,nas的提出和发展,现在越来越倾向人工/自动搜索一个通用的准则。

相关文章: