# 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可以帶來更好的性能。

<center>(a)基本模型  (b)增加width  (c)增加depth  (d)增大resolution  (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}$  $Accuracy(N(d, w, r))$
$s.t.$  $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$

* $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可以捕獲更細粒度的特徵。

`
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(複合縮放方法),這種方法是通過一個複合係數 去統一縮放網絡的寬度,深度和分辨率,公式表示如下:

- $\alpha, \beta, \gamma$是一組恆定係數
- 透過small grid search獲得 `一種調參手段`
- 使用複合參數 $\emptyset$ 統一縮放網絡的寬度、深度與分辨率。
- $\emptyset$是自訂係數,用於控制有多少其他計算資源可用於模型縮放,而 $\alpha, \beta, \gamma$ 指定如何分別將這些額外資源分配給網絡depth, width, resolution。
### EfficientNet Architecture

基於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


與之前的state of the art模型相比提高了 0.1 的準確率,但卻少了8.4倍的參數量