CNNの計算量

[] [] []


CNNの計算量】

AlexNetの場合

wの個数(メモリ容量)62M個でfc層が95%を占める

・乗算回数(計算量)1G回でconv層が95%を占める

本項ではDLにはどれくらいの計算パワーが要るのかを見ていく。

画像を入力とするDLではConvolutional Neural Network(CNN) が使われる。

CNNでは、前半をconv,pool層の組み合わせ、後半を通常のfc層で構成する。

・畳み込み層(conv) 局所的なパターンマッチング(重みwと凸凹が一致しているか)

・プーリング層(pool) 畳み込み後に間引く

・全結合層(fc)

conv層の計算は、普通の画像フィルタのようにカーネルを画素ごとにかけていくが、違うのは複数個のカーネルを用意して複数個の出力画像を作る点である。次の層では入力画像が複数になっているので入力画像ごとにカーネルを用意して最後に和をとって1つにする。したがって1層あたりの計算量は

  wの個数 = (カーネルサイズ)2 × (入力ch) × (出力ch)

  乗算回数 = (wの個数) × (入力サイズ/Stride) 2  ←Stride個飛ばしでカーネルをかける

 

pool層の計算は、カーネルの中のMaxを選ぶだけでwの演算はない。

 

fc層の計算は、全入力と全出力間に重みがかかるので1層あたりの計算量は

  wの個数 = (入力サイズ) × (出力サイズ)

  乗算回数 = (wの個数)

 

◇◇

例として、DLブームの火付け役となったAlexNet(2012)で計算量を求めてみる。

入力画像は3(RGB)x227x227画素で、出力は1000個のクラスへの分類。

入力サイズ

ch

窓サイズ

Stride

出力サイズ

wの個数

乗算回数

input

 

3

 

 

227

 

 

conv1

227

96

11

4

55

0.03 M

112 M

pool1

55

96

3

2

27

 

 

conv2

27

256

5

1

27

0.6 M

448 M

pool2

27

256

3

2

13

 

 

conv3

13

384

3

1

13

0.9 M

150 M

conv4

13

384

3

1

13

1.3 M

224 M

conv5

13

256

3

1

13

0.9 M

150 M

pool5

13

256

3

2

6

 

 

fc6

9216

 

 

 

4096

38 M

38 M

fc7

4096

 

 

 

4096

17 M

17 M

fc8

4096

 

 

 

1000

4 M

4 M

total

62 M

1,142 M

wの個数(メモリ容量)62M個でfc層が95%を占める

・乗算回数(計算量)1G回でconv層が95%を占める

1G回というと1GFLOPSのマシンでも1sかかるから、GPUが必要というわけなのだろう。

特にconv層は乗算回数が多く(FPGAは乗算器がたくさんある)wのメモリ容量が4M個と少ない(がんばればFPGA 内のRAMに収まる)ので、FPGA 1個で実装可能な規模である。


[] [] []