转自https://mp.weixin.qq.com/s?__biz=MzI5MDUyMDIxNA==&mid=2247486778&idx=2&sn=23582d015eff1d0d5ba0c6f71ca86296&chksm=ec1fe0c3db6869d588af077e6041377193cee8c8eeb069f283bdf6b9a2613bb7dc6b4c7b365a&mpshare=1&scene=1&srcid=0318W4ZKu3BiCVeuKx6lLMrc#rd

一、加快模型训练的部分(采用更大的batch和采用16位浮点型数据进行训练)

1. 增大学习率,因为更大的batch size 意味着基于每个batch数据计算得到的梯度更加接近整个数据集,因此当更新方向更加准确后,迈的步子也可以更大,一般来说,batch size为原来的多少倍,初始的学习率也是原来的多少倍。

2.用一个小的学习率先训练几个epoch,因为网络的参数是随机初始化的,加入一开始较大的学习率容易出现数值不稳定,这是使用warmup的原因。作者在实现warmup的过程中采用线性增加的策略,举例而言,假设warmup阶段的初始学习率是0,warmup阶段共需要训练m个batch的数据(实现中m个batch共5个epoch),假设训练阶段的初始学习率是L,那么在batch i的学习率就设置为i*L/m。

3. 每个残差块的最后一个BN层的gama参数初始化为0,我们知道BN层的γ、β参数是用来对标准化后的输入做线性变换的,也就是γx^+β,一般γ参数都会初始化为1,作者认为初始化为0更有利于模型的训练。

4. 不对bias参数执行weight decay操作,weight decay 主要的作用就是通过对网络层的参数(包括weight 和bias)做约束(L2正则化会使得网络层的参数更加平滑)达到减少模型过拟合的效果。

二、优化网络结构部分

resnet50结构:

关于residual block的改进见下图(包括3点)

1. resNet-B

改进部分就是将stage中做downsample的residual block的downsample操作从第一个11卷积层换成第二个33卷积层,如果downsample操作放在stride为2的11卷积层,那么就会丢失较多特征信息(默认是缩减为1/4),可以理解为有3/4的特征点都没有参与计算,而将downsample操作放在33卷积层则能够减少这种损失,因为即便stride设置为2,但是卷积核尺寸够大,因此可以覆盖特征图上几乎所有的位置。

2.resnet-C

改进部分就是将Figure1中input stem部分的77卷积层用3个33卷积层替换。这部分借鉴了Inception v2的思想,主要的考虑是计算量,毕竟大尺寸卷积核带来的计算量要比小尺寸卷积核多不少,不过读者如果仔细计算下会发现ResNet-C中3个33卷积层的计算量并不比原来的少,这也是Table5中ResNet-C的FLOPs反而增加的原因。

3. resNet-D

改进部分是将stage部分做downsample的residual block的支路从stride为2的11卷积层换成stride为1的卷积层,并在前面添加一个池化层用来做downsample。这部分我个人理解是虽然池化层也会丢失信息,但至少是经过选择(比如这里是均值操作)后再丢失冗余信息,相比stride设置为2的1*1卷积层要好一些。

三、模型训练调优部分

这部分作者提到了4个调优技巧:

1、学习率衰减策略采用cosine函数,这部分的实验结果对比可以参考Figure3,其中(a)是cosine decay和step decay的示意图,step decay是目前比较常用的学习率衰减方式,表示训练到指定epoch时才衰减学习率。(b)是2种学习率衰减策略在效果上的对比。

2、采用label smoothing,这部分是将原来常用的one-hot类型标签做软化,这样在计算损失值时能够在一定程度上减少过拟合。从交叉熵损失函数可以看出,只有真实标签对应的类别概率才会对损失值计算有所帮助,因此label smoothing相当于减少真实标签的类别概率在计算损失值时的权重,同时增加其他类别的预测概率在最终损失函数中的权重。这样真实类别概率和其他类别的概率均值之间的gap(倍数)就会下降一些,如下图所示。

3、知识蒸馏(knowledge distillation),这部分其实是模型加速压缩领域的一个重要分支,表示用一个效果更好的teacher model训练student model,使得student model在模型结构不改变的情况下提升效果。作者采用ResNet-152作为teacher model,用ResNet-50作为student model,代码上通过在ResNet网络后添加一个蒸馏损失函数实现,这个损失函数用来评价teacher model输出和student model输出的差异,因此整体的损失函数原损失函数和蒸馏损失函数的结合:

其中p表示真实标签,z表示student model的全连接层输出,r表示teacher model的全连接层输出,T是超参数,用来平滑softmax函数的输出。

4、引入mixup,mixup其实也是一种数据增强方式,假如采用mixup训练方式,那么每次读取2张输入图像,假设用(xi,yi)和(xj,yj)表示,那么通过下面这两个式子就可以合成得到一张新的图像(x,y),然后用这张新图像进行训练,需要注意的是采用这种方式训练模型时要训更多epoch。式子中的λ是一个超参数,用来调节合成的比重,取值范围是[0,1]。

最终这4个调优技巧的实验结果对比如Table6所示。

转载于:https://www.cnblogs.com/ahuzcl/p/11073352.html

Bag of Tricks for Image Classification相关推荐

  1. bag of tricks for image classification with convolutional neural networks

    图像分类算法优化技巧:Bag of Tricks for Image Classification - 知乎点击→查看原文 关注微信公众号:人工智能前沿讲习 重磅干货,第一时间送达 论文复现对很多人而 ...

  2. 《Bag of Tricks for Node Classification with Graph Neural Networks》阅读笔记

    论文地址:Bag of Tricks for Node Classification with Graph Neural Networks 一.概述 本文作者总结了前人关于图上半监督节点分类任务的常用 ...

  3. GNN Tricks《Bag of Tricks of Semi-Supervised Classification with Graph Neural Networks》

    Wang Y. Bag of Tricks of Semi-Supervised Classification with Graph Neural Networks[J]. arXiv preprin ...

  4. 训练技巧详解【含有部分代码】Bag of Tricks for Image Classification with Convolutional Neural Networks

    论文地址:https://arxiv.org/pdf/1812.01187.pdf 更多方法和代码可见:图像分类任务中的tricks总结 更多更全的tricks补充(补充链接也是福利满满~) 目录 2 ...

  5. 图像分类算法_图像分类算法优化技巧:Bag of Tricks for Image Classification

    关注微信公众号:人工智能前沿讲习,重磅干货,第一时间送达 论文复现对很多人而言难度都比较大,因为常常涉及很多细节,部分细节对于模型效果影响很大,但是却很少有文章介绍这些细节,前段时间正好看到这篇文章, ...

  6. Bag of Tricks for Efficient Text Classification论文阅读及实战

    本文目录 一.Fasttext算法综述 二.原理介绍及优化策略 三.Fasttext算法实战(注:以下代码仅在Linux系统下使用!) 四.参考资料 本文目录(仅做浏览用,暂时不支持页面内跳转) 一. ...

  7. Bag of Tricks for Efficient Text Classification(Fasttext)

    Fasttext历史意义: 1.提出一种新的文本分类方法-Fasttext,能够快速进行文本分类,效果较好 2.提出一种新的使用子词的词向量训练方法,能够在一定程度上解决oov问题 3.将Fastte ...

  8. 论文阅读:《Bag of Tricks for Long-Tailed Visual Recognition with Deep Convolutional Neural Networks》

    基于深度卷积神经网络的长尾视觉识别技巧包 摘要 近年来,挑战性长尾分布上的视觉识别技术取得了很大的进展,主要基于各种复杂的范式(如元学习).除了这些复杂的方法外,对训练程序的简单改进也有一定的贡献. ...

  9. 论文笔记:Bag of Tricks for Long-Tailed Visual Recognition with Deep Convolutional Neural Networks

    论文地址:http://www.lamda.nju.edu.cn/zhangys/papers/AAAI_tricks.pdf 代码地址:https://github.com/zhangyongshu ...

最新文章

  1. 【青少年编程】【一级】森林的一天
  2. Comparable和Comparator使用区别
  3. backbone.js学习笔记
  4. 解决git@osc每次提交需要输入用户名密码的问题
  5. Hadoop tutorial - 3 Hello MapReduce- 2015-3-30
  6. C#调用非托管Dll
  7. 41. 理解ptr_fun、mem_fun和mem_fun_ref的来由
  8. 关于ActionForm的一些问题
  9. 广告中cpm,ecpm,rpm指标含义
  10. 排查 java 程序CPU飙升问题
  11. ASP.NET Core学习之路04
  12. cad编辑节点快捷键是什么_cad进入块编辑快捷键是什么,Auto CAD进入块编辑快捷键是什么?...
  13. tomcat9安装及其简单测试
  14. 【Matplotlib】 移动spines
  15. matlab抢占时隙算法,ALOHA anti-collision、二进制数搜索算法以及帧时隙算法
  16. css设置内容超出后显示省略号
  17. 【王道笔记-操作系统】第四章 文件管理
  18. 苹果Usb连接linux,Mac使用数据线连接ios,安装deb
  19. 从传统投放走向程序化购买, 浅谈户外广告发展前景
  20. 一种可扩展的同时进化实例和特征选择方法

热门文章

  1. HTML5基础-Mark标签高亮显示文本
  2. django中的分页
  3. 包含了主机名到ip地址的映射关系的文件是什么 ?
  4. XML错误:缺少所需的空白区
  5. spring22:Aspectj实现环绕通知@Around
  6. spring14:注解@Autowired,实现引用类型的赋值
  7. Python学习教程(Python学习路线):Python3之递归函数简单示例
  8. Docker Hub 镜像加速器
  9. Spring高级程序设计(Spring框架创始人倾情推荐的权威开发指南)
  10. MVP架构设计 进阶三