画像分類についてザックリ解説【E資格対策】

# 画像分類の全体像
有名どころだと、以下の6種類がある。
・AlexNet
・VGG
・GoogleNet
・Resnet
・DenseNet
・MobileNet

# <font color="#1e90ff">**AlexNet**</font>

2012年にILSVRC2012で優勝したモデル。ディープラーニングの火付け役。構造はシンプル。
Relu関数、Dropout、データ拡張を採用している。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3700895/3b247f41-128b-2709-37b2-7dcb059a5717.png)
https://www.researchgate.net/figure/An-illustration-of-the-architecture-of-AlexNet-CNN-14_fig4_312188377

# <font color="#1e90ff">**VGG**</font>
このVGGは、ILSVRC2014の2位、CNNを使用したモデル。以下の特徴がある。
##### ・層が多い(16層とか19層とか)
層を増やすことで活性化関数の適用回数を増やして、表現力をUPさせている。
#####  ・3×3の畳み込みを採用している。
5×5のフィルタ×1段 ⇒ 3×3のフィルタ×2段　に置き換えることで、パラメータを削減している。
(「5×5のフィルタ×1段」と「3×3のフィルタ×2段」の出力サイズは同じなので、置き換えれる。)

# <font color="#1e90ff">**GoogleNet（←これマジで良く出る！）**</font>

2012年にILSVRC2014で2位。特徴は以下の4つ。

##### Inception module
k×kの大きな畳み込みを、1×1、3×3、5×5の複数の畳み込みで近似してる。

##### 1×1Convolution
もともと、3× 3×3のフィルタで畳み込んでたのを、
「1×1×3で畳み込んだ後に3×3×1で畳み込む」ような感じに変更して、計算量を減らしてる。

##### Auxiliary Loss（アクシャリーロス）
ネットワークの途中から分岐させたサブネットワークにおいてもクラス分類を行う。
（勾配消失防止のため）


##### Global Average Pooling
通常だったら、ネットワークの最後で全結合層にそのまま渡すところだが、
「一度、各チャンネルの平均を算出して、その値を全結合層に渡す」というクソほど雑な処理を実施している。でも、それで上手くいくらしい。（パラメータ削減&過学習防止のため）

# <font color="#1e90ff">**Resnet（レズネット）**</font>

ResNet（Residual Networks）は、ILSVRC2015の優勝モデルで152層で構成されるCNN。
特徴は以下の2つ。

#### ・Residual Block（Shortcut Connectionを利用した残差ブロック）
「残差関数を学習対象としよう」という考え方。
実装としては、もとの入力を出力側に足すだけなので簡単。

#### ・Batch Normalization（バッチ正規化）
データをチャンネルごとに正規化する。（勾配消失・勾配爆発を防止。）

###### ＜バッチ正規化のやり方＞

①ミニバッチ単位で、ミニバッチ内の各チャンネル毎に平均μと分散σ^2を求める
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3700895/9432db1f-d987-52aa-94d2-f573adac14e3.png)
引用：https://qiita.com/amateur2020/items/f2c829677d9764af0b50

②次に、①で求めた平均・分散を用いて、各チャンネルのデータを平均0、分散1に正規化する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3700895/f685f584-3e7c-4cfa-1aa3-983f00c61404.png)


③最後に、正規化されたデータにスケールとシフトを適用する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3700895/9092d078-b112-6d52-8936-dba6952a7bd1.png)



# <font color="#1e90ff">**DenseNet**</font>
ResNetを改良したモデル。特徴は以下の2つ。

##### Dense Block
ショートカット接続を多用して、層間の情報伝達をしやすくして、高い性能を実現している。
前の層すべてをショートカット接続してる。

##### Transition Layer
1x1 Convolutionと2x2 Average Poolingでダウンサンプリングしてる。それに名称をつけただけ。
Dense Blockによって増大してしまったので、チャンネル数とかを減らすためにこの層が必要らしい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3700895/ec68ce5d-57b9-16ac-2cae-7ee48fae20f0.png)
https://arxiv.org/pdf/1608.06993.pdf

# <font color="#1e90ff">**MobileNet**</font>

モバイル端末でも使用できるくらい、計算量やメモリ使用量を抑えたアルゴリズム。
精度と計算負荷をトレードオフで調整できるらしい。
普通の畳み込みの代わりに、<font color="red">**「まずチャンネル方向で畳み込みして、そのあとに空間方向で畳み込む」**</font>って感じの手法を採用しているのが特徴（Depthwise Separable Convolution）。

あと、チャンネル方向の畳み込みをPointwise Convolutionというらしい。
そんで、空間方向の畳み込みをDepthwise Convolutionというらしい。


## 参考文献
本記事は、以下のページと、AVILENの『全人類がわかるE資格講座』のテキスト・動画を参考にして作成しております。

https://zero2one.jp/ai-word/depthwise-separable-convolution/

https://www.researchgate.net/figure/An-illustration-of-the-architecture-of-AlexNet-CNN-14_fig4_312188377

https://arxiv.org/pdf/1608.06993.pdf

https://qiita.com/TakoTree/items/234650ffe626d07b1ef9

https://qiita.com/yamo1116/private/4d950da53dd15d2e4e45