EfficientNet 简介

EfficientNet

单独适当增大深度、宽度或分辨率都可以提高网络的精确性,但随着模型的增大,其精度增益却会降低。此外,这三个维度并不是独立的(如:高分辨率图像需要更深的网络来获取更细粒度特征等),需要我们协调和平衡不同尺度的缩放,而不是传统的一维缩放。EfficientNet 的设想就是能否设计一个标准化的卷积网络扩展方法,既可以实现较高的准确率,又可以充分的节省算力资源。其通过 NAS(Neural Architecture Search)技术来搜索网络的图像输入分辨率 r,网络的深度 depth 以及 channel 的宽度 width 三个参数的合理化配置。
在这里插入图片描述

  • 增加网络的深度 depth 能够得到更加丰富、复杂的特征并且能够很好的应用到其它任务中。但网络的深度过深会面临梯度消失,训练困难的问题
  • 增加网络的 width 够获得更高细粒度的特征并且也更容易训练,但对于 width 很大而深度较浅的网络往往很难学习到更深层次的特征
  • 增加输入网络的图像分辨率能够潜在地获得更高细粒度的特征模板,但对于非常高的输入分辨率,准确率的增益也会减小。并且大分辨率图像会增加计算量

第 i 个 层 的 操 作 可 以 看 成 映 射 函 数 : Y i = F i ( X i ) 若 网 络 N 由 k 个 层 组 成 的 , 则 可 表 示 为 : N = F k ⨀ . . . ⨀ F 2 ⨀ F 1 ( X 1 ) = ⨀ j = 1... k F i ( X 1 ) 论 文 中 对 整 个 网 络 的 运 算 进 行 抽 象 : N = ⨀ i = 1... s F i L i ( X < H i , W i , C i > ) \begin{aligned} &第 i 个层的操作可以看成映射函数:Y_i = F_i(X_i) \\ &若网络 N 由 k 个层组成的,则可表示为:N = F_k \bigodot ... \bigodot F_2 \bigodot F_1(X_1) = \bigodot_{j=1...k}F_i(X_1) \\ &论文中对整个网络的运算进行抽象:N = \bigodot_{i=1...s}F_i^{L_i}(X_{<H_i, W_i, C_i>}) \\ \end{aligned} iYi=Fi(Xi)NkN=Fk...F2F1(X1)=j=1...kFi(X1)N=i=1...sFiLi(X<Hi,Wi,Ci>)

F i L i F_i^{L_i} FiLi 表示在 s t a g e ( i ) stage^{(i)} stage(i) F i F_i Fi 被重复执行了 L i L_i Li 次,X 表示输入 s t a g e ( i ) stage^{(i)} stage(i) 的特征矩阵,其维度是 < H i , W i , C i > <H_i,W_i,C_i> <Hi,Wi,Ci>

为了探究 d, r, w 这三个因子对最终准确率的影响,则将 d, r, w 加入到公式中,我们可以得到抽象化后的优化问题

max ⁡ d , w , r A c c u r a c y ( N ( d , w , r ) ) s . t . N ( d , w , r ) = ⨀ i = 1... s F i d ⋅ L i ^ ^ ( X < r ⋅ H i ^ , r ⋅ W i ^ , ω ⋅ C i ^ > ) M e m o r y ( N ) ≤ t a r g e t _ m e m o r y F L O P S ( N ) ≤ t a r g e t _ f l o p s \begin{aligned} &\max_{d, w, r}Accuracy(N(d, w, r))\\ &s.t.\quad 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}, \omega \cdot \hat{C_i}>}) \\ &Memory(N) \leq target\_memory \\ &FLOPS(N) \leq target\_flops \\ \end{aligned} d,w,rmaxAccuracy(N(d,w,r))s.t.N(d,w,r)=i=1...sFidLi^^(X<rHi^,rWi^,ωCi^>)Memory(N)target_memoryFLOPS(N)target_flops
:d 用来缩放深度 L i ^ \hat{L_i} Li^ r r r 用来缩放分辨率即影响 H i ^ \hat{H_i} Hi^ W i ^ \hat{W_i} Wi^ ω \omega ω 用来缩放特征矩阵的 channel 即 C i ^ \hat{C_i} Ci^

接着作者又提出了一个混合缩放方法 ( compound scaling method) 在这个方法中使用了一个混合因子 ϕ 去统一的缩放 width,depth,resolution 参数,具体的计算公式如下:
d e p t h : d = α ϕ w i d t h : w = β ϕ r e s o l u t i o n : r = γ ϕ s . t . α ⋅ β 2 ⋅ γ 2 ≈ 2 α ≥ 1 , β ≥ 1 , γ ≥ 1 \begin{aligned} &depth: d = \alpha^\phi \\ &width: w = \beta^\phi \\ &resolution: r = \gamma^\phi \\ &s.t. \quad \alpha \cdot \beta^2 \cdot \gamma^2 \approx 2 \qquad \alpha \geq1, \beta \geq 1, \gamma \geq 1 \\ \end{aligned} depth:d=αϕwidth:w=βϕresolution:r=γϕs.t.αβ2γ22α1,β1,γ1
:FLOPs(理论计算量)=> depth 翻倍,也翻倍(一次);width 或 resolution 翻倍,则翻四倍(平方)。总的FLOPs倍率可以用近似用 ( α , β 2 , γ 2 ) ϕ (\alpha, \beta^2, \gamma^2)^\phi (α,β2,γ2)ϕ 来表示,当限制 α ⋅ β 2 ⋅ γ 2 ≈ 2 \alpha \cdot \beta^2 \cdot \gamma^2 \approx 2 αβ2γ22 时,对于任意一个 ϕ \phi ϕ 而言 FLOPs 相当增加了 2 ϕ 2^{\phi} 2ϕ 倍。对于不同的基准网络搜索出的 α , β , γ \alpha, \beta, \gamma α,β,γ 也不一定相同。

网络结构

下表为EfficientNet-B0的网络框架(B1-B7就是在B0的基础上修改 Resolution、Channels 和 Layers),第一个 Stage 就是一个卷积核大小为 3x3 步距为 2 的普通卷积层(包含 BN 和激活函数 Swish),Stage2~Stage8 都是在重复堆叠 MBConv 结构(最后一列的 Layers 表示该 Stage 重复 MBConv 结构多少次),而 Stage9 由一个普通的 1x1 的卷积层(包含 BN 和激活函数 Swish)、一个平均池化层和一个全连接层组成。表格中每个 MBConv 后会跟一个数字 1 或 6,这里的 1 或 6 就是倍率因子 n 即 MBConv 中第一个 1x1 的卷积层会将输入特征矩阵的 channels 扩充为 n 倍,其中 k3x3 或 k5x5 表示 MBConv 中 Depthwise Conv 所采用的卷积核大小。Channels 表示通过该 Stage 后输出特征矩阵的 Channels。
在这里插入图片描述

MBConv 结构

在这里插入图片描述
如图所示,MBConv 结构主要由一个 1x1 的普通卷积(升维作用),一个 kxk 的 Depthwise Conv 卷积。k 的具体值主要有 3x3 和 5x5 两种情况,一个 SE 模块,一个 1x1 的普通卷积(降维作用),一个 Droupout 层构成

  • 第一个升维的 1x1 卷积层,它的卷积核个数是输入特征矩阵 channel 的 n 倍,n ∈ { 1 , 6 }
  • 当 n = 1 时,不要第一个升维的 1x1 卷积层,即 Stage2 中的 MBConv 结构都没有第一个升维的 1x1 卷积层?
  • 仅当输入 MBConv 结构的特征矩阵与输出的特征矩阵 shape 相同时才存在 shortcut 连接
  • 在源码实现中只有使用 shortcut 的时候才有 Dropout 层
Modelinput_sizewidth_coefficientdepth_coefficientdrop_connect_ratedropout_rate
EfficientNetB0224x2241.01.00.20.2
EfficientNetB1240x2401.01.10.20.2
EfficientNetB2260x2601.11.20.20.3
EfficientNetB3300x3001.21.40.20.3
EfficientNetB4380x3801.41.80.20.4
EfficientNetB5456x4561.62.20.20.4
EfficientNetB6528x5281.82.60.20.5
EfficientNetB7600x6002.03.10.20.5
  • width_coefficient 代表 channel 维度上的倍率因子,比如在 EfficientNetB0 中 Stage1 的 3x3 卷积层所使用的卷积核个数是 32,那么在 B6 中就是 32 × 1.8 = 57.6,接着取整到离它最近的 8 的整数倍即 56
  • depth_coefficient 代表 depth 维度上的倍率因子(仅针对Stage2到Stage8),比如在 EfficientNetB0 中 Stage7 的 \hat{L_i} = 4,那么在 B6 中就是 4 × 2.6 = 10.4 接着向上取整即 11
  • drop_connect_rate 是在 MBConv 结构中 dropout 层使用的 drop_rate
  • dropout_rate 是最后一个全连接层前的 dropout 层

补充:EfficientNetEfficientNet网络详解【一看就懂】EfficientNet详解。凭什么EfficientNet号称当今最强?Depthwise卷积与Pointwise卷积

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值