热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

卷积神经网络学习路线(二十二)|GoogleBrainEfficientNet

1.前言这是卷积神经网络学习路线的的第二十二篇文章,要介绍的是2019年GoogleBrain的大作EfficientNet,论文全名为EfficientNet:Rethinkin

1. 前言

这是卷积神经网络学习路线的的第二十二篇文章,要介绍的是2019年Google Brain的大作EfficientNet,论文全名为EfficientNet:Rethinking Model Scaling for Convolutional Neural Networks

这篇论文系统的研究了网络的深度(Depth),宽度(Width)和分辨率(Resolution)对网络性能的影响(MobileNetV1也从这些角度去尝试给网络瘦身),然后提出了一个新的缩放方法,即使用简单且高效的符合系数均匀的缩放深度/宽度/分辨率的所有尺寸,在MobileNets和ResNets上证明了其有效性。

进一步,论文是用神经结构搜索来设计了新的baseline并进行扩展获得了一系列模型,称为EfficientNets,比之前的ConvNets更加准确和高效。其中EfficientNet-B7实现了ImageNet的SOTA,即84.4%的top1准确率和97.1%的top-5准确率,同时这个模型比现存的最好的卷积神经网络的模型大小小8.4倍,速度快6.1倍。

2. 问题引入

在这篇论文之前已经有相当多的CNN工作通过增加网络的深度,宽度,分辨率等去提升模型性能。尽管可以任意的缩放二维或者三维,但任意的缩放都需要复杂的手工调整,并且常常产生更差的精度和效率。基于此,本论文重新思考和研究了CNN的缩放问题,即是否存在一种公式化的方法缩放CNN,从而实现更高的精度和效率?作者的研究表明,平衡网络宽度/深度/分辨率的所有维度是至关重要的,并且可以通过简单的按比例缩放每个维度来实现这种平衡。基于这个思考,论文提出了一种简单有效的复合缩放方法。如Figure2所示。

卷积神经网络学习路线(二十二)| Google Brain EfficientNet

比如,我们想使用2N2^N倍计算资源,可以简单的通过αN\alpha^N去增加深度,βN\beta^N去增加宽度,γN\gamma^N去增加分辨率,其中α\alphaβ\betaγ\gamma是通过始小模型上进行小网格搜索确定的常系数。

直观来说,这种复合缩放的方法是有意义的,例如输入图像更大,则网络需要更多层来增加感受野,并且需要更多的通道来捕获更大图像上的更细粒度的语义信息。

论文指出,模型扩展的有效性很大程度上式取决于BaseLine,因此论文使用NAS来搜索新的BaseLine,并将其扩展为一系列模型,称为EfficientNets。

卷积神经网络学习路线(二十二)| Google Brain EfficientNet

3. 复合模型缩放

3.1 问题定义

对于CNN的第ii层可以定义为一个函数:Yi=Fi(Xi)Y_i=F_i(X_i),其中FiF_i为一个操作(operrator),YiY_i为输出张量,(Xi)(X_i)为输入张量,其形状可以表示为<HiWi,Ci>,其中HiH_iWiW_i为空间维度,CiC_i为通道数。一个CNN网络NN可以表示为:

卷积神经网络学习路线(二十二)| Google Brain EfficientNet

其中FiLiF_i^{L_i}表示FiF_i层在第ii个阶段被重复了LiL_i次。

模型缩放和传统的CNN设计去寻找最优结构FiF_i不一样,模型缩放是为了寻找FiF_i的最佳宽度CiC_i,深度LiL_i和分辨率(Hi,Wi)(H_i,W_i),通过固定住FiF_i,模型缩放简化了资源限制问题。为了进一步简化搜索空间,论文限制所有层必须以恒定比率均匀缩放。在给定资源限制的情况下,去最大化模型的精度,就变成了以下优化问题:

卷积神经网络学习路线(二十二)| Google Brain EfficientNet

3.2 维度缩放

在上面的优化问题中最大的苦难是ddwwrr相互依赖,并且值在不同的资源约束下会发生变化。因此,传统方法主要在这三个维度之一进行缩放CNN:

  • 深度(dd):缩放深度是最常见的方法。这基于更深的网络可以捕获更丰富、更复杂的特征,并且可以很好地泛化新任务。 然而由于梯度消失问题,更深层次的网络也更难训练。虽然跨层连接和批量归一化等可以缓解训练问题,但非常深的网络的准确度增益会减少:例如,ResNet-1000和ResNet-101有相似精度。
  • 宽度(ww)。对于小模型,缩放宽度是最常用的。这基于更宽的网络往往能够捕获更细粒度的特征,并且更容易训练。 然而,极宽但浅的网络往往难以捕获更高级别的特征。
  • 分辨率(rr)。 感觉多尺度训练是最常用的了? 这基于使用更高分辨率的输入图像,网络可以捕获更细粒度的特征。

下面的Figure3展示了缩放单个维度会模型精度的影响。

卷积神经网络学习路线(二十二)| Google Brain EfficientNet

从上图作者得到观察一:扩展网络宽度、深度或分辨率的任何维度都可以提高准确性,但对于更大的模型,精度增益会降低。

3.3 复合缩放

作者进一步观察到,网络宽度,深度和分辨率的缩放尺度不是独立的。直观来说,对于更高分辨率的图像,应该相应的增加网络深度,这样较大的感受野可以帮助捕获包含更高分辨率图像更多像素的特征。 同时,还应该增加网络深度,以便在高分辨率图像中捕获具有更多像素的更细粒度的特征。这些自觉表明我们需要协调和平衡不同的缩放尺度,而不是传统的单维缩放。 然后论文做了Figure4所示的实验,验证了不同网络深度和分辨率下的宽度缩放产生的影响。可以看到,在不改变深度(d=1.0)和分辨率(r=1.0)的情况下缩放网络宽度w,则精度会很快达到饱和。当CNN拥有更深(d = 2.0)和更高分辨率(r = 2.0),宽度缩放在相同的FLOPS成本下实现了更好的精度。

卷积神经网络学习路线(二十二)| Google Brain EfficientNet

然后论文就提出了观察2:为了追求更高的准确性和效率,在ConvNet缩放期间平衡网络宽度,深度和分辨率的维度是非常重要的。

基于观察1和观察2,这篇论文提出了一个新的复合缩放方法,以公式的形式,使用一个复合系数ϕ\phi统一缩放网络宽度、深度和分辨率,如下:

卷积神经网络学习路线(二十二)| Google Brain EfficientNet

其中α\alphaβ\betaγ\gamma是可以通过小网格搜索确定的常数。ϕ\phi是我们自己指定的系数,控制有多少资源可用于模型缩放,而α\alphaβ\betaγ\gamma指定如何将这些额外的资源分配给网络的宽度,深度和分辨率。需要注意的是,常规卷积运算的FLOPS和ddw2w^2r2r^2成正比,即倍增网络深度将使FLOPS加倍,但网络宽度或分辨率倍增会使FLOPS增加四倍。 因为卷积神经网络中主要的计算成本由卷积运算产生,因此使用等式3对ConvNet进行缩放,即将通过(αβ2γ2)ϕ(\alpha * \beta^2 * \gamma^2)^{\phi}近似地表示增加总FLOPS。在论文中,作者约束αβ2γ2)ϕ2\alpha* \beta^2 * \gamma^2)^{\phi} \approx2,使得对于任何新的ϕ\phi,总FLOPS增加约2ϕ2^{\phi}

4. EfficientNet结构

因为模型缩放不会改变BaseLine模型的操作Fi^\hat{F_{i}},因此拥有良好的BaseLine也很关键。论文除了用现有的CNN评估这个缩放方法,还利用MnasNet搜索了一个新的BaseLine模型来评估,称为EfficientNet-B0,结构如下:

卷积神经网络学习路线(二十二)| Google Brain EfficientNet

获得了BaseLine EfficientNet-B0后,通过下面两个步骤来进行模型缩放:

  • 步骤一:首先确定ϕ=1\phi=1,假设有两倍的可用资源,并根据公式2和3进行α\alpha,β\beta,γ\gamma的小网格搜索。作者找到了EfficientNet-B0满足约束的最佳值α=1.2\alpha=1.2β=1.1\beta=1.1γ=1.15\gamma=1.15
  • 步骤二:将α\alpha,β\beta,γ\gamma固定为常数,并使用公式3扩展具有不同ϕ\phi的基线网络,以获得EfficientNet-B1至B7,见Table2。

卷积神经网络学习路线(二十二)| Google Brain EfficientNet

具有类似的top-1 / top-5精度的CNN被组合在一起以进行效率比较。 与现有的CNN模型相比,EfficientNet模型可以将参数和FLOPS降低一个数量级(参数减少高达8.4倍,FLOPS减少高达16倍)。

5. 实验

5.1 缩放MobileNets和ResNets

Table3展示了以不同的方式缩放在ImageNet上的结果,与其他单维缩放方法相比,这个复合缩放方法提高了所有这些模型的准确性,表明了缩放方法对一般现有的CNN模型的有效性。

卷积神经网络学习路线(二十二)| Google Brain EfficientNet

5.2 EfficientNet的ImageNet结果

Table2展示了从相同的BaseLine 网络EfficientNet-B0开始缩放的所有EfficientNet模型的性能。EfficientNet模型通常使用比其他CNN模型少一个数量级的参数和FLOPS,但具有相似的精度。 特别是,EfficientNet-B7在66M参数和37B FLOPS下达到84.4%top1 / 97.1%top-5精度,比之前最好的GPipe更精确但小8.4倍。Figure 1(上面有)和Figure 5显示了现有的SOTA CNN模型的参数精度和FLOPS精度曲线,其中缩放的EfficientNet模型比其他CNN模型具有更少的参数和FLOPS,且实现了更高的精度。

卷积神经网络学习路线(二十二)| Google Brain EfficientNet

另外, 作者还验证了计算成本,Table4展示了20次运行的平均延迟,快了5-6倍。

卷积神经网络学习路线(二十二)| Google Brain EfficientNet

5.3 EfficientNet迁移学习的结果

论文还在常用的迁移学习数据集上评估了EfficientNet,论文使用了ImageNet预训练模型并对新的数据集进行微调,数据集相关信息如Table6所示。

卷积神经网络学习路线(二十二)| Google Brain EfficientNet

下面的Table5展示了迁移学习的性能,可以看到与公开可用模型相比,(1)EfficientNet模型减少了平均4.7倍(最多21倍)的参数,同时实现了更高的精度。 (2)EfficientNet模型在8个数据集中有5个仍然超过了它们的准确度,且使用的参数减少了9.6倍。

卷积神经网络学习路线(二十二)| Google Brain EfficientNet

Figure6则展示了各种模型的精度-参数曲线。

卷积神经网络学习路线(二十二)| Google Brain EfficientNet

6. 讨论

所有的缩放方法都是以更多的FLOPs为代价来提升精度,Figure8说明了复合缩放的重要性。

卷积神经网络学习路线(二十二)| Google Brain EfficientNet

论文还用了类**图来分析不同缩放方法的有效性,Figure 7的类**图说明了具有复合缩放的模型倾向于关注具有更多目标细节的更相关区域,而其他模型要么缺少目标细节,要么无法捕获图像中的所有目标。

卷积神经网络学习路线(二十二)| Google Brain EfficientNet

7. 结论

这篇论文系统的研究CNN模型的缩放,并明确仔细平衡网络宽度、深度和分辨率的重要性。因此论文提出了一种简单而高效的复合缩放方法,使我们能够以更原则的方式轻松地将基线CNN模型缩放到任何目标资源约束,同时保持模型效率。

8. 思考

这篇论文除了提出需要仔细平衡网络宽度、深度和分辨率的重要性,还使用NAS搜索出了一个搞笑的EfficientNet BaseLine,并且似乎论文的缩放方法在这个BaseLine上的提升是最大的,在其它的网络上则没有那么高了。。。这个实验做的非常漂亮,但我我这种穷人玩家肯定玩不动,也不要说复现了。。。猜测是动用了TPU?对代码有兴趣可以去研究源码。

9. 附录

  • 原文链接:https://arxiv.org/pdf/1905.11946v1.pdf
  • 代码:https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet

10. 推荐阅读

  • 快2020年了,你还在为深度学习调参而烦恼吗?
  • 将卷积神经网络视作泛函拟合
  • 在2020年,你觉得计算机视觉有哪些值得研究的领域?

欢迎关注GiantPandaCV, 在这里你将看到独家的深度学习分享,坚持原创,每天分享我们学习到的新鲜知识。( • ̀ω•́ )✧

有对文章相关的问题,或者想要加入交流群,欢迎添加BBuf微信:

卷积神经网络学习路线(二十二)| Google Brain EfficientNet


推荐阅读
  • 基于TensorFlow的鸢尾花数据集神经网络模型深度解析
    基于TensorFlow的鸢尾花数据集神经网络模型深度解析 ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • 从2019年AI顶级会议最佳论文,探索深度学习的理论根基与前沿进展 ... [详细]
  • 深入解析经典卷积神经网络及其实现代码
    深入解析经典卷积神经网络及其实现代码 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 独家解析:深度学习泛化理论的破解之道与应用前景
    本文深入探讨了深度学习泛化理论的关键问题,通过分析现有研究和实践经验,揭示了泛化性能背后的核心机制。文章详细解析了泛化能力的影响因素,并提出了改进模型泛化性能的有效策略。此外,还展望了这些理论在实际应用中的广阔前景,为未来的研究和开发提供了宝贵的参考。 ... [详细]
  • 能够感知你情绪状态的智能机器人即将问世 | 科技前沿观察
    本周科技前沿报道了多项重要进展,包括美国多所高校在机器人技术和自动驾驶领域的最新研究成果,以及硅谷大型企业在智能硬件和深度学习技术上的突破性进展。特别值得一提的是,一款能够感知用户情绪状态的智能机器人即将问世,为未来的人机交互带来了全新的可能性。 ... [详细]
  • 本文提供了PyTorch框架中常用的预训练模型的下载链接及详细使用指南,涵盖ResNet、Inception、DenseNet、AlexNet、VGGNet等六大分类模型。每种模型的预训练参数均经过精心调优,适用于多种计算机视觉任务。文章不仅介绍了模型的下载方式,还详细说明了如何在实际项目中高效地加载和使用这些模型,为开发者提供全面的技术支持。 ... [详细]
  • TensorFlow基础知识深化讲解
    批标准化批标准化(batchnormalization,BN)是为了克服神经网络层数加深导致难以训练而诞生的。深度神经网络随着深度加深,收 ... [详细]
  • 分享两个GitHub链接,今天看到的,超赞超赞不能更赞了,答应我一定要去看好吗~~~~不论是笔记还是github中分享的其它资源ÿ ... [详细]
  • 在Windows系统中安装TensorFlow GPU版的详细指南与常见问题解决
    在Windows系统中安装TensorFlow GPU版是许多深度学习初学者面临的挑战。本文详细介绍了安装过程中的每一个步骤,并针对常见的问题提供了有效的解决方案。通过本文的指导,读者可以顺利地完成安装并避免常见的陷阱。 ... [详细]
  • 2018 HDU 多校联合第五场 G题:Glad You Game(线段树优化解法)
    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6356在《Glad You Game》中,Steve 面临一个复杂的区间操作问题。该题可以通过线段树进行高效优化。具体来说,线段树能够快速处理区间更新和查询操作,从而大大提高了算法的效率。本文详细介绍了线段树的构建和维护方法,并给出了具体的代码实现,帮助读者更好地理解和应用这一数据结构。 ... [详细]
  • 数据科学笔记26:深入解析随机森林分类算法及其在Python和R中的应用
    ### 摘要随机森林是一种在集成学习领域备受推崇的算法,被誉为“集成学习技术的典范”。该方法因其简洁性、易实现性和较低的计算成本而被广泛应用。本文将深入探讨随机森林的工作原理,特别是其在Python和R中的具体应用。随机森林通过结合多个决策树和Bagging技术,有效提高了模型的准确性和鲁棒性。我们将详细解析其核心机制,并通过实际案例展示如何在不同编程环境中高效实现这一强大的分类算法。 ... [详细]
  • 利用TensorFlow.js在网页浏览器中实现高效的人脸识别JavaScript接口
    作者|VincentMühle编译|姗姗出品|人工智能头条(公众号ID:AI_Thinker)【导读】随着深度学习方法的应用,浏览器调用人脸识别技术已经得到了更广泛的应用与提升。在 ... [详细]
  • 深度学习分位数回归实现区间预测
    深度学习分位数回归实现区间预测 ... [详细]
author-avatar
仙走壹步
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有