---
# System prepended metadata

title: 'EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks'
tags: ['International Conference on Machine Learning, 2019', Paper reading]

---

# 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倍的參數量