zoukankan      html  css  js  c++  java
  • EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks

    增加模型精度的方法有增加网络的深度,特征图的通道数以及分辨率(如下图a-d所示)。这篇文章研究了模型缩放,发现仔细平衡网络的深度、宽度和分辨率可以获得更好的性能(下图e)。在此基础上,提出了一种新的缩放方法,使用一个简单而高效的复合系数来均匀地标度深度/宽度/分辨率的所有维度,不仅取得了SOTA,而且参数更少,计算复杂度更低。

    1562578618653

    一个卷积层(i)可以定义为(Y_{i}=mathcal{F}_{i}left(X_{i} ight)),其中(mathcal{F}_{i})是操作符,(X_i)是输入张量,形状大小为(leftlangle H_{i}, W_{i}, C_{i} ight angle)(简单起见,没有引入batchsize),(Y_i)是输出张量,所以一个卷积网络(mathcal{N})可以表示为一系列层的组合:

    [mathcal{N}=mathcal{F}_{k} odot ldots odot mathcal{F}_{2} odot mathcal{F}_{1}left(X_{1} ight)=odot_{j=1 ldots k} mathcal{F}_{j}left(X_{1} ight) ]

    卷积神经网络(如resnet)通常是被分为多个stage的,一个stage的所有层共享相同的结构。因此,上述公式可以变换为:

    [mathcal{N}=igodot_{i=1 dots s} mathcal{F}_{i}^{L_{i}}left(X_{leftlangle H_{i}, W_{i}, C_{i} ight angle} ight) ]

    其中(mathcal{F}_{i}^{L_{i}})表示的是层(F_i)(stage) (i)重复了(L_i)次,(leftlangle H_{i}, W_{i}, C_{i} ight angle)是第(i)层的输入。根据上面的定义,这篇文章的目标可以抽象成如下公式:

    [egin{array}{l}{max _{d, w, r} quad operatorname{Accuracy}(mathcal{N}(d, w, r))} \ { ext {s.t.} quad mathcal{N}(d, w, r)=igoplus_{i=1 ldots s} hat{mathcal{F}}_{i}^{d cdot hat{L}_{i}}left(X_{leftlangle r cdot hat{H}_{i}, r cdot hat{W}_{i}, w cdot hat{C}_{i} ight angle} ight)} \ { ext { Memory }(mathcal{N}) leq ext { target-memory }} \ { ext { FLOPS }(mathcal{N}) leq ext { target flops }}end{array} ]

    搜索最优的(d, w, r),使精确度最高,并且参数量以及运算复杂度不超过目标量。

    网络深度越深,可以抓取更丰富更复杂的特征,泛化得更好,通道数和分辨率放大,可以抓取更精细化的特征,更好训练。通常是单一的缩放三个中的一个变量,单一扩展网络宽度、深度或分辨率的任何维度都可以提高精度,但是对于更大的模型,精度增益会降低。如下图所示:

    1562585589259

    文章观察到网络的深度,特征图的通道数以及分辨率三者是互相依赖的,比如,对于更高分辨率的图像而言,我们应该要提高网络深度,这样才会让更大的感受野帮网络在更大图像的更多像素中抓取到相似的特征,同时也应该提高通道数,抓取大图像的更精细的特征。同样,作者也用实验验证了这一点,如下图所示:

    1562585910776

    第一个基线网络(d=1.0, r=1.0)有18个卷积层,分辨率为224x224,而最后一个基线(d=2.0, r=1.3)有36层,分辨率为299x299。所以为了追求更高的精度和效率,在ConvNet缩放过程中平衡网络宽度、深度和分辨率的所有维度是至关重要的。

    现在来介绍作者提出的方法——复合缩放(compound scaling),该方法使用了一个复合参数(phi)有原则性地均匀缩放网络深度,宽度以及分辨率。如下公式如示:

    [egin{aligned} ext { depth: } d &=alpha^{phi} \ ext { } w &=eta^{phi} \ ext { resolution: } r &=gamma^{phi} \ ext { s.t. } alpha & cdot eta^{2} cdot gamma^{2} approx 2 \ & alpha geq 1, eta geq 1, gamma geq 1 end{aligned} ]

    (alpha, eta, gamma)皆为常量,可以在很小的栅格中进行搜索,(phi)可以由用户定义控制资源的缩放因子,加倍网络深度将加倍FLOPS,但加倍网络宽度或分辨率将使FLOPS增加四倍,所以这里的(eta, gamma)取的平方,保持三者对于FLOPS的权重是一样的。最终总的FLOPS等于(left(alpha cdot eta^{2} cdot gamma^{2} ight)^{phi}),即为(2^phi)

    复合缩放的方法分为两步:

    • 第一步:固定(phi)为1,这时候的网络(作者命名为EfficientNet-B0)不是很深,对这个网络利用公式2和3对(alpha, eta, gamma)进行搜索,找到最优值。
    • 第二步:固定(alpha, eta, gamma)为常数,使用不同(phi)的公式3放大EfficientNet-B0,依次得到EfficientNet-B1至B7。

    看似简单,但效果极佳,各个模型的性能表如下:

    1562587667169

    可以看到是又小又快,精度还高,很棒。

  • 相关阅读:
    Mycat 安全设置
    基于 HA 机制的 Mycat 高可用
    mycat中间件进行MySQL数据表的水平拆分
    mycat中间件进行MySQL数据库的垂直拆分
    mycat中间件进行MySQL的数据读写分离
    dubbo环境搭建--Windows
    分布式应用架构的发展演变RPC
    Java新特性--方法引用
    Java新特性-stream流
    Java新特性-四大函数式接口
  • 原文地址:https://www.cnblogs.com/fydeblog/p/11153857.html
Copyright © 2011-2022 走看看