ディープ畳み込みGAN

PyTorch で学ぶ画像向け Deep Learning

Michal Oleszak

Machine Learning Engineer

ディープ畳み込みGANの直観

  • 識別器では全結合を畳み込みに置換
  • 生成器では転置畳み込みを使用
  • GAN の学習は不安定。追加の調整が必要
PyTorch で学ぶ画像向け Deep Learning

DCGANの指針

  • Deep Convolutional GAN (DCGAN)
  • DCGANの指針:
    • ストライド付き畳み込みのみを使用
    • 全結合やプーリングは使わない
    • バッチ正規化を使用
    • 生成器は ReLU(最終層のみ tanh)
    • 識別器は Leaky ReLU

活性化関数のグラフ

PyTorch で学ぶ画像向け Deep Learning

ストライド付き畳み込み

ストライド1の畳み込み:

ストライドなし畳み込みのアニメーション。

nn.Conv2d(..., stride=1)

ストライド2の畳み込み:

ストライドあり畳み込みのアニメーション。

nn.Conv2d(..., stride=2)
PyTorch で学ぶ画像向け Deep Learning

畳み込みジェネレーター・ブロック

def dc_gen_block(
    in_dim, out_dim, kernel_size, stride
):

return nn.Sequential( nn.ConvTranspose2d( in_dim, out_dim, kernel_size, stride=stride, ),
nn.BatchNorm2d(out_dim),
nn.ReLU() )

ジェネレーター・ブロックの構成:

  • ストライド付き転置畳み込み
  • バッチ正規化
  • ReLU 活性化
PyTorch で学ぶ画像向け Deep Learning

ディープ畳み込みジェネレーター

class DCGenerator(nn.Module):
    def __init__(self, in_dim, kernel_size=4, stride=2):
        super(Generator, self).__init__()
        self.in_dim = in_dim

self.gen = nn.Sequential( dc_gen_block(in_dim, 1024, kernel_size, stride), dc_gen_block(1024, 512, kernel_size, stride), dc_gen_block(512, 256, kernel_size, stride),
nn.ConvTranspose2d(256, 3, kernel_size, stride=stride),
nn.Tanh() )
def forward(self, x): x = x.view(len(x), self.in_dim, 1, 1) return self.gen(x)
PyTorch で学ぶ画像向け Deep Learning

畳み込み識別器ブロック

def dc_disc_block(
    in_dim, out_dim, kernel_size, stride
):

return nn.Sequential( nn.Conv2d( in_dim, out_dim, kernel_size, stride=stride, ),
nn.BatchNorm2d(out_dim),
nn.LeakyReLU(0.2), )

識別器ブロックの構成:

  • ストライド付き畳み込み
  • バッチ正規化
  • Leaky ReLU 活性化
PyTorch で学ぶ画像向け Deep Learning

ディープ畳み込み識別器

class Discriminator(nn.Module):
    def __init__(self, kernel_size=4, stride=2):
        super(Discriminator, self).__init__()

self.disc = nn.Sequential( dc_disc_block(3, 512, kernel_size, stride), dc_disc_block(512, 1024, kernel_size, stride), nn.Conv2d(1024, 1, kernel_size, stride=stride), )
def forward(self, x): x = self.disc(x) return x.view(len(x), -1)
PyTorch で学ぶ画像向け Deep Learning

練習しましょう!

PyTorch で学ぶ画像向け Deep Learning

Preparing Video For Download...