Bag of Tricks for Image Classification with Convolutional Neural Networks

CNN网络训练中的tricks总结

    • 论文原文
    • Abstract
    • 1. Introduction
    • 2. Training Procedures
      • 2.1 Experiment Results
    • 3. Efficient Training
      • 3.1 Large-batch training
      • 3.2 Low-precision training
      • 3.3 Experiment Results
    • 4. Model Tweaks
      • 4.1 ResNet Architecture
      • 4.2 ResNet Tweaks
      • 4.3 Experiment Results
    • 5. Training Refinements
      • 5.1 Cosine Learning Rate Decay
      • 5.2 Label Smoothing
      • 5.3 Knowledge Distillation
      • 5.4 Mixup Training
      • 5.5 Experiment Results
    • 6. Transfer Learning
    • 7. Conclusion

论文原文

Bag of Tricks for Image Classification with Convolutional Neural Networks

Abstract

  许多关于图像分类的论文提出了一些训练过程中的trick,这些trick对于模型的提升产生了一定作用,但论文原文中往往很少提及,只在源代码中体现。本文整理了一些常见的trick,并证明这些trick的组合可以改善各种CNN图像分类模型。例如本文在ImageNet数据集上,将ResNet-50的top-1准确率从75.3%提升到了79.29%。同时,本文还证明了这些trick还能在目标检测、语义分割领域起到作用。

1. Introduction

  分类网络自从提出,已经出现了许多改进版本如 VGG,NiN,Inception,ResNet,DenseNet,NASNet等,ImageNet的top-1准确率也从62.5% (AlexNet) 提升到了82.7% (NASNet-A)。准确率的提升不仅来自模型架构的改进,也来自训练过程的损失函数、数据增强方法、优化方法等。
  本文首先回顾了ResNet的三种模型架构调整,并提出了一个新的调整。然后讨论了四个额外的训练过程的改进trick,最后讨论了在这些在图像分类上作用的trick能否对目标检测、语义分割产生作用。

2. Training Procedures

  一个基础的神经网络训练模板如下,随机选取b张图像(即batch_size=b)输入网络,进行计算梯度,然后更新网络的参数,这个过程在整个数据集上进行K次(即K个epoch):
Bag of Tricks for Image Classification with Convolutional Neural Networks_第1张图片
  本文使用ResNet中对上述过程最广泛的实现作为baseline,以下步骤依次进行:

  1. 随机采样一张图像,转化为32位浮点数保存,并且像素值保存在0到255之间
  2. 随机以[3/4,4/3]的长宽比、[8%,100%]的面积比裁剪图像,并将这些图像调整为224*224的尺寸
  3. 以0.5的概率对图像做水平翻转
  4. 以从[0.6,1.4]中随机采样获取的比例作为系数,调整图像的色调(hue)、饱和度(saturation)、亮度(brightness)
  5. 在图像中加入PCA噪声,其系数从正态分布N(0,0.1)中采样得到
  6. RGB通道分别减去[123.68, 116.779, 103.939],除以[58.393, 57.12, 57.375]进行归一化

  验证阶段,将每张图像的较短边调整为256,同时保证长宽比,然后裁剪其中心的224*224区域,利用相似的归一化方法处理RGB通道,验证期间不执行任何随机增强。
  卷积层和全连接层的权重使用Xavier算法初始化。特别的,将参数设置为从[-a,a]中均匀采样的随机值, a = 6 / ( d i n + d o u t ) a= \sqrt{6/(d_{in}+d_{out})} a=6/(din+dout) . d i n , d o u t d_{in},d_{out} din,dout分别为输入输出的通道数.所有的偏置bias初始化为0,对于BN单元, λ \lambda λ向量初始化为1, β \beta β向量初始化为0。
  NAG方法用于训练,每个模型在8个Nvidia V100 GPUs 上以256的batch_size训练120个epochs,学习率初始化为0.1,在第30、60、90个epoch时学习率降低1/10。

2.1 Experiment Results

Bag of Tricks for Image Classification with Convolutional Neural Networks_第2张图片

3. Efficient Training

  硬件的发展,使得能够以低精度、大batch size来同时提高模型准确率和训练速度

3.1 Large-batch training

  batchsize 较大的模型通常会降低模型的准确度,这里有四种方法来保证模型准确度的同时,扩大batchsize

Linear scaling learning rate 小批量SGD中,梯度下降是一个随机过程,增加batchsize不会改变随机梯度的期望,但会减小方差,即减少梯度中的噪声,因此可以提高学习率,让模型从沿着梯度的反方向取得更大的进步。这里可以随着批次大小来线性增加学习率。如果batchsize为256的学习率为0.1,若batchsize更改为b,那么将学习率提高到 0.1 × b / 256 0.1 \times b/256 0.1×b/256

Learning rate warmup 训练刚开始的时候,所有的参数是随机值,因此离最终的值较远。使用较大的学习率会导致数值不稳定。在此预热方法中,开始的时候使用较小的学习率,等训练过程稳定后切换为初始学习率。可以将学习率从0线性增加到初始学习率。如果使用前m个batch来预热,那么初始学习率为 η \eta η,对于第i个batch,学习率调整为 i η / m i\eta/m iη/m

Zero η \eta η BN层受限标准化输入,然后执行c尺度变换 γ x + β \gamma x + \beta γx+β。其中 γ \gamma γ常初始化为1, β \beta β常初始化为0。在此策略中,将位于ResNet网络中的残差块末尾的所有BN层的 γ \gamma γ常初始化为0.从而使得残差块仅返回其输入,网络具有较小的层数时更容易训练。

No bias decay 权重衰减常用与包括权重和偏差在内的所有可学习参数,等同于对所有参数使用L2正则化。此策略中,仅将权重衰减应用于卷积层和全连接层,其他参数均不调整。

3.2 Low-precision training

  新硬件可使得能够以16位的精度训练模型,从而使训练速度提高

3.3 Experiment Results

Bag of Tricks for Image Classification with Convolutional Neural Networks_第3张图片
Bag of Tricks for Image Classification with Convolutional Neural Networks_第4张图片

4. Model Tweaks

  模型调整对网络架构进行微调,如更改特定卷积层的步幅,这种调整不会改变计算复杂度,但很可能提高模型精度。

4.1 ResNet Architecture

Bag of Tricks for Image Classification with Convolutional Neural Networks_第5张图片

4.2 ResNet Tweaks

  模型ResNet-B,ResNet-C是两种流行的模型架构调整,ResNet-D是本文提出的调整架构

ResNet-B 调整了ResNet的下采样模块,原架构路径A中使用了步长为2的1*1卷积,忽略了输入特征图的3/4。ResNet-B换掉了前两个卷积的步长大小。

ResNet-C 利用3个33卷积代替输入模块中的77卷积 从而降低了参数量

ResNet-D 受ResNet-B启发,发现路径B中也忽略了特征图的3/4。实验发现,在卷积之前添加一2*2平均池化层,效果不错。
Bag of Tricks for Image Classification with Convolutional Neural Networks_第6张图片

4.3 Experiment Results

Bag of Tricks for Image Classification with Convolutional Neural Networks_第7张图片

5. Training Refinements

5.1 Cosine Learning Rate Decay

  经过学习率预热之后,需要对学习率进行逐渐成倍降低。
  余弦退火策略是一种方法,一简化版本遵循余弦函数将学习率从初始值降低为0,假设总批次为T,忽略预热阶段,对于第t个batch,学习率为:

η t = 1 2 ( 1 + cos ⁡ ( t π T ) ) η \eta_t = \frac{1}{2}(1+\cos(\frac{t\pi}{T}))\eta ηt=21(1+cos(Ttπ))η

η \eta η为初始学习率,
Bag of Tricks for Image Classification with Convolutional Neural Networks_第8张图片

5.2 Label Smoothing

  图像分类网络最后一层通常是全连接层,隐藏元大小为类别数量,每个隐藏元输出预测为该类别的概率分数,这些分数可利用softmax函数归一化:
在这里插入图片描述

  我们可通过最小化交叉熵损失,学习一个与标签相同分布的模型:
Bag of Tricks for Image Classification with Convolutional Neural Networks_第9张图片

  但是最小化交叉熵损失会使得模型输出差异性较大的分数,即过分相信标签,这可能导致过度拟合。标签平滑可以一定程度上解决这种过拟合现象,它将标签的值进行了调整,不是原来的0-1独热编码,其中 ϵ \epsilon ϵ是一个小的常数:
在这里插入图片描述
Bag of Tricks for Image Classification with Convolutional Neural Networks_第10张图片

5.3 Knowledge Distillation

  在知识蒸馏中,使用一个教师模型来辅助训练当前模型(学生模型),教师模型通常选择具有较高准确的预训练模型,如使用ResNet-152作为教师模型来辅助训练ResNet-50模型。
  在训练过程中,增加蒸馏损失来逼近教师模型和学生模型之间的输出差异:

在这里插入图片描述

T可以使得softmax的输出更平滑,从而使学生模型可以从教师模型中提取关于标签的分布信息。

5.4 Mixup Training

  mixup随机采用采样两张图像 ( x i , y i ) , ( x j , y j ) (x_i,y_i) ,(x_j, y_j) (xi,yi)(xj,yj) 然后合成一个新的图像:
在这里插入图片描述

其中 λ ∈ [ 0 , 1 ] \lambda \in [0,1] λ[0,1]从分布 B e t a ( α , α ) Beta(\alpha,\alpha) Beta(α,α)中随机获得。在mixup中,本文仅使用合成的新的训练样本 ( x ^ , y ^ ) (\hat{x},\hat{y}) (x^,y^)

5.5 Experiment Results

Bag of Tricks for Image Classification with Convolutional Neural Networks_第11张图片
Bag of Tricks for Image Classification with Convolutional Neural Networks_第12张图片

6. Transfer Learning

Bag of Tricks for Image Classification with Convolutional Neural Networks_第13张图片
Bag of Tricks for Image Classification with Convolutional Neural Networks_第14张图片
  虽然使用标签平滑,蒸馏和混合训练有利于软化标签,但模糊的像素集信息可能会降低总体的像素级精度。

7. Conclusion

  本文提出的12种训练技巧,不仅可以持续性地提高分类模型的精度,还可以提高目标检测、语义分割模型的精度。

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