コンピュータービジョン

ストライド / パディング すとらいど / ぱでぃんぐ

ストライドパディングCNN畳み込みダウンサンプリング出力サイズ
ストライド / パディングについて教えて

簡単に言うとこんな感じ!

ストライドは「フィルタを何ピクセルずつずらすか」の設定で、大きくすれば出力が小さくなる(ダウンサンプリング)。パディングは「画像の周囲に0を追加する」ことで、畳み込みで端の情報が消えるのを防ぐよ。この2つで出力サイズをコントロールするんだ!


ストライド / パディングとは

ストライド(Stride) は、フィルタを入力上でスライドさせるときの移動幅のことです。デフォルトは1(1ピクセルずつ移動)ですが、2にすると出力サイズが約半分になります。プーリング層の代わりにストライド付き畳み込みでダウンサンプリングする現代的なCNNが増えています。

パディング(Padding) は、入力の周囲に値(通常は0)を追加する処理です。パディングなしで畳み込みをすると出力サイズが入力より小さくなり、端の情報が内部と比べて少ない回数しか使われません。padding=1 を設定すると、3×3フィルタで入力と同じ出力サイズを維持できます(Same Padding)。

これらを組み合わせることで、出力の特徴マップのサイズを設計者が意図通りにコントロールできます。


出力サイズの計算式

出力サイズ = (入力サイズ + 2×パディング - カーネルサイズ) ÷ ストライド + 1
入力サイズカーネルパディングストライド出力サイズ
224311224 (Same)
224301222 (サイズ縮小)
224312112 (ダウンサンプリング)
224732112 (ResNet第1層)
import torch.nn as nn

# 典型的な設定例
# Same Padding(サイズ維持)
conv_same = nn.Conv2d(in_channels=64, out_channels=64,
                      kernel_size=3, stride=1, padding=1)

# ダウンサンプリング(stride=2でサイズ半分)
conv_down = nn.Conv2d(in_channels=64, out_channels=128,
                      kernel_size=3, stride=2, padding=1)

歴史と背景

  • LeNet時代:パディングなし、stride=1が基本。小さい入力で使用
  • AlexNet(2012):stride=4の大きなストライドで計算量を削減
  • VGG(2014):3×3+padding=1の組み合わせを統一。一貫したサイズ管理
  • ResNet(2015年)以降:stride=2の畳み込みでプーリングを代替する設計が普及

パディングの種類

種類内容使われ方
ゼロパディング(Valid→Same)周囲に0を追加最もよく使われる。PyTorchのデフォルト
リフレクションパディング境界値を鏡像で補完スタイル変換、画像生成
リプリケーションパディング端の値をそのままコピー端のアーティファクトを減らしたい場合

関連用語