date: 2019/10/30


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

imagenet_sota.png


接下来我将分三次分别介绍今年Google Brain的几篇思路清奇的论文,首先是《EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks(2019ICML)》。

该论文的主要贡献在于简化模型缩放流程,统合了宽度、深度、分辨率三个维度的缩放,建立起一个简单有效的联系


模型缩放


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



论文作者做了简单的实验,表明单一放大某一因素,其边际收益是不断减小的——

(其中,w, d, r分别表示宽度(Width)、深度(Depth)、分辨率(Resolution)的缩放因子)

scales.png


混合缩放


此前已经有其他论文(如《Searching for Activation Functions(2017)》和《Regularized Evolution for Image Classifier Architecture Search(2019AAAI)》)讨论过多个缩放维度混合的模型缩放策略,而本文则是为深度、宽度、输入分辨率的缩放建立一个简单但有效的联系,从而简化缩放因子的选取过程。

其实思路非常简单,首先定义这三个缩放因子为d, w, r,并且让他们同步增长

那么此时模型的计算量会增长为大约原来的倍;

为了简单起见,作者约束了,计算量随增长为原来的倍,这样一来只需要找到合适的,然后调整的值就可以实现简单的混合缩放。


EfficientNet模型设计


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


  1. 用NAS搜索出符合预期大小的一个小模型,这里作者设定了计算量目标为400MFLOPS,于是搜出了一个跟MNasNet类似的小模型B0
    EfficientNetB0.png
    这里的Operator沿用了MNasNet的命名方式,MBConv1指的是MobileNetv1的原版深度可分离卷积,MBConv6指的是MobileNetv2的反残差结构,不过作者在论文中指出这里使用的是带SE模块的反残差结构
  2. 接下来通过网格搜索,找出满足的最优超参,进而得到B1
    如作者搜索出来的结果为,此时B1计算量约为800MFLOPS
  3. 按照混合缩放的公式,逐步增加值,依次得到各种规模下的B2-B7


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

Modelwdrdropout rate
B01.01.02240.2
B11.01.12400.2
B21.11.22600.3
B31.21.43000.3
B41.41.83800.4
B51.62.24560.4
B61.82.65280.5
B72.03.16000.5


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

compare_graph.png

compare_table.png