《EfficientNet》论文精读:比Resnet、MobileNet更好的视觉网络 ...

打印 上一主题 下一主题

主题 973|帖子 973|积分 2919



  
1 择要


卷积神经网络通常都是先在固定资源预算下开发计划,然后如果资源有多余的话再将模型布局放大以便获得更好的精度。在本篇论文中,我们体系地研究了模型缩放并且仔细验证了网络深度、宽度和分辨率之间的均衡可以导致更好的性能表现。基于这样的观察,我们提出了一种新的缩放方法——使用一个简朴高效的复合系数来完成对深度/宽度/分辨率所有维度的同一缩放。我们在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个迁徙学习数据集。
2 简介

为了获得更好的精度,放大卷积神经网络是一种广泛的方法。举个例子,ResNet可以通过使用更多层从ResNet-18放大到ResNet-200;目前为止,GPipe通过将baseline模型放大四倍在ImageNet数据集上获得了84.3%的top-1精度,然而,放大CNN的过程从来没有被很好地理解过,目前通用的几种方法是放大CNN的深度、宽度和分辨率,在之前都是单独放大这三个维度中的一个,只管恣意放大两个大概三个维度也是可能的,但是恣意缩放必要繁琐的人工调参同时可能产生的是一个次优的精度和服从。
在本篇论文中,我们想要研究和重新思考放大CNN的过程,尤其地,我们调查了一个中心问题:是否存在一个原则性的放大CNN的方法实现更好的精度和服从? 我们的实验研究表明了均衡深度、宽度和分辨率这三个维度是至关紧张的,令人惊奇的是这样的均衡可以通过简朴的使用一组常量比率来缩放每一个维度,基于这个观察,我们提出了一个简朴高效的复合缩放方法,不像传统实践中恣意缩放这些因子,我们的方法使用一组固定的缩放系数同一缩放网络深度、宽度和分辨率。

举个例子,如果想使用                                             2                            N                                       2^N                  2N倍的计算资源,我们可以简朴的对网络深度扩大                                              α                            N                                       \alpha^N                  αN 倍、宽度扩大                                              β                            N                                       \beta^N                  βN、图像尺寸扩大                                              γ                            N                                       \gamma^N                  γN倍,这里的                                    α                         ,                         β                         ,                         γ                              \alpha,\beta,\gamma                  α,β,γ都是由原来的小模型上做微小的网格搜索决定的常量系数,Figure 2展示了我们的缩放方法和传统方法之间的区别。
直观来讲,如果图像尺寸变大,复合的缩放方法会很故意义,由于当图像尺寸变大意味着网络必要更多层来增长接受野,同时必要更多的通道来捕捉更大图像上更多细粒度的模式信息。事实上,以前的理论(Raghu等,2017; Lu等,2018)和实证结果(Zagoruyko&Komodakis,2016)两者表明网络之间的宽度和深度存在肯定的关系,但据我们所知,我们是首先要凭经验量化宽度,深度和分辨率三者之间的尺寸大小。
我们在已经存在的MobileNets和ResNets上展示了我们的缩放方法可以工作得很好,值得留意的是,模型缩放的高效性严重地依靠于baseline网络,为了进一步研究,我们使用网络布局搜索发展了一种新的baseline网络,然后将它缩放来获得一系列模型,称之为EfficientNets。

Figure 1总结了ImageNet的表现,EfficientNets相较于其他CNN网络,尤其地:


  • 我们的EfficientNet-B7逾越了之前最好的GPipe的精度,但是参数量少了8.4倍、速度快了6.1倍。
  • 相比于广泛使用的ResNet-50,我们的EfficientNets-B4在相近的FLOPS下将top-1精度从76.3%进步到了82.6%。
  • 除了ImageNet,EfficientNets在其他数据集上表现也很好,在8个广泛应用的数据集中的5个实现了最先辈的精度,然而比存在的卷积网络的参数量减少了21倍。
3 相干工作

ConvNet精度:自从AlexNet赢得2012的ImageNet比赛,ConvNets随着变得更大获得了更高的精度,同时GoogleNet使用6.8M的参数获得了74.8%的top-1精度,SENet使145M参数获得了82.7%的top-1精度。近来,GPipe进一步进步了精度——使用了557M的参数获得了84.3%的top-1验证精度:它如此的大以至于必要将网络分别使用特定的并行化本领训练,然后将每一部分通报到一个差别的加快器。然而这些模型主要是为ImageNet计划,但是将其迁徙到其他应用上时效果也很好。
ConvNet服从:深度网络的参数过多,模型压缩是一种通用的方法减小模型大小——均衡精度和服从。当移动网络变得无处不在时,我们也通常要手动计划高效的ConvNets,比如SqueezeNets、MobileNets、ShuffleNets。近来,神经网络布局搜索在计划高效的ConvNets变得越来越流行,并且通过广泛搜索网络宽度、深度、卷积核范例和大小得到了比手动计划的模型更高的精度。然而,目前还不清楚怎么将这些技术应用到更大的模型中,通常要更大的计划空间和更贵的微调成本,在本篇论文中,我们旨在研究服从计划更大规模的ConvNets,为了实现这个目标,我们采用模型缩放。
模型缩放:有很多的方法因差别的资源限制对ConvNet进行缩放:ResNet可以通过调解深度(缩小到ResNet-18,放大到ResNet-200),WideResNet和MobileNets可以通过对宽度(#channels)缩放。公认的是更大的输入图像尺寸有利于进步精度,同时必要更多的计算量。只管之前的研究展示了网络深度和宽度对ConvNets的表现力很紧张,它仍然是一个开放的问题来高效缩放ConvNet获得更好的服从和精度。我们的工作体系地研究了ConvNet对网络深度、宽度和分辨率这三个维度进行了缩放。
4 复合维度缩放

在本节中,我们将缩放问题公式化,研究了差别的方法并且提出了我们新的缩放方法。
4.1 缩放问题表述

卷积层                                   i                              i                  i可以用公式                                             Y                            i                                  =                                   F                            i                                  (                                   X                            i                                  )                              Y_i=F_i(X_i)                  Yi​=Fi​(Xi​)定义,                                             Y                            i                                       Y_i                  Yi​代表卷积操作,                                              Y                            i                                       Y_i                  Yi​表现输出张量,                                              X                            i                                       X_i                  Xi​表现输入张量,                                    <                                   H                            i                                  ,                                   W                            i                                  ,                                   C                            i                                  >                              <H_i,W_i,C_i>                  <Hi​,Wi​,Ci​>表现输入张量的外形,                                              H                            i                                  ,                                   W                            i                                       H_i,W_i                  Hi​,Wi​是feature map的尺寸,                                              C                            i                                       C_i                  Ci​是feature map的输入通道数。卷积N可以用一系列组成层表现:
                                         N                            =                                       F                               k                                      ⨀                            .                            .                            .                            ⨀                                       F                               2                                      ⨀                                       F                               1                                      =                                       ⨀                                           j                                  =                                  1...                                  k                                                            F                               j                                      (                                       X                               1                                      )                                  N = F_k \bigodot ... \bigodot F_2 \bigodot F_1 = \bigodot_{j=1...k} F_j(X_1)                     N=Fk​⨀...⨀F2​⨀F1​=j=1...k⨀​Fj​(X1​)
实践中,ConvNet层经常被分别为多个stages,并且每个stage的所有层共享雷同的布局:举个例子,ResNet有5个stages,每个stage的所有层有雷同的卷积范例(除了第一层有一个下采样),因此,我们可以将ConvNet定义为:
                                         N                            =                                       ⨀                                           i                                  =                                  1...                                  s                                                            F                               i                                           L                                  i                                                 (                                       X                                           (                                               H                                     i                                              ,                                               W                                     i                                              ,                                               C                                     i                                              )                                                 )                                  N = \bigodot_{i=1...s} F_i^{L_i}(X_{(H_i,W_i,C_i)})                     N=i=1...s⨀​FiLi​​(X(Hi​,Wi​,Ci​)​)
N是分类网络,X表现输入,                                              F                            i                                       F_i                  Fi​是基础网络层,                                              L                            i                                       L_i                  Li​表现在第i个stage中基础网络层的重复次数,总共有s个stage。Figure 2(a)展示了一种代表性的ConvNet,其空间维度,即feature map的尺寸逐层递减,但是通道维度是逐渐增长的,举个例子,从最开始的输入维度<224,224,3>变革到最终的输出维度<7,7,512>。

这里的                                   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​^​是预先在baseline网络中定义好的参数。
4.2 缩放维度


深度(d):缩放网络深度在很多ConvNets都有使用,直觉上更深的网络可以捕捉到更丰富和更复杂的特征,在新使命上也可以泛化的更好。然而,更深的网络由于梯度消散问题(这里我更倾向于说成是网络退化问题)也更难训练。只管有一些技术,比方跨层连接、批量归一化等可以有效减缓训练问题,但是深层网络的精度回报削弱了:举个例子,ResNet-1000和ResNet-101具有雷同的精度,纵然它的层数更多。Figure 3(中间的图)展示了我们在使用差别的深度系数d缩放网络的研究结果,更近一步的表明了精度回报的削弱问题。
宽度(w):缩放网络宽度也是一种常用的本领,正如之前讨论过的,更宽的网络可以捕捉到更细粒度的特征从而易于训练。然而,非常宽而又很浅的网络在捕捉高条理特征时有困难,我们的实验结果Figure 3(左)表明了当网络宽度随着w变大时,精度很快就饱和了。
分辨率(r):使用更高分辨率的输入图像,ConvNets可能可以捕捉到更细粒度的模式。从最早的 224x224,如今有些ConvNets为了获得更高的精度选择使用 229x229 大概 331x331。目前,GPipe使用 480x480 的分辨率获得了最先辈的ImageNet精度,更好的精度比如 600x600 也被广泛使用在目标检测网络中。Figure 3(右)展示了缩放网络分辨率对精度的影响,同样可以看到在非常高的分辨率时网络精度回报会削弱。
由此,我们得到第一个观察结果:对网络深度、宽度和分辨率中的任何温度进行缩放都可以进步精度,但是当模型足够大时,这种放大的收益会削弱。
4.3 复合维度缩放

我们经验上可以观察到差别缩放维度之间是不独立的,直观上来讲,对于分辨率更高的图像,我们应该增长网络深度,由于必要更大的感受野来帮助捕捉更多像素点的雷同特征,同时也应该增长网络宽度来获得更细粒度的特征。这些直觉引导着我们去协调均衡差别缩放维度而不是传统的单个缩放维度。
为了验证我们的直觉,我们在差别的网络深度和分辨率下比力了宽度变革的影响,正如Figure 4中所示,如果我们在 d=1.0 和 r=1.0 时仅仅缩放网络宽度,精度很快就饱和了。但是在d=2.0 和 r=2.0时在雷同的FLOPS下宽度缩放就可以获得更好的精度。这些结果导致我们得到了第二个观察结果:为了追去更好的精度和服从,在缩放时均衡网络所有维度至关紧张。
事实上,之前的一些工作已经开始在寻求恣意缩放网络深度和宽度,但是他们仍然必要复杂的人工微调。在本篇论文中,我们提出了一个新的复合缩放方法——使用一个复合系数                                    ϕ                              \phi                  ϕ 同一缩放网络宽度、深度和分辨率:



  • 这里的                                        α                            ,                            β                            ,                            γ                                  \alpha,\beta,\gamma                     α,β,γ都是由一个很小范围的网络搜索得到的常量,直观上来讲,                                         ϕ                                  \phi                     ϕ 是一个特定的系数,可以控制用于资源的使用量,                                         α                            ,                            β                            ,                            γ                                  \alpha,\beta,\gamma                     α,β,γ决定了具体是如何分配资源的。
  • 值得留意的是,常规卷积运算的计算量是和                                         d                            ,                                       w                               2                                      ,                                       r                               2                                            d,w^2,r^2                     d,w2,r2 成正比的,加倍深度会使得FLOPS加倍,但是加倍宽度和分辨率会使得FLOPS加4倍。由于卷积运算经常在CNN中占据了大部分计算量,使用等式(3)缩放ConvNet将会使得团体计算量近似增长                                        (                            α                            ×                                       β                               2                                      ×                                       γ                               2                                                 )                               ϕ                                            (\alpha \times \beta^2 \times \gamma^2)^\phi                     (α×β2×γ2)ϕ倍。
  • 在本篇论文中,我们对恣意                                         p                            h                            i                                  phi                     phi增长了约束                                         (                            α                            ×                                       β                               2                                      ×                                       γ                               2                                                 )                               ϕ                                      ≈                            2                                  (\alpha \times \beta^2 \times \gamma^2)^\phi \approx 2                     (α×β2×γ2)ϕ≈2,团体的计算量近似增长了                                                   2                               ϕ                                            2^\phi                     2ϕ倍。
4.4 EfficientNet Architecture

由于模型缩放不改变baseline网络中的                                                        F                               i                                      ^                                       \hat{F_i}                  Fi​^​,所以有一个好的baseline网络是很紧张的,我们使用之前的ConvNets对我们的缩放方法做了评估,但是为了更好验证我们的缩放方法的高效性,我们也提出了一种基于移动应用的baseline模型——EfficientNet。
受到MnasNet的开导,我们也开发了一种多目标的神经网络布局搜索同时优化精度和FLOPS,我们的搜索空间和MnasNet雷同,同时我们的优化目标为                                    A                         C                         C                         (                         m                         )                         ×                         [                         F                         L                         O                         P                         S                         (                         m                         )                         /                         T                                   ]                            w                                  ]                              ACC(m) \times [FLOPS(m)/T]^w]                  ACC(m)×[FLOPS(m)/T]w],这里的                                    A                         C                         C                         (                         m                         )                         ]                              ACC(m)]                  ACC(m)]和                                   F                         L                         O                         P                         S                         (                         m                         )                              FLOPS(m)                  FLOPS(m)分别是模型m的精度和计算量,                                   T                              T                  T是目标计算量,                                    w                         =                         −                         0.07                              w=-0.07                  w=−0.07是一个超参数用来权衡精度和FLOPS。
不像MnasNet中的优化目标,这里优化的是FLOPS而不是延迟,由于我们没有说是要在特定的硬件平台上做加快。
我们的搜索方法得到了一个高效的网络,我们称之为EfficientNet-B0,由于我们使用的搜索空间和MnasNet相似,所以得到的网络布局也很相似,不过我们的EfficientNet-B0稍微大了点,由于我们的FLOPS预算也比MnasNet中大(400M)。table 1展示了EfficientNet-B0的布局,它的主要构建块就是移动倒置瓶颈MBConv,其网络布局如下:

然后以EfficientNet-B0为baseline模型,我们将我们的复合缩放方法应用到它上面,分为两步:


  • STEP 1:我们首先固定                                         ϕ                            =                            1                                  \phi=1                     ϕ=1,假设有相比于原来多了2倍的资源,我们基于等式(2)和(3)先做了一个小范围的搜索,最后发现对于EfficientNet-B0来说最后的值为                                        α                            =                            1.2                            ,                            β                            =                            1.1                            ,                            γ                            =                            1.15                                  \alpha = 1.2,\beta=1.1,\gamma=1.15                     α=1.2,β=1.1,γ=1.15,在                                        α                            ×                                       β                               2                                      ×                                       γ                               2                                      ≈                            2                                  \alpha \times \beta^2 \times \gamma^2 \approx2                     α×β2×γ2≈2的约束下
  • STEP 2:接着我们固定                                         α                            ,                            β                            ,                            γ                                  \alpha,\beta,\gamma                     α,β,γ作为约束,然后利用差别取值的                                        ϕ                                  \phi                     ϕ 对baseline网络做放大,来获得Efficient-B1到B7;
值得留意的是,直接在一个大模型上搜索得到                                    α                         ,                         β                         ,                         γ                              \alpha,\beta,\gamma                  α,β,γ可能会导致一个更好的表现,但是搜索成本会很高,我们的方法办理了这个问题——STEP 1时只在小的baseline网络中做了一次搜索得到                                    α                         ,                         β                         ,                         γ                              \alpha,\beta,\gamma                  α,β,γ,然后对于其他的模型都使用的是雷同的                                    α                         ,                         β                         ,                         γ                              \alpha,\beta,\gamma                  α,β,γ,只是通过                                    ϕ                              \phi                  ϕ来调解模型的大小和FLOPS。
6 实验结果

6.1 缩放MobileNets 和ResNets

为了验证我们的方法,我们首先将缩放方法应用到MobileNets和ResNets中,Table 3展示了以差别的方法缩放的ImageNet结果。与其他单一维度的缩放方法相比,我们的复合缩放方法精度进步了。

6.2 ImageNet Results for EfficientNet

我们采用了和MnasNet相似的设置对我们的EfficientNet模型进行训练:


  • 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;



5.4 Transfer Learning Results for EfficientNet



7 EfficientNet网络布局详解

7.1 共有的布局

EfficientnetB0~B7的网络布局的头都是Stem,网络布局的尾都是Final Layers,如下图所示

EfficientnetB0~B7的Stem后面都包含7个blocks,每个blocks都包含三种sub-blocks。从 EfficientNetB0 到 EfficientNetB7,这些blocks的sub-blocks数量不断增长。

可以看到


  • sub-block1中包含了Module1、Module3、Module4
  • sub-block2中包含了Module2、Module3、Module4
  • sub-block3中包含了Module2、Module3、Module5
其中


  • Module1是sub-blocks1的starting point
  • Module2是sub-blocks2和sub-blocks3的starting point
  • Module3是所有sub-blocks1-3的skip-connection
  • Module4用于组合starting point和skip-connection
  • Module5每个sub-blocks通过跳过连接与其前一个sub-blocks相连,并使用此模块将它们组合在一起。
Module1、Module2、Module3、Module4、Module5的布局示例图如下

7.2 EfficientNet系列布局表现图

EfficientNet-B0

留意:下面表现图中Module1其实是sub-block1,Module2其实是sub-block2,Module3其实是sub-block3
留意:下面表现图中Module1其实是sub-block1,Module2其实是sub-block2,Module3其实是sub-block3
留意:下面表现图中Module1其实是sub-block1,Module2其实是sub-block2,Module3其实是sub-block3

EfficientNet-B1

留意:下面表现图中Module1其实是sub-block1,Module2其实是sub-block2,Module3其实是sub-block3
留意:下面表现图中Module1其实是sub-block1,Module2其实是sub-block2,Module3其实是sub-block3
留意:下面表现图中Module1其实是sub-block1,Module2其实是sub-block2,Module3其实是sub-block3

EfficientNet-B2

留意:下面表现图中Module1其实是sub-block1,Module2其实是sub-block2,Module3其实是sub-block3
留意:下面表现图中Module1其实是sub-block1,Module2其实是sub-block2,Module3其实是sub-block3
留意:下面表现图中Module1其实是sub-block1,Module2其实是sub-block2,Module3其实是sub-block3
它的布局与上述模型EfficientNet-B1雷同,唯一的区别是特征图(通道)的数量差别,从而增长了参数的数量。

EfficientNet-B3

留意:下面表现图中Module1其实是sub-block1,Module2其实是sub-block2,Module3其实是sub-block3
留意:下面表现图中Module1其实是sub-block1,Module2其实是sub-block2,Module3其实是sub-block3
留意:下面表现图中Module1其实是sub-block1,Module2其实是sub-block2,Module3其实是sub-block3

EfficientNet-B4

留意:下面表现图中Module1其实是sub-block1,Module2其实是sub-block2,Module3其实是sub-block3
留意:下面表现图中Module1其实是sub-block1,Module2其实是sub-block2,Module3其实是sub-block3
留意:下面表现图中Module1其实是sub-block1,Module2其实是sub-block2,Module3其实是sub-block3

EfficientNet-B5

留意:下面表现图中Module1其实是sub-block1,Module2其实是sub-block2,Module3其实是sub-block3
留意:下面表现图中Module1其实是sub-block1,Module2其实是sub-block2,Module3其实是sub-block3
留意:下面表现图中Module1其实是sub-block1,Module2其实是sub-block2,Module3其实是sub-block3

EfficientNet-B6

留意:下面表现图中Module1其实是sub-block1,Module2其实是sub-block2,Module3其实是sub-block3
留意:下面表现图中Module1其实是sub-block1,Module2其实是sub-block2,Module3其实是sub-block3
留意:下面表现图中Module1其实是sub-block1,Module2其实是sub-block2,Module3其实是sub-block3

EfficientNet-B7

留意:下面表现图中Module1其实是sub-block1,Module2其实是sub-block2,Module3其实是sub-block3
留意:下面表现图中Module1其实是sub-block1,Module2其实是sub-block2,Module3其实是sub-block3
留意:下面表现图中Module1其实是sub-block1,Module2其实是sub-block2,Module3其实是sub-block3

结论

很容易看出所有模型之间的差别,区别在于它们逐渐增长了sub-block的数量。下表列出了 EfficientNet-B0 中卷积操作的内核大小以及分辨率、通道和层数。

推荐阅读

https://towardsdatascience.com/complete-architectural-details-of-all-efficientnet-models-5fd5b736142

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

羊蹓狼

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表