EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks

参考文献:https://arxiv.org/pdf/1905.11946.pdf
代码实现:https://github.com/lukemelas/EfficientNet-PyTorch
包括理解!

EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks

摘要

卷积神经网络(ConvNets)通常是在固定的资源预算下发展起来的,如果有更多的资源可用,则会扩大规模以获得更好的精度。在本文中,我们系统地研究了模型缩放,并仔细验证了网络深度/宽度/分辨率之间的平衡可以获得更好的性能。在此基础上,我们提出了一种新的缩放方法,该方法使用简单而高效的复合系数来对深度/宽度/分辨率的所有维度进行统一缩放,我们在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 引言

为了获得更好的精度,扩大ConvNets规模被广泛使用。例如,ResNet(He et al.,2016)可以通过使用更多的层从ResNet-18扩展到ResNet-200;最近,GPipe(Huang et al.,2018)通过将baseline模型放大四倍,在ImageNet 数据集上实现了84.3%的top-1精度。然而,扩大卷积神经网络的过程从来没有被很好地理解过,目前最常见的方法是放大深度(He et al.,2016)或宽度(Zagoruyko&Komodakis,2016),另一种不太常见但越来越流行的方法是放大图像分辨率(Huang等人,2018)。在以前的工作中,通常只缩放深度、宽度和分辨率三维中的一个,尽管任意放大两个或者三个维度也是可能的,但任意缩放需要繁琐的人工调参,并且常常会产生次优精度和效率。

本文旨在研究和重新思考ConvNets的扩大过程。特别是我们研究了一个中心问题:是否有一种原则性的方法来扩大ConvNets,以获得更好的精度和效率?我们的实验研究表明,平衡网络宽度/深度/分辨率的3个维度是至关重要的,令人惊讶的是,这种平衡可以通过简单地以常量比率缩放每个维度来实现。在此基础上,我们提出了一种简单而有效的复合缩放方法,与传统的任意缩放这些因子的方法不同,我们的方法使用一组固定的缩放系数统一缩放网络宽度、深度和分辨率。例如,如果我们想要使用2N2^N倍的计算资源,那么我们可以简单地将网络深度扩大αNα^N,宽度扩大βNβ^N,分辨率扩大γNγ^N,其中αβγα,β,γ是由原始小模型上做小网格搜索确定的常量系数。图2说明了我们的缩放方法和传统方法之间的区别。(理解:从图2可以看出,宽度指通道数、深度指网络叠加层数、分辨率指输入图像尺寸大小)
EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
直观来讲,如果图像尺寸变大,复合缩放方法是有意义的,因为当图像尺寸变大意味着网络需要更多层来增加接收野,同时需要更多的通道来捕获更大图像上的更细粒度信息。事实上,以往的理论(Raghu et al.,2017;Lu et al.,2018)和实证结果(Zagoruyko&Komodakis,2016)都表明网络宽度和深度之间存在一定的关系,但据我们所知,我们首次实证量化了网络宽度、深度和分辨率三个维度之间的关系。

我们在已经存在的MobileNets(Howard等人,2017;Sandler等人,2018)和ResNet(He等人,2016)上展示了该缩放方法可以工作得很好。值得注意的是,模型缩放的有效性在很大程度上取决于baseline网络,为了进一步研究,我们使用神经架构搜索(Zoph&Le,2017;Tan et al.,2019)来开发新的baseline网络,并将其扩大以获得一系列模型,称为EfficientNets。图1总结了ImageNet的性能,EfficientNets的效率明显优于其他ConvNets,特别是EfficientNet-B7超过了现有的最佳GPipe精度(Huang等人,2018),并且使用的参数少了8.4倍,推理速度快了6.1倍。相比于广泛使用的ResNet-50(He et al.,2016),我们的EfficientNet-B4在相近的flops下将top-1的精度从76.3%提高到83.0%(+6.7%)。除了ImageNet,EfficientNets在其他数据集上表现也很好,在8个广泛应用的数据集中的5个实现了最先进的精度,同时比现有ConvNets减少了多达21倍的参数。
EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks

2 相关工作

ConvNet精度:自从AlexNet(Krizhevsky等人,2012年)赢得2012年ImageNet比赛以来,ConvNet变得越来越精确,变得越来越大,2014年ImageNet冠军GoogleNet(Szegedy等人,2015年)以约680万个参数达到74.8%的top-1精度,2017年ImageNet获奖者SENet(Hu等人,2018年)在145M参数下达到82.7%的top-1精度。最近,GPipe(Huang等人,2018)进一步提高了精度——使用557M参数获得了84.3%的top-1精度,但是它太大了,只能通过分割网络并将每个部分传递到不同的加速器,使用特定的并行化手段对其进行训练。虽然这些模型主要是为ImageNet设计的,但最近的研究表明,迁移到其他数据集(Kornblith等人,2019)和其他计算机视觉任务(例如目标检测)中也表现得很好(He等人,2016;Tan等人,2019)。虽然更高的精度对于许多应用来说是至关重要的,但是我们已经达到了硬件内存的极限,因此进一步的精度增益需要更好的效率。

ConvNet效率:ConvNet的参数过多,模型压缩(Han et al.,2016;He et al.,2018;Yang et al.,2018)是一种通过降低精度来减小模型大小以提高效率的常见方法。随着移动网络变得无处不在,手工制作的轻量化ConvNets也很常见,例如SqueezeNets(Iandola et al.,2016;Gholami et al.,2018)、MobileNets(Howard et al.,2017;Sandler et al.,2018)和ShuffleNets(Zhang et al.,2018;Ma et al.,2018)。最近,神经架构搜索在设计高效的ConvNets变得越来越流行(Tan等人,2019;Cai等人,2019),并且通过广泛搜索网络宽度、深度、卷积核类型和大小,实现了比手工制作的ConvNets更好的效率。然而,目前尚不清楚如何将这些技术应用于设计空间更大、微调成本更高的大模型。本文旨在研究更高精度更大规模模型的建模效率,为了实现这个目标,我们采用模型缩放。

模型缩放:有很多方法可以缩放ConvNet以适应不同的资源约束,例如ResNet(He et al.,2016)可以通过调整网络深度(层)来缩小(例如ResNet-18)或增大(例如ResNet-200),WideResNet(Zagoruyko&Komodakis,2016)和MobileNets(Howard et al.,2017)可以通过网络宽度(通道)来缩放。众所周知,较大的输入图像尺寸有助于提高精度,同时需要更多计算量。尽管先前的研究(Raghu等人,2017年;Lin&Jegelka,2018年;Sharir&Shashua,2018年;Lu等人,2018年)表明,网络深度和宽度对ConvNet的表达能力都很重要,但如何有效地缩放ConvNet以获得更好的效率和准确性仍然是一个悬而未决的问题。我们的工作是系统研究了ConvNet中网络宽度、深度和分辨率这三个维度平衡。

3 复合模型缩放

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

3.1 问题描述

卷积层ii可以用公式Yi=Fi(Xi)Y_i=F_i(X_i)定义,其中FiF_i表示操作,YiY_i表示输出tensor,XiX_i表示输入tensor,XiX_i的shape为<Hi,Wi,Ci>1<H_i,W_i,C_i>^1Hi,Wi,CiH_i,W_i,C_i分别为高、宽、通道。ConvNet NN可以用一系列层组成N=Fk...F2F1=j=1...kFj(X1)N=F_k⨀...⨀F_2⨀F_1=⨀ _{j=1...k}F_j(X_1)。实际上,ConvNet层通常被划分为多个阶段,每个阶段中的所有层共享相同的体系结构:例如,ResNet(He et al.,2016)有五个阶段,每个阶段中的所有层都具有相同的卷积类型(除了第一层执行下采样)。因此,我们可以将ConvNet定义为:
EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
其中,FiLiF_i^{L_i}表示在阶段iiFiF_i重复LiL_i次,<Hi,Wi,Ci><H_i,W_i,C_i>表示层ii输入tensorXX的shape。图2(a)展示了一个典型的ConvNet,其空间尺寸逐渐减小,通道数逐渐增加,例如,从初始输入尺寸(224,224,3)到最终输出尺寸(7,7,512)。

不像规则的ConvNet设计,主要侧重于寻找最佳的层架构FiF_i,模型缩放在不更改baseline网络中预定义的FiF_i的前提下,扩展网络深度LiL_i、宽度CiC_i和分辨率(Hi,Wi)(H_i,W_i)。通过固定FiF_i,模型缩放简化了资源约束条件,但仍然有一个比较大的搜索空间<Li,Ci,Hi,Wi><L_i,C_i,H_i,W_i>。为了进一步减小搜索空间,我们限制所有层都统一以常量比例缩放,我们的目标是在给定资源预算下最大化模型精度,可以定义为如下优化问题:
EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
这里的d,w,rd,w,r是缩放网络分别对深度、宽度和分辨率的缩放系数,Fi,Li,Hi,Wi,CiF_i帽,L_i帽,H_i帽,W_i帽,C_i​帽是预先在baseline网络中定义含的参数(示例见表1)。

3.2 缩放尺寸

公式2的主要困难在于,在不同的资源约束下,最优d,w,rd,w,r相互依赖,且值会发生变化。由于这一困难,传统的方法大多是在这些维度中的一个维度上缩放ConvNets。

深度(d):缩放网络深度是许多ConvNets最常用的方法(He et al.,2016;Huang et al.,2017;Szegedy et al.,2015;2016),直觉是更深层的ConvNet可以捕获更丰富、更复杂的特征,并在新的任务中很好地泛化。然而,由于梯度消失问题,更深层的网络也更难训练(Zagoruyko&Komodakis,2016)。尽管一些技术,如跳远连接(He et al.,2016)和批处理规范化(Ioffe&Szegedy,2015)等可以有效缓解训练问题,但是深层网络的精度回报减弱了,例如,ResNet-1000具有与ResNet-101相似的精度,尽管ResNet-1000有更多的层。图3(中间的图)展示了我们在使用不同的深度系数d缩放网络的研究结果,进一步表明了非常深的ConvNets的精度回报递减。
EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
宽度(w):缩放网络宽度通常用于小型模型(Howard等人,2017;Sandler等人,2018;Tan等人,2019)。正如在(Zagoruyko&Komodakis,2016)中所讨论的,更宽的网络往往能够捕获更细粒度的特性,并且更易于训练。然而,极宽但较浅的网络往往难以捕获更高层次的特征,我们在图3(左)中的经验结果表明,当网络宽度随着w变大时,精度很快饱和。

分辨率(r):使用更高分辨率的输入图像,ConvNets可以潜在地捕获更细粒度的模式。从早期ConvNets的224x224开始,现在ConvNets倾向于使用299x299(Szegedy et al.,2016)或331x331(Zoph et al.,2018)以获得更好的精度。最近,GPipe(Huang等人,2018)以480x480分辨率实现了最新的ImageNet精度。更高的分辨率,如600x600,也广泛应用于目标检测convnet(He et al.,2017;Lin et al.,2017)。图3(右)显示了缩放网络分辨率的结果,其中较高的分辨率确实提高了精度,但对于非常高的分辨率,精度增益减小(r=1.0表示分辨率224x224,r=2.5表示分辨率560x560)。

上述分析使我们得出了第一个结论:
观察1——扩大网络宽度、深度或分辨率的任一维度都可以提高精度,但对于更大的模型,精度增益会减小。

3.3 复合缩放

我们经验地观察到,不同的缩放维度是不独立的。直观地说,对于更高分辨率的图像,我们应该增加网络深度,因为需要更大的接收野来帮助捕获更多像素点的类似特征。相应地,当分辨率较高时,我们也应该增加网络宽度,以便在高分辨率图像中捕获更多像素的细粒度特征。这些直觉表明,我们需要协调和平衡不同的缩放维度,而不是传统的单一维度缩放。
EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks

为了验证我们的直觉,我们在不同的网络深度和分辨率下比较了宽度变化的影响,如图4所示。如果我们只缩放网络宽度w而不改变深度(d=1.0)和分辨率(r=1.0),精度会很快饱和。随着深度(d=2.0)和分辨率(r=2.0)的提高,在相同的flops下,宽度缩放可以获得更好的精度。这些结果引导我们进行第二次观察:

观察2-为了追求更好的精度和效率,在ConvNet缩放期间平衡网络宽度、深度和分辨率的所有维度至关重要。

事实上,之前的一些工作(Zoph等人,2018;Real等人,2019)已经试图平衡网络宽度和深度,但它们都需要繁琐的手动调整。本文提出了一种新的复合缩放方法,利用复合系数φ对网络的宽度、深度和分辨率进行统一缩放:
EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks

4 EfficientNet架构

由于模型缩放不会改变baseline网络中的操作层FiF_i,因此拥有一个良好的baseline网络也是至关重要的。我们将使用现有的ConvNets评估我们的缩放方法,但是为了更好地证明我们的缩放方法的有效性,我们还开发了一个新的基于移动应用的baseline模型,称为EfficientNet。

受到MnasNet(Tan等人,2019)的启发,我们也开发了一种多目标的神经网络结构搜索同时优化精度和FLOPS。具体来说,我们使用与MnasNet相同的搜索空间,并使用ACC(m)×[FLOPS(m)/T]wACC(m)×[FLOPS(m)/T]^w作为优化目标,其中ACC(m)ACC(m)FLOPS(m)FLOPS(m)表示模型mm的精度和计算量,TT是目标计算量,w=0.07w=-0.07是用来权衡精度和flops的超参数。不像MnasNet中的优化目标,这里优化的是FLOPS而不是延迟,因为我们没有说是要在特定的硬件平台上做加速。我们的搜索方法产生了一个高效的网络,我们称之为EfficientNet-B0,由于我们使用的搜索空间与MnasNet相似,所以架构也很相似,不过我们的EfficientNet-B0稍微大了点,因为我们的FLOPS预算也比MnasNet中大(400M)。表1显示了EfficientNet-B0的体系结构,主要构造块是移动倒置瓶颈MBConv(Sandler等人,2018;Tan等人,2019),其网络结构如下:
EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
然后以EfficientNet-B0为baseline模型,我们将我们的复合缩放方法应用到它上面,分为两步:
EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
值得注意的是,通过直接在大型模型上搜索α,β,γα,β,γ可以获得更好的性能,但是在大型模型上搜索成本变得昂贵得令人望而却步。我们的方法通过在小的baseline网络上只搜索一次来解决这个问题(步骤1),然后对所有其他模型使用相同的α,β,γα,β,γ(步骤2)。

5 实验

在本节中,我们将首先评估我们在现有ConvNets和新提出的EfficientNets上的缩放方法。

5.1 扩展MobileNets和ResNets

我们首先将缩放方法应用于广泛使用的MobileNets(Howard等人,2017;Sandler等人,2018)和ResNets(He等人,2016)。表3显示了以不同缩放方式得到的ImageNet结果,与其他单一维度缩放方法相比,我们的复合缩放方法提高了精度,这表明我们提出的缩放方法对于一般的现有ConvNets是有效的。
EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks

5.2 EfficientNet上的ImageNet结果

我们在ImageNet上训练我们的EfficientNet模型,使用的设置类似于MnasNet: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。

表2显示了根据baseline EfficientNet-B0进行缩放的所有EfficientNet 模型的性能。我们的EfficientNet 模型使用的参数和flops比其他具有类似精度的ConvNets少一个数量级。尤其是,我们的EfficientNet-B7在66M参数和37B flops下达到了84.4%的top-1精度和97.1%的top-5精度,比之前最佳的GPipe更精确,但要小8.4倍(Huang等人,2018)。
EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
图1和图5说明了典型convnet的参数精度和FLOPS精度曲线,在这里,我们的scaled EfficientNet模型比其他convnet用更少的参数和FLOPS获得更好的精度。值得注意的是,我们的EfficientNet模型不仅很小,而且计算成本更低。例如,我们的EfficientNet-B3比ResNeXt101(Xie et al.,2017)使用的flops少18倍,精度更高。
EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
为了验证计算成本,我们还测量了实际CPU上几个典型covnet的推断延迟,如表4所示,其中我们报告了20次以上的平均延迟。我们的EfficientNet-B1比广泛使用的ResNet-152快5.7倍(他等人,2016年),而EfficientNet-B7比GPipe快6.1倍(Huang等人,2018年),这表明我们的EfficientNet在真正的硬件上确实很快。
EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks

5.3 EfficientNet的迁移学习数据集结果

我们还在一系列常用的迁移学习数据集上评估了我们的效率,如表6所示。我们从(Kornblith et al.,2019)和(Huang et al.,2018)借用相同的训练设置,在新数据集上使用ImageNet预训练模型和微调。
EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
表5显示了迁移学习的性能:(1)与NASNet-A(Zoph等人,2018)和Inception-v4(Szegedy等人,2017)等公共可用模型相比,我们的EfficientNet模型在平均4.7倍(高达21倍)参数减少的情况下获得了更好的精度。(2) 与DAT(Ngiam et al.,2018)和GPipe(Huang et al.,2018))模型相比,我们的高效网络模型在8个数据集中仍有5个数据集的精度超过了它们,但使用的参数少了9.6倍。
EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
图6比较了各种模型的精度参数曲线。总的来说,我们的EfficientNet始终以比现有模型少一个数量级的参数且获得更好的精度,包括ResNet(He et al.,2016)、DenseNet(Huang et al.,2017)、Inception(Szegedy et al.,2017)和NASNet(Zoph et al.,2018)。
EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks

6 讨论

为了从EfficientNet结构中分离我们提出的缩放方法的贡献,图8比较了相同EfficientNet-B0基线网络中不同缩放方法的ImageNet性能。总的来说,所有的缩放方法都可以提高精度,但代价是更多的FLOPS,但是我们的复合缩放方法可以进一步提高精度,高达2.5%,这表明了我们提出的复合缩放方法的重要性。
EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
为了进一步了解为什么我们的复合缩放方法优于其他方法,图7比较了具有不同缩放方法的几个典型模型的class activation map(Zhou等人,2016)。所有的这些模型都是从同一baseline缩放得到的,其统计数据如表7所示。图像是从ImageNet验证集中随机选取的,如图所示,复合缩放的模型倾向关注于与更多目标细节相关的区域,而其他模型要么缺少目标细节,要么无法捕获图像中的所有目标。
EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks

7 结论

在本文中,我们系统地研究了ConvNet的缩放,发现平衡网络宽度、深度和分辨率是一个重要但缺失的部分,这使我们无法获得更好的精度和效率。为了解决这一问题,我们提出了一种简单高效的复合缩放方法,使我们能够以更原则的方式轻松地将基线ConvNet缩放到任何目标资源约束,同时保持模型的效率。在这种复合标度方法的支持下,我们证明了一个mobilesize-EfficientNet模型可以非常有效地进行标度,在ImageNet和五个常用的传输学习数据集上,以较少数量级的参数和触发器超过最新的精度。