[ディープラーニング] パディングとストライド

About

畳み込みの処理を行う際にパディングとストライドという2つのパラメータがあるため、ここで紹介します。

キーワード

  • パディング (padding)
  • ゼロパディング (zero padding)
  • ストライド (stride)

パディング

畳み込みを行った結果、出力される特徴マップのサイズは元の画像より小さくなってしまいます。
サイズが \({H_x} \times {W_x}\) 画像に対して、サイズが \({H_f} \times {W_f}\) のフィルタを適用した場合、特徴マップのサイズは以下のようになります。

\[\left( {{H_x} – 2\left\lfloor {{H_f}/2} \right\rfloor } \right) \times \left( {{W_x} – 2\left\lfloor {{H_f}/2} \right\rfloor } \right)\]

ただし、\({\left\lfloor \cdot \right\rfloor }\) は小数点以下を切り捨てる床関数です。(例: \(\left\lfloor {3/2} \right\rfloor = \left\lfloor {1.5} \right\rfloor = 1\) )

そのため、特徴マップが元の画像と同じサイズになるように畳み込みをする前に画像の周囲に余白を足すパディング (padding)を行うことがあります。

上下に \({\left\lfloor {{H_f}/2} \right\rfloor }\)、左右に \({\left\lfloor {{H_f}/2} \right\rfloor }\) ずつパディングを加えれば、出力される特徴マップが元の画像と同じサイズ \({H_x} \times {W_x}\) になります。

追加した余白にどのような値を入れるかが問題となりますが、CNN では追加した余白は 0 とするゼロパディング (zero padding) がよく使われます。



ストライド

今までフィルタは縦横に1マスずつ移動させていましたが、このフィルタの移動量をストライド (stride) といいます。
ストライドを増やすと出力される特徴マップのサイズは小さくなりますが、その分画像から拾える情報量が減ってしまうため、フィルタリングでは基本的にストライドは縦横1が使われます。

ストライドを \(s\) とした場合、特徴マップの各要素は以下のように計算します。

\[{u_{ij}} = \sum\limits_{p = 0}^{{H_f} – 1} {\sum\limits_{q = 0}^{{W_f} – 1} {{x_{si + p,sj + q}}\;{w_{pq}}} } \]

そしてサイズは以下のようになります。

\[\left( {\left( {\left\lfloor {({H_x} – 1)/s} \right\rfloor + 1} \right) – 2\left\lfloor {{H_f}/2} \right\rfloor } \right) \times \left( {\left( {\left\lfloor {({W_x} – 1)/s} \right\rfloor + 1} \right) – 2\left\lfloor {{H_f}/2} \right\rfloor } \right)\]

ストライドで移動していった結果、端で余ってしまった部分は切り捨てられます。
以下は 5×5 の画像に対して、2×2 のフィルタをストライド 2 で移動させた結果です。
余ってしまった5行目、5列目は切り捨てられています。



参考文献

  • 岡谷貴之、深層学習 (機械学習プロフェッショナルシリーズ)、講談社、2015、P85
  • 斎藤康毅、ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装、オライリー・ジャパン、2015、P210

コメントを残す

メールアドレスが公開されることはありません。