CNN: 畳み込み層の出力サイズ計算 (ストライド > 1)
今回は、ストライド (Stride) が1より大きい場合の畳み込み層の出力サイズ計算です。ストライドは、フィルター(カーネル)が入力特徴マップ上を移動する際のステップ幅を指定します。
ストライドの役割
- 出力サイズの縮小(ダウンサンプリング): ストライドを1より大きく設定すると、フィルターが一度に移動する距離が長くなるため、出力される特徴マップのサイズは入力サイズよりも小さくなります。これはダウンサンプリング(空間的な解像度を下げる操作)として機能します。
- 計算量の削減: 出力サイズが小さくなることで、後続の層での計算量を削減できます。
- 受容野(Receptive Field)の拡大: より少ない計算で、後段の層が入力のより広い範囲の特徴を捉えることができるようになります(実質的な受容野が広がります)。
出力サイズの計算式と床関数
計算式はこれまでと同じです。
$O = \lfloor \frac{W - K + 2P}{S} \rfloor + 1
$
ストライド \(S\) が1より大きい場合、分子 \(W - K + 2P\) が \(S\) で割り切れないことがあります。出力サイズは整数である必要があるため、計算結果の小数点以下を切り捨てる床関数 \(\lfloor \cdot \rfloor\) が適用されます。これは、フィルターが特徴マップの範囲内に完全に収まる最後の位置までしか移動できないことに対応します。
今回の問題における計算 (高さ)
与えられたパラメータ:
- 入力高さ (W): 64
- カーネル高さ (K): 3
- パディング (P): 1
- ストライド (S): 2
これらの値を計算式に代入します。
$ O_{height} = \lfloor \frac{64 - 3 + 2(1)}{2} \\rfloor + 1 \\\
= \lfloor \\frac{64 - 3 + 2}{2} \rfloor + 1 \\\
= \lfloor \frac{63}{2} \rfloor + 1 \\\
= \lfloor 31.5 \rfloor + 1 \\\
= 31 + 1 = 32
$
したがって、出力特徴マップの高さは 32 です。(幅も同様に計算すると32になります)
ストライド付き畳み込みとプーリング層
- ストライドが2以上の畳み込み(Strided Convolution)は、特徴抽出とダウンサンプリングを同時に行うことができます。
- これは、Max PoolingやAverage Poolingといったプーリング層と同様にダウンサンプリングを行う手段ですが、ストライド付き畳み込みは学習可能なパラメータを持つため、空間的な情報をどのように集約するかをデータから学習できる可能性があります。
- 近年では、プーリング層の代わりにストライド付き畳み込みを用いるネットワーク設計も増えています。