EfficientNet:模型设计新范式

Author Avatar
YaHei 10月 30, 2019

唔~2019年的图像特征提取方面似乎有了可喜的发展,大家不再盲目地堆大模型,而是寻找更加高效的特征提取结构,在显著减小参数量和计算量的同时模型的表现还能得到提升。同时我们可以看到深度可分离卷积及其变种几乎已经成为主流——

接下来我将分三次分别介绍今年Google Brain的几篇思路清奇的论文,首先是《EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks(2019ICML)》。
该论文的主要贡献在于简化模型缩放流程,统合了宽度、深度、分辨率三个维度的缩放,建立起一个简单有效的联系

模型缩放

在设计好模型结构的情况下,我们通常可以通过对模型的缩放,以增大模型的大小来换取模型表现的提升,或以牺牲模型表现为代价换取模型大小的减小。最常用的缩放维度有三个——深度、宽度和输入分辨率

  • 深度
    • 更深的网络往往能提取到更佳丰富和复杂的特征,并且有更强的泛化能力
    • 但深层网络存在训练难的问题,尽管shortcut、BN等技术缓解了这一问题,但随着网络的加深边际收益依旧会明显变小
    • 比如ResNet18、ResNet34、ResNet50、ResNet101、ResNet152,其数字代表的是模型中卷积层和全连接层数量(不考虑shortcut上用于downsample的卷积);VGG11、VGG13、VGG16、VGG19,其数字代表的是模型中卷积层和全连接层数量——这是一种典型的深度缩放
  • 宽度
    • 更宽的网络往往能提取更细粒度的特征,并且也更容易训练(同时足够宽的网络能够容许Dropout和BN技术兼容使用,比如WideResNet)
    • 比如MobileNet1.0、MobileNet0.75、MobileNet0.5、MobileNet0.25,其数字代表的是模型中卷积通道数量的缩放因子,除此之外还有常见的WideResNet,这是一种典型的宽度缩放
  • 输入分辨率缩放更为常见,通过增加输入图片的尺寸,可以保留更多信息,从而提升模型的表现
  • 除此之外,下采样策略也是一种缩放维度,提前下采样可以缩小模型,反之则会增大模型
    • 下采样策略可以看作更细粒度的输入分辨率缩放,它控制的是中间特征图的分辨率而非简单的模型输入分辨率
    • 比如FD-MobileNet采用快速下采样策略并提升模型宽度,在保持模型大小几乎不变的情况下提高模型的特征提取能力

论文作者做了简单的实验,表明单一放大某一因素,其边际收益是不断减小的——
(其中,w, d, r分别表示宽度(Width)、深度(Depth)、分辨率(Resolution)的缩放因子)

混合缩放

此前已经有其他论文(如《Searching for Activation Functions(2017)》和《Regularized Evolution for Image Classifier Architecture Search(2019AAAI)》)讨论过多个缩放维度混合的模型缩放策略,而本文则是为深度、宽度、输入分辨率的缩放建立一个简单但有效的联系,从而简化缩放因子的选取过程。
其实思路非常简单,首先定义这三个缩放因子为$d$, $w$, $r$,并且让他们同步增长
$$
d = \alpha^\phi \\
w = \beta^\phi \\
r = \gamma^\phi
$$
那么此时模型的计算量会增长为大约原来的$(\alpha \cdot \beta^2 \cdot \gamma^2) ^ \phi$倍;
为了简单起见,作者约束了$\alpha \cdot \beta^2 \cdot \gamma^2 \approx 2$,计算量随$\phi$增长为原来的$2^\phi$倍,这样一来只需要找到合适的$\alpha, \beta, \gamma$,然后调整$\phi$的值就可以实现简单的混合缩放。

EfficientNet模型设计

在上述基础上,作者提出了一种新的模型设计范式,并得到了EfficientNet系列模型——

  1. 用NAS搜索出符合预期大小的一个小模型,这里作者设定了计算量目标为400MFLOPS,于是搜出了一个跟MNasNet类似的小模型B0

    这里的Operator沿用了MNasNet的命名方式,MBConv1指的是MobileNetv1的原版深度可分离卷积,MBConv6指的是MobileNetv2的反残差结构,不过作者在论文中指出这里使用的是带SE模块的反残差结构
  2. 接下来通过网格搜索,找出满足$\alpha \cdot \beta^2 \cdot \gamma^2 \approx 2$的最优超参$\alpha, \beta, \gamma$,进而得到B1
    如作者搜索出来的结果为$\alpha=1.2, \beta=1.1, \gamma=1.15$,此时B1计算量约为800MFLOPS
  3. 按照混合缩放的公式,逐步增加$\phi$值,依次得到各种规模下的B2-B7

Tensorflow-EfficientNet的预设值跟论文描述似乎有些细微差别:

Model w d r dropout rate
B0 1.0 1.0 224 0.2
B1 1.0 1.1 240 0.2
B2 1.1 1.2 260 0.3
B3 1.2 1.4 300 0.3
B4 1.4 1.8 380 0.4
B5 1.6 2.2 456 0.4
B6 1.8 2.6 528 0.5
B7 2.0 3.1 600 0.5

由此设计出来的模型有着相当惊人的特征提取效率,而且小模型的搜索空间比较小,更容易搜索出最优模型,搭配合理的模型缩放,放大后的模型甚至能比直接搜索的大模型更加有效——