EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks

原文地址:EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks

Pytorch实现:lukemelas/EfficientNet-PyTorch

集成地址:ZJCV/ZCls

摘要

Convolutional Neural Networks (ConvNets) are commonly developed at a fixed resource budget, and then scaled up for better accuracy if more resources are available. In this paper, we systematically study model scaling and identify that carefully balancing network depth, width, and resolution can lead to better performance. Based on this observation, we propose a new scaling method that uniformly scales all dimensions of depth/width/resolution using a simple yet highly effective compound coefficient. We demonstrate the effectiveness of this method on scaling up MobileNets and ResNet.

To go even further, we use neural architecture search to design a new baseline network and scale it up to obtain a family of models, called EfficientNets, which achieve much better accuracy and efficiency than previous ConvNets. In particular, our EfficientNet-B7 achieves state-of-the-art 84.3% top-1 accuracy on ImageNet, while being 8.4x smaller and 6.1x faster on inference than the best existing ConvNet. Our EfficientNets also transfer well and achieve state-of-the-art accuracy on CIFAR-100 (91.7%), Flowers (98.8%), and 3 other transfer learning datasets, with an order of magnitude fewer parameters. Source code is at this https URL.

设计卷积神经网络(ConvNets)通常基于固定的资源预算,如果有更多的资源可用,则可以放大以获得更好的精度。论文中我们系统地研究了模型的伸缩性,并且发现通过精心平衡网络的深度、宽度和分辨率可以获得更好的性能。基于这一观察,我们提出了一种新的缩放方法,使用一个简单而高效的复合系数来均匀缩放深度/宽度/分辨率。我们证明了这种方法在扩展MobileNets和ResNet上的有效性。

与此同时,我们使用神经架构搜索技术创建了一个新的基准网络,并将其放大以生成一个模型簇,称之为EfficientNets。该模型比以往网络具有更好的准确率和效率,特别是EfficientNet-B7在ImageNet上达到了最先进的84.3% top-1准确率,同时比现有最好的卷积网络小8.4倍,推理速度快6.1倍。EfficientNets在CIFAR-100(91.7%)、Flowers(98.8%)和其他3个迁移学习数据集上的迁移效果也很好,达到了最先进的准确率,而且参数少了一个数量级。源代码位于https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet。

简介

论文观察到以往卷积网络会通过放大某一个或者几个维度来获取更大更准确的模型,比如

  1. ResNet通过放大更多层数(深度)来扩展ResNet-18ResNet-200
  2. GPipe将基准模型放大到4倍实现了84.3% ImageNet准确率;
  3. 。。。

论文总结出放大维度包括了图像分辨率、深度和宽度,并且手动设计了一个复合放大公式(compound scaling method),能够完美的实现这些放大维度的平衡。

直观上来说,综合使用这些放大维度存在合理性:因为往往更大的图像分辨率就需要更深的模型来增加感受野,同时需要更多的通道数来捕获更大图像的细粒度特征。假定拥有\(2^{N}\)倍计算资源,那么简单的将

  • 网络深度放大到\(\alpha^{N}\)
  • 将网络宽度放大到\(\beta^{N}\)
  • 将图像大小放大到\(\gamma^{N}\)

其中\(\alpha\)\(\beta\)\(\gamma\)是在基准模型上通过网格搜索获取到的常量系数。论文还发现模型放大的效果严重依赖于基准模型设计,所以论文使用网络架构搜索算法开发了一个新的基准模型,并通过复合放大公式扩展成一个模型簇 - EfficientNets

相关

有相关研究证明网络宽度深度同等重要:

  • On the expressive power of deep neural networks. ICML, 2017.
  • Resnet with one-neuron hidden layers is a universal approximator. NeurIPS, pp. 61726181, 2018.
  • On the expressive power of overlapping architectures of deep learning. ICLR, 2018.
  • The expressive power of neural networks: A view from the width. NeurIPS, 2018.

复合模型缩放

问题定义

\(i\)层卷积神经网络计算:

\[ Y_{i} = F_{i} (X_{i}) \]

  • \(F_{i}\)表示算子;
  • \(Y_{i}\)表示输出大小;
  • \(X_{i}\)表示输入大小,张量形状为\(<H_{i}, W_{i}, C_{i}>^{1}\)
  • \(H_{i}\)\(W_{i}\)表示空间维度;
  • \(C_{i}\)表示通道维度。

卷积网络\(N\)可以看成是一组卷积层的复合计算:

\[ N = F_{k}\odot ... \odot F_{2}\odot F_{1}(X_{1})=\bigodot_{j=1...k}F_{j}(X_{1}) \]

通常情况下,会将卷积层分为几个阶段(stage),每个阶段的卷积层拥有相同的架构,所以上述复合计算可以重新定义如下:

\[ N=\bigodot_{i=1...s}F_{i}^{L_{i}}(X_{<H_{i}, W_{i}, C_{i}>}) \]

  • \(F_{i}^{L_{i}}\)表示在第\(i\)个阶段重复\(F_{i}\)层共\(L_{i}\)次;
  • \(<H_{i}, W_{i}, C_{i}>\)表示第\(i\)层的输入张量\(X\)大小;

对于传统的卷积网络设计,将重心放在如何实现更强性能的层架构\(F_{i}\);模型缩放策略尝试去扩展基准模型的长度(\(L_{i}\)),宽度(\(C_{i}\))以及分辨率\((H_{i}, W_{i})\)

寻找每层的\(L_{i}, C_{i}, H_{i}, W_{i}\)的配置仍旧是一个巨大的挑战,论文为了进一步缩小搜索空间,限制所有层统一按固定比例进行缩放。完整的优化问题可以归纳如下:

\[ \max_{d, w, r} Accuracy(N(d, w, r)) \]

\[ s.t. N(d, w, r) = \bigodot_{i=1...s}\hat{F}_{i}^{d\cdot \hat{L}_{i}}(X_{<r\cdot \hat{H}_{i}, r\cdot \hat{W}_{i}, r\cdot \hat{C}_{i}>}) \]

\[ Memory(N) \leq target\_memory \]

\[ FLOPS(N) \leq target\_flops \]

  • \(w, d, r\)分别是缩放网络宽度、深度和分辨率的系数;
  • \(\hat{F}_{i}, \hat{L}_{i}, \hat{H}_{i}, \hat{W}_{i}, \hat{C}_{i}\)是基准网络的相关参数。

单一缩放

选择合适的缩放维度存在两个难题:

  1. 系数\(d, w, r\)的优化相互依赖;
  2. 如何在不同资源限定下改变系数大小。

论文针对单一维度进行放大训练,发现单独放大任一维度(宽度、深度或者分辨率)均可以提升网络性能,但是放大模型越大,准确率增益会越小。

复合缩放

论文也实验了放大多个维度,发现在模型放大过程中合理的设置各个维度的放大,能够实现更好的结果。

论文提出了手动设计的复合放大策略,使用复合系数\(\phi\)来平衡各个维度的放大:

\[ depth: d = \alpha^{\phi } \]

\[ width: w = \beta^{\phi } \]

\[ resolution: r = \gamma^{\phi } \]

\[ s.t.\ \ \alpha\cdot \beta^{2}\cdot \gamma^{2} \approx 2 \]

\[ \alpha \geq 1, \beta \geq 1, \gamma \geq 1 \]

  • \(\alpha, \beta, \gamma\)通过网格搜索决定;
  • \(\phi\)用于控制可利用的计算资源。

通常来说,卷积算子的FLOPS\(d, w^{2}, r^{2}\)成比例关系。比如,加倍网络深度将加倍FLOPS,加倍网络宽度或者分辨率将增加4FLOPS。卷积运算通常在网络中占主导地位,所以上述复合缩放公式将等比例的近似增加\((\alpha\cdot \beta^{2}\cdot \gamma^{2})^{\phi}\)FLOPS。论文限定了\(\alpha\cdot \beta^{2}\cdot \gamma^{2}\approx 2\),所以近似增加了\(2^{\phi}\)FLOPS

EfficientNet架构

论文通过神经架构搜索算法创造了一个新的基准模型 - EfficientNet-B0。它主要由反向残差块MBConv构成,同时增加了SE注意力层。整体架构如下:

首先固定\(\phi=1\),假定2倍计算资源以及\(\alpha\cdot \beta^{2}\cdot \gamma^{2} \approx 2\)的条件下,对\(\alpha, \beta, \gamma\)进行网格搜索,获取到最佳值为\(\alpha=1.2, \beta=1.1, \gamma=1.15\)。然后通过扩展不同计算资源\(\phi\),分别获取到B1 - B7网络。

实验

ResNet/MobileNet

论文首先针对已存在的卷积网络ResNet/MobileNet进行了复合放大,通过实验证明同时放大多个维度确实可以更好的提高模型性能

EfficientNet

ImageNet上训练EfficientNet

  • 优化器:RMSProp,衰减0.9,动量0.9
  • 批量归一化:动量0.99
  • 权重衰减:1e-5
  • 学习率:初始0.256,每2.4轮衰减0.97
  • 激活函数:SiLU(Swish-1)
  • 增强:AutoAugment
  • 随机深度(stochastic depth):存活率0.8
  • 随机失活:线性缩放,从B00.2B70.5

论文还在训练集中随机采集了25k图像作为minival set,在minival set上执行early stop。最后在验证集上进行精度验证。

论文同时验证了模型推理时间的高效:

迁移学习

小结

论文重点:

  1. 提出复合放大策略;
  2. 搜索出EfficientNet-B0架构;
  3. 证明了轻量级算子MBConv也能够扩展成大模型。