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 + β。不知道的话在我之前的博客中也有写到,可以去看这篇博客BN层详解(含有公式推导过程)_Orange_sparkle的博客-CSDN博客,相信看完你就完全理解了BN层的含义。γ和β都是可学习参数,一般初始化为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分钟。

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

4.模型调整

模型调整是对网络架构的轻微调整,例如改变特定卷积层的步长。这种调整通常几乎不会改变计算复杂性,但可能对模型精度产生不可忽略的影响。

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

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

首先我们看到ResNet-B的结构,它是调整了ResNet的下采样模块。我们从原始的下采样模块可以看到,在PathA中通过第一个步长为2的1x1卷积来进行下采样,这样的话由于卷积核大小只有1x1但是步长为2,意味着会忽略掉输入特征图3/4的信息,这样会影响网络的性能。于是,ResNet-B将PathA中的下采样步骤移到了3x3卷积来实现,这样就避免了信息的丢失。

然后我们来看ResNet-C,它是调整了网络的input stem模块。这个调整最初是Inception-v2中提出的,因为实验发现卷积的计算成本与卷积核的宽或高成二次方关系,7x7卷积比3x3卷积贵5.4倍,所以这里将7x7卷积替换成三个3x3卷积。

受到ResNet-B的启发,ResNet-D将PathB中步长为2的1x1卷积进行下采样改进为使用平均池化下采样,在实验中效果良好,对计算成本的影响很少。

 实验结果如下图所示,

5.训练微调 

旨在进一步提高模型精度的四种训练改进

5.1余弦学习率衰减

学习率的调整对训练时非常重要的。一般经过学习率预热后会从初始学习率逐步降低,一般使用的策略是使学习率指数下降。He等人每30个epoch将学习率降低为0.1,称为‘step decay’。Szegedy等人每2个epoch降低为0.94的学习率。

Loshchilov等人提出了余弦退火策略。主要是通过遵循余弦函数的方式将学习率从初始值降为0。

阶跃衰减和余弦衰减之间的比较如图所示。可以看出,余弦衰减在开始时缓慢降低学习速率,然后在中间几乎呈线性下降,最后再次减慢,这会提高训练进度。

5.2标签平滑

思想:将hard one-hot label转化为soft label。
1、为什么要使用标签平滑?
对于损失函数,我们希望尽可能的使用预测概率分布去拟合真实概率分布,而拟合one-hot的真实概率函数会带来两个问题:

1)无法保证模型的泛化能力,容易造成过拟合:试想一下,如果训练集比较小而且训练集中存在错误标签那么这样训练出来的模型岂不是错的。

2)全概率和0概率鼓励所属类别和其他类别之间的差距尽可能加大,而由梯度有界可知,这种情况很难适应。会造成模型过于相信预测的类别。

2、使用标签平滑的好处。

可以提高模型泛化能力
可以提高模型的训练速度
可以有效地抑制过拟合

这里将之前的one-hot编码改为了标签平滑的方式。原来是1的位置变为(1−α) ,其他的原来是0的位置变为α/(K−1) , 通常 α 取0.1。假设一个6分类任务,之前的label[1,0,0,0,0,0]就变成了[0.9,0.02,0.02,0.02,0.02,0.02]。
因此网络对输出的要求不再是逼近于1,预测为正的概率仅接近0.9即可。

当α=0时,类间间隙log((K − 1)(1 − ε)/ε)为∞,并且随着α的增加,间隙减小。特别是当α=(K-1)/K时。下图表示了在ImageNet数据集上K=1000时,改变α时,间隙的变化趋势。

我们根据经验比较了分别使用和不使用标签平滑训练的两个ResNet-50-D模型的输出值,并计算了最大预测值与其余平均值之间的差距。

在ε=0.1和K=1000的情况下,理论间隙约为9.1。下图显示了在ImageNet的验证集上预测的两个模型的间隙分布。

很明显,通过标签平滑,分布中心处于理论值,并且具有较少的极值。

5.3知识蒸馏

在知识蒸馏中,我们使用教师模型来帮助训练当前模型,即所谓的学生模型。教师模型通常是一个预训练的模型,具有较高的准确性,因此通过模仿,学生模型能够提高其自身的准确性,同时保持模型的复杂性不变。一个例子是使用ResNet-152作为教师模型来帮助培训ResNet-50。在训练期间,我们添加了蒸馏损失,以惩罚教师模型和学生模型的softmax输出之间的差异。

 p是真实概率分布,z和r分别是学生模型和教师模型的最后一个完全连接层的输出,T是使softmax输出更平滑的温度超参数。通过添加了蒸馏损失之后的损失函数从而从教师的预测中提取标签分布的知识。

5.4Mixup数据增强

在mixup中,每次我们随机抽取两个示例(xi,yi)和(xj,yj)。然后,我们通过这两个示例的加权线性插值形成一个新示例:

其中λ∈ [0,1]是从Beta(α,α)分布中得出的随机数。在训练中,我们使用新的例子。

5.5实验结果

实验结果如图所示,

6.迁移学习

转移学习是训练图像分类模型的一个主要下游用例。我们将研究到目前为止讨论的这些改进是否有利于迁移学习。特别是,我们选择了两个重要的计算机视觉任务,对象检测和语义分割,并通过不同的基础模型来评估它们的性能。

7.文章结论

在本文中,我们调查了十几种训练深度卷积神经网络以提高模型精度的技巧。

这些技巧对模型架构、数据预处理、损失函数和学习率计划进行了小修改。我们在ResNet-50、Inception-V3和MobileNet上的经验结果表明,这些技巧始终提高了模型的准确性。更令人兴奋的是,将所有这些数据叠加在一起会导致更高的精度。此外,这些改进的预训练模型在迁移学习方面显示出强大的优势,这既提高了对象检测,也提高了语义分割。我们相信,这些好处可以扩展到更广泛的领域,在这些领域中,分类基础模型受到青睐。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值