Paper: He_Bag_of_Tricks_for_Image_Classification_with_Convolutional_Neural_Networks_CVPR_2019
-
训练基本过程(baseline training procedure ):包括训练集和测试集的数据增广、参数初始化、优化方法、学习率调整策略。
-
高效训练(efficient training):包括大批量训练、低精度训练等。
-
模型调整(model tweak):比较三种ResNet变体的优劣。
-
训练改进(training refinement):包括Cosine Learning rate decaying、Label smoothing、knowledge distillation、mixup training。
-
图像分类模型与迁移学习:讲了图像分类模型准确率的提高有助于迁移至其他领域,如目标检测、语义分割。
1.Baseline Training Procedure
-
随机裁剪,随机水平翻转
-
调整色调 饱和度 明亮度系数在[0.6,1.4]范围均匀采样
-
从正态分布 N(0,0.1) 采样参数用于添加PCA噪声
-
归一化RGB通道
-
Xavier Initialization:用Xavier 算法进行卷积层和全连接层的参数初始化
-
优化器:NAG替代SGD (但当前多用Adam)
2.Efficient Training
2.1针对large-batch
问题描述:设定较大的batch size虽然能够减少训练时间,有助于收敛的稳定性。但过大的batch size会使得内存容量增加,模型泛化能力下降,有陷入局部最优解的风险
-
linear scaling learning rate
具体操作:batch size从256变为一个较大的数b,lr=0.1,那么学习率应变为 0.1 × b/256
-
warm up
先用较小的学习进行训练,等到训练过程稳定之后再切换到设置的初始学习率
具体操作:设置m个bacth用于预热,设置初始学习率为η。则在预热阶段,第i个batch时,学习率为i∗η/m。
-
Zero γ
原本ResNet的每个block的最后一层都有BN层,BN层首先标准化输入,记为x,然后进行尺度变换γx+β。
具体操作:在所有BN层中将γ初始化为0,相当于在训练的初始阶段减少了网络的层数,易于训练
-
No bias decay
为避免过拟合,一般将weight decay应用在所有可学习的参数上,包括weights和bias。但是它们的参数量总和仅占总参数的0.02%,不会带来过拟合,如果对其进行正则化,会增加计算量,损失模型灵活性
具体操作:只对卷积层和全连接层的权重进行衰减,而不去正则化所有的biases、BN层的γ和β
2.2针对low-precision
除了常使用的32位float类型(FP32)计算能力,还有提供低精度的16位float类型(FP16)计算能力的设备,
用更低的精度进行神经网络的训练,有好处有坏处:
-
好处: 精度低了,训练速度快
-
坏处: 精度低了,数值的范围窄,计算结果容易溢出
改进缺点的策略:
-
在训练过程中,用FP16来存储参数、计算梯度,同时留一个32位精度的参数的备份,用于更新参数
-
计算损失函数时,乘以一个数(尺度),将梯度的范围更好地对齐到FP16上
2.3Experiment Result
仅通过线性缩放学习率将批量大小从 256 增加到 1024 会导致 top-1 准确率降低 0.7%,将启发式方法叠加可以弥补差距。
3.Model Tweaks
ResNet架构和变体
-
ResNet-B
调整原因:原有的residual block的下采样部分,使用了kernel=1x1和stride=2,忽略掉了3/4的信息,所以改进为kernel=3x3和stride=2。
-
ResNet-C
调整原因:鉴于卷积操作时,kernel size与计算消耗呈平方关系,因此将输入时的卷积操作的7x7的kernel,改为3个3x3的卷积操作。
-
ResNet-D
调整原因:与ResNet-B相似,下采样的右边通道同样存在着忽略3/4信息的问题,因此进行改进。
实验发现,将卷积改为sride=1,同时在前面加上一个kernel=2x2,stride=2的平均池化层,效果理想。
4.Training Refinement
4.1余弦学习率衰减(Cosine Learning rate decay)
-
问题描述:常用的Learning Rate Decay是Step Decay,但跳跃变化较大,带来较大的Momentum,会引起训练不稳定
-
具体方法:余弦学习率衰减
-
Attention:根据实验结果,Step Decay再衰减之后,准确率就上来了,而不是像论文中说Cos Decay能加速训练过程。
Step Decay方法60-80个Epoch就达到的水准,要Cos Decay120个Epoch去达到
Cosine Decay是个思路,可在任务中尝试一下
4.2 标签平滑(Label Smoothing)
-
问题描述:全连接层,然后对应标签的one-hot编码的方式会让模型对标签的过分相信,导致过拟合。
-
具体方法:标签平滑的思想是降低对于标签的信任,是一种抑制过拟合的手段。例如可以将损失的目标值从1稍微降到0.9,或者将从0稍微升到0.1。它将真实的概率改造为
其中,ε是一个小的常数,K是类别数,y是真正的标签,i代表第i个类别,q_i是图片为第i类的概率。
LSR是一种通过在标签y中加入噪声,实现对模型约束,降低模型过拟合程度的一种正则化方法。
4.3 知识蒸馏(Knowledge Distillation)
-
好处:既能获取复杂模型的预测能力,又能简化网络结构提高推理速度。
-
整个训练的损失函数
假设p为真实概率分布,z和r分别为student model和teacher model的最后一层全连接层的输出。使用交叉熵Cross Entropy来计算损失
4.4 混合训练(Mixup Training)
-
Mixup数据增强方法:每次取出2张图片,然后将它们线性组合,得到新的图片
-
公式:x代表图像数据,y代表标签,得到新的xhat, yhat,λ是从Beta(α, α)随机采样的数,在[0,1]之间。训练过程中,仅使用(xhat, yhat)。
-
Mixup增强网络的泛化能力
5. Transfer learning
5.1 目标检测
5.2 语义分割