機械学習におけるtorch.nn.Conv2d vs torch.nn.ConvTranspose2d
Table of Contents
torch.nn.Conv2dとtorch.nn.ConvTranspose2dは逆の操作です:
Conv2d(標準畳み込み)
- 空間次元を削減(ダウンサンプリング)
- 特徴抽出に使用
- 出力サイズは入力より小さい(パディングで補償しない限り)
- 式:
output_size = floor((input_size + 2*padding - kernel_size) / stride) + 1
ConvTranspose2d(転置畳み込み/逆畳み込み)
- 空間次元を増加(アップサンプリング)
- 再構成/生成に使用(例:autoencoderのdecoder、GANのgenerator)
- 出力サイズは入力より大きい
- 式:
output_size = (input_size - 1) * stride - 2*padding + kernel_size + output_padding
主な違い
-
目的:Conv2dは特徴を抽出して解像度を削減、ConvTranspose2dは再構成/生成して解像度を増加
-
データフロー:Conv2dは多対一(複数の入力位置→1つの出力位置)、ConvTranspose2dは一対多(1つの入力位置→複数の出力位置)
-
一般的な使用例:
- Conv2d:CNN、encoder、特徴抽出
- ConvTranspose2d:GAN、VAE、セマンティックセグメンテーション(アップサンプリングパス)、超解像、Diffusionモデルのdecoder
-
チェッカーボードアーティファクト:ConvTranspose2dは
kernel_sizeがstrideで割り切れない場合、チェッカーボードアーティファクトを生成する可能性があります