论文链接:https://arxiv.org/abs/1905.11946
代码链接:https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet
第三方实现的PyTorch代码:https://github.com/lukemelas/EfficientNet-PyTorch

摘要

卷积神经网络通常都是先在固定资源预算下开发设计,然后如果资源有多余的话再将模型结构放大以便获得更好的精度。在本篇论文中,我们系统地研究了模型缩放并且仔细验证了网络深度、宽度和分辨率之间的平衡可以导致更好的性能表现。基于这样的观察,我们提出了一种新的缩放方法——使用一个简单高效的复合系数来完成对深度/宽度/分辨率所有维度的统一缩放。我们在MobileNets和ResNet上展示了这种缩放方法的高效性。

为了进一步研究,我们使用神经架构搜索设计了一个baseline网络,并且将模型放大获得一系列模型,我们称之为EfficientNets,它的精度和效率比之前所有的卷积网络都好。尤其是我们的EfficientNet-B7在ImageNet上获得了最先进的 84.4%的top-1精度 和 97.1%的top-5精度,同时比之前最好的卷积网络大小缩小了8.4倍、速度提高了6.1倍。我们的EfficientNets也可以很好的迁移,并且实现了最先进的精度——CIFAR-100(91.7%)、Flowers(98.8%)、其他3个迁移学习数据集。

1. Introduction

为了获得更好的精度,放大卷积神经网络是一种广泛的方法。举个例子,ResNet可以通过使用更多层从ResNet-18放大到ResNet-200;目前为止,GPipe通过将baseline模型放大四倍在ImageNet数据集上获得了84.3%的top-1精度,然而,放大CNN的过程从来没有很好的理解过,目前通用的几种方法是放大CNN的深度、宽度和分辨率,在之前都是单独放大这三个维度中的一个,尽管任意放大两个或者三个维度也是可能的,但是任意缩放需要繁琐的人工调参同时可能产生的是一个次优的精度和效率。

在本篇论文中,我们想要研究和重新思考放大CNN的过程,尤其地,我们调查了一个中心问题:是否存在一个原则性的放大CNN的方法实现更好的精度和效率?我们的实验研究表明了平衡深度、宽度和分辨率这三个维度是至关重要的,令人惊讶的是这样的平衡可以通过简单的使用一组常量比率来缩放每一个维度,基于这个观察,我们提出了一个简单高效的复合缩放方法,不像传统实践中任意缩放这些因子,我们的方法使用一组固定的缩放系数统一缩放网络深度、宽度和分辨率。举个例子,如果想使用 2N2^{N}2N倍的计算资源,我们可以简单的对网络深度扩大αN\alpha ^{N}αN倍、宽度扩大βN\beta ^{N}βN、图像尺寸扩大γN\gamma ^{N}γN倍,这里的α,β,γ\alpha ,\beta, \gammaα,β,γ都是由原来的小模型上做微小的网格搜索决定的常量系数,Figure 2展示了我们的缩放方法和传统方法之间的区别。

直观来讲,如果图像尺寸变大,复合的缩放方法会很有意义,因为当图像尺寸变大意味着网络需要更多层来增加接受野,同时需要更多的通道来捕捉更大图像上更多细粒度的模式信息。事实上,以前的理论(Raghu等,2017; Lu等,2018)和实证结果(Zagoruyko&Komodakis,2016)两者表明网络之间存在一定的关系宽度和深度,但据我们所知,我们是首先要凭经验量化三者之间的关系网络宽度,深度和分辨率的尺寸。

我们在已经存在的MobileNets和ResNets上展示了我们的缩放方法可以工作得很好,值得注意的是,模型缩放的高效性严重地依赖于baseline网络,为了进一步研究,我们使用网络结构搜索发展了一种新的baseline网络,然后将它缩放来获得一系列模型,称之为EfficientNets。Figure 1总结了ImageNet的表现,EfficientNets由于其他CNN网络,尤其地,我们的EfficientNet-B7超越了之前最好的GPipe的精度,但是参数量少了8.4倍、速度快了6.1倍。相比于广泛使用的ResNet-50,我们的EfficientNets-B4在相近的FLOPS下将top-1精度从76.3%提高到了82.6%。除了ImageNet,EfficientNets在其他数据集上表现也很好,在8个广泛应用的数据集中的5个实现了最先进的精度,然而比存在的卷积网络的参数量减少了21倍。

2. Related Work

ConvNet精度:自从AlexNet赢得2012的ImageNet竞赛,ConvNets随着变得更大获得了更高的精度,同时GoogleNet使用6.8M的参数获得了74.8%的top-1精度,SENet使145M参数获得了82.7%的top-1精度。最近,GPipe进一步提高了精度——使用了557M的参数获得了84.3%的top-1验证精度:它如此的大以至于需要将网络划分使用特定的并行化手段训练,然后将每一部分传递到一个不同的加速器。然而这些模型主要是为ImageNet设计,但是将其迁移到其他应用上时效果也很好。

ConvNet效率:深度网络的参数过多,模型压缩是一种通用的方法减小模型大小——平衡精度和效率。当移动网络变得无处不在时,我们也通常要手动设计高效的ConvNets,比如SqueezeNets、MobileNets、ShuffleNets。最近,神经网络结构搜索在设计高效的ConvNets变得越来越流行,并且通过广泛搜索网络宽度、深度、卷积核类型和大小得到了比手动设计的模型更高的精度。然而,目前还不清楚怎么将这些技术应用到更大的模型中,通常要更大的设计空间和更贵的微调成本,在本篇论文中,我们旨在研究效率设计更大规模的ConvNets,为了实现这个目标,我们采用模型缩放。

模型缩放:有很多的方法因不同的资源限制对ConvNet进行缩放:ResNet可以通过调整深度(缩小到ResNet-18,放大到ResNet-200),WideResNet和MobileNets可以通过对宽度(#channels)缩放。公认的是更大的输入图像尺寸有利于提高精度,同时需要更多的计算量。尽管之前的研究展示了网络深度和宽度对ConvNets的表现力很重要,它仍然是一个开放的问题来高效缩放ConvNet获得更好的效率和精度。我们的工作系统地研究了ConvNet对网络深度、宽度和分辨率这三个维度进行了缩放。

3. Compound Model Scaling

在本节中,我们将缩放问题公式化,研究了不同的方法并且提出了我们新的缩放方法。

3.1. Problem Formulation

卷积层 iii可以用公式 Yi=Fi(Xi)Y_{i}=F_{i}(X_{i})Yi​=Fi​(Xi​)定义,FiF_{i}Fi​代表卷积操作,YiY_{i}Yi​表示输出张量,XiX_{i}Xi​表示输入张量,&lt;Hi,Wi,Ci&gt;&lt;H_{i},W_{i},C_{i}&gt;<Hi​,Wi​,Ci​>表示输入张量的形状,Hi,WiH_{i},W_{i}Hi​,Wi​是feature map的尺寸,CiC_{i}Ci​是feature map的输入通道数。卷积NNN可以用一系列组成层表示:N=Fk⨀...⨀F2⨀F1=⨀j=1...kFj(X1)N=F_{k}\bigodot ...\bigodot F_{2}\bigodot F_{1}=\bigodot _{j=1...k}F_{j}(X_{1})N=Fk​⨀...⨀F2​⨀F1​=⨀j=1...k​Fj​(X1​)。实践中,ConvNet层经常被划分为多个stages,并且每个stage的所有层共享相同的结构:举个例子,ResNet有5个stages,每个stage的所有层有相同的卷积类型(除了第一层有一个下采样),因此,我们可以将ConvNet定义为:

NNN是分类网络,XXX表示输入,FiF_{i}Fi​是基础网络层,LiL_{i}Li​表示在第i个stage中基础网络层FiF_{i}Fi​的重复次数,总共有s个stage。Figure 2(a)展示了一种代表性的ConvNet,其空间维度,即feature map的尺寸逐层递减,但是通道维度是逐渐增加的,举个例子,从最开始的输入维度&lt;224,224,3&gt;&lt;224,224,3&gt;<224,224,3>变化到最终的输出维度&lt;7,7,512&gt;&lt;7,7,512&gt;<7,7,512>。

不像规则的ConvNets设计,大多聚焦于发现最好的基础网络层FiF_{i}Fi​,然后再利用模型缩放在不改变预先在baseline网络定义好的FiF_{i}Fi​的前提下扩展网络深度LiL_{i}Li​、宽度CiC_{i}Ci​、分辨率(Hi,Wi)(H_{i},W_{i})(Hi​,Wi​)。通过固定FiF_{i}Fi​,模型缩放简化了资源约束条件,但是它仍然有一个比较大的搜索空间&lt;Li,Ci,Hi,Wi&gt;&lt;L_{i},C_{i},H_{i},W_{i}&gt;<Li​,Ci​,Hi​,Wi​>,为了更进一步减小设计空间,我们限制所有层都统一以一个常量比例缩放,我们的目标是在给定资源预算下最大化模型精度,可以定义为如下优化问题:

这里的w,d,rw,d,rw,d,r是缩放网络分别对宽度、深度、分辨率的缩放系数,Fi^,Li^,Hi^,Wi^,Ci^\hat{F_{i}},\hat{L_{i}},\hat{H_{i}},\hat{W_{i}},\hat{C_{i}}Fi​^​,Li​^​,Hi​^​,Wi​^​,Ci​^​是预先在baseline网络中定义好的参数。

3.2. Scaling Dimensions

深度(d):缩放网络深度在许多ConvNets都有使用,直觉上更深的网络可以捕获到更丰富和更复杂的特征,在新任务上也可以泛化的更好。然而,更深的网络由于梯度消失问题(这里我更倾向于说成是网络退化问题)也更难训练。尽管有一些技术,例如跨层连接、批量归一化等可以有效减缓训练问题,但是深层网络的精度回报减弱了:举个例子,ResNet-1000和ResNet-101具有类似的精度,即使它的层数更多。Figure 3(中间的图)展示了我们在使用不同的深度系数d缩放网络的研究结果,更近一步的表明了精度回报的减弱问题。

宽度(w):缩放网络宽度也是一种常用的手段,正如之前讨论过的,更宽的网络可以捕捉到更细粒度的特征从而易于训练。然而,非常宽而又很浅的网络在捕捉高层次特征时有困难,我们的实验结果Figure 3(左)表明了当网络宽度随着w变大时,精度很快就饱和了。

Resolution(r):使用更高分辨率的输入图像,ConvNets可能可以捕捉到更细粒度的模式。从最早的 224x224,现在有些ConvNets为了获得更高的精度选择使用 229x229 或者 331x331。目前,GPipe使用 480x480 的分辨率获得了最先进的ImageNet精度,更好的精度比如 600x600 也被广泛使用在目标检测网络中。Figure 3(右)展示了缩放网络分辨率对精度的影响,同样可以看到在非常高的分辨率时网络精度回报会减弱。

由此,我们得到 Observation 1:对网络深度、宽度和分辨率中的任何温度进行缩放都可以提高精度,但是当模型足够大时,这种放大的收益会减弱。

3.3. Compound Scaling

我们经验上可以观察到不同缩放维度之间是不独立的,直观上来讲,对于分辨率更高的图像,我们应该增加网络深度,因为需要更大的感受野来帮助捕获更多像素点的类似特征,同时也应该增加网络宽度来获得更细粒度的特征。这些直觉指导着我们去协调平衡不同缩放维度而不是传统的单个缩放维度。

为了验证我们的直觉,我们在不同的网络深度和分辨率下比较了宽度变化的影响,正如Figure 4中所示,如果我们在 d=1.0 和 r=1.0 时仅仅缩放网络宽度,精度很快就饱和了。但是在d=2.0 和 r=2.0时在相同的FLOPS下宽度缩放就可以获得更好的精度。这些结果导致我们得到了第二个观察结果。

Observation 2:为了追去更好的精度和效率,在缩放时平衡网络所有维度至关重要。

事实上,之前的一些工作已经开始在追去任意缩放网络深度和宽度,但是他们仍然需要复杂的人工微调。在本篇论文中,我们提出了一个新的复合缩放方法——使用一个复合系数ϕ\phiϕ统一缩放网络宽度、深度和分辨率:

这里的α,β,γ\alpha,\beta,\gammaα,β,γ都是由一个很小范围的网络搜索得到的常量,直观上来讲,ϕ\phiϕ是一个特定的系数,可以控制用于资源的使用量,α,β,γ\alpha,\beta,\gammaα,β,γ决定了具体是如何分配资源的。值得注意的是,常规卷积op的计算量是和d,w2,r2d,w^{2},r^{2}d,w2,r2成正比的,加倍深度会使得FLOPS加倍,但是加倍宽度和分辨率会使得FLOPS加4倍。由于卷积ops经常在CNN中占据了大部分计算量,使用等式(3)缩放ConvNet将会使得整体计算量近似增加(α⋅β2⋅γ2)ϕ(\alpha \cdot \beta ^{2} \cdot \gamma ^{2})^{\phi}(α⋅β2⋅γ2)ϕ倍。在本篇论文中,我们对任意ϕ\phiϕ增加了约束α⋅β2⋅γ2≈2\alpha \cdot \beta ^{2} \cdot \gamma ^{2}\approx 2α⋅β2⋅γ2≈2,整体的计算量近似增加了2ϕ2^{\phi}2ϕ倍。

4. EfficientNet Architecture

因为模型缩放不改变baseline网络中的Fi^\hat{F_{i}}Fi​^​,所以有一个好的baseline网络是很重要的,我们使用之前的ConvNets对我们的缩放方法做了评估,但是为了更好验证我们的缩放方法的高效性,我们也提出了一种基于移动应用的baseline模型——EfficientNet。

受到MnasNet的启发,我们也开发了一种多目标的神经网络结构搜索同时优化精度和FLOPS,我们的搜索空间和MnasNet相同,同时我们的优化目标为 ACC(m)×[FLOPS(m)/T]wACC(m) \times \left [ FLOPS(m)/T \right ]^{w}ACC(m)×[FLOPS(m)/T]w,这里的ACC(m)和FLOPS(m)ACC(m)和FLOPS(m)ACC(m)和FLOPS(m)分别是模型m的精度和计算量,TTT是目标计算量,w=−0.07w=-0.07w=−0.07是一个超参数用来权衡精度和FLOPS。不像MnasNet中的优化目标,这里优化的是FLOPS而不是延迟,因为我们没有说是要在特定的硬件平台上做加速。我们的搜索方法得到了一个高效的网络,我们称之为EfficientNet-B0,因为我们使用的搜索空间和MnasNet相似,所以得到的网络结构也很相似,不过我们的EfficientNet-B0稍微大了点,因为我们的FLOPS预算也比MnasNet中大(400M)。table 1展示了EfficientNet-B0的结构,它的主要构建块就是移动倒置瓶颈MBConv,其网络结构如下:


然后以EfficientNet-B0为baseline模型,我们将我们的复合缩放方法应用到它上面,分为两步:

  • STEP 1:我们首先固定ϕ=1\phi =1ϕ=1,假设有相比于原来多了2倍的资源,我们基于等式(2)和(3)先做了一个小范围的搜索,最后发现对于EfficientNet-B0来说最后的值为α=1.2,β=1.1,γ=1.15\alpha = 1.2,\beta = 1.1,\gamma = 1.15α=1.2,β=1.1,γ=1.15,在α⋅β2⋅γ2≈2\alpha \cdot \beta ^{2} \cdot \gamma ^{2}\approx 2α⋅β2⋅γ2≈2的约束下;
  • STEP 2:接着我们固定α,β,γ\alpha,\beta,\gammaα,β,γ作为约束,然后利用不同取值的ϕ\phiϕ对baseline网络做放大,来获得Efficient-B1到B7;

值得注意的是,直接在一个大模型上搜索得到α,β,γ\alpha,\beta,\gammaα,β,γ 可能会导致一个更好的表现,但是搜索成本会很高,我们的方法解决了这个问题——STEP 1时只在小的baseline网络中做了一次搜索得到α,β,γ\alpha,\beta,\gammaα,β,γ,然后对于其他的模型都使用的是相同的α,β,γ\alpha,\beta,\gammaα,β,γ,只是通过ϕ\phiϕ来调整模型的大小和FLOPS。

5. Experiments

5.1. Scaling Up MobileNets and ResNets

为了验证我们的方法,我们首先将缩放方法应用到MobileNets和ResNets中,Table 3展示了以不同的方法缩放的ImageNet结果。与其他单一维度的缩放方法相比,我们的复合缩放方法精度提高了。

5.2. ImageNet Results for EfficientNet

我们采用了和MnasNet相似的设置对我们的EfficientNet模型进行训练:

  • RMSProp优化器,decay为0.9,momentum为0.9;
  • batch norm momentum为0.99;
  • weight decay为1e-5;
  • 初始学习率为0.256,并且每2.4个epoches衰减0.97;
  • 同时使用了swish activation,固定的增强技术,随机深度(drop connect ratio 为0.2),同时更大的模型需要更强的正则化,所以我们线性地增加dropout比率从EfficientNet-B0的0.2到EfficientNet-B7的0.5;



5.3. Transfer Learning Results for EfficientNet


6. Discussion

下面是使用了我们的复合缩放方法后精度的提升效果:

为了更近一步的理解为什么我们的复合缩放方法就比其他的方法效果好,Figure 7比较了使用不同方法的模型得到的class activation map的效果图,所有的这些模型都是从baseline模型缩放得到的,它们的统计特性如图Table 7。图片是随机从验证集中得到的,正如在figure中可见,复合缩放得到的模型倾向聚焦于与更多目标细节相关的区域,而其他的模型要么缺乏目标细节,要么不能捕捉到图片中所有的目标。

EfficientNet论文解读相关推荐

  1. RepVGG:极简架构,SOTA性能,论文解读

    ** RepVGG:极简架构,SOTA性能,论文解读 ** 更新:RepVGG的更深版本达到了83.55%正确率!PyTorch代码和模型已经在GitHub上放出.DingXiaoH/RepVGG 2 ...

  2. 自监督学习(Self-Supervised Learning)多篇论文解读(下)

    自监督学习(Self-Supervised Learning)多篇论文解读(下) 之前的研究思路主要是设计各种各样的pretext任务,比如patch相对位置预测.旋转预测.灰度图片上色.视频帧排序等 ...

  3. 自监督学习(Self-Supervised Learning)多篇论文解读(上)

    自监督学习(Self-Supervised Learning)多篇论文解读(上) 前言 Supervised deep learning由于需要大量标注信息,同时之前大量的研究已经解决了许多问题.所以 ...

  4. 可视化反投射:坍塌尺寸的概率恢复:ICCV9论文解读

    可视化反投射:坍塌尺寸的概率恢复:ICCV9论文解读 Visual Deprojection: Probabilistic Recovery of Collapsed Dimensions 论文链接: ...

  5. 从单一图像中提取文档图像:ICCV2019论文解读

    从单一图像中提取文档图像:ICCV2019论文解读 DewarpNet: Single-Image Document Unwarping With Stacked 3D and 2D Regressi ...

  6. 点云配准的端到端深度神经网络:ICCV2019论文解读

    点云配准的端到端深度神经网络:ICCV2019论文解读 DeepVCP: An End-to-End Deep Neural Network for Point Cloud Registration ...

  7. 图像分类:CVPR2020论文解读

    图像分类:CVPR2020论文解读 Towards Robust Image Classification Using Sequential Attention Models 论文链接:https:// ...

  8. CVPR2020论文解读:手绘草图卷积网络语义分割

    CVPR2020论文解读:手绘草图卷积网络语义分割 Sketch GCN: Semantic Sketch Segmentation with Graph Convolutional Networks ...

  9. CVPR2020论文解读:3D Object Detection三维目标检测

    CVPR2020论文解读:3D Object Detection三维目标检测 PV-RCNN:Point-Voxel Feature Se tAbstraction for 3D Object Det ...

  10. CVPR2020论文解读:三维语义分割3D Semantic Segmentation

    CVPR2020论文解读:三维语义分割3D Semantic Segmentation xMUDA: Cross-Modal Unsupervised Domain Adaptation for 3D ...

最新文章

  1. php未登录跳到登陆页面,vue实现未登录跳转到登录页面的方法
  2. Failed to set NvVAD endpoint as default Audio endpoint [0]
  3. Ubuntu下Navicat 配置
  4. lisp java_从Java调用的LISP代码
  5. IPv6时代已来:双十一中的IPv6大规模应用实践
  6. 腾讯32款游戏退市,只因为这个理由!
  7. Module not found: Error: Can't resolve 'XXX' in 'XXXX'
  8. 五年级数学用计算机找规律教案,五年级数学教案——找规律教学设计
  9. c# 火狐浏览器怎么嵌入窗体中_语言C#.net 如何将子窗体嵌入到父窗体里面
  10. win10计算机怎么计算根号,详细介绍win10系统自带的计算器的功能,经验告诉你该这样...
  11. html标签logo怎么去掉,镜片上的logo怎么去掉
  12. 水晶报表10.0企业版下载地址及注册码
  13. openairinterface5g基站老版eNB部署
  14. Premature end of Content-Length delimited message body解决方案
  15. 2006考研阅读Text2翻译
  16. 7.3—查找—Sear a 2D Matrix
  17. 四、Vue项目去哪儿网首页推荐和周末游组件并使用Axios获取数据
  18. ES聚合Aggregation---原生(restful)api
  19. 如何培养自己的编程兴趣
  20. 【前端库】favico.js 浏览器消息提示 【待更新】

热门文章

  1. 徒步西藏旅游攻略之岗仁波齐神山之行
  2. 扫荡倾斜摄影单体化难题
  3. EOJ 1224 简单迷宫问题 bfs
  4. react中dispatch_react-redux中dispatch是异步?
  5. android 异常 android Removing unused resources requires unused code shrinking to be turned on.
  6. 计算机excel表格教程高级筛选6,#excel如何进行高级筛选?#excle高级筛选6
  7. 数据结构 实验三 算术表达式求值 栈的基本操作
  8. Docker 连接宿主 Redis
  9. 防火墙之Iptables与Firewalld
  10. 小米手机google play下载应用一直显示等待中的解决办法