| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> CVPR19 - 调参干货《Bag of Tricks for Image Classification with Convolutional Neural Network》 -> 正文阅读 |
|
[人工智能]CVPR19 - 调参干货《Bag of Tricks for Image Classification with Convolutional Neural Network》 |
文章目录原文地址https://openaccess.thecvf.com/content_CVPR_2019/papers/He_Bag_of_Tricks_for_Image_Classification_with_Convolutional_Neural_Networks_CVPR_2019_paper.pdf 论文阅读方法初识目前深度学习在计算机视觉领域大放异彩,这不仅归功于网络结构的创新,也得益于训练策略的优化(损失函数、数据预处理、优化方法等)。但很多实现的细节和技巧在论文中并没有提及,或者是只简单提了一两句,这篇文章就是收集这些trick并进行了实验,将ResNet-50在ImageNet上的top1错误率从75.3%提升到79.29%。干货满满啊,调参侠狂喜。 相知2. Training Procedures
Baseline的训练策略:① 随机采样编码为float32类型; ② 随机裁剪;③ 0.5的概率水平翻转; ④ 饱和度、对比度、亮度随机变化; ⑤ 增加PCA噪声。 测试不采用任何增广;模型参数初始化采用Xavier,使用NAG优化器。 3. Large-batch training
3.1 Large-batch training大的batch size不会改变随机梯度的期望但会降低方差,也就是说大batch size会降低梯度的噪声。但是随着batch size的增加,会降低训练的收敛速度(同样的epoch效果会变差)。为了解决这个问题,有以下的trick: ① Linear scaling learning rate:很简单,学习率随着batch size线性增加。比如开始的batch size=128,学习率=0.1。现在batch size=256,学习率就也增加2倍,变为0.2; ② Learning rate warm up:在训练一开始就使用很大的学习率可能会导致数值不稳定,因此先使用小学习率然后慢慢增加至设定学习率即可。一般的策略是从0开始,经过几个epoch线性增加到预设学习率,warm up的实现可以参加我另外一篇博客; ③ Zero γ:在BN层会涉及到收缩与偏移 ④ No bias decay:只对卷积层和全连接的weight使用L2正则化,对于bias以及BN层中的参数不用。
3.2 Low-precision traing关于低精度就是使用float16的半浮点精度进行数值运算,目前的显卡对于FP16类型已经很快了(还是1080Ti和2080Ti玩家的我眼泪掉下来),比如V100在FP32的训练速度是14TFLOPs,在FP16已经是100TFLOPS了。这部分我就不讲太多了,适合卡新卡多的大佬研究,提示一下1080Ti没有什么FP16运算能力… 最后贴个实验结果,大致可以看到哪些trick是比较鸡肋的,我个人建议只考虑warm up+Linear Scaling,性价比最高。 4. ResNet ArchitectureResNet的架构就不多说了,见图1,没看过的同学也可以参考我的博客。作者讨论了结构上的一些小trick。 ① ResNet-B:如图二所示,这也是Pytorch官方在实现时所采用的方法,主要是将PathA上的下采样放在了第2个3x3卷积上,避免了 ② ResNet-C:将输入阶段的 ③ ResNet-D:在ResNet-B、C的基础上将Path B改为平均池化下采样+1x1卷积,避免忽略特征图内容。
5. Training Refinemets
5.1 Cosine Learning Rate Decay就是采用余弦衰减策略,常与Warm up一起服用。其在训练初期衰减较慢,中期类似线性衰减,后半段类又比较平衡。可以参加我另一博客的细节与实现(和warm实现同一篇)。这里贴上warm up+cosine与另一个Step衰减的方法对比图,如下: 从结果上来看两者准确率差不多,但是cosine可以避免Step的调参。 5.2 Label SmoothingLabelSmooth从分类损失-交叉熵的角度分析,引入了一个较小的常数将目标标签由 5.3 Knowledge Distillation知识蒸馏就是使用一个Teacher模型去训练Student模型,T模型通常是有着高性能的预训练模型,这种训练方式能使得S模型在不增加模型容量的情况下提升性能。实现也比较简单,额外增加了一个distillation损失,惩罚S输出与T输出之间的softmax概率差异: T为温度系数,详见我另一篇博客,这可以使得softmax输出更平滑,使得S模型能从T模型的输出中学习到标签分布的知识。 5.4 Mixup TrainingMixup也是一种数据增广形式,随机采样两个训练样本 λ属于[0,1],从Beta分布中采样获得,在后续的训练中只使用Mixup获得的新样本进行训练。
6. Transfer Learning最后作者也在目标检测、语义分割等下游任务上检测了trick的有效性,这里就不放图了,大家自行参照原文理解。 回顾李沐大佬团队的这篇调参文章其实早有耳闻,并且很多方法在比赛或者项目中都已经实际应用过来,但研一上课一直没抽出时间拜读总结一下。这几天花时间把这篇文章总结了一下,这种干货文章对于算法工程人员和打比赛的朋友们还是很有指导意义的。后续我也会继续读一些这方面的文章,分享给大家。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/22 9:45:13- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |