[paper] Bags of Tricks for Image Classification with Convolutional Neural Networks

介绍

论文地址:https://arxiv.org/abs/1812.01187

这篇文章主要介绍了一些在训练神经网络中可以提高准确率的tricks。随着深度学习的发展,不断有新的网络结构被提出,例如VGG, NiN, Inception, Resnet, DenseNet, NASNet等。伴随着新的网络结构的诞生,分类准确率也在不断上升。但是,损失函数的改变,数据预处理和优化方法对于准确率的提升也是至关重要的,但是这些方法论文中却没有深入解释,这篇论文就是测试了不同的trick的效果,将关注点从 网络结构中移开,关注其他方面。

[paper] Bags of Tricks for Image Classification with Convolutional Neural Networks

上图为以ResNet50为基础,在此结构进行改进所取得的结果,可以看出,Resnet50 + trick取得了很好的效果。

训练

在训练过程,我们执行一下步骤:

  • 随机取一张图片,并且将其编码为32bit的float类型,其值在[0, 255]
  • 随机crop一个矩形框,矩形框的长宽比在[3/4, 4/3]之间,并且要求面积在原来[8%,100%]。resize crop的区域到224*224大小。
  • 50%的概率水平翻转
  • 给色调,饱和度,亮度一个系数,范围[0.6, 1.4]
  • 用系数加PCA噪音,系数服从正太分布N(0, 0.1)
  • RGB三个通道分别减去123.68,116.779,103.939然后除以58.393,57.12,57.375

在验证阶段

  • 我们resize每个图片的最短边到256pixels,并保持其原有长宽比
  • 在中心crop224*224,并且像训练那样正规化RGB通道
  • 在验证阶段,不用随机数据增强的方式

卷积和全连接层权重的初始化使用Xavier算法。超参数的值随机取自[-a,a],[paper] Bags of Tricks for Image Classification with Convolutional Neural Networks。在这里[paper] Bags of Tricks for Image Classification with Convolutional Neural Networks 是输入和输出的channel size。所有偏置项设为0。对于batch normalization,[paper] Bags of Tricks for Image Classification with Convolutional Neural Networks向量为1,[paper] Bags of Tricks for Image Classification with Convolutional Neural Networks向量为0。

训练使用Nesterov Accelerated Gradient梯度下降算法。每个模型训练120epoch使用8个Nvidia V100 gpu,batch size为256。学习率初始化为0.1,30epoch, 60epoch, 90epoch分别除以10

效果:

  • 在resnet50上,效果比原网络效果好
  • 在inception v3和mobilenet上比原来差些

[paper] Bags of Tricks for Image Classification with Convolutional Neural Networks

高效的训练

大batch 训练

训练用大batch size相比训练用小batch size在验证集上表现差。

如果一定要用大的batch size,那么同时学习率也需要做对应的调整。因为在mini-batch SGD中,由于每个batch里样本的选择是随机的,因此梯度下降是个随机的过程。增加batch size不能改变随机梯度,而是会减少梯度的变化。换句话说,大batch size会减少梯度噪音,因为我们可以对应增加学习率。

举例:如果我们初始学习率为0.1,batch size为256,当我想用一个更大的batch size为b,我们需要将学习率改变到:0.1*b / 256

在训练的开始,所有参数都是随机的并且显然这些参数的值远离最终的结果。所以开始就使用一个大的学习率很可能导致大量不稳定。我们在开始时先使用一个小的学习率,在学习过程中缓慢增加学习率,当训练稳定时转到一个初始化学习率。