zoukankan      html  css  js  c++  java
  • 【论文阅读】Bag of Tricks for Image Classification with Convolutional Neural Networks

    原文:https://arxiv.org/pdf/1812.01187.pdf
    首先介绍一下本文构建的Baseline——
    Training:

    1. 随机采样图像并将其解码为[0,255]中的32位浮点原始像素值。
    2. 随机裁剪长宽比以[3/4,4/3]随机采样的矩形区域,以[8%,100%]随机采样的区域,然后将裁剪后的区域调整为224 x 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。
    7. 权重用Xavier初始化,BN将γ和β分别初始化为1和0。
    8. 使用Nesterov Accelerated梯度下降法训练。
    9. 学习率初始化为0.1,并在第30、60和90个时期除以10。
    10. 每个模型在8个Nvidia V100 GPU上进行了120个时期的训练,总批量为256个。

    Validation:

    1. 我们将每张图片的较短边缘调整为256个像素,同时保持其宽高比。
    2. 裁剪中心的224 x 224区域并标准化类似于训练的RGB通道。
      验证期间不会执行任何随机数据增强。

    Tricks

    Large-batch training

    1. 线性缩放学习率。初始学习率为0.1*bs/256。因为BS增大,mini-batch梯度的噪声减少,随机梯度的期望不变,但是方差降低,因此初试学习率可以变大。
    2. 预热学习率。假设初始学习率为0.1,决定让前4个epoch作为预热,那么,学习率分别设置为0.1*i/5,i表示epoch。
    3. Zero γ。对于BN层来说,γx+β,一般来说γ初始化为1。初始化所有residual block的最后一层BN层的γ= 0,那么所有residual的块只返回它们的输入,模拟的网络层数较少,而且在初始阶段更容易训练。
    4. 没有bias decay。将权值衰减应用于卷积层和全连通层的权值。其他参数,包括bias和BN层的γ、β都不衰变。
      个人观点:不考虑大BS的话,我们能常用到的就是第二个和第三个了。

    Low-precision training

    新的硬件增强了用于较低精度数据类型的算术逻辑单元。使用FP16代替FP32,训练速度会更快。

    Training Refinement

    余弦学习速率衰减

    与阶跃衰减相比,余弦衰减从一开始学习就开始衰减,但一直保持较大,直到阶跃衰减使学习速率降低10x,这可能会提高训练进度。

    标签平滑(label smoothing)

    知识蒸馏

    使用教师模型来帮助训练当前模型(被称为学生模型)。教师模型通常是具有更高准确率的预训练模型,因此通过模仿,学生模型能够在保持模型复杂性相同的同时提高其自身的准确率。一个例子是使用 ResNet-152 作为教师模型来帮助训练 ResNet-50。

    混合训练(mixup)

    也是一种数据增强的方法。

  • 相关阅读:
    Eclipse出现Access restriction : The type BASE64Decoder is not accessible due to restriction问题
    Struts学习总结(1)
    TCPMon使用总结
    AJAX入门学习总结
    JSON for java入门总结
    JSTL使用总结(2) fmt标签库和fn标签库
    JSTL使用总结(1) 核心标签库和SQL标签库
    JavaScript学习总结
    Ant学习总结
    C# .NET中如何使用GetCursorPos函数
  • 原文地址:https://www.cnblogs.com/lvjincheng/p/13805134.html
Copyright © 2011-2022 走看看