Abstract
人们通常是在固定的计算资源下设计CNN,更多的计算资源也就意味着更高的准确率。本文系统地研究了模型的缩放,提出仔细地平衡网络的深度、宽度和图像分辨率可以得到更优的性能。基于此发现,作者提出了一个新的缩放方法,通过一个简单而有效的复合系数来统一地缩放深度/宽度/分辨率的所有维度。作者证明该方法对 MobileNets 和 ResNet 的缩放是有效的。
更进一步,作者使用神经结构搜索方法设计了一个新的 baseline 网络,对其进行缩放得到多个模型,叫做 EfficientNets,相较于之前的卷积网络,它取得了更高的准确率和效率。其中 EfficientNet-B7 在ImageNet 上取得了 SOTA 的的 top-1 准确率, top-5 准确率,而推理时,该模型的大小要比现有的最优模型足足缩小了倍,速度快了倍。在 CIFAR-100上,它也取得了 的准确率。代码位于:https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet
1. Introduction
对卷积网络进行缩放,目的是取得更高的准确率。ResNet 可以用更多的层,从 ResNet-18 放大到 ResNet-200。最近GPipe 将一个baseline模型放大了4倍,在 ImageNet 上取得了
作者想要研究并重新思考卷积网络的缩放。特别地,作者研究了一个核心问题:缩放网络时,是否存在一个原则方法来指导我们,以取得更高的准确率和效率?作者通过试验证明,平衡网络的深度、宽度、分辨率非常重要,而且我们只需一个常数比例来缩放它们,就可以实现这种平衡。基于此发现,作者提出了一个简单但有效的复合缩放方法。与传统的方式不同,它们任意地缩放这些 factors,而本文方法是统一地缩放网络的深度、宽度和分辨率,通过一组固定的缩放系数。比如,我们想要使用倍的计算资源,那么我们可以简单地增加网络深度 倍,宽度倍,图像大小倍,其中是常数系数,在原来的小模型上通过网格搜索来找到。图2 展示了本文缩放方法和传统方法的差异。
复合缩放方法是讲的通的,因为如果输入图像更大,网络就需要更多的层来增加感受野,需要更多的通道来获取更多的细粒度信息。实际上之前的理论研究与试验结果都证明了,网络的深度和宽度之间存在着某种关系,但是本文是第一个量化了三个维度之间的关系的。
作者证明该缩放方法对于 MobileNets 和 ResNets 都是非常管用的。值得注意的是,模型缩放的效果高度依赖于 baseline 网络。所以作者使用神经结构搜索方法,设计了一个全新的 baseline 模型,然后对其进行缩放,得到一组模型,叫做 EfficientNets。图1 总结了其在 ImageNet 上的表现,EfficientNets 领先其他模型许多。EfficientNet-B7 超过了目前最优的模型 GPipe 的准确率,但是参数量减少了 8.4倍,速度快了6.1倍。与广泛使用的 ResNet 相比,EfficientNet-B4 将 ResNet-50 的top-1准确率从提升到了,而其FLOPS是差不多的。除了 ImageNet,EfficientNet 在其它数据集上也取得了不错的效果。
2. Related Work
卷积网络准确率:自从 AlexNet 赢了2012年 ImageNet 的比赛,卷积网络越来越大,准确率也越来越高:2014 年 ImageNet 的冠军是 GoogleNet,它有680万个参数,取得了的准确率,2017年的冠军是 SENet,它有1.45亿个参数,取得了的准确率。最近GPipe进一步将 ImageNet top-1 的准确率推高到了,使用了5.57亿个参数:它特别大,以至于必须用一个特殊设计的并行计算库才可以训练,要将网络分割开,每一部分用不同的加速器来训练。虽然这些方法都是针对 ImageNet 设计的,但是最近的研究表明它们对其他的数据集和任务也适用,比如目标检测。尽管对很多应用来说,准确率非常关键,但是通常硬件的内存有限制,因此要想得到更高的准确率,我们也要有更高的计算效率。
卷积网络计算效率:深度卷积网络通常都过度地参数化。模型压缩是常用的降低模型大小的方法,但是要牺牲一些准确率来换取效率。随着智能手机逐渐普及,我们需要设计一些适合移动端计算效率的卷积网络,如 SqueezeNets,MobileNets 和 ShuffleNets。最近,神经结构搜索方法逐渐流行起来,它通过对网络的深度、宽度和卷积核类型与大小大量地调参,实现的准确率要高于人工设计的移动端网络。但是,如何将这些技巧应用在更大的模型中仍然有待探索,它的搜索空间更广阔,调参的计算成本更高。本文中主要研究了超大模型的计算效率,超越目前最高的准确率。为了实现此目标,作者使用了模型缩放方法。
模型缩放:对于不同的资源约束,我们有许多的方法来缩放网络:ResNet 可以通过调节网络深度来缩小或放大,而WideResNet 和 MobileNet 可以通过网络的宽度来缩放。此外,更大的输入图像也有助于实现更高的准确率,但会造成FLOPS增加。尽管以前的研究表明,网络的深度和宽度对卷积网络的特征提取能力很重要,但是如何有效地缩放卷积网络,实现更高的准确率和效率仍有待探索。本文系统地研究了卷积网络在深度、宽度和分辨率三个维度的缩放。
3. Compound Model Scaling
本部分,作者阐述了缩放问题,探讨了四个不同的方法,并提出了一个全新的缩放方法。
3.1 Problem Formulation
一个卷积层可以定义为一个函数:,其中是算子,是输出张量,是输入张量,形状是,其中是空间维度,是通道维度。卷积网络可以表示为一组层:。在实际应用中,卷积网络的层通常被分为多个阶段,各个阶段的网络结构类似。例如,ResNet 有5个阶段,每个阶段的层有着一样的卷积类型,除了第一层执行下采样。因此,我们将一个卷积网络定义为:
其中,表示在第个阶段中,层重复了次,表示第层输入张量的形状。图2(a)展示了一个代表性的卷积网络,它的空间维度逐渐收缩,但是通道维度逐渐扩大,比如输入形状最开始是,最后输出的形状是。
一般的卷积网络设计聚焦在找到最佳的层结构,而模型缩放则是扩大网络的长度,宽度和分辨率大小,而不会改变baseline网络中预定义的。通过将固定住,模型缩放就简化了网络设计问题,但是探索不同的仍然有很大的空间。为了进一步缩小设计空间,作者规定所有的层必须用一个常量比例统一缩放。其目的就是在给定资源限制的情况下,最大化模型的准确率,它可以表述为一个优化问题:
其中,是缩放网络宽度、深度和分辨率的系数。是baseline网络中与定义的参数。
3.2 缩放维度
第二个问题就是互相依赖,它们的值在不同的资源限制下不一样。因此,传统方法最多用一个维度来缩放卷积网络:
深度(d):增加网络的深度是最常用的方法。网络越深,它越能获得更丰富更复杂的特征,在新任务上泛化能力越强。但是更深的网络训练起来也更困难,会有梯度消失的情况出现。尽管有一些技巧可以用来缓解这个问题,如短路连接、批归一化等,但是模型的准确率提升就减少了:例如,ResNet-1000 虽然层数更多,但是它的准确率却和ResNet-101差不多。图3(中间)是一个试验,它用不同的深度系数来放大baseline模型,但是可以看到准确率提升逐渐降低。
宽度(w):对于小模型来说,增加网络的宽度也是一个常用的技巧。较宽的网络更容易获得细粒度特征,也更容易训练。但是,特别宽而又特别浅的模型在获取高层级特征方面是有困难的。图3(左)显示,随着网络越来越宽,越来越大,准确率很快就饱和了。
分辨率(r):输入图像分辨率越高,卷积网络就能得到更多的细粒度特征。早期卷积网络都是用大小作为输入,但后来都转用或作为输入,为了实现更高的准确率。最近 GPipe 在ImageNet上取得了SOTA的准确率,它的输入分辨率是。更高的分辨率,如在目标检测中被广泛采用。图3(右)是增加网络分辨率的效果,更高的分辨率可以提升准确率,但是分辨率要是已经非常高了,准确率提升也会降低(表示分辨率,表示分辨率)。
经过上述分析,作者发现:
Observation 1:缩放任一个维度可以提升准确率,但是随着模型增大,准确率提升逐渐降低。
3.3 Compound Scaling
作者通过实验发现,各个缩放维度之间并不互相独立。对于高分辨率的图像,我们应该增加网络的深度,这样更大的感受野所获取的特征就能涵盖图像中更多的像素点。因此如果分辨率较高时,我们应当增加网络的深度,目的是获得更多的细粒度特征。这就表明,我们需要协调、平衡各个缩放维度,而不是单一地缩放某一个维度。
为了验证该想法,作者在不同的网络深度和分辨率情况下,对比了宽度增加的效果,如图4所示。如果我们不改变深度()和分辨率(),只增加网络的宽度,准确率很快就会饱和。而当深度变为,分辨率变为时,在同样的FLOPS成本下,增加宽度就可以取得更高的准确率。这些结果促成以下发现:
Observation 2:为了实现更高的准确率和计算效率,平衡所有的维度(宽度、深度、分辨率)是非常关键的。实际上, 之前已经有一些工作在尝试任意地平衡网络的宽度和深度了,但是他们的调参过程非常繁琐。
本文中,作者提出了一个复合缩放方法,使用一个复合系数统一地放大网络的深度、宽度和分辨率:
其中,是常量,可以通过网格搜索来找。是一个用户定义的系数,控制着多少额外的资源可以用于模型缩放,而则代表着如何分配这些额外的资源给网络宽度、深度和分辨率。注意,一个常规网络的FLOPS与是呈比例的,也就是说深度增加一倍,FLOPS也会增加一倍,而宽度增加一倍,FLOPS会增加四倍。在卷积网络中,计算量最多的就是卷积操作,用上面的等式来缩放一个卷积网络,FLOPS就会增加约。本文中,作者约束,这样对于任一个新的,总的FLOPS只增加约倍。
4. EfficientNet 结构
因为模型缩放并不会改变baseline模型层的算子,baseline模型的好坏就尤为重要。作者使用现有的卷积网络来评价其缩放模型,但是为了更好地证明该缩放模型的有效性,作者设计了一个新的 baseline,叫做 EfficientNet。
作者使用一个多目标神经结构搜索方法来设计该baseline模型,同时优化准确率和FLOPS。作者使用了(和Tan 等人2019年论文中)一样的搜索空间,将作为优化目标,其中和表示模型m的准确率和FLOPS,是目标FLOPS,是一个用于平衡准确率和FLOPS的超参数。作者在这里只优化FLOPS,而没有优化 latency,因为本文不是针对某一个硬件设备。作者搜索到了一个非常高效的网络,将其称作EfficientNet-B0,与MnasNet类似,除了EfficientNet-B0要稍微大一些,因为它的FLOPS目标更大一些(本文FLOPS目标为4亿次)。表1显示了EfficientNet-B0的结构,它主要的构建模块是 mobile inverted bottleneck MBConv,作者也加入了 Squeeze-and-excitation 优化。
从baseline模型 EfficientNet-B0开始,作者通过如下两步来进行复合缩放操作:
- 步骤1: 固定住,假设我们有多一倍的计算资源,基于等式2和3,对进行网格搜索。作者找到了EfficientNet-B0 的最优值,,约束条件是。
- 步骤2: 然后固定住作为常量,用等式3中不同的来增大baseline模型,这样得到了EfficientNet-B1 到 B7 这些模型(细节参见表2)。
注意,在一个大模型上直接搜索可能会得到更好的性能,但是搜索成本也非常高。本文方法在小型baseline模型上只搜索一次(步骤1),然后对其它模型使用同样的缩放系数(步骤2)。
4. Experiments