工作好きな情報系の雑記

CNNにおける特徴マップの出力サイズを求める計算式の導出について

画像の幅をW、パディングサイズをP、フィルタの幅をFw、ストライドをS、畳み込み層で出力される特徴マップの幅をOwとすると、Owは下記の計算式で求められる。

\[ Ow = \frac{W+2P-Fw}{S}+1
\]

と、いろんなサイトで説明されているが、いまいちこの数式になる理由がパッとは分からなかった。
"+1"はどこから出てきたの?とか、Fwを引くのが本当に妥当なの?とか...

で、自分なりに上記を導出してみて腑に落ちたので、メモしておく。

自分なりの導出

例えばW=6, P=1, Fw=4, S=2のケースを考えてみる。
下図の青い太枠が元の画像で、青い細枠がそれにパディングを含めたもの。赤枠がフィルタ。

まず赤枠の場所で畳み込みが行われ、特徴マップの1マス分が計算される。…①

次に、このフィルタをストライドに合わせてあと何回スライドさせられるかを考える。
スライドさせた回数分畳み込み計算をすることになり、その分特徴マップの幅も増えるためである。
Fwを除くと、パディングを含む青枠の幅はW+2P-Fw。
この幅に対してあと何回スライドさせられるかは下記の式で計算できる。…②

\[ \frac{W+2P-Fw}{S}
\]

例の場合、W+2P-Fw=4, S=2なので、あと2回スライドできることになる。(ピンクや黄色の枠がスライドした際のフィルタを示す)
これは、あと2回畳み込みできるとも、特徴マップの幅が2増えるとも言い換えられる。

①と②を足し合わせたものが特徴マップの幅となるので、最終的に元の式が

\[ Ow = \frac{W+2P-Fw}{S}+1
\]

となるワケ。腑に落ちた。

その他の例

Fw=2にした場合は下図のように3回スライドできるので、Ow=3+1=4となる。

Fw=3にした場合、Ow=(5/2)+1=3.5となってしまい、割り切れない。
割り切れない場合はエラーにするか小数点以下切り捨てとして処理するかのどちらからしい。
切り捨てる場合はOw=3となる。実際、下図のケースでは3回畳み込みが行われるので辻褄は合う。

別の導出

上記の作業を終えてから見つけたが、下記のサイトでもこの式が導かれるまでを説明している。
こちらの方がより細かく順序を追って解説している。(結局言っていることは同じな気がする)

今回は畳み込みニューラルネットワーク(Convolutional Neural Network; CNN)で使われている畳み込み演算(convolution, コンボルーション)や、GAN(Gener
【入門者向け】畳み込み演算と転置畳み込み演算を理解する - 楽しみながら学ぶ機械学習 / 自然言語処理入門
モバイルバージョンを終了