畳み込みは畳み込み前後のサイズを計算します。

入力画像パラメータ:

  • 画像サイズ: W*W
  • コンボリューションカーネルサイズ: F * F
  • ステップサイズ:S
  • ゼロパディングのサイズ: P

計算式は次のとおりです。

N = \frac{W - F + 2P}{S}+1

 出力画像サイズ:

N * N

例:

# coding:utf-8
import torch
import torch.nn as nn


class CNNTestModel(nn.Module):
    def __init__(self):
        super().__init__()
        in_channels = 3
        out_channels = 64
        self.conv = nn.Conv2d(in_channels, out_channels, kernel_size=7, stride=2, padding=3, bias=False)

    def forward(self, x):
        out = self.conv(x)
        return out


if __name__ == '__main__':
    img = torch.rand(1, 3, 224, 224)
    model = CNNTestModel()
    out = model(img)
    print(img.shape)
    print(out.shape)

印刷結果:

torch.Size([1, 3, 224, 224])
torch.Size([1, 64, 112, 112])

N = (W − F + 2P )/S+1 = (224-7+2x3)/2 + 1 = 112

詳細な説明:

チャネル数は、画像を畳み込む出力チャネルの設定数と同じ数の畳み込みカーネルを生成します。つまり、畳み込みカーネルの数は、出力特徴マップのチャネル数と等しくなります。
最終的な出力サイズを [1,64,112,112] として取得します。

-------------------------------------------
(W − F + 2P )これは、最初の畳み込みの後に畳み込みに使用できるサイズを計算することに相当します。

-------------------------------------------
(W − F + 2P ) /S は、S サイズのステップ サイズに従って何回後退できるかです。つまり、
最初の畳み込みが含まれていないため、複数回の畳み込みを実行できるため、1 を追加します。
つまり、N = ( W − F + 2P)/S+1

---------------------------------------
出力サイズ = (画像の幅または高さ - コンボリューション カーネル サイズ + パディング サイズ) / ステップ サイズ + 1
幅と高さが異なるピクチャの場合、上記の式を使用して最終的な出力サイズを計算できます。

  • コンボリューション カーネルのチャネルは入力フィーチャ レイヤーのチャネルと同じです

  • 出力特徴行列チャネルには同じ数の畳み込みカーネルがあります

     

視覚的な表示:

畳み込みダイナミックグラフ表示

おすすめ

転載: blog.csdn.net/WakingStone/article/details/129418362