プーリング処理による画像サイズの変化について

作成日

2017年2月22日

Convolutional Neural Networks で畳み込みとプーリングのときに画像サイズが小さくなっていきますが,サイズの変化の仕方について疑問があったので書き残しておきます.

公式

処理後の画像サイズを求める公式みたいなのが一応あります.

W:imagesize,F:filtersize,P:paddingsize,S:stridewidthW:\,image\,size, F:\,filter\,size, P:\,padding\,size, S:\,stride\,width としたときに

W=WF+2×PS+1W'=\frac{W-F+2\times P}{S}+1

サイトによっては

W=WF+2×PS+1W'=\frac{\lfloor W-F+2\times P\rfloor}{S}+1

で算出されるとなっているのを見かけますが,考えてみるとたぶん

W=WF+2×PS+1W'=\frac{\lceil W-F+2\times P\rceil}{S}+1

ですよね.

実際に計算してみる

MNIST

元の画像は 282828 28 で,プーリング層を二回経て画像が小さくなっています.フィルタサイズは 2×22 \times 2 ,ストライド幅が 2 なので,最終的な出力は 7×77 \times 7 になります.

AlexNet

元の画像が 224×224224 \times 224 で,最初の畳み込み層に入力する前にストライド幅 4 で 11×1111 \times 11 のフィルタにかけられ,55×5555 \times 55 になるはずです.

224114+1=54.3...\frac{224-11}{4}+1=54.3... 224114+1=54\frac{\lfloor 224-11\rfloor}{4}+1=54

となるので,床関数ではなく天井関数を適用するのが正しい気がします.

224114+1=55\frac{\lceil 224-11\rceil}{4}+1=55

TensorFlow での実行

169×169169 \times 169 の画像をストライド幅 3 で 7×77 \times 7 のフィルタにかけたら 57×5757 \times 57 になっているんですが,上式ではどう頑張っても 55 にしかなりません.

どこかで実行間違ってたんですかね...

mktia's note

Research & Engineering / Blockchain / Web Dev

© 2017-2025 mktia. All rights reserved.