【BoT】《Bag of Tricks for Image Classification with Convolutional Neural Networks》

本文详细探讨了如何通过组合大批量训练、低精度运算、模型微调等训练策略,将ResNet在ImageNet上的准确率从75.3%提升至79.29%,并展示了这些技术在对象检测和语义分割中的应用。关键策略包括线性学习率调整、零偏移初始化、知识蒸馏和数据增强方法如PCA噪声和HSV变换。

在这里插入图片描述

在这里插入图片描述

CVPR-2019



1 Background and Motivation

随着深度学习技术的发展,image classification 的精度也越来越高!

精度的提升不仅仅来自于 model architecture,也来自如下的 training procedure refinements

  • loss functions
  • data pre-processing
  • optimization methods
  • learn rate schedule
  • stride size of a particular convolution layer

然而 training procedure refinements 往往没有 model architecture 那样吸睛,都被冷落在论文中的 implementation details 部分 or only visible in source code

本文,作者翻牌 training procedure refinements

在这里插入图片描述

对各种 training procedure refinements 进行了详细的分析实验,通过组合拳,把 ResNet 在 ImageNet 上的 Top-1 ACC 从 75.3% 提到了 79.29%,这些技巧用在 object detection 和 semantic segmentation 任务中也能提升精度!

2 Advantages / Contributions

总结归纳各种 tricks,组合起来调 resnet,精度从 75.3 提到了 79.29(Top of ImageNet)

在这里插入图片描述

3 Baseline

提供了一种标准训练测试流程

训练

  • 32-bit,0~255
  • randomly crop,aspect ratio [3/4,4/3],scale [8%, 100%],最后 resize 到 224×224
  • 50% 水平翻转
  • hue,saturation,brightness 增强 [0.6,1.4](参考本博客附录部分)
  • PCA noise(参考本博客附录部分)
  • 减均值除以方差

在这里插入图片描述

测试

  • resize 短边到 256,保持 aspect ratio,从中心区域中截选出 224×224
  • 减均值除以方差

按照上述标准流程,得到的结果如下表所示

在这里插入图片描述

4 Efficient Training

4.1 Large-batch training

大 batch-size 的好处在于,会缩短训练时间

但是

For convex problems,convergence rate decreases as batch size increases

这里理解起来可能不是那么顺畅,再看看这个讨论(Rhett 的回答)

在这里插入图片描述

换句话说

for the same number of epochs,training with a large batch size(仅仅增大 batch-size,不做其他的改变) results in a modal with degraded validation accuracy compared to the ones trained with smaller batch sizes

想在不影响收敛速度(精度)的情况下,加快训练速度(增大batch),作者给出了如下的建议

1)Linear scaling learning rate

在这里插入图片描述

大的 batch-size 只会 reduce the noise in the gradient,并没有改变 expectation of stochastic gradient(个人感觉期望还是有改变的),因此采用大的 bath-size 后,可以采用大的学习率提升其收敛速度

eg:batch-size 为 256,采用 0.1 0.1 0.1 初始学习率
则:batch-size 为 b b b, 应该用 0.1 × b / 256 0.1 × b / 256 0.1×b/256


2)Learning rate warmup

在这里插入图片描述

训练刚开始时,参数都是随机初始化的,离 final solution 十万八千里,这个时候用太大的学习率容易导致 numerical instability

此时,比较好的处理方式时慢热,类似于热身,让网路通过几个 epoch 的学习后达到初始学习率

eg:初始学习率为 η \eta η,用 m m m 次 iteration 到初始学习率,那么第 i i i 次( 1 ≤ i ≤ m 1≤i≤m 1im)迭代的学习率应该为 i η / m i \eta /m iη/m

下图最左边部分即为 warmup

在这里插入图片描述


3)Zero γ \gamma γ

在这里插入图片描述

ResNet 的 bottleneck 部分可以表示为 X + F ( x ) X + F(x) X+F(x)

在这里插入图片描述

在每个 bottleneck 中, F ( x ) F(x) F(x) 以是以 batch-normalization 层结束的,batch-normalization 算法如下图所示(详细解析可以参考 【BN】《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》

在这里插入图片描述
常规操作中, γ \gamma γ β \beta β 初始化的值分别为 1 和 0,也即 X + 1 × F ( x ) + 0 X + 1×F(x) + 0 X+1×F(x)+0

Zero γ \gamma γ 策略中, γ \gamma γ 的初始化为 0,也即 X + 0 × F ( x ) + 0 X + 0×F(x) + 0 X+0×F(x)+0 F ( x ) F(x) F(x) 部分直接被砍了,仅返回

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值