EfficientNet 論文閱讀

李謦伊
謦伊的閱讀筆記
10 min readDec 29, 2020

Google 於 2019 年提出了一個新的網路縮放方法,使用複合係數 (compound coefficient) 均勻地縮放網路深度、寬度、圖像解析度 (resolution),深度就是指網路的層數,寬度是指通道數,解析度是指輸入的圖像大小。此外,Google 使用 NAS (neural architecture search) 開發一個新的 baseline Network,然後擴展為一系列的模型: EfficientNet-B0 ~ EfficientNet-B7

📝 Paper: https://arxiv.org/abs/1905.11946

🔍 官方 github: https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet

本文將要來介紹 EfficientNet 和其使用的網路縮放方法

首先來看一下 EfficientNet 與其他模型的比較圖~ 由下圖可以看到 EfficientNet 的表現真的非常驚人,與之前的 SOTA 模型 GPipe 相比提高了 0.1 的準確率,但卻少了8.4倍的參數量

接著就來介紹作者提出的新方法 — 複合模型縮放 (Compound Model Scaling)

Problem Formulation

首先將網路公式化,假設整個卷積神經網路為 N,則第 i 層表示為 Yi = Fi(Xi),其中 Y 為輸出、X為輸入

令 N 卷積網路由 k 個卷積層組成,則可以表示為

在實際網路中,通常會將相同架構的卷積層劃分為一個 stage,因此可以將 N 表示如下,其中 i 為 stage index、Fi^Li 表示為第 i stage 的卷積層 Fi 重複 Li 次、<Hi, Wi, Ci> 為輸入圖像的 shape

接著嘗試在固定住 Fi 的情況下進行模型縮放,即是擴展網路深度 (Li)、寬度 (Ci)、圖像解析度 (Hi, Wi),但在每一層中都搜索 Li、Ci、Hi、Wi,還是有非常大的搜索空間,因此作者限制了所有層都以同樣的比例進行縮放

然後在給定的資源下 (記憶體與計算量),最大化模型的準確率,優化的目標公式如下,其中 d, w, r 分別為深度、寬度、解析度的係數,F^, L^, H^, W^, C^ 為下圖表1的 EfficientNet-B0 baseline network 的預定義參數

縮放維度 (Scaling Dimensions)

由於以上優化目標公式 (即問題2) 的難點在於最佳的 d, w, r 互相依賴且在不同資源限制下會改變其值,因此大部分的 CNN 都是在其中一個維度上進行縮放

  • Depth (d)

改變網路深度是許多 CNN 常用的方法,因為最直觀的想法就是更深的網路可以獲取到更豐富的特徵,從而得到更好的效果。但因梯度消失容易導致深層網路難以訓練,雖然 Resnet 的 skip connection 結構以及 Batch Normalization 能夠緩解這個問題,但在觀察中發現深層網路的增益準確度 (accuracy gain) 會減少,觀察結果顯示於下圖3

  • Width (w)

縮放網路寬度通常使用在小型網路上,因為更寬的網路能夠捕捉到更細粒度 (fine-grained) 的特徵且較容易訓練,但在觀察中發現非常寬、深度卻很淺的網路難以獲取更高層的特徵,以致於在某種程度下準確度已達到飽和狀態,觀察結果顯示於下圖3

  • Resolution (r)

從過往的論文中可得知 CNN 藉由更高解析度的輸入圖像中獲取更細粒度的 pattern 而得到更好的準確率,但在觀察中發現對於非常高的解析度圖像輸入的增益準確度會減少,觀察結果顯示於下圖3 ,其中 r = 1.0表示圖像解析度為 224x224, r = 2.5表示解析度為 560x560

在這些觀察中,作者得到一個結論: 雖然提高網路深度、寬度、解析度都能夠提升準確率,但是在較大的模型中增益準確度會減少

複合縮放 (Compound Scaling)

在剛剛的觀察與結論能夠了解到網路深度、寬度、解析度是相互影響的,因此作者認為應該要同時調整這三種縮放方法。下圖4 為在不同網路深度、解析度下寬度縮放的準確度比較,從圖中的藍色線 (d=1, r=1) 可以看到準確率很快就飽和了,而在紅色線 (d=2, r=1.3) 可以看到在相同的 FLPOS 下能實現更高的準確率

在以上的觀察中,作者又得到了一個結論: 為了追求更高的準確率,平衡網路深度、寬度、解析度是很重要的關鍵之一,而在之前的論文中也有其他作者嘗試這個方法,但都是使用手動調整,過程較為繁瑣

作者使用一組固定的縮放係數 (就是複合係數 ϕ) 將網路模型均勻地縮放,此超參數須自己定義,是用於控制能使用多少資源在模型縮放上。例如: 計算資源為 2^N 倍,則將網路深度、寬度、圖像解析度分別增加為 α^N、β^N、γ^N 倍,其中 α、β、γ 是對小模型進行 small grid search 而決定的常數。下圖就是各種模型伸縮的方式 (a、b、c、d) 以及作者的方法 (e)

該研究發現平衡這三種縮放方法能夠獲得更好的性能,因為他們之間會有相互影響: 對於解析度高的圖像,使用更深的網路、獲取更大的感受野,能夠有更好的效果,同時增加網路寬度可以得到更細粒度的特徵。

縮放公式如下,其中 α、β、γ是對小模型進行 small grid search 而決定的常數

由上式可看到 FLOPS 與 d, w², r² 成正比,因此網路縮放後會增加 (α², β², γ²)^ ϕ 的 FLOPS,所以作者限制 α² ∙ β² ∙ γ² ≈ 2

模型架構

作者受 MnasNet 的啟發,利用多目標神經結構搜索產生了高效能的模型 EfficientNet-B0,使用的搜索空間與 MnasNet 相同,但優化目標稍有不同: MnasNet 是優化延遲,而 EfficientNet 則是優化 FLOPS,優化目標公式如下,其中 ACC 為準確度、m 為模型、T 為目標 FLOPS、w= -0.07 為一個超參數,用來控制準確度和 FLOPS 之間的權衡

📝 MnasNet paper: https://arxiv.org/abs/1807.11626

🔍 MnasNet 介紹可參考:

下表 1 是 EfficientNet-B0 的架構,類似於 MnasNet,因為使用相同的搜索空間,但 EfficientNet 的目標 FLOPS 較大 (400M),主要 module 為 MBConv (就是 MobileNetv2 的 inverted bottleneck),並添加 squeeze-and-excitation 進行優化

📝 Squeeze-and-Excitation Networks (SENet) paper: https://arxiv.org/abs/1709.01507

🔍 SENet介紹: https://zhuanlan.zhihu.com/p/32702350

下圖是 SENet Block 結構,Ftr 是傳統的卷積運算,接著對輸出的卷積層 U 做 Global Average Pooling (指 Fsq(.),稱為 Squeeze),將空間的訊息壓縮平均為一個值。輸出的 1x1xC 再經過兩個全連接層 (指 Fex(., W),稱為 Excitation),activation 使用 Sigmoid 限制輸出值範圍在 0~1 之間,最後將這個值作為 scale 乘以 U 的 C 個通道上,作為下一次的輸入。如此一來,可以通過控制 scale 來增強重要的特徵、減弱不重要的特徵。

SENet Block

接著以 EfficientNet-B0 為基礎,使用複合縮放方法擴展了一系列的 EfficientNet-B1 ~ EfficientNet-B7,縮放方式有以下兩步驟:

1. 固定 ϕ = 1,根據上面提到的公式 2, 3 對 α、β、γ 進行小網格的搜索。作者發現在 α² ∙ β² ∙ γ² ≈ 2 的限制條件下,EfficientNet-B0 的最佳值是 α=1.2, β=1.1, γ=1.15

2. 固定 α、β、γ,藉由公式 3 使用不同的 ϕ 來擴展網路模型,產生 EfficientNet-B1 ~ EfficientNet-B7

之所以先在小型網路模型上進行搜索再對其他模型使用相同的比例係數是為了解決搜索成本問題。

實驗結果

作者在 ImageNet 上使用與 MnasNet 類似的訓練設置: RMSProp optimizer with Decay=0.9、momentum=0.9、batch norm momentum=0.99、weight decay=1e-5、initial learning rate=0.256 (於每 2.4 epochs 下降 0.97)、Swish activationAutoAugment (基於搜索的自動化數據增強方法)、stochastic depth with survival probability=0.8 (在訓練過程中,隨機丟棄一些卷積層)

此外,更大的模型需要更多的正則化,因此採用線性增加 dropout rate,從 EfficientNet-B0 為 0.2 至 EfficientNet-B7 為 0.5

下圖為 EfficientNet 的 Performance,可以看出 EfficientNet 比其他模型的準確度來的更高,並且參數量使用也少了好幾倍。

作者將複合縮放方法應用於 MobileNets、ResNet,都提高了所有模型的準確度,證實了該方法對於既有模型也是有效的。

此外,也比較了其他單維的縮放方法能夠提高 2.5% 準確率。

在一些常用的 Transfer Learning 數據集上評估 EfficientNet,與其他模型相比獲得了更高的準確率並且使用的參數量卻更少。

--

--