CNNの計算

フィルター適用後の画像の幅

  • w: image size width
  • p: padding size
  • f: filter size
  • s: stride size

$$ w_{after} = \frac{(w + p \times 2 - f)}{s} + 1 $$

例)

8x8の画像に4x4のfilterをstride=2かつpadding=0で適用させた場合は、

$$ \frac{(8 + 0 \times 2 - 4)}{2} + 1 = 3 $$

なので、出力される画像のサイズは3となる。

LeNetの構造

Kerasの場合

padding="valid"の場合

小さくなる

padding="same"の場合

同じ大きさになるように自動的にpadingしてくれる

def calc():
   w = 32
   f = 2
   s = 1
   p = 0
   
   x = (w - p * 2 - f ) / s + 1
   print(x)
   x =  int(x/2)
   print(x)
   x = (x - p * 2 - f ) / s + 1
   print(x)
   x =  int(x/2)
   print(x)
   x = (x - p * 2 - f ) / s + 1
   print(x)
   x =  int(x/2)
   print(x)

calc()

REFERENCES:

  • https://qiita.com/icoxfog417/items/5aa1b3f87bb294f84bac
  • http://www.thothchildren.com/chapter/59bf6f7ee319b7394d662311
  • http://localhost:5000/cv/cnn/conv.html