本文翻译论文为深度学习分类论文:EfficientNet
论文链接:https://arxiv.org/pdf/1905.11946.pdf
开源代码:https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet.


在这里插入图片描述

摘要:卷积网络通常在现有的硬件资源下开发,然后根据硬件资源的进展,将卷积网络扩展到更高的准确度。在论文中,我们系统的研究了模型的缩放,并且确定平衡网络深度,宽度以及输入分辨率能够得到更优的网络,进而得到更好的结果。基于这样的研究,通过使用高效的复合系数(compund coefficient)统一的对 Depth/Width/ Resolution进行缩放,证明了该方法在缩放MobileNets和ResNet模型上的有效性。

在这里插入图片描述

  为了更进一步研究,我们使用神经网络搜索(neural architecture search, NAS)的方法获得新的基准模型,通过不同的缩放系数,得到模型族,称之为EfficientNets。与之前的模型相比,该模型获得更好的精度和效率。其中,EfficientNet-B7在ImageNet上获得84.3%的top-1准确度,并且模型缩小8.4x smaller以及推理速度增加6.4倍。EfficientNets在CIFAR-100(91.7%),Flowers(98.8%),以及其它三个数据集上获得非常好的迁移学习效果。

主要介绍本文提出新的模型,EfficientNet。创新点是对网络的三个维度(深度,宽度,和输入大小)进行统一的缩放,进而得到更好的结果。与之前最好的卷积网络相比,模型参数更少(8.4x smaller)和推理速度更快(6.1x faster)。

1. Introduction

在这里插入图片描述在这里插入图片描述

一般情况下,缩放卷积网络是获得更好准确度的有效手段,也被广泛的采用。例如,ResNet-18到ResNet-200,仅仅是增加了更多的层。最近,通过将基准网络扩大四倍,GPipe在ImageNet获得84.3%的top-1准确度。但是卷积网络的扩展方式从来没有被好好理解,方法也各不相同。最常用的扩展方式是增加网络深度或者宽度。另外一个不是很常见的扩展方式是增大图像分辨率。在之前的工作中,通常是处理三个维度(depth/width/resolution)中的一个。尽管可以同时处理2-3个维度,但是任意的缩放需要大量人工调试,常常产生次优的精度和效率。

主要陈述了之前网络扩展的维度有限,没有同时考虑多个维度同时扩展。即使多个维度扩展,但是需要大量人工调试,也不一定得到最好的效果。

在这里插入图片描述在这里插入图片描述

在本文中,我们研究和重新思考卷积网络的扩展方法。我们尤其关注一个核心的问题:是否有扩展更优卷积网络的设计准则?我们的实验研究发现,平衡网络的深度、宽度、和分类率至关重要。更让人惊讶的是,只需要常数比率,就可以维持三个维度的平衡,进而进行有效的网络扩展。基于上述的研究结果,我们提出一个简单而且有效的复合扩展方法(compound scaling method)。与之前任意扩展网络的操作不同,我们使用一组固定的缩放系数对三个维度进行扩展。比如,如果需要使用 2 N 2^N 2N的计算资源,我们可以简单的提高深度( α N \alpha^N αN),宽度( β N \beta^N βN)和图像大小( γ N \gamma^N γN),这里 α , β , γ \alpha,\beta,\gamma α,β,γ是在最小的模型上搜索得到。图2 展示了我们缩放方法与传统方法的不同之处。

主要介绍了本文提出的复合缩放方法的可行性,以及有效性。对于网络的缩放设计,使用常数比率的缩放就可以达到较好的效果。

在这里插入图片描述

在这里插入图片描述
直观上,复合缩放方法是有意义的。如果输入图像变的更大,那么更多的网络层才能提高感受野,以及更多的通道才能获取更多细粒度特征。事实上前人的理论和研究结果表明,网络的深度和宽度存在一定的关系。但是据我们的研究,我们是第一个量化深度,宽度和分辨率三个维度的关系。

在这里插入图片描述

我们的模型缩放方法在MobileNetsResNet上非常有效。值得注意的是,我们的方法非常依赖基准网络(baseline network)。为了进一步研究,我么使用神经网络搜索算法(NAS)得到新的基准网络。然后对其进行模型缩放,得到一系列网络,称之为EfficientNets。图1总结了ImageNet上各个模型的表现,EfficientNets明显高于其它卷积网络。与广泛使用的ResNet-50相比,EfficientNet-B4将top-1精度从76.3%提升到83.0%,并且计算量更少。除了ImageNet数据集,EfficientNets在其它数据集上(5-8个数据集)的迁移学习也表现良好。

在这里插入图片描述

2. Related Work

在这里插入图片描述

卷积网络的精度:自从AlexNet获得2012年ImageNet冠军,卷积网络变得更大,精度也变得更好。2014年的GooglNet精度为74.8%,参数为6.8M,2017年的获胜模型,SENet获得82.7%的精度,参数为145M。最近,GPipe极大提高了top-1精度,达到84.3%,参数量为557M,训练如此大的模型是非常困难的。通常需要特殊的训练流程,并且需要将模型分拆到不同的硬件。虽然这些模型仅仅是针对ImageNet设计,最近的研究表明,ImageNet上更好的模型通常在其它数据集上也同样表现良好,以及其它视觉任务,比如目标检测。尽管对于很多应用,更高的精度是很重要的,但是我们已经达到了硬件的极限,因此提高精度的同时也要兼顾效率。

在这里插入图片描述在这里插入图片描述

卷积网络的效率:深度卷积网络往往是过度参数化的。通常需要对模型进行压缩,牺牲部分精度来换取效率的提升。随着智能手机越来越流行,通常需要手工设计高效的移动端网络,比如SqueezeNets,MobileNets,ShuffleNets。最近,NAS广泛用于设计高效的适合移动端的卷积网络,与经过手工设计和调试的移动端网络相比,显然更加有效。但是,如何将这样的技术应用于更大的模型,仍有很多不清晰的地方。本论文中,我们将研究高效、超级大、精度更高的卷积网络。为了达到这个目标,我们借助于模型缩放。

在这里插入图片描述

模型缩放:根据不同的资源限制,模型缩放的方式有很多,比如,通过调整网络的深度,ResNet可以缩放为18层到200层。WideResNet和MobileNets调整宽度(channels)。通常,更大的图像在提升精度的同时,也会带来更多的计算量。前人的研究结果表明,网络的深度和宽度有助于提升网络的表达能力,但是如何进行缩放,进而获得更高的精度和效率,仍是开放的问题。本文将着重研究如何对三个维度进行缩放。

3. Compound Model Scaling

在这里插入图片描述在这里插入图片描述

在这一部分,我们将缩放问题公式化,研究不同的方法,并且提出新的缩放方法。

3.1 Problem Formulation

一层卷积 i i i可以定义为一个函数: Y i = F i ( X i ) Y_i=\mathcal{F_i}(X_i) Yi=Fi(Xi) F i \mathcal{F_i} Fi是一个操作(operator), Y i Y_i Yi是输出的tensor, X i X_i Xi是输入tensor,形状为 < H i , W i , C i > <H_i,W_i,C_i> <Hi,Wi,Ci> H i , W i H_i,W_i HiWi是空间维度, C i C_i Ci是通道维度。一个卷积网络 N \mathcal{N} N可以表达为一系列复合层: N = F k ⨀ . . . ⨀ F 2 ⨀ F 1 ( X 1 ) = ⨀ j = 1... k F i ( X 1 ) \mathcal{N}=\mathcal{F_k\bigodot...\bigodot\mathcal{F_2}\bigodot\mathcal{F_1}(X_1)}=\bigodot_{j=1...k}\mathcal{F_i}(X_1) N=Fk...F2F1(X1)=j=1...kFi(X1)。实际中,卷积层会被分为多个阶段,每个阶段的层都是相同的结构:例如,ResNet总共有5个阶段,除了第一层进行下采样,每个阶段的卷积层的类型相同。因此,我们可以将卷积网络定义如下:
N = ⨀ i = 1... s F i L i ( X < H i , W i , C i > ) (1) \mathcal{N}=\bigodot_{i=1...s}\mathcal{F}^{L_i}_i(X_{<H_i,W_i,C_i>}) \tag{1} N=i=1...sFiLi(X<Hi,Wi,Ci>)(1)
这里, F i L i \mathcal{F}^{L_i}_i FiLi表示层 F i F_i Fi在阶段(stage)重复 L i L_i Li次, < H i , W i , C i > <H_i,W_i,C_i> <Hi,Wi,Ci> i i i的输入tensor的形状。图2(a)表达了卷积网络,随着层的增加,空间的维度在逐渐减少,但是通道数逐渐增大。比如输入tensor从<224, 224, 3> 到 <7, 7, 512>。

在这里插入图片描述

传统的卷积结构专注于找到最优的层 F i \mathcal{F_i} Fi,然后对模型的宽度,深度,或者分辨率进行缩放(不改变在基准网络中预先定义的层 F i \mathcal{F_i} Fi),通过固定 F i \mathcal{F_i} Fi可以简化针对硬件资源的优化,但是仍有很大的空间来探索每一层中不同的 L i , C i , H i , W i L_i,C_i,H_i,W_i Li,Ci,Hi,Wi。为了进一步降低设计空间的复杂度,所有的层必须使用常数比率进行统一缩放。我们的目标是在有限硬件资源下得到最高的精度。可以将其转为优化问题,具体公式如下:
max ⁡ d , w , r A c c u r a c y ( N ( d , w , r ) ) s . t N ( d , w , r ) = ⨀ i = 1... s F ^ i d ∗ L i ^ ( X < r ∗ H ^ i , r ∗ W ^ i , r ∗ C ^ i > ) M e m o r y ( N < = t a r g e t m e m o r y ) F L O P S ( N < = t a r g e t f l o p s ) \max_{d,w,r}Accuracy(\mathcal{N}(d,w,r)) \\ s.t \mathcal{N}(d,w,r)=\bigodot_{i=1...s}\mathcal{\widehat{F}}^{d*\widehat{L_i}}_i(X_{<r*\widehat{H}_i,r*\widehat{W}_i,r*\widehat{C}_i>}) \\ Memory(\mathcal{N}<=target_memory) \\FLOPS(\mathcal{N}<=target_flops) d,w,rmaxAccuracy(N(d,w,r))s.tN(d,w,r)=i=1...sF idLi (X<rH i,rW i,rC i>)Memory(N<=targetmemory)FLOPS(N<=targetflops)
这里,w,d,r是网络宽度,深度和分辨率的缩放系数。 F i ^ , L i ^ , H i ^ , W i ^ , C i ^ \widehat{\mathcal{F}_i},\widehat{\mathcal{L}_i},\widehat{\mathcal{H}_i},\widehat{\mathcal{W}_i},\widehat{\mathcal{C_i}} Fi ,Li ,Hi ,Wi ,Ci 是定义在基准网络中的参数(见表1)。

在这里插入图片描述

这段主要讲了本篇论文与之前卷积网络的不同之处在于,传统网络是固定基准网络,对其进行扩展。而本篇论文采用统一的、常数比率对基准网络进行缩放。在一定的硬件资源下,进而得到最优的网络。

3.2 Scaling Dimensions

在这里插入图片描述

最困难的问题在于,最优的 <d,w,r>是彼此依赖的,并且不同硬件资源下,值会变化。基于这种困难,传统卷积网络的缩放方法只是针对某一个维度。
Depth(d):增加网络的深度是最为常见的缩放方式。直觉上来说,更深的网络能够获得更为丰富和复杂的特征,进而能够在新的任务上表达更好。但是由于梯度消失的问题存在,越深的网络越难以训练。尽管提出了避免梯度消失的方法,比如BN,跳跃连接(skip connection),但是精度增加的幅度降低。比如,ResNet-1000与ResNet的精度差不多。图3中间的图表明,单独缩放深度维度,当达到80%的时候,网络达到饱和状态,精度几乎不再增加。

在这里插入图片描述


在这里插入图片描述在这里插入图片描述

Width(w):针对小的模型,缩放宽度是比较常见的。正如(Zagoruyko&Komodakis,2016)论述,更宽的网络能够获取更为细粒度的特征,并且容易训练。但是,极度宽的浅层网络很难抓取更高级的特征。图3的左图表明,随着宽度增加,网络会饱和。

在这里插入图片描述

Resolution( r r r):输入图像的增大,卷积网络更可能获得更加细粒度的模式。从最早的224x224到299x299或者331x331,从而获得了更高 的精度。最近,GPipe在480x480的分辨率下获得很好的精度。在目标检测领域,经常使用600x600的图像大小。图3的右图可以看出,当分辨率增大到560x560的时候,精度不在增加。

在这里插入图片描述

Observation 1:基于以上的实验,我们得出结论,缩放网络深度、宽度或者分辨率任何一个维度,会提高网络精度,但是会出现网络饱和。

3.3. Compound Scaling

在这里插入图片描述在这里插入图片描述

我们实验发现,不同维度的缩放是相互依赖的。直觉上,更大的图像(包含更多的像素信息)需要更深的网络(更大的感受野才能获得图像上所有相似的信息),同理,我们也需要增大网络的宽度(为了获得更加细粒度的模式)。这些直觉上的感觉,使得我们不能单独的对单一的维度进行缩放。

在这里插入图片描述

为了验证我们的主观猜测,我们对比了不同宽度缩放值下的不同的网络深度和分辨率,见图4。如图所示,当我们使用原始的深度和分辨率的基准网络(d=1.0,r=1.0),改变w,网络很快饱和。当(r=2.0,d=2.0)时,增大w值,同样的运算量下,精度提升很快。基于实验的结果,我们得到第二个结论:

Observation 2:为了获得更好的精度和效率,必须平衡深度,宽度和分辨率三个维度的同时缩放。

在这里插入图片描述

在这里插入图片描述

事实上,前人一些工作,已经尝试平衡网络的宽度和深度,但是需要繁琐的人工调试。
本篇论文中,我们提出了新的复合缩放方法(compound scaling method),在一定的原则下,使用复合系数 ϕ \phi ϕ统一缩放网络的宽度,深度和分辨率:
d e p t h : d = α ϕ w i d t h : w = β ϕ r e s o l u t i o n : r = γ ϕ s . t . α ⋅ β 2 ⋅ 2 ≈ 2 α ≥ 1 , β ≥ 1 , γ ≥ 1 (3) depth:d=\alpha^\phi\\ width:w=\beta^\phi\\ resolution:r=\gamma^\phi\tag{3}\\ s.t. \quad \alpha\cdot\beta^2\cdot^2\approx 2\\ \alpha\geq 1,\beta\geq 1,\gamma\geq 1 depth:d=αϕwidth:w=βϕresolution:r=γϕs.t.αβ222α1,β1,γ1(3)
这里, α , β , γ \alpha,\beta,\gamma α,β,γ是常数(由小方格搜索得到)。直觉上, ϕ \phi ϕ是用户指定的系数,它是用来根据硬件资源确定的,而 α , β , γ \alpha,\beta,\gamma α,β,γ是用来分别指定如何分配资源到宽度,深度和分辨率。值得注意的是,常规卷积操作的运算量正比于 d , w 2 , r 2 d,w^2,r^2 d,w2,r2,比如加倍网络的深度会加倍计算量(FLOPS),但是加倍宽度和分辨率,会使得FLOPS增加4倍。由于卷积运算常常占据网络的大部分计算资源,根据公式3,在缩放网络时,计算量近似增加为 ( α ⋅ β 2 ⋅ γ 2 ) (\alpha\cdot\beta^2\cdot\gamma^2) (αβ2γ2)。在本篇论文中,我们对他们的乘积做限制,大概等于2,这样对于任何新的 ϕ \phi ϕ,总的计算量大概增加 2 ϕ 2^\phi 2ϕ

4. EfficientNet Architecture

在这里插入图片描述

由于模型缩放没有改变基准网络的层操作 F ^ i \mathcal{\widehat{F}}_i F i,所以优秀的基准网络(baseline network)是非常重要的。我们将在新的网络上验证模型缩放方法。为了证明缩放方法的效率,我们仍提出新的移动端的基准模型,称之为EfficientNet-Lite。

在这里插入图片描述在这里插入图片描述

受启发于(Tan 2019,MnasNet: Platform-aware neural architecture search for mobile),利用多目标NAS,我们提出新的基准网络,兼顾精度和FLOPS。我们使用了与(Tan2019)相同的搜索空间,优化目标为: A C C ( m ) , [ F L O P S ( m ) / T ] w ACC(m),[FLOPS(m)/T]^w ACC(m),[FLOPS(m)/T]w,这里ACC(m)和FLOPS(m)分别表示精度和模型m的计算量,T是目标计算量(要优化的目标),w=-0.07是超参数,控制精度和FLOPS之间的平衡。与(Tan 2019 Cai 2019)不同的是,由于我们的应用场景不是特定的硬件设备,所以我们优化FLOPS而不是延迟。我们得到了很有效的网络,称之为EfficientNet-B0. 由于我们用于(Tan 2019)相同的搜索空间,所以得到网络结构与Mnas相似,由于更大的FLOPS(大概400M),EfficientNet-B0更略大。它的主要模块是mobile inverted bottleneck MBConv,并且我们添加了squeeze-and-exccition进行网络优化。

在这里插入图片描述

从基准网络EfficientNet-B0开始,我们使用了复合系数缩放的方法,基本的步骤如下:

  • STEP1:首先固定 ϕ = 1 \phi=1 ϕ=1,假设2倍的硬件资源提供,然后根据方程2和方程3,对 α , β , γ \alpha,\beta,\gamma α,β,γ进行小的方格搜索。在约束为 α ⋅ β 2 ⋅ γ 2 ≈ 2 \alpha\cdot\beta^2\cdot\gamma^2\approx2 αβ2γ22的情况下,得到EfficientNet-B0最佳的缩放参数( α = 1.2 , β = 1.1 , γ = 1.15 \alpha=1.2,\beta=1.1,\gamma=1.15 α=1.2,β=1.1,γ=1.15)。
  • STEP2:然后我们固定 α , β , γ \alpha,\beta,\gamma α,β,γ,在方程3的指导下,我们尝试不同的 ϕ \phi ϕ值对网络进行缩放,然后得到网络族EfficientNet-B1到B7(参考表2)。

很显然的,直接对模型搜索 α , β , γ \alpha,\beta,\gamma α,β,γ参数是可行的,但是随着网络增大,代价会更大。通过在小的网络上搜索 α , β , γ \alpha,\beta,\gamma α,β,γ参数,我们成功解决了这一问题(STEP1),然后通过小的缩放参数得到其它的模型(STEP2)。

在这里插入图片描述

5. Experiments

在这一部分,我们将在现有的卷积模型缩放和新提出的EfficientNets上进行评估。

5.1. Scaling Up MobileNets and ResNets

作为概念的证据,我们首先将缩放方法(scaling method)应用在广泛应用的模型,MobileNets和ResNet。表3给出了在ImageNet上的不同的缩放方式的结果。与其它单维度缩放的方法相比,我们的复合缩放方法明显提升了所有模型的精度,表明我们提出的方法在常用模型上的普适性。

在这里插入图片描述

5.2. ImageNet Results for EfficientNet

在这里插入图片描述在这里插入图片描述

使用相似的设定(Tan 2019),我们在ImageNet上训练了EfficientNets。优化器:RMSProp optimizer,decay=0.9,momentum=0.9,bathc norm momentum=0.99,weight decay 为1e-5,初始学习率为0.256,每2.4 epochs除以0.97。我们使用SiLU(Swish-1)作为激活函数。AutoAugment和stochastic depth with suvival probability 0.8。众所周知,更大的模型需要更强的正则化,我们从B0到B7,线性的将dropout从0.2(B0)提升到0.7(B7)。我们从训练集中随机选出25K的图片作为minival set,并且在该数据集上添加early-stop。然后,在原始的验证集上(origin validation)评估(early-stopped checkpoint),并作为最终的验证精度。

AutoAugment:Google提出一种自动搜索合适数据增强策略的方法。
stochastic depth:随机丢弃一些网络层。

在这里插入图片描述在这里插入图片描述

表2表明,所有的EfficientNets网络都是从同样的基准网络(EfficientNet-B0)缩放而来。与之前的卷积网络相比,达到同样的精度,EfficientNet将参数降低了一个量级,并且计算量(FLOPS)更少。并且,EfficientNet-B7达到84.3%的top-1精度,参数为66M,计算量为37B FLOPS,比GPipe的精度更高,但是小了8.4x。这得益于更好的网络结构,更好的缩放,更好的缩放设置。

在这里插入图片描述

图1和图5分别表示不同的卷积网络,参数-精度和FLOPS-精度直接的关系,EfficientNet模型在更少的参数和计算量下,得到更好的精度。很显然,EfficientNet不仅更小,而且计算代价更低。比如,EfficientNet-B3比ResNetXt-101的精度更高,但是计算量少了18x。

在这里插入图片描述

为了验证预测时间,我们对比了典型的几个网络在CPU上的时间,见表4。每一个模型,我们循环运行了20次。具体结果参考表中数据,不在文字阐述。

在这里插入图片描述

5.3. Transfer Learning Results for EfficientNet

在这里插入图片描述

我们也将EfficientNet应用在常用的迁移学习数据集,正如表6中所示,我们与(Kornblith 2019, Huang 2018)中设置相同,然后使用ImageNet上训练的模型,并在其它数据集进行finetune。

在这里插入图片描述

表5中给出了迁移学习的性能:(1)与公开的模型相比,比如NASNet-A (Zoph et al., 2018) and Inception-v4 (Szegedy et al., 2017), 我们的EfficientNet模型在得到更优的精度的同时,平均参数降低4.7x,最多为21x;(2)与顶级的模型相比,比如 DAT (Ngiam et al., 2018) that
dynamically synthesizes training data and GPipe (Huang et al., 2018),这些模型的训练都建立在使用特定并行方法。我们的EfficientNet模型仍然在5-8个迁移学习数据集上得到更好的精度,参数量降低9.6x。

在这里插入图片描述

图6对比了参数精度曲线,很显然,EfficientNet模型的表现更好。

在这里插入图片描述

6. Discussion

在这里插入图片描述在这里插入图片描述

图8给出了EfficientNet-B0在不同的缩放方式下的表现。一般情况下,所有的缩放方法在提升精度的同时,也需要更高的计算量(FLOPS),但是我们提出的复合缩放方法(compund scaling methon)能够进一步提升精度为2.5%(与单维度缩放相比),表明复合缩放方法的重要性。

在这里插入图片描述

为了进一步理解复合缩放方法优于其它方法的原理,图7给出了不同模型缩放方法的类激活图,可以看出复合缩放方法更好的学习到目标的特征。表7给出了不同的参数设置,验证集随机取出。

在这里插入图片描述

在这里插入图片描述

7. Conclusion

在这里插入图片描述

本篇论文中,我们系统的研究了卷积网络的缩放和,并证明对深度,宽度和分辨率复合缩放的重要性,因此精度和效率更好。为了阐述相关的原理,我们提出了简单有效的复合缩放方法,使得模型缩放具有一定设计准则,同时兼顾了模型的效率。我们同时提出了EfficientNet的移动端版本,也得到更好的精度和效率。最后,我们在ImageNet和其它5个常见的数据集上进行迁移学习,精度更好,并且参数更少。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐