effcientNet学习笔记

EfficientNet论文解读

论文名称:EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks

官方代码地址: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%),以及其它三个数据集上获得非常好的迁移学习效果。

1. 简介

一般情况下,缩放卷积网络是获得更好准确度的有效手段,也被广泛的采用。例如,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 展示了我们缩放方法与传统方法的不同之处。

image

直观上,复合缩放方法是有意义的。如果输入图像变的更大,那么更多的网络层才能提高感受野,以及更多的通道才能获取更多细粒度特征。事实上前人的理论和研究结果表明,网络的深度和宽度存在一定的关系。但是据我们的研究,我们是第一个量化深度,宽度和分辨率三个维度的关系。我们的模型缩放方法在MobileNets和ResNet上非常有效。值得注意的是,我们的方法非常依赖基准网络(baseline network)。为了进一步研究,我么使用神经网络搜索算法(NAS)得到新的基准网络。然后对其进行模型缩放,得到一系列网络,称之为EfficientNets。图1总结了ImageNet上各个模型的表现,EfficientNets明显高于其它卷积网络。与广泛使用的ResNet-50相比,EfficientNet-B4将top-1精度从76.3%提升到83.0%,并且计算量更少。除了ImageNet数据集,EfficientNets在其它数据集上(5-8个数据集)的迁移学习也表现良好。

image

2.相关工作

**卷积网络的精度:**自从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.复合模型缩放

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

3.1 问题表述

一层卷积 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 ) \mathcal{N}=\bigodot_{i=1...s}\mathcal{F}^{L_i}_i(X_{}) N=i=1...sFiLi(X)
这里, 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<=target_memory)FLOPS(N<=target_flops)
这里,w,d,r是网络宽度,深度和分辨率的缩放系数。$\widehat{\mathcal{F}_i},\widehat{\mathcal{L}_i},\widehat{\mathcal{H}_i},\widehat{\mathcal{W}_i},\widehat{\mathcal{C_i}} $是定义在基准网络中的参数(见表1)。

3.2 缩放尺寸

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

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

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

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

3.3 复合缩放

我们实验发现,不同维度的缩放是相互依赖的。直觉上,更大的图像(包含更多的像素信息)需要更深的网络(更大的感受野才能获得图像上所有相似的信息),同理,我们也需要增大网络的宽度(为了获得更加细粒度的模式)。这些直觉上的感觉,使得我们不能单独的对单一的维度进行缩放。为了验证我们的主观猜测,我们对比了不同宽度缩放值下的不同的网络深度和分辨率,见图4。如图所示,当我们使用原始的深度和分辨率的基准网络(d=1.0,r=1.0),改变w,网络很快饱和。当(r=2.0,d=2.0)时,增大w值,同样的运算量下,精度提升很快。基于实验的结果,我们得到第二个结论:为了获得更好的精度和效率,必须平衡深度,宽度和分辨率三个维度的同时缩放。

image

事实上,前人一些工作,已经尝试平衡网络的宽度和深度,但是需要繁琐的人工调试。
本篇论文中,我们提出了新的复合缩放方法(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结构

由于模型缩放没有改变基准网络的层操作 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进行网络优化。

image

从基准网络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.实验

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

5.1 缩放MobileNet和ResNet

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

image

5.2 EfficientNet 使用在 ImageNet 的结果

使用相似的设定(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),并作为最终的验证精度。

image

表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。

image

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

image

5.3 EfficientNet 的迁移学习结果

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

image

表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。

image

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

image

6.讨论

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

image

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

image

image

7.总结

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

二、论文解读

1. 论文思想

由于在之前的一些手工设计网络,对于输入图像分辨率,卷积个数,网络层数的控制都是按照工程经验去设置,没有一个设计准则和有效的优化方案,因此论文作者想到用NAS(Neural Architecture Search)技术来搜索网络的图像输入分辨率r,网络的深度depth,以及channel的宽度width三个参数的合理化配置。并且通过一系列的对比试验,得到了一些结论。

  • 根据以往的经验,增加网络的深度depth能够得到更加丰富、复杂的特征并且能够很好的应用到其它任务中。但网络的深度过深会面临梯度消失,训练困难的问题。
  • 增加网络的width能够获得更高细粒度的特征并且也更容易训练,但对于width很大而深度较浅的网络往往很难学习到更深层次的特征。
  • 增加输入网络的图像分辨率能够潜在得获得更高细粒度的特征模板,但对于非常高的输入分辨率,准确率的增益也会减小。并且大分辨率图像会增加计算量。

作者先在基准EfficientNetB-0上分别增加widthdepth以及resolution,得到的结果显示大概在准确度提高到80%就接近饱和了。

image

image

然后作者又做了一个实验采用不同的d,r组合,然后不断改变网络的width就得到了如下图所示的4条曲线,通过分析可以发现在相同的FLOPs下,同时增加d和r的效果最好。

image

接着作者为了探究d,r,w三个因子对最终准确率的影响,在论文中对整个网络的运算进行了抽象:
N = ⨀ i = 1... s F i L i ( X < H i , W i , C i > ) \mathcal{N}=\bigodot_{i=1...s}\mathcal{F}^{L_i}_i(X_{<H_i,W_i,C_i>}) N=i=1...sFiLi(X<Hi,Wi,Ci>)
并且将d,r,w加入到公式中,得到抽象化后的优化问题:

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<=target_memory)FLOPS(N<=target_flops)
其中:

  • d用来缩放深度$\widehat{L}_i
    $

  • r用来缩放分辨率即影响 H ^ i \widehat{H}_i H i和$\widehat{W}_i
    $

  • w就是用来缩放特征矩阵的channel即 C ^ i \widehat{C}_i C i

  • target_memory为memory限制

  • target_flops为FLOPs限制

接着基于上面实验得到的结论,作者提出一个混合缩放方法,用一个缩放因子去同意缩放d,w,r:
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)
注意:

  • FLOPs(理论计算量)与depth的关系是:当depth翻倍,FLOPs也翻倍。
  • FLOPs与width的关系是:当width翻倍(即channal翻倍),FLOPs会翻4倍,因为卷积层的FLOPs约等于 f e a t u r e w × f e a t u r e h × f e a t u r e c × k e r n e l w × k e r n e l h × k e r n e l n u m b e r feature_w \times feature_h \times feature_c \times kernel_w \times kernel_h \times kernel_{number} featurew×featureh×featurec×kernelw×kernelh×kernelnumber(假设输入输出特征矩阵的高宽不变),当width翻倍,输入特征矩阵的channels( f e a t u r e c feature_c featurec)和输出特征矩阵的channels或卷积核的个数( k e r n e l n u m b e r kernel_{number} kernelnumber)都会翻倍,所以FLOPs会翻4倍。
  • FLOPs与resolution的关系是:当resolution翻倍,FLOPs也会翻4倍,和上面类似因为特征矩阵的宽度 f e a t u r e w feature_w featurew和特征矩阵的高度 f e a t u r e h feature_h featureh都会翻倍。

所以总的FLOPs倍率可以用近似用 ( α ⋅ β 2 ⋅ γ 2 ) ϕ (\alpha \cdot \beta^{2} \cdot \gamma^{2})^{\phi} (αβ2γ2)ϕ来表示,当限制 α ⋅ β 2 ⋅ γ 2 ≈ 2 \alpha \cdot \beta^{2} \cdot \gamma^{2} \approx 2 αβ2γ22时,对于任意一个 ϕ \phi ϕ而言FLOPs相当增加了 2 ϕ 2^{\phi} 2ϕ倍。

接下来作者在基准网络EfficientNetB-0(在后面的网络详细结构章节会详细讲)上使用NAS来搜索 α , β , γ \alpha, \beta, \gamma α,β,γ这三个参数。

  1. 首先固定ϕ = 1 \phi=1ϕ=1,并基于上面给出的公式(2)和(3)进行搜索,作者发现对于EfficientNetB-0最佳参数为 α = 1.2 , β = 1.1 , γ = 1.15 \alpha=1.2, \beta=1.1, \gamma=1.15 α=1.2,β=1.1,γ=1.15
  2. 接着固定 α = 1.2 , β = 1.1 , γ = 1.15 \alpha=1.2, \beta=1.1, \gamma=1.15 α=1.2,β=1.1,γ=1.15,在EfficientNetB-0的基础上使用不同的 ϕ \phi ϕ分别得到EfficientNetB-1至EfficientNetB-7(在后面的EfficientNet(B0-B7)参数章节有给出详细参数)

需要注意的是,对于不同的基准网络搜索出的 α , β , γ \alpha, \beta, \gamma α,β,γ也不定相同。还需要注意的是,在原论文中,作者也说了,如果直接在大模型上去搜索 α , β , γ \alpha, \beta, \gamma α,β,γ可能获得更好的结果,但是在较大的模型中搜索成本太大,所以这篇文章就在比较小的EfficientNetB-0模型上进行搜索的。

2. 网络结构

2.1 effcientNet-B0

EfficientNet-B0的网络框架在上面的表里已经详细展示了(B1-B7就是在B0的基础上修改Resolution,Channels以及Layers),可以看出网络总共分成了9个Stage,第一个Stage就是一个卷积核大小为3x3步距为2的普通卷积层(包含BN和激活函数Swish),Stage2~Stage8都是在重复堆叠MBConv结构(最后一列的Layers表示该Stage重复MBConv结构的次数),而Stage9由一个普通的1x1的卷积层(包含BN和激活函数Swish)一个平均池化层和一个全连接层组成。表格中每个MBConv后会跟一个数字1或6,这里的1或6就是倍率因子n即MBConv中第一个1x1的卷积层会将输入特征矩阵的channels扩充为n倍,其中k3x3或k5x5表示MBConv中Depthwise Conv所采用的卷积核大小。Channels表示通过该Stage后输出特征矩阵的Channels。

2.2 MBConv

image

MBConv其实就是MobileNetV3网络中的InvertedResidualBlock,但也有些许区别。一个是采用的激活函数不一样(EfficientNet的MBConv中使用的都是Swish激活函数),另一个是在每个MBConv中都加入了SE(Squeeze-and-Excitation)模块。

如图所示,MBConv结构主要由一个1x1的普通卷积(升维作用,包含BN和Swish),一个kxk的Depthwise Conv卷积(包含BN和Swish)k的具体值可看EfficientNet-B0的网络框架主要有3x3和5x5两种情况,一个SE模块,一个1x1的普通卷积(降维作用,包含BN),一个Droupout层构成。搭建过程中还需要注意几点:

  • 第一个升维的1x1卷积层,它的卷积核个数是输入特征矩阵channel的n倍,n∈{1,6}。
  • 当n=1时,不要第一个升维的1x1卷积层,即Stage2中的MBConv结构都没有第一个升维的1x1卷积层(这和MobileNetV3网络类似)。
  • 关于shortcut连接,仅当输入MBConv结构的特征矩阵与输出的特征矩阵shape相同时才存在(代码中可通过stride==1 and inputc_channels==output_channels条件来判断)。
  • SE模块由一个全局平均池化,两个全连接层组成。第一个全连接层的节点个数是输入该MBConv特征矩阵channels的 1 4 \frac{1}{4} 41,且使用Swish激活函数。第二个全连接层的节点个数等于Depthwise Conv层输出的特征矩阵channels,且使用Sigmoid激活函数。
  • Dropout层的dropout_rate在tensorflow的keras源码中对应的是drop_connect_rate后面会细讲(注意,在源码实现中只有使用shortcut的时候才有Dropout层)。

3. EfficientNet(B0-B7)参数

Modelinput_sizewidth_coefficientdepth_coefficientdrop_connect_ratedrop_rate
B0224*2241.01.00.20.2
B1240*2401.01.10.20.2
B2260*2601.11.20.20.3
B3300*3001.21.40.20.3
B4380*3801.41.80.20.4
B5456*4561.62.20.20.4
B6528*5281.82.60.20.5
B7600*6002.03.10.20.5

其中:

  • input_size:输入图像大小
  • width_coefficient:channel维度的倍率因子(取整到最近的8的倍数:32*1.2=38.4,取40)
  • depth_coefficient:depth维度的倍率因子(针对stage2-stage8,向上取整,比如在EfficientNetB0中Stage7的 L ^ i = 4 {\widehat L}_i=4 L i=4,那么在B6中就是4*2.6=10.4接着向上取整即11)
  • drop_connect_rate:MBconv结构中的dropout层的比例
  • drop_rate:最后一个全连接层的dropout层的比例

4. ImageNet上的性能结果

image

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值