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。
この幅に対してあと何回スライドさせられるかは下記の式で計算できる。…②
\]
例の場合、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回畳み込みが行われるので辻褄は合う。
別の導出
上記の作業を終えてから見つけたが、下記のサイトでもこの式が導かれるまでを説明している。
こちらの方がより細かく順序を追って解説している。(結局言っていることは同じな気がする)
この記事へのコメントはこちら