Bag of Tricks for Image Classification with Convolutional Neural Networks(图像分类神经网络训练技巧)

1.简介

该篇文章其实就是各个网络中训练技巧的一个集合。由于之前在图像分类中取得的大部分的进展其实都是由训练过程的改进得到的,比如数据增强和优化方法的改进得到的。但是在提出方法的文章中,我们只能在实验细节或者开源代码中见到,所以该篇文章就将这些训练技巧进行了汇总,并进行实验进行验证评估。实验证明,将这些改进结合起来能够将ResNet-50的准确率由75.3%提升到79.29%,实验还验证了,图像分类精度的提高也能应用在其他领域,带来更好的迁移学习的性能。

2.训练过程

2.1Baseline

2.1.1图像预处理

1.随机采样图像并将其解码为[0,255]中的32位浮点原始像素值。

2.随机裁剪其纵横比以[3/4,4/3]随机采样的矩形区域和以[8%,100%]随机采样的区域,然后将裁剪的区域调整为224乘224的正方形图像。

3.以0.5概率水平翻转。

4.使用从[0.6,1.4]均匀绘制的系数缩放色调、饱和度和亮度。

5.将PCA噪声与从正态分布N(0,0.1)采样的系数相加。6.通过分别减去123.68、116.779、103.939和除以58.393、57.12、57.375来归一化RGB通道。

验证期间,我们将每个图像的较短边缘调整为256像素,同时保持其纵横比。接下来,我们裁剪出中心的224×224区域,并将RGB通道标准化,类似于训练。我们在验证期间不执行任何随机扩增。

2.1.2权重、超参数初始化

卷积层和完全连接层的权重都用Xavier算法初始化[6]。特别是,我们将参数设置为从[−a、 a],其中a=[6/(din+dout)]**0.5。这里din和dout分别是输入和输出通道大小。所有偏差均初始化为0。对于批处理规范化层,γ向量初始化为1,β向量初始化为0。

用Nesterov加速梯度(NAG)下降用于训练。每个模型在8个Nvidia V100 GPU上训练120个epoch,总batch_size为256。学习率初始化为0.1,在第30、60和90个epoch除以10。

 3.有效的实验

3.1大batch_size实验

小批量随机梯度下降法通过将多个样本分到一个batch中来提高并行性降低通信成本。但是当batch_size增大时可能会降低网络的收敛速度。也就是说,当epoch相同时,与使用较小batch_size的网络相比,使用较大batch_size的网络的验证精度会降低。

该文章验证了四种方法来解决这个问题。

3.1.1线性缩放学习率

在小批量随机梯度下降中,梯度下降是一个随机过程,因为每个批次中的样本都是随机的,增加batch_size虽然不会改变每个batch中的期望值,但是会降低其中的方差。也就是说,大的batch_size会减少梯度下降中的噪声。因此,我们可以用更大的学习率来使网络沿着梯度相反的方向的步长更大。如果我们选择0.1作为批量大小256的初始学习率,那么当改变为更大的批量大小b时,我们将将初始学习率提高到0.1×b/256。

3.1.2学习率预热

由于在训练刚开始时,所有的参数、权重都是随机初始化的,离训练完成的网络有很大的差距,所以一开始就是用较大的学习率可能会使数值不稳定,这时我们就可以使用learning rate warmup了。我们设置一个预热epoch,在这些epoch中,我们将学习率从0逐渐增加到预设的初始学习率。增加的过程可以使用线性增加实现。

3.1.3BN层初始化γ=0

我们都知道,在网络中每个block后都会跟着一个BN层,BN层首先对其输入进行归一化得到ˆx,然后再通过可学习参数γ和β进行重构γˆx + β。γ和β都是可学习参数,一般初始化为1和0。但是在γ=0的启发下,发现γ=0时,相当于主分支为0,最后只输出shortcut分支也就是残差块的输入,相当于网络的层数会减少,这样在初始阶段更容易进行训练。

3.1.4无偏差衰减

L2正则化的目的就是为了让权重衰减到更小的值,在一定程度上减少模型过拟合的问题,所以权重衰减也叫L2正则化。

权重衰减通常应用于所有可学习参数,包括权重和偏差。这相当于将L2正则化应用于所有参数,以将其值推向0。然而,正如Jia等人所指出的,建议仅将正则化应用到权重,以避免过度拟合。无偏差衰减启发式遵循这一建议,它只将权重衰减应用于卷积和全连接层中的权重。其他参数,包括BN层中的偏置和γ和β,未进行调整。

3.2低精度实验

神经网络通常以32位浮点(FP32)精度进行训练。也就是说,所有数字都以FP32格式存储,并且算术运算的输入和输出也是FP32数字。然而,新硬件可能具有用于较低精度数据类型的增强型算术逻辑单元。例如,在V100上从FP32切换到FP16后,整体训练速度加快了2到3倍。

3.3实验结果 

ResNet-50的评估结果如表所示。与batch_size为256和FP32的基线相比,使用更大的1024的batch_size和FP16将ResNet-50训练时间从每个epoch13.3分钟缩短到每个epoch4.4分钟。

Bag of Tricks for Image Classification with Convolutional Neural Networks(图像分类神经网络训练技巧)_第1张图片

 其余实验结果如图所示,仅通过线性缩放学习率将批大小从256增加到1024,导致前1精度降低0.9%,而其余三种启发式方法的叠加弥补了差距。在训练结束时从FP32切换到FP16不会影响准确性。

Bag of Tricks for Image Classification with Convolutional Neural Networks(图像分类神经网络训练技巧)_第2张图片

 4.模型调整

 普通ResNet-50的网络结构如下

Bag of Tricks for Image Classification with Convolutional Neural Networks(图像分类神经网络训练技巧)_第3张图片

 调整后的模型结构如下,分别调整了downsampling block和input stem。

Bag of Tricks for Image Classification with Convolutional Neural Networks(图像分类神经网络训练技巧)_第4张图片

 实验结果如下图所示,

Bag of Tricks for Image Classification with Convolutional Neural Networks(图像分类神经网络训练技巧)_第5张图片

5.训练微调 

5.1余弦学习率衰减

5.2标签平滑

5.3知识蒸馏

5.4Mixup数据增强

5.5实验结果

实验结果如图所示,

Bag of Tricks for Image Classification with Convolutional Neural Networks(图像分类神经网络训练技巧)_第6张图片

 6.迁移学习

 

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