深度学习论文:Bag of Tricks for Image Classification with Convolutional Neural Networks

论文:

He, Tong, et al. "Bag of tricks for image classification with convolutional neural networks." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2019.

1. Introduction

最近在图像分类研究中取得的许多进展可以归功于训练中的改进,比如数据扩充和优化方法。然而在文献中,大多数改进方法要么作为实现细节简要地提到,要么只在源代码中可见。这篇论文将通过ablation study来检验这些改进方法,并评估它们对最终模型精度的影响。通过将这些改进组合在一起,能够显著地改进各种CNN模型。例如,将ResNet-50在ImageNet上的top-1验证集精度从75.3%提高到79.29%。此外还将证明,在其他应用领域如目标检测和语义分割,提高图像分类精度会带来更好的性能。

在应用了所有 trick 之后,将ResNet-50与表1中的其他相关网络进行比较。这些 tricks 使ResNet-50在ImageNet上top-1准确率从75.3%提升到79.29%。它还优于其他更新和改进的网络结构,比如SE-ResNeXt-50。

使用mini-batch 随机梯度下降训练一个神经网络的基础模板:

2. Training Procedures

Baseline Training Procedure:

在训练时,依次执行以下步骤:

1.随机采样图片,32位浮点数,[0,255]

2.随机裁剪长宽比为[3/ 4,4 /3]区间内,面积随机采样[8%,100%]的矩形区域,把裁剪区域resize到(224,224)

3.以0.5的概率水平翻转

4.比例色调,饱和度和亮度的系数从[0.6,1.4]均匀绘制。

5.添加PCA噪声,系数从正态分布N(0,0.1)中采样

6.将RGB通道归一化,分别减去123.68、116.779、103.939,再除以58.393、57.12、57.375。

在验证期间,保持每个图像的长宽比,将短边调整为256像素,中心裁剪出224×224的区域,并将类似于训练的RGB通道归一化,此外不执行任何随机扩充。

卷积层和全连接层的参数权重w由Xavier方法初始化,特别地,把参数设为均匀地从[−a, a]中得到的随机值,其中                        a=[(6/din + dout)]**0.5,din和dout分别是输入和输出的通道数,所有bias初始化为0,对每个BN层,γ向量初始化为1,β向量初始化为0。Nesterov Accelerated Gradient (NAG) descent方法用于训练,120个epoch,batch size为256,lr初始化为0.1,在第30,60,90 epoch时学习率除以10。

3. Efficient Training

3.1 Large-batch training

选择大的batch size可能会使训练变慢,对于凸问题,收敛速度随着批量的增大而减小,对于神经网络也有类似的实证结果。换句话说,对于相同的epochc,batch size较大的训练会导致模型验证集精度下降。

Linear scaling learning rate

mini-batch sgd中,梯度下降是一个随机过程,在每个batch的样本是随机选择的,提高batch size不改变随机梯度的期望,但是减小了它的方差。换句话说大的batch size减少了梯度的噪声,所以增大batch size可以适当增加学习率,特别的,如果我们选择0.1作为batch_size=256时的初始学习率,那么增大batch_size=b时,学习率可以增长为0.1*b/256。

Learning rate warmup

训练初期,参数离最终结果都很远,所以学习率太高导致不稳定,受warmup启发,在训练初始阶段使用较小学习率然后训练过程稳定后再转为初始学习率,这种warmup策略让学习率从0到init线性增长。即假设使用前 m=5 个batch用于warmup,初始学习率是η,对于1 <= i <=m 的第i个batch,学习率为 i*η/m。

Zero γ

ResNet网络包含很多残差块,残差块中包含BN层,BN层首先归一化它的输入,输入记为x,然后做一个变换 γx+β ,γ和β是可学习的参数,它们的元素被各自初始化为1和0。把γ也初始化为0,这样意味着在初始阶段,残差块只是返回它们的输入(残差块的输入和输出相等),模拟网络的层数更少,更容易在初始阶段训练。

No bias decay

weight decay通常被应用到所有可学习的参数,包括w和b,它等价于对所有参数应用L2正则化以使它们的值趋近于0。它只对卷积和全连接层的w进行正则化,以避免过拟合,其他参数包括b和BN层中γ和β,都不做正则化处理。

3.2 Low-precision training

神经网络通常采用32位浮点(FP32)精度进行训练.也就是说所有的数字都以FP32格式存储,运算的输入和输出也是FP32数字。然而新的硬件可能有增强的算术逻辑单元,用于较低精度的数据类型。例如,Nvidia V100在FP32中提供14 TFLOPS,但在FP16中提供100 TFLOPS。如下表所示,在V100上从FP32切换到FP16后,整体训练速度提高了2到3倍。尽管有性能上的好处,但精度下降的范围更窄,这使得结果更有可能超出范围,进而干扰训练的进展。以FP16存储所有参数和激活,并使用FP16计算梯度。同时,所有参数都有一个FP32副本,用于参数更新。此外,将 loss 和 scalar 相乘以更好地将梯度范围对齐到FP16也是一个实用的解决方案。

 3.3 Experiment Results

4. Model Tweaks 

左图为标准ResNet-50的结构,右边是修改后的不同之处。

ResNet-B首先出现在Torch的ResNet实现中,它修改了Down sampling模块,在原本的Path A中的第一个卷积层忽略了3/4的特征图信息,因为它使用1×1的卷积核,步长为2。ResNet-B交换了Path A中两个卷积层的步长,因此特征图没有丢掉信息,而且Path A的输出尺寸不变。

ResNet-C最初在Inception-v2中提出,研究发现卷积的计算成本是核宽或核高的平方,7×7的卷积核的计算成本是3×3卷积核的5.4倍,因此在input stem阶段把7×7的卷积替换成3个3×3的卷积,第一个和第二个卷积的输出通道数为32,步长为2,而最后一个卷积的输出通道数为64。

ResNet-D受ResNet-B的启发,注意到Down Sampling路径B中的1×1卷积也忽略了输入feature map的3/4,因此想对其进行修改,以免忽略任何信息。根据经验,发现在卷积之前添加一个步长为2的2×2的平均池化层,使卷积层其步长变为1,在实践中效果良好,对计算成本的影响很小。

 Experiment Results

batch size为1024,精度为FP16,结果表明,与ResNet50相比,ResNet-B在下行采样块的Path A中接收到更多信息,验证精度提高约0.5%。ResNet-C用3个3×3的卷积代替7×7的卷积,又提高了0.2%。在ResNet-C中down sampling 中的Path B中加入更多的信息,验证精度又提高了0.3%。总的来说,ResNet-50-D提高了1%。

这四个模型具有相同的模型大小。ResNet-D的计算成本最大,但与ResNet-50的浮点运算差异在15%以内。在实践中,与ResNet-50相比,ResNet-50- d在训练吞吐量方面仅慢3%。

5. Training Refinements 

5.1. Cosine Learning Rate Decay

lr的调整很关键,在描述的学习率warmup之后,我们通常会从初始学习率开始逐步降低,广泛使用的策略是指数衰减学习率。何凯明等人在ResNet中每30个epoch速率降为0.1倍,这被称为“step decay”,Szegedy等人在InceptionV3中每两个epoch速率降低为0.94倍。

与之相反,Loshchilov等人提出了一种余弦降低学习率策略。一个简化的版本是根据余弦函数将学习率从初始值降低到0。假设batch的总数是T(warmup阶段被忽略),然后在第t个batch,学习率ηt如下,其中η是初始学习率。

可以看出cosine decay在开始阶段下降lr缓慢,在中期近似线性下降,在后期又下降的缓慢, 在step decay把学习降低1/10的时候,cosine decay的学习率仍然很大,这能提升训练进程。

5.2. Label Smoothing

网络的最后一层通常是一个全连接层,神经元的个数是类别个数,由K表示。对于一个图片,zi表示种类i的分数,所有分数被softmax转换成概率,概率qi如下:

假设这个图像的真值标签是y,我们可以构造一个真值概率分布,如果i = y,则为pi = 1,否则为0。在训练过程中,我们尽量减少负交叉熵损失来更新模型参数,使这两个概率分布彼此相似。

我们知道ℓ(p, q) = − log py =

那么最优解是zy无穷大,其余项足够小,也就是说它鼓励输出分数有显著的不同,这可能导致过度拟合。因此Label Smoothing策略被提出,最早用于训练Inception-v2,它修改ground truth的概率分布如下,其中ε为一个较小的常数。

现在最优解是:

其中α可以任意的实数,这鼓励了全连接层的有限输出,并且可以更好地泛化。当ε = 0,真实标签和其他类别的gap=log((K − 1)(1 − ε)/ε)为无穷大,随着ε增大,gap减小。当ε = (K − 1)/K,所有的最优解z*i都相等,下图a为K=1000时随着ε变化理论上gap=log((K − 1)(1 − ε)/ε)的变化。b为ImageNet上K=1000,训练使用ε=0.1的标签平滑和不使用的ResNet-50-D,计算最大的预测值和其他剩余的均值的gap的分布,可以看出带有标签平滑的分布中心在ε=0.1的理论值9.2处,极值较少。

5.3 Knowledge Distillation

使用一个teacher model帮助训练当前的student model,teacher通常是一个有高准确率的预训练模型,因此通过模仿,student能够在保持模型复杂度不变的情况下提高自身的准确性。例如使用ResNet-152作为teacher,帮助训练ResNet-50。

在训练时,增加一个distillation loss来惩罚teacher和student的softmax输出的不同。对于一个输入,假设p是真实的概率分布,z和r分别是student和teacher的最后一个全连接层的输出,之前使用 ℓ(p, softmax(z)) 度量p和z的不同,现在加入蒸馏后的loss如下,其中T为使softmax输出更平滑的超参数,从而从teacher model的预测中提取标签分布知识。

5.4 Mixup Training

mixup是另一种数据增强方式,每次采样两组数组(xi,yi)(xj,yj),然后通过这两个样本的加权线性插值生成一个新的样本,如下,其中λ ∈ [0, 1],一个服从β(α,α)分布的随机数。在mixup训练时,我们只使用新的样本(x^,y^)。

Experiment Results

对于标签平滑设置ε = 0.1,对于知识精馏,使用T = 20,具体使用一个预训练好的ResNet-152-D模型,该模型应用了余弦衰减和标签平滑,在mixup训练时,选择α= 0.2的β分布,并且epoch的数量从120增加到20,因为mixup的样本需要训练进展更好地收敛。将知识蒸馏和mixup训练相结合,对teacher model也进行mixup训练。

通过叠加cosine decay,label smoothing,mixup,逐步改进了ResNet、InceptionV3和MobileNet模型。Distillation在ResNet上表现的很好,但是在incepv3和MobileNet上表现得不好。可能的解释是,teacher和student不属于同一family,因此在预测中有不同的分布,给模型带来了负面影响。此外进行了200个epoch的无mixup训练,仅使Top-1的准确率增加了约0.15%,因此mixup训练的效果仍然显著。

在MIT Places365数据集上训练了一个ResNet-50-D模型,分别使用和不使用以上改进,结果见表7,在验证和测试集上这些改进提高了准确性。 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值