【论文链接】:https://arxiv.org/abs/1905.11946
【论文代码】:https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet(官方tensorflow版本)https://github.com/lukemelas/EfficientNet-PyTorch(第三方pytorch版本)
【个人笔记】:
本文贡献:
- 系统地研究了模型缩放,提出了一种新的缩放方法,并证明了该方法在缩放MobileNet和ResNet等多个ConvNets方面的有效性;
- 使用神经架构搜索(NAS)设计了一个新的基线网络,用论文中提出的缩放方法对其缩放,获得一系列称为EfficientNets的模型,实验证明这些模型比之前的ConvNets获得了更好的准确性和效率。
知识点链接:
- grid search 网格搜索
- receptive field 感受野
- fine-grained 细粒度
- MobileNet
- MnasNet
- ⨀ 表示Hadamard product(哈达马积),对于两个维度相同的向量、矩阵、张量进行对应位置的逐元素乘积运算。(ps:在这篇论文的公式里不知道是不是这个意思= =。。)
Abstract
卷积神经网络(ConvNets)通常是在固定资源预算下开发的,如果有更多资源可用,则会进行扩展以获得更高的准确度。在本文中,我们系统地研究了模型缩放,并发现仔细地平衡网络的深度、宽度和分辨率可以获得更好的性能。基于这一观察,我们提出了一种新的缩放方法,使用一个简单而高效的复合系数来均匀地缩放深度、宽度、分辨率等三个维度。我们证明了该方法在缩放MobileNet和ResNet方面的有效性。
为了更进一步,我们使用神经架构搜索(NAS)来设计一个新的基线网络,并将其扩展以获得一系列被称为EfficientNets的模型,这些模型比之前的ConvNets获得了更好的准确性和效率。特别是,我们的EfficientNet-b7在ImageNet的top-1上实现了84.4%的最好性能准确率,在top-5上实现了 97.1%的最好性能准确率,同时比现有最好的ConvNet小8.4倍,速度快6.1倍。我们的EfficientNets在CIFAR-100(91.7%)、Flowers(98.8%)和其他3个迁移学习数据集上也表现的好,达到最先进的准确度,且参数少了一个数量级。
一、Introduction
放大卷积神经网络被广泛用于获得更好的准确度。例如,通过使用更多的层,可以将ResNet从ResNet-18扩展到ResNet-200; 最近,GPipe将基线模型放大4倍,在ImageNet的top-1类上实现了84.3%的准确度。然而,扩展ConvNets的过程从来没有被很好地理解过,目前有很多方法可以做到这一点。最常用的方法是扩大ConvNets的深度或宽度。另一种不太常见但越来越流行的方法是通过图像分辨率来放大模型。在以前的工作中,通常只缩放三个维度中的一个——深度、宽度和图像大小。虽然可以任意缩放两个或三个维度,但是任意缩放需要繁琐的手工调整,而且仍然会产生次优精度和效率。
在这篇论文中,我们想要研究和重新思考缩放卷积神经网络的过程。特别地,我们研究了中心问题:是否有一种条理化的方法可以实现更高的精度和效率? 我们的实证研究表明,平衡网络的宽度、深度、分辨率等维度是至关重要的,而令人惊讶的是,这种平衡可以通过简单地以恒定的比例缩放每个维度来实现。在此基础上,我们提出了一种简单而有效的复合缩放方法。与传统的任意缩放这些因子的方法不同,我们的方法使用一组固定的缩放系数来均匀地缩放网络的宽度、深度和分辨率。例如,如果我们想使用2N倍的计算资源,然后我们可以简单地增加网络的深度αN,宽度βN,和图像大小γN,α,β,γ是常系数,由原来小模型的小网格搜索决定。图2说明了我们的缩放方法和传统方法的区别。
直观上看,复合缩放方法是有意义的,因为如果输入图像更大,那么网络需要更多的层来增加receptive field(感受野),需要更多的通道来捕捉更大图像上的更fine-grained(细粒度)的图案。事实上,之前的理论和实证结果都表明网络宽度和深度之间存在一定的关系,但据我们所知,我们是第一个对网络宽度、深度和分辨率三个维度之间的关系进行实证量化的人。
我们证明我们的缩放方法在现有的MobileNets和ResNet上运行良好。值得注意的是,模型缩放的有效性在很大程度上取决于基线网络; 为了更进一步,我们使用神经网络搜索来开发一个新的基线网络,并将其缩放以获得一系列的模型,称为EfficientNets。图1总结了模型在ImageNet数据集上的性能,其中我们的EfficientNets明显优于其他convnet。特别地,我们的EfficientNets-b7超越了现有的最佳GPipe精度,但是少用了8.4倍的参数,并且在推断时运行速度快了6.1倍。与广泛使用的ResNet-50相比,我们的EfficientNets-b4将top-1类的准确率从76.3%提高到了83.0%(+6.7%)。除了ImageNet数据集,EfficientNets在8个广泛使用的数据集的5个中,迁移学习表现地很好且达到最先进的精度,同时比现存的ConvNets减少了21倍的参数。
二、2. Related Work
ConvNet准确率:自从AlexNet赢得2012年ImageNet大赛以来,随着ConvNets变得越来越大,准确率越来越高:2014年ImageNet冠军GoogleNet以约680万参数获得74.8%的最高准确率,2017年ImageNet冠军SENet以1.45亿参数获得82.7%的顶级精度。最近,GPipe进一步使用5.57亿参数将ImageNet的top-1类准确率提升到84.3%:它是如此之大,以至于只能通过专门的管道并行库对网络进行训练,通过划分网络,将每个部分扩展到不同的加速器。虽然这些模型主要是为ImageNet设计的,但最近的研究表明,更好的ImageNet模型在各种迁移学习数据集和其他计算机视觉任务(如对象检测)中也有更好的表现。虽然更高的精度对于许多应用程序来说是至关重要的,但是我们已经达到了硬件内存的极限,因此进一步提高精度需要更高的效率。
ConvNet效率:ConvNets通常是超参数化的。模型压缩是一种常见的减少模型大小的方法,它以精度换取效率。随着手机变得无处不在,手工制作高效的移动大小的ConvNets也很常见,例如SqueezeNets、MobileNets和ShuffleNets。近年来,神经网络结构搜索在设计高效的移动级卷积神经网络中越来越受欢迎,通过广泛调整网络的宽度、深度、卷积核的类型和大小,实现了比手工制作的移动级卷积神经网络更高的效率。然而,目前还不清楚如何将这些技术应用于设计空间更大、调优成本更高的大型模型。在本文中,我们的目标是研究超大型ConvNets的模型效率,以超越目前最先进的精度。为了实现这个目标,我们采用模型缩放。
模型缩放:对于不同的资源约束,有许多方法可以缩放ConvNet: ResNet可以通过调整网络深度(层)来伸缩,而WideResNet和mobilenet可以通过网络宽度(通道)来伸缩。人们也认识到,更大尺寸的输入图像通过更多的浮点运算次数(FLOPS)来提升准确性。虽然之前的研究已经表明网络的深度和宽度对ConvNets的表达能力都很重要,但如何有效地缩放ConvNet以获得更好的效率和准确性仍然是一个有待解决的问题。我们的工作系统地和经验地研究了在网络宽度、深度和分辨率三个维度上的ConvNet缩放。
三、Compound Model Scaling 复合模型缩放
在本节中,我们将阐述缩放问题,研究不同的方法,并提出新的缩放方法。
1、Problem Formulation 问题公式化
一个卷积网络层i可以被定义为一个函数:Yi = Fi(Xi),这里Fi是一个算子(卷积操作),Yi是输出张量,Xi是输入张量,张量大小为⟨Hi, Wi, Ci⟩,Hi和Wi是空间维度,Ci是通道维度。一个卷积神经网络N能够被一系列复合层表示:2、Scaling Dimensions 缩放维度
问题2的主要难点在于,最优的d、w、r相互依赖,且在不同的资源约束条件下值会发生变化。由于这一困难,传统的方法大多在以下几个维度中卷积神经网络:
深度(d):许多ConvNets最常用的方式是缩放网络深度。直观的感觉是,更深层次的卷积神经网络可以捕捉更丰富、更复杂的特征,并在新任务上很好地推广。然而,更深层次的网络也因为消失梯度问题而更加难以训练。虽然一些技术,如跳过连接skip connection和batch normalization,可以缓解训练问题,但非常深的网络的精度增益会降低:例如,ResNet-1000具有与ResNet-101类似的精度,尽管它有更多的层。图3(中间)显示了我们对不同深度系数d的基线模型进行缩放的实证研究,进一步表明卷积神经网络的精度收益递减。较大的网络,其宽度、深度或分辨率越大,其精度越高,但精度增益在达到80%后迅速饱和,说明了单维缩放的局限性。基线网络如表1所示。
宽度(w):网络宽度缩放通常用于小尺寸模型。正如(Zagoruyko & Komodakis, 2016)中所讨论的,更宽的网络往往能够捕捉更详细的特征,更容易训练。然而,非常宽但很浅的网络往往很难捕捉到更高层次的特征。我们在图3(左)中的实证结果表明,当网络随着w的增大而变得更宽时,准确度很快就会饱和。
分辨率(r): 使用更高分辨率的输入图像,ConvNets可以捕获更加详细的图案。在早期的ConvNets中,从224x224开始,现代的ConvNets倾向于使用299x299或331x331来获得更好的精度。最近,GPipe以480x480分辨率在ImageNet数据集上达到了最好的精度。更高的分辨率,如600x600,也被广泛用于对象检测ConvNets。图3(右)显示了网络分辨率缩放的结果,确实更高的分辨率可以提高精度,但是对于非常高的分辨率,精度增益会减小(r = 1.0表示分辨率224x224, r = 2.5表示分辨率560x560)。
上述分析使我们得出第一个观察结果:
观察1 -缩放网络的宽度、深度或分辨率这三者中的任何维度都可以提高精度,但对于较大的模型,精度增益会降低。
3、Compound Scaling 复合缩放
我们从经验上观察到,不同维度的缩放不是相互独立的。直观地说,对于高分辨率的图像,我们应该增加网络深度,这样更大的receptive field(感受野)可以帮助捕捉包含更大图像中更多像素的相似特征。相应地,我们也应该在分辨率较高时增加网络宽度,以便在高分辨率图像中以更多的像素捕获更多的细粒度(fine-grained)图案。
为了验证我们的直觉,我们比较了在不同网络的深度和分辨率下的宽度缩放,如图4所示。如果我们只缩放网络宽度w,而不改变深度(d=1.0)和分辨率(r=1.0),准确度很快就会饱和。随着深度(d=2.0)和分辨率(r=2.0)的提高,在相同的FLOPS成本下,宽度缩放可以获得更好的精度。这些结果使我们得出第二个观察结果:
事实上,之前的一些工作已经尝试过任意平衡网络的宽度和深度,但是它们都需要繁琐的手工调优。
在本文中,我们在条理化解决方法下,提出一个新的复合缩放方法,使用一个复合系数去均匀的缩放网络宽度、深度和分辨率:
四、EfficientNet Architecture
由于模型缩放不更改在基线网络中的图层的算子(卷积操作)Fi,所以有一个好的基线网络很重要。我们将使用现有的ConvNets来评估我们的缩放方法,但是为了更好地展示我们的缩放方法的有效性,我们还开发了一个新的移动级的基线网络,称为EfficientNet-B0。
受到本论文作者在cvpr2019另一篇论文的启发,开发了基线网络EfficientNet-B0,通过影响多目标神经结构搜索,优化准确性和FLOPS。具体来说,使用了与作者在2019发的那一篇论文相同的搜索空间,并使用作为优化目标,ACC(m)和FLOPS(m)表示模型m的精度和FLOPS,T是目标FLOPS,且w=-0.07,是控制准确度和FLOPS之间权衡的超参数。这里我们优化的是FLOPS而不是延迟,因为我们没有针对任何特定的硬件设备。我们的搜索产生了一个高效的网络,我们将其命名为EfficientNet-b0。由于我们使用与MnasNet相同的搜索空间(Tan et al.,2019),所以架构类似于MnasNet,只不过由于我们更大的FLOPS目标(我们的FLOPS目标是400M),所以我们的EfficientNet稍大一些。表1给出了EfficientNet-b0的架构。它的主要构成要素是移动bottleneck—— MBConv(mobilenet里面提出的倒瓶颈块),在此基础上我们还增加了squeeze-and-excitation(SE ratio)优化(看另一篇论文)。
从基线EfficientNet-b0开始,我们使用我们的复合缩放方法,通过两个步骤来进行缩放:
- 步骤1:我们首先固定,假设两个更多的可用资源,并基于方程2和3对α,β,γ做一个网格搜索。特别地,在约束条件下,我们找到EfficientNet-B0最佳值α = 1.2,β = 1.1,γ = 1.15。
- 步骤2:然后我们固定α,β,γ为常量,并在方程3中以不同的扩大基线网络,获得EfficientNet-B1到B7(细节在表2)。
值得注意的是,也有可能在一个更大的模型中(与EfficientNets对比)直接搜索α,β,γ获得更好的性能,但搜索成本变得更高。我们的方法通过在小型基线网络上只做一次搜索(步骤1)来解决这个问题,然后对所有其他模型使用相同的比例系数(步骤2)。
五、Experiments
在本节中,我们将首先评估我们对现有ConvNets和新提出的EfficientNets的缩放方法。
1、Scaling Up MobileNets and ResNets
作为概念验证,我们首先将我们的缩放方法应用于广泛使用的MobileNets和ResNet。表3显示了以不同方式缩放时,模型在ImageNet数据集上的实验结果。与其他单一维度缩放方法相比,我们的复合缩放方法提高了所有这些模型的精度,说明我们提出的方法对于一般已有卷积神经网络的有效性。2、ImageNet Results for EfficientNet
我们在ImageNet数据集上训练我们的EfficientNet模型,使用的设置:RMSProp 优化器使用decay为0.9 且momentum为0.9;batch norm momentum为0.99;weight decay为1e-5;initial learning rate为0.256 ,且每2.4个epoch衰减0.97。我们也使用swish激活(Ramachandran et al.,2018;Elfwing et al., 2018),固定自动增广策略(Cubuk et al.,2019),随机深度(Huang et al.,2016),survival概率为0.8。众所周知,更大的模型需要更多的正则化,我们线性地增加dropout ratio,从0.2(对于EfficientNet-B0)到0.5(对于EfficientNet-B7)。
表2显示了从相同基线EfficientNet-b0扩展的所有EfficientNet模型的性能。我们的EfficientNet模型通常使用比其他具有类似精度的卷积神经网络少一个数量级的参数和FLOPS。其中,我们的EfficientNet-b7在66M参数、37B FLOPS条件下,在top1类获得了97.1%的精度,在top5类达到了84.4%的精度,且比之前最好的GPipe小了8.4倍(参数数量小)。
图1和图5展示了具有代表性的ConvNets的参数-精确性和FLOPS-accuracy曲线,其中我们的缩放EfficientNet模型在参数和FLOPS都比其他ConvNets少得多的情况下获得了更好的准确性。值得注意的是,我们的有效网络模型不仅小,而且计算成本更低。例如,我们的EfficientNet-B3比ResNeXt-101使用少了18倍的FLOPS,但达到更高的精度。3、Transfer Learning Results for EfficientNet
我们还在一个常用的迁移学习数据集列表上评估了我们的EfficientNet,如表6所示。我们从(Kornblith et al.,2019)和(Huang et al.,2018)借鉴了相同的训练设置,在ImageNet预先训练检查点,然后在新数据集上微调。
表5显示了迁移学习性能:(1)与NASNet-A (Zoph et al.,2018)和incep-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. Discussion
为了将我们提出的缩放方法从EfficientNet架构中分离出来,图8比较了同一EfficientNet-b0基线网络中不同缩放方法在ImageNet数据集上的性能。一般来说,所有的缩放方法都可以在FLOPS计算成本更高的情况下提高精度,但是我们的复合缩放方法可以进一步提高精度,比其他单维缩放方法提高2.5%,这说明了我们提出的复合缩放方法的重要性。七、Conclusion
在本文中,我们系统地研究了卷积神经网络的缩放问题,并发现仔细地平衡网络的宽度、深度和分辨率是一个重要但又缺失的部分,这阻碍了我们获得更好的精度和效率。为了解决这个问题,我们提出了一个简单而高效的复合缩放方法,它使我们能够以更有条理的方式轻松地将基准卷积神经网络缩放到任何目标资源约束,同时保持模型的效率。通过这种复合缩放方法,我们证明了在ImageNet和5个常用的迁移学习数据集上,一个mobile-size的有效网络模型可以非常有效地进行缩放,以一个数量级上更少的参数和更少FLOPS来超越最先进的精度。