EfficientNet 簡介


EfficientNet

單獨適當增大深度、寬度或分辨率都可以提高網絡的精確性,但隨着模型的增大,其精度增益卻會降低。此外,這三個維度並不是獨立的(如:高分辨率圖像需要更深的網絡來獲取更細粒度特征等),需要我們協調和平衡不同尺度的縮放,而不是傳統的一維縮放。EfficientNet 的設想就是能否設計一個標准化的卷積網絡擴展方法,既可以實現較高的准確率,又可以充分的節省算力資源。其通過 NAS(Neural Architecture Search)技術來搜索網絡的圖像輸入分辨率 r,網絡的深度 depth 以及 channel 的寬度 width 三個參數的合理化配置。
image

  • 增加網絡的深度 depth 能夠得到更加豐富、復雜的特征並且能夠很好的應用到其它任務中。但網絡的深度過深會面臨梯度消失,訓練困難的問題
  • 增加網絡的 width 夠獲得更高細粒度的特征並且也更容易訓練,但對於 width 很大而深度較淺的網絡往往很難學習到更深層次的特征
  • 增加輸入網絡的圖像分辨率能夠潛在地獲得更高細粒度的特征模板,但對於非常高的輸入分辨率,准確率的增益也會減小。並且大分辨率圖像會增加計算量

\[\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} \]

\(F_i^{L_i}\) 表示在 \(stage^{(i)}\)\(F_i\) 被重復執行了 \(L_i\) 次,X 表示輸入 \(stage^{(i)}\) 的特征矩陣,其維度是 \(<H_i,W_i,C_i>\)

為了探究 d, r, w 這三個因子對最終准確率的影響,則將 d, r, w 加入到公式中,我們可以得到抽象化后的優化問題

\[\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 用來縮放深度 \(\hat{L_i}\)\(r\) 用來縮放分辨率即影響 \(\hat{H_i}\)\(\hat{W_i}\)\(\omega\) 用來縮放特征矩陣的 channel 即 \(\hat{C_i}\)

接着作者又提出了一個混合縮放方法 ( compound scaling method) 在這個方法中使用了一個混合因子 ϕ 去統一的縮放 width,depth,resolution 參數,具體的計算公式如下:

\[\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} \]

:FLOPs(理論計算量)=> depth 翻倍,也翻倍(一次);width 或 resolution 翻倍,則翻四倍(平方)。總的FLOPs倍率可以用近似用 \((\alpha, \beta^2, \gamma^2)^\phi\) 來表示,當限制 \(\alpha \cdot \beta^2 \cdot \gamma^2 \approx 2\) 時,對於任意一個 \(\phi\) 而言 FLOPs 相當增加了 \(2^{\phi}\) 倍。對於不同的基准網絡搜索出的 \(\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。
image

MBConv 結構

image

如圖所示,MBConv 結構主要由一個 1x1 的普通卷積(升維作用),一個 kxk 的 Depthwise Conv 卷積。k 的具體值主要有 3x3 和 5x5 兩種情況,一個 SE 模塊,一個 1x1 的普通卷積(降維作用),一個 Droupout 層構成

  • 第一個升維的 1x1 卷積層,它的卷積核個數是輸入特征矩陣 channel 的 n 倍,n ∈
  • 當 n = 1 時,不要第一個升維的 1x1 卷積層,即 Stage2 中的 MBConv 結構都沒有第一個升維的 1x1 卷積層?
  • 僅當輸入 MBConv 結構的特征矩陣與輸出的特征矩陣 shape 相同時才存在 shortcut 連接
  • 在源碼實現中只有使用 shortcut 的時候才有 Dropout 層
Model input_size width_coefficient depth_coefficient drop_connect_rate dropout_rate
EfficientNetB0 224x224 1.0 1.0 0.2 0.2
EfficientNetB1 240x240 1.0 1.1 0.2 0.2
EfficientNetB2 260x260 1.1 1.2 0.2 0.3
EfficientNetB3 300x300 1.2 1.4 0.2 0.3
EfficientNetB4 380x380 1.4 1.8 0.2 0.4
EfficientNetB5 456x456 1.6 2.2 0.2 0.4
EfficientNetB6 528x528 1.8 2.6 0.2 0.5
EfficientNetB7 600x600 2.0 3.1 0.2 0.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卷積


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM