作者 Mingxing Tan Quoc V. Le
原论文链接
原代码链接
卷积神经网络(ConvNets)通常是在固定的资源预算下开发的,如果有更多的资源可用,则会进行扩展(scaled up)以获得更高的精度。在本文中,我们系统地研究了模型缩放,并发现仔细平衡网络的深度、宽度和分辨率可以获得更好的性能。在此基础上,我们提出了一种新的缩放方法,该方法使用一个简单而高效的复合系数来均匀地缩放深度/宽度/分辨率的所有维度。我们证明了该方法在扩展mobilenet和ResNet方面的有效性。
为了更进一步,我们使用神经结构搜索设计了一个新的基线网络,并将其扩展,以获得一系列被称为efficient entnets的模型,这些模型比以前的ConvNets具有更好的准确性和效率。特别是我们的streamlined - b7在ImageNet上实现了84.4%的top-1 / 97.1%的top-5精度,同时比现有最好的ConvNet小8.4倍,推理速度快6.1倍。在CIFAR-100(91.7%)、Flowers(98.8%)和其他3个传输学习数据集上,我们的高效网络传输效果也很好,并且达到了最先进的精度,参数少了一个数量级。
为了获得更好的精度,广泛使用了放大的ConvNets。例如,通过使用更多的层,可以将ResNet (He et al., 2016)从ResNet-18扩展到ResNet-200;最近,GPipe (Huang et al., 2018)将基线模型放大4倍,实现了84.3%的ImageNet top-1精度。然而,扩展ConvNets的过程从来没有被很好地理解过,目前有很多方法可以做到这一点。最常见的方法是根据对ConvNets的深度(He et al., 2016)或宽度(Zagoruyko & Komodakis, 2016)来放大ConvNets。另一种不太常见但越来越流行的方法是通过图像分辨率放大模型(Huang et al., 2018)。在以前的工作中,通常只缩放深度、宽度和图像大小这三个维度中的一个。虽然可以任意缩放两个或三个维度,但是任意缩放需要繁琐的手工调优,而且常常会产生次优的精度和效率。
在这篇论文中,我们想研究和重新思考扩大ConvNets的过程。特别地,我们研究的中心问题是:有没有一种原则性的方法来扩大ConvNets,从而达到更好的精度和效率?我们的实证研究表明,平衡网络宽度/深度/分辨率的所有维度是至关重要的,令人惊讶的是,这种平衡可以通过简单地按比例缩放每个维度来实现。在此基础上,提出了一种简单有效的复合缩放方法。与传统的任意缩放这些因子的方法不同,我们的方法使用一组固定的缩放系数来均匀地缩放网络的宽度、深度和分辨率。例如,如果我们想要使用 2 N 2^N 2N倍的计算资源,那么我们可以简单地将网络深度增加 α N \alpha^N αN,宽度增加 β N \beta^N βN,图像大小增加 γ N \gamma^N γN,其中 α \alpha α、 β \beta β、 γ \gamma γ是通过对原小模型进行小网格搜索确定的常系数。图2说明了我们的缩放方法和传统方法之间的区别。
因为如果输入图像更大,那么网络需要更多的层来增加感受野,需要更多的通道来捕捉更大图像上的更细粒度模式。事实上,之前的理论(Raghu等,2017;Lu等,2018)和实证结果(Zagoruyko &Komodakis, 2016)均表明网络宽度和深度之间存在一定的关系,但据我们所知,我们是第一个对网络宽度、深度和分辨率三个维度之间的关系进行实证量化的人。
我们证明了我们的缩放方法在现有的mobilenet上运行良好(Howard等,2017;Sandler et al., 2018)和ResNet (He et al., 2016)。值得注意的是,模型缩放的有效性在很大程度上取决于基线网络;为了更进一步,我们使用了神经结构搜索(Zoph &勒,2017;开发一个新的基线网络,并将其扩展以获得一系列模型,称为EfficientNets。图1总结了ImageNet的性能,其中我们的EfficientNets明显优于其他convnet。特别是,我们的EfficientNet-B7超过了现有的最佳GPipe的精确度(Huang et al., 2018),但是使用的参数少了8.4倍,推理速度快了6.1倍。与广泛使用的ResNet (He et al., 2016)相比,我们的EfficientNet-B4在相似sFLOPS的情况下,将top-1的准确率从ResNet-50的76.3%提高到了82.6%。除了ImageNet,EfficientNets在8个广泛使用的数据集中,有5个数据集的传输效率很高,并且达到了最先进的精确度,同时比现有的ConvNets减少了21倍的参数。
卷积网络的精确度(ConvNet Accuracy):自从AlexNet (Krizhevsky et al., 2012)赢得2012年ImageNet大赛以来,ConvNets通过变大使得其越来越精确:2014年ImageNet赢家GoogleNet (Szegedy et al., 2015)以约6.8M参数获得74.8%的top-1精确度,2017年ImageNet赢家SENet (Hu et al., 2018)以145M参数获得82.7%的top-1精确度。最近,GPipe (Huang et al., 2018)进一步利用557M参数将先进的ImageNet top-1验证精度提升到84.3%:它太大了,只能通过分割网络,将每个部分分散到不同的加速器上,用专门的管道并行库进行训练。虽然这些模型主要是为ImageNet设计的,但最近的研究表明,更好的ImageNet模型在各种迁移学习数据集(Kornblith et al., 2019)和其他计算机视觉任务(如目标检测)中也表现得更好(He et al., 2016;Tan等人,2019)。虽然更高的精度对于许多应用程序来说是至关重要的,但是我们已经达到了硬件内存的极限,因此进一步提高精确度需要更好的效率。
卷积网络的效率(ConvNet Efficiency):深度卷积网络常被过度参数化。模型压缩(Han等,2016;He et al., 2018;Yang et al., 2018)是一种通过以精度换取效率来减小模型大小的常见方法。随着手机的普及,手工制作高效的mobile-size的ConvNets也很常见,比如SqueezeNets(Iandola et al., 2016;Gholami等,2018),MobileNets (Howard等,2017;Sandler et al., 2018)和ShuffleNets (Zhang et al., 2018;马等,2018)。最近,神经结构搜索在设计高效的mobile-size的ConvNets中变得越来越流行(Tan等,2019;,并通过广泛调整网络宽度、深度、卷积核类型和大小,实现了比手工制作的移动卷积网络更好的效率。然而,目前还不清楚如何将这些技术应用于更大的模型,这些模型具有更大的设计空间和更昂贵的调优成本。在本文中,我们的目标是研究超过目前最先进精确度的超大型ConvNets的模型效率。为了实现这个目标,我们采用模型缩放。
模型缩放(Model Scaling):针对不同的资源约束,有许多方法可以缩放ConvNet: ResNet (He et al., 2016)可以通过调整网络深度(#layers)来缩小(例如,ResNet-18)或放大(例如,ResNet-200),而WideResNet (Zagoruyko &Komodakis, 2016)和MobileNets (Howard et al., 2017)可以通过网络宽度(#channel)进行缩放。人们也认识到,较大的输入图像大小将有助于准确性与更多的FLOPS开销。虽然之前的研究(Raghu等,2017;林,Jegelka, 2018;Sharir,Shashua, 2018;Lu等(2018)的研究表明,网络的深度和宽度对ConvNet的表达能力都很重要,如何有效地缩放ConvNet以获得更好的效率和准确性仍然是一个有待解决的问题。我们的工作系统地研究了网络宽度、深度和分辨率三个维度的ConvNet缩放。
在本节中,我们将阐述缩放问题,研究不同的方法,并提出我们新的缩放方法。
一个ConvNet层i可以定义为一个函数: Y i = F i ( X i ) Y_i=F_i(X_i) Yi=Fi(Xi),其中 F i F_i Fi是操作, Y i Y_i Yi是输出张量, X i X_i Xi是输入张量,张量形状为 ⟨ H i , W i , C i ⟩ \langle{H_i,W_i,C_i}\rangle ⟨Hi,Wi,Ci⟩,其中 H i 和 W i H_i和W_i Hi和Wi是空间维度, C i C_i Ci是通道维数。一个ConvNet N N N可表示为一个由多个层组成的列表: N = F k ⨀ . . . ⨀ F 1 ⨀ F 1 ( X 1 ) = ⨀ j = 1 , . . . k F j ( X 1 ) N={F_k}\bigodot...\bigodot{F_1}\bigodot{F_1(X_1)}=\bigodot_{j=1,...k}{F_j(X_1)} N=Fk⨀...⨀F1⨀F1(X1)=⨀j=1,...kFj(X1)。在实践中,ConvNet层往往被划分为多个阶段,每个阶段的所有层共享相同的架构:例如,ResNet (He et al., 2016)有五个阶段,每个阶段除了第一层执行下行采样以外,其他的所有层都具有相同的卷积类型。因此,我们可以定义一个ConvNet为:
F i L i F{^{L_i}_i} FiLi表示 F i F_i Fi层在阶段 i i i重复 L i L_i Li次, ⟨ H i , W i , C i ⟩ \langle{H_i,W_i,C_i}\rangle ⟨Hi,Wi,Ci⟩表示 i i i层的输入张量X的形状。图2(a)为一个典型的ConvNet,其中空间维数逐渐缩小,但通道维数在层上扩展,例如,从初始输入形状 ⟨ 224 , 224 , 3 ⟩ \langle{224,224,3}\rangle ⟨224,224,3⟩开始到最终输出形状 ⟨ 7 , 7 , 512 ⟩ \langle{7,7,512}\rangle ⟨7,7,512⟩。
与常规的ConvNet设计主要关注于寻找最佳层架构 F i F_i Fi不同,模型缩放尝试在不更改基线网络中预定义的 F i F_i Fi的情况下扩展网络长度 ( L i ) (L_i) (Li)、宽度 ( C i ) (C_i) (Ci)和/或分辨率 ( H i ; W i ) (H_i;W_i) (Hi;Wi)。通过修正 F i F_i Fi,模型缩放简化了新资源约束的设计问题,但对于每一层来说,探索不同的 L i , C i , H i , W i L_i,C_i,H_i,W_i Li,Ci,Hi,Wi仍然是一个很大的设计空间。为了进一步缩小设计空间,我们限制了所有层必须以一致的比例均匀缩放。我们的目标是使给定资源约束的模型精度最大化,可以将其表示为一个优化问题
w , d , r w,d,r w,d,r是缩放网络宽度、深度和分辨率的系数, F i ^ , L i ^ , H i ^ , W i ^ , C i ^ \hat{F_i},\hat{L_i},\hat{H_i},\hat{W_i},\hat{C_i} Fi^,Li^,Hi^,Wi^,Ci^是基线网络中预定义的参数(如表1所示)。
问题2的主要难点是最优的d,w,r相互依赖,且在不同的资源约束条件下值会发生变化。由于这一困难,传统的方法大多是在某一维度缩放ConvNets。
深度(d): 扩展网络深度是许多ConvNets最常用的方法。直观的感觉是,更深层次的ConvNet可以捕获更丰富、更复杂的特性,并很好地概括新的任务。然而,由于梯度消失问题,更深层次的网络也更加难以训练(Zagoruyko &Komodakis, 2016)。虽然有一些技术,如跳过连接(He et al., 2016)和批处理标准化(Ioffe &(Szegedy, 2015),缓解了训练问题,非常深的网络的精度增益减小:例如,ResNet-1000与ResNet-101具有相似的精度,尽管它有更多的层。图3(中)显示了我们对不同深度系数d的基线模型进行缩放的实证研究,进一步表明,对于非常深的ConvNets,精度收益在不断减小。
宽度(w):小型模型通常使用网络宽度缩放。如(Zagoruyko &(Komodakis, 2016),更广泛的网络往往能够捕获更细粒度的特性,更容易培训。然而,非常宽但很浅的网络往往难以捕获更高层次的特性。我们在图3(左)中得到的经验结果表明,当网络越宽,w越大时,准确率会迅速饱和。
分辨率(r):使用更高分辨率的输入图像,ConvNets可以捕获更细粒度的模式。从早期ConvNets的224x224开始,现代ConvNets往往使用299x299 (Szegedy等, 2016)或331x331 (Zoph et al., 2018)来获得更好的精度。最近,GPipe (Huang et al., 2018)以480x480分辨率实现了最先进的ImageNet精度。更高的分辨率,如600x600,也广泛应用于目标检测ConvNets (He et al., 2017;林等,2017)。图3(右)显示了缩放网络分辨率的结果,确实更高的分辨率可以提高精度,但是对于非常高的分辨率,精度增益会减小(r = 1.0表示分辨率224x224, r = 2:5表示分辨率560x560)。
以上分析使我们得出第一个观察结果:
观察1:扩展网络宽度、深度或分辨率的任何维度都可以提高精度,但是对于较大的模型,精度增益会降低。
我们从经验上观察到,不同的缩放维度并不是独立的。直观地说,对于高分辨率的图像,我们应该增加网络深度,这样更大的感受野可以帮助捕获包含更大图像中更多像素的类似特性。相应地,我们也应该在分辨率较高的情况下增加网络深度,以便在高分辨率图像中以更多的像素捕获更多的细粒度模式。这些直觉表明,我们需要协调和平衡不同的缩放维度,而不是传统的单维缩放比例。
为了验证我们的直觉,我们比较了不同网络深度和分辨率下的宽度缩放,如图4所示。如果我们只缩放网络宽度w而不改变深度(d=1.0)和分辨率(r=1.0),那么精度很快就会饱和。随着深度(d=2.0)和分辨率(r=2.0)的提高,宽度缩放在相同的FLOPS成本下实现了更高的精度。这些结果使我们得出第二个观察结果.。
观察2:为了追求更高的精度和效率,在ConvNet缩放过程中平衡网络宽度、深度和分辨率的所有维度是至关重要的。事实上,之前的一些工作(Zoph等,2018;Real等人(2019)已经尝试过任意平衡网络的宽度和深度,但它们都需要繁琐的手动调优。
在本文中,我们提出了一种新的复合缩放方法,它使用复合系数 ϕ \phi ϕ以一种有原则的方式均匀地缩放网络的宽度、深度和分辨率:
α , β , γ \alpha,\beta,\gamma α,β,γ是可以通过小型网格搜索确定的常量。直观地, ϕ \phi ϕ为用户指定的系数,该系数控制可用于模型缩放的资源数量, α , β , γ \alpha,\beta,\gamma α,β,γ指定如何分别为网络宽度、深度和分辨率分配这些额外资源。值得注意的是,正则卷积运算的FLOPS与 d , w 2 , r 2 d,w^2,r^2 d,w2,r2成正比。将网络深度加倍将会加倍FLOPS;但将网络宽度或分辨率加倍,将会使FLOPS增加4倍。由于卷积运算通常在卷积网络中占主导地位,因此用公式3对卷积网络进行缩放,将会使FLOPS大约增加 ( α ⋅ β 2 ⋅ γ 2 ) ϕ (\alpha\cdot\beta^2\cdot\gamma^2)^\phi (α⋅β2⋅γ2)ϕ,在本文中,我们限制 α ⋅ β 2 ⋅ γ 2 ≈ 2 \alpha\cdot\beta^2\cdot\gamma^2\approx2 α⋅β2⋅γ2≈2,使得对于任何新的 ϕ \phi ϕ,总FLOPS将近似地增加 2 ϕ 2^\phi 2ϕ
由于模型缩放不会改变基线网络中的层操作符 F i ^ \hat{F_i} Fi^,因此拥有一个良好的基线网络也至关重要。我们将使用现有的ConvNets来评估我们的缩放方法,但是为了更好地证明我们的缩放方法的有效性,我们还开发了一个新的mobile-size基线,称为EfficientNet
受(Tan et al., 2019)的启发,我们开发了我们的基线网络,利用多目标神经结构搜索,优化准确性和FLOPS。具体来说,我们使用相同的搜索空间(Tan et al ., 2019),并使用 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的FLOPS, T T T是目标FLOPS,w = -0.07是一个超参数,用于控制准确性和FLOPS之间的权衡。不像(Tan等,2019;Cai等人,2019),这里我们优化了FLOPS而不是延迟,因为我们没有针对任何特定的硬件设备。我们的搜索产生了一个高效的网络,我们将其命名为EfficientNet-B0。由于我们使用的搜索空间与(Tan et al., 2019)相同,所以架构类似于MnasNet,只是我们的EfficientNet-B0稍大一些,因为FLOPS目标更大(我们的FLOPS目标是400M)。表1显示了EfficientNet-B0的体系结构。其主要构建块是移动逆瓶颈MBConv (Sandler et al., 2018;此外,我们还添加了squeeze-and-excitation优化(Hu et al., 2018)。
从基线EfficientNet-B0开始,我们使用复合缩放方法对其进行了两个步骤的缩放:
在本节中,我们将首先评估我们对现有的ConvNets和新提出的EfficientNets的缩放方法。
作为概念的证明,我们首先将我们的缩放方法应用于广泛使用的MobileNets (Howard等,2017;Sandler et al., 2018)和ResNet (He et al., 2016)。表3显示了以不同方式缩放它们的ImageNet结果。与其他单维缩放方法相比,本文提出的复合缩放方法提高了所有模型的精度,表明本文提出的缩放方法对一般已有的卷积神经网络是有效的。
我们在ImageNet上使用类似的设置(Tan等,2019)来训练我们的EfficientNet模型:RMSProp优化器,使用衰减率decay=0.9和动量momentum=0.9;批处理规范动量=0.99;权重衰减率weight decay=1e-5;最初的学习速率为0.256,每2.4个迭代衰减0.97。我们还使用swish激活(Ramachandran等, 2018;Elfwing等, 2018),固定自增强策略(Cubuk et al., 2019),随机深度(Huang et al., 2016),下降连接比为0.3。众所周知,更大的模型需要更多的正则化,我们线性增加dropout比率(Srivastava et al., 2014),从0.2的EfficientNet-B0到0.5的EfficientNet-B7。
表2显示了从相同基线EfficientNet-B0扩展而来的所有EfficientNet模型的性能。我们的有效网模型通常使用一个数量级更少的参数和触发器比其他ConvNets具有类似精度的FLOPS。其中,我们的EfficientNet-B7以66M参数和37B FLOPS实现了84.4%的top1 / 97.1%的top5精度,比之前的最佳GPipe精度高了8.4倍(Huang et al., 2018)。
图1和图5展示了典型的ConvNets的参数-精确度和FLOPS-精确度曲线,其中我们的扩展EfficientNet模型在参数和FLOPS都比其他ConvNets少得多的情况下获得了更好的精确度。值得注意的是,我们的EfficientNet模型不仅体积小,而且计算成本更低。例如,我们的EfficientNet-B3使用比ResNeXt- 101 (Xie et al., 2017)低18倍的FLOPS,却获得更高的精度。
为了验证计算成本,我们还测量了真实CPU上几个典型CovNets的推断延迟,如表4所示,其中我们报告了超过20次运行的平均延迟。我们的EfficientNet-B1运行速度比广泛使用的ResNet-152快5.7倍(He et al., 2016),而EfficientNet-B7运行速度大约比GPipe快6.1倍(Huang et al., 2018),这表明我们的EfficientNets在实际硬件上确实是很快的。
我们还在一系列常用的迁移学习数据集上评估了我们的EfficientNet,如表6所示。我们借鉴了(Kornblith et al., 2019)和(Huang et al., 2018)相同的训练设置,使用ImageNet预训练检查点checkpoints,在新数据及上进行微调。
表5显示了迁移学习性能:(1)与NASNet-A (Zoph et al., 2018)和Inception-v4 (Szegedy et al., 2017)等公共可用模型相比,我们的EfficientNet模型的精度更高,平均参数降低4.7倍(高达21倍)。(2)与动态综合训练数据的DAT (Ngiam et al., 2018)和使用专用管道并行性训练的GPipe (Huang et al., 2018)等先进模型相比,我们的EfficientNet模型在8个数据集中有5个数据集的精度超过了它们,但使用的参数却少了9.6倍。
图6比较了各种模型的精度-参数曲线。总的来说,我们的EfficientNets在参数比现有模型少一个数量级的情况下,始终能够达到更好的精度,包括ResNet (He et al., 2016)、DenseNet (Huang et al., 2017)、Inception (Szegedy et al., 2017)和NASNet (Zoph et al., 2018)。
为了将我们提出的缩放方法从EfficientNet体系结构中分离出来,图8比较了相同EfficientNet-B0基线网络中不同缩放方法的ImageNet性能。总的来说,所有的缩放方法都可以提高精度,但代价是更多的FLOPS,但我们的复合缩放方法可以进一步提高精度,比其他单维缩放方法提高2.5%,这表明我们提出的复合缩放的重要性。
为了进一步理解为什么我们的复合缩放方法比其他方法更好,图7比较了几种具有代表性的模型的类激活图(Zhou et al., 2016)。所有这些模型都是从相同的基线进行缩放的,它们的统计数据如表7所示。从ImageNet验证集中随机抽取图像。如图所示,复合缩放模型更倾向于关注具有更多目标细节的相关区域,而其他模型要么缺乏目标细节,要么无法捕获图像中的所有目标。
在本文中,我们系统地研究了ConvNet缩放,并发现仔细平衡网络的宽度、深度和分辨率是一个重要但缺少的部分,这阻碍了我们获得更好的精度和效率。为了解决这个问题,我们提出了一个简单而高效的复合缩放方法,它使我们能够更有原则地将基线ConvNet缩放到任何目标资源约束,同时保持模型的效率。通过这种复合缩放方法,我们证明了一个mobilesize的EfficientNet模型可以非常有效地缩放,在ImageNet和五个常用的迁移学习数据集上,以一个数量级更少的参数和更少的FLOPS来超越最先进的精度。