# EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks ###### tags: `Paper reading` `International Conference on Machine Learning, 2019` ## Paper Link #### [Click here](https://arxiv.org/pdf/1905.11946.pdf) --- ## Abstract & Introduction * 這篇論文作者重新思考和研究了ConvNets的scaling問題,是否存在一種原則性的方法縮放ConvNets,從而實現更高的accuracy和efficiency `傳統的三個方式:擴大輸入的depth or 擴大width or 擴大resolution` * 研究了model scaling並確定仔細平衡網絡depth, width, and resolution可以帶來更好的性能。 ![](https://i.imgur.com/ebKWRGH.png) <center>(a)基本模型&emsp;&emsp;(b)增加width&emsp;&emsp;(c)增加depth&emsp;&emsp;(d)增大resolution&emsp;&emsp;(e)EfficientNet </center> <center><small>(e)的depth, width, resolution均擴大了,但是擴大多少,是通過作者提出來的方法獲得的</small></center> --- ## Method ### Problem Formulation 1. 一個卷積網絡的某一層 可以被定義為:$Y_{i}=F_{i}(X_{i})$ * $F_{i}$是operator * $X_{i}$表示輸入的tensor,其形狀是$<H_{i}, W_{i}, C_{i}>$(這裡忽略了batch的維度) * $Y_{i}$是輸出的tensor。 2. 於是,一個卷積網絡$N$可以被表示成如下: $N = F_{k}⊙...⊙F_{2}⊙F_{1}(X_{1}) = ⊙_{j=1...k}F_{j}(X_{1})$ 3. 但在實際中,ConvNets通常被劃分為多個stage,每個stage中的所有層都具有相同的結構(例如ResNet,共有五個stage,除了第一層之外的每個stage的所有層都分別具有相同的捲積類型。)。因此,我們可以將ConvNet重新表示成如下形式:$N = ⊙_{i=1...s}{F_{i}^{L_{i}}}(X_{<H_{i}, W_{i}, C_{i}>})$ * $F_{i}^{L_{i}}$表示$F_{i}$層在第$i$階段重複$L_{i}$次 * ${<H_{i}, W_{i}, C_{i}>}$表示$i$層輸入tensor$X$的形狀 * $L_{i}$就是<mark>depth</mark>,$L_{i}$越大重複的卷積層越多,網路越深 $C_{i}$就是<mark>width</mark>,也就是channel數 $H_{i}$和$W_{i}$就是圖片的<mark>resolution</mark> 4. EfficientNet的想法是一個conv所有的卷積層必須通過相同的比例常數進行統一擴展 $\max\limits_{d, w, r}$&ensp;&ensp;$Accuracy(N(d, w, r))$ $s.t.$&ensp;&ensp;$N(d, w, r)=\odot_{i=1...s}\hat{F_{i}}^{d\cdot\hat{L_{i}}}(X_{<r\cdot\hat{H_{i}}, r\cdot\hat{W_{i}}, w\cdot\hat{C_{i}}>})$ $Memory(N)\le targetmemory$ $FLOPS(N)\le target flops$ ![](https://i.imgur.com/mq77Rri.png) * $d、w和r$分別表示網路depth、width和resolution的倍率 * $\hat{F_{i}}, \hat{L_{i}}, \hat{H_{i}}, \hat{W_{i}}, \hat{C_{i}}$ are predefined parameters in baseline network ``` FLOPS:floating point operations per second(計算速度)` FLOPs:floating point operations(計算量) ``` ### Scaling Dimensions #### Depth($d$) `layer` - ConvNets常用 `` - 更深的網絡可以獲得更豐富、更複雜的特徵。 - 由於梯度消失問題,更深層次的網絡也更難訓練。 - 雖然skip connections & batch normalization等可以緩解訓練問題,但非常深的網絡的準確度增益會減少`例如,ResNet-1000和ResNet-101有相似精度。` #### Width($w$) `channel` - 通常用於small size modle `Mobilenets, Mobilenetsv2, MnasNet` - 更寬的網絡往往能夠捕獲更細的特徵,並且更容易訓練。 - 極寬但淺的網絡往往難以捕獲更高級別的特徵。 #### Resolution($r$) - 使用更高Resolution的輸入圖像,ConvNets可以捕獲更細粒度的特徵。 ![](https://i.imgur.com/l1W4SNR.png) ` Observation 1 – Scaling up any dimension of network width, depth, or resolution improves accuracy, but the accuracy gain diminishes for bigger models ` ### Compound Scaling - depth, width,resolution的縮放尺寸不是獨立的。 * 更高resolution的圖像,應該相應的增加網絡depth,這樣較大的receptive fields可以幫助獲得包含高resolution圖像更多像素的特徵。同時,還應該增加網絡width,以便在高resolution圖像中捕獲具更多更細的特徵。 * 上述表明需要協調和平衡不同的縮放尺寸,而不是傳統的單維縮放。 `Observation 2 – 為了追求更好的準確性和效率,在 ConvNet 縮放過程中平衡網絡depth, width, and resolution的所有維度至關重要。 ` 作者這篇文章提出了一種新的compound scaling method(複合縮放方法),這種方法是通過一個複合係數 去統一縮放網絡的寬度,深度和分辨率,公式表示如下: ![](https://i.imgur.com/XPcijA7.png) - $\alpha, \beta, \gamma$是一組恆定係數 - 透過small grid search獲得 `一種調參手段` - 使用複合參數 $\emptyset$ 統一縮放網絡的寬度、深度與分辨率。 - $\emptyset$是自訂係數,用於控制有多少其他計算資源可用於模型縮放,而 $\alpha, \beta, \gamma$ 指定如何分別將這些額外資源分配給網絡depth, width, resolution。 ### EfficientNet Architecture ![](https://i.imgur.com/EaYfs82.png) 基於baseline EfficientNet-B0,使用上文提到的compound scaling方法來做模型縮放 - Step1:首先將$\emptyset$固定,假設有更多的可用計算資源了,根據之前的等式2和3對進行small grid search。最後,作者發現在$\alpha \cdot \beta^2 \cdot \gamma^2 \approx 2$的約束之下,EfficientNet-B0的最佳參數值為$\alpha=1.2 , \beta=1.1 , \gamma=1.15$。 - Step2:然後,再將$\alpha, \beta, \gamma$固定為step1中的到常數,並使用等式3,設置不同的$emptyset$,將EfficientNet-B0放大得到了EfficientNet-B1至B7(表2中有詳細信息)。 <mark>MBConv = [Mobilenet](https://hackmd.io/9zgA-x6lSTu2n5TrgS_mOQ?view)</mark> --- ## Experiments ### Results on ImageNet ![](https://i.imgur.com/h6JWH3V.png) ![](https://i.imgur.com/ZyOBIq3.png) 與之前的state of the art模型相比提高了 0.1 的準確率,但卻少了8.4倍的參數量