MobileNets: CNNのサイズ・計算コストの削減手法＿翻訳・要約

<img width="1106" alt="Screen Shot 2018-05-17 at 14.31.34.png" src="https://qiita-image-store.s3.amazonaws.com/0/108729/121189a3-0951-7155-95f8-6ad1c5d57081.png">

# TL;DL
MobileNetsはDepthwise Separable Convolutionを用いることで、通常のCNNと比べて軽いネットワークを構築することがでる。また2つのハイパーパラメータである、width multiplierとresolution multiplierを導入することで、latencyとaccuracyを調節することができる。この技術を用いることで、性能や応答時間に制限があるモバイル上のアプリケーションなどにおいても認識や分類モデルへの応用が可能になる。

<img width="918" alt="Screen Shot 2018-05-17 at 19.42.06.png" src="https://qiita-image-store.s3.amazonaws.com/0/108729/0bbb522a-1aea-5481-6e01-ea1df7f5febd.png">


# MobileNet Architecture
## Depthwise Separable Convolution

- depthwise separable convolutions 
    - depthwise convolution
    - pointwise convolution (1×1 convolution)

という構造になっている。

たとえば、`112 x 112 x 32`という入力に対して、通常のCNNでは、`3 x 3 x 32 x 64`のカーネルを用いて畳み込みを行い、`112 x 112 x 64`の出力をする。（図1） 一方で、Depthwise Separable Convolutionでは、まず`3 x 3 x (1) x 32`のフィルタを用いて、depthwise convolutionを行う。この出力は、`112 x 112 x 32`のままである。次に、`1 x 1 x 32 x 64`のフィルタを用いて、pointwise convolutionを行う。この出力が`56 x 56 x 64`になる。（図2）

<img width="906" alt="Screen Shot 2018-05-21 at 22.09.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/108729/5e4bb20f-127e-4d9e-10fb-110ba4694360.png">
図1: 通常の畳み込みイメージ


<img width="990" alt="Screen Shot 2018-05-21 at 22.12.44.png" src="https://qiita-image-store.s3.amazonaws.com/0/108729/72ca6fe6-f6a0-7dd3-3b24-7aa3aa185ab6.png">
図2: depthwise separable convolutionsのイメージ

また、入力の特徴マップサイズを$D_{F} · D_{F} · M$、出力の特徴マップサイズを$D_{F} · D_{F} · N$、カーネルのサイズを$D_{K} · D_{K} · M · N$とすると、通常の畳み込みの計算コストは、

```math
D_{K} · D_{K} · M · N · D_{F} · D_{F} = D_{K}^2MND_{F}^2
```
である。一方で、depthwise convolutionでは、チャネル方向への畳み込みを行わないため、$M = 1$であり、計算コストは、

```math
D_{K} · D_{K} · N · D_{F} · D_{F} = D_{K}^2ND_{F}^2
```
また、pointwise convolutionでは、空間方向の畳み込みを行わないため、$D_{K} = 1$であり、計算コストは、

```math
M · N · D_{F} · D_{F} = MND_{F}^2
```

よって、Depthwise Separable Convolutionでは、計算コストは、

```math
D_{K}^2ND_{F}^2 + MND_{F}^2 = (D_{K}^2 + M)ND_{F}^2
```
通常の畳み込みに比べて、Depthwise Separable Convolutionは、

```math
\frac{(D_{K}^2 + M)ND_{F}^2}{D_{K}^2MND_{F}^2} = \frac{1}{M} + \frac{1}{D_{K}^2}
```

だけ、計算コストが削減できている。上の例では、$M = 32$、$D_{K} = 3$であるから、約9倍ほど計算コストが削減されることがわかる。

このようなやり方を取ることで、通常の畳み込みと比べて計算コストとモデルのサイズをかなりの度合いで小さくすることができる。

## NNの構造とtraining

MobileNetの構造はTable1に示されている。全ての層がBatch NormalizationとReLUにしたがっており、最後の層は分類のためにSoftmaxが使われている。

Table2でわかるように、MobileNetはその計算のほとんどpointwise convolutionが占めている。

Figure3で、通常のCNN（左）とMobileNet（右）のNNの層の構成が示されている。

<img width="489" alt="Screen Shot 2018-05-18 at 0.07.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/108729/2d47af7d-f0f7-81fc-7a78-e8f22f54b2fe.png">


<img width="483" alt="Screen Shot 2018-05-18 at 0.07.44.png" src="https://qiita-image-store.s3.amazonaws.com/0/108729/a461dde5-cf55-4e9b-aea0-f58082335001.png">

## Width Multiplier: Thinner Models

上記で示したような、基本のMobileNetの構造でもすでに小さく、latencyも低いが、さらに小さく、速く動作するような構造が要求される場合もある。このような要求に応えるために、width multiplierと呼ばれるパラメータ`α`を導入する。その結果、それぞれの層で、ネットワークを小さく揃えることが可能になる。

例えば、width multiplierである`α`を導入すると、入力チャネル数`M`は`αM`に、出力チャンネル数`N`は`αN`になる。また、`α`は`α ∈ (0, 1]`の範囲を取り、一般的には、1, 0.75, 0.5, 0.25が用いられる。


## Resolution Multiplier: Reduced Representation

次に、計算コストを削減するためのハイパーパラメータとしてresolution multiplierと呼ばれるパラメータ`ρ`を導入する。これにより、各層の入力画像とその内部表現を削減することが可能になる。

例えば、resolution multiplierである`ρ`を導入すると、入力画像の大きさ`Df`は`ρDf`に、出力画像の大きさ`Df`は`ρDf`になる。また、`ρ`は`ρ ∈ (0, 1]`の範囲を取る。

以下のTable3では、入力特徴マップサイズ`14 × 14 × 512`、カーネルサイズ`3×3×512×512`の時の、通常のCNNと、MobileNet、さらにハイパーパラメータ`α`と`ρ`を導入した時の計算量とパラメータ数が比較されている。

<img width="472" alt="Screen Shot 2018-05-18 at 14.00.13.png" src="https://qiita-image-store.s3.amazonaws.com/0/108729/244a6b1b-59fc-bd9d-ccc4-d7572afe4e13.png">


# Experiments
以下では、MobileNetの性能を様々に比較していく。

## Model Choices

Table4では、全てConvolutionを使ったMobileNetとDepthwise Separable Convolutionを一部使ったMobileNetの性能を比較している。後者は、Multi-AddsもMiParametersも大きく減っているのに対して、Accuracyは1%ほどしか減っていないことがわかる。これにより、Depthwise Separable Convolutionを用いることで、通常の計算コストを大きく抑えながら同程度の精度が出せることがわかる。

またTable5では、width multiplierを導入した場合と、Table1のうちある1つの層を取り除いてShallow（浅くした）構造で比較をしている。どちらも計算コストを抑えるが、精度は3%ほど前者の方が高くなっている。

<img width="474" alt="Screen Shot 2018-05-18 at 14.12.43.png" src="https://qiita-image-store.s3.amazonaws.com/0/108729/149496d5-1827-5592-d150-a8b60f3ab68d.png">

## Model Shrinking Hyperparameters

Table6では、width multiplier `α`による、精度と計算コストのトレードオフの関係が示されている。`α`を小さくすればするほど、計算コストは抑えられるが、その分精度は下がっている。

またTable7では、resolution multiplier `ρ`による精度と計算コストのトレードオフの関係が示されている。これもwidth multiplierと同様に、`ρ`を小さくすればするほど、計算コストは抑えられるが、その分精度は下がっている。

<img width="476" alt="Screen Shot 2018-05-18 at 14.22.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/108729/64520943-7e6f-bd47-4425-275423d35e5a.png">

Figure5では、`width multiplier α ∈ {1, 0.75, 0.5, 0.25}`と`resolutions {224, 192, 160, 128}`とハイパーパラメータを設定した時の精度と計算コストの関係を示している。

<img width="471" alt="Screen Shot 2018-05-18 at 14.27.32.png" src="https://qiita-image-store.s3.amazonaws.com/0/108729/1b0d394a-cbf9-4924-5108-2ef072c28b78.png">

# Reference
- [MobileNets: Efficient Convolutional Neural Networks for Mobile Vision
Applications](https://arxiv.org/pdf/1704.04861.pdf)
- [Zehaos/MobileNet | Github](https://github.com/Zehaos/MobileNet)