Deep Convolutional GAN

Deep Learning สำหรับภาพด้วย PyTorch

Michal Oleszak

Machine Learning Engineer

แนวคิด Deep Convolutional GAN

  • ใน discriminator แทนที่เลเยอร์เชิงเส้นด้วย convolution
  • ใน generator ใช้ transposed convolution ได้
  • การเทรน GAN มักไม่เสถียร จึงต้องปรับแต่งเพิ่มเติม
Deep Learning สำหรับภาพด้วย PyTorch

แนวทาง DCGAN

  • Deep Convolutional GAN (DCGAN)
  • แนวทาง DCGAN:
    • ใช้ strided convolution เท่านั้น
    • ไม่ใช้เลเยอร์เชิงเส้นหรือ pooling layer
    • ใช้ batch normalization
    • ใช้ ReLU activation ใน generator (ยกเว้นเลเยอร์สุดท้ายซึ่งใช้ tanh)
    • ใช้ Leaky ReLU activation ใน discriminator

กราฟ activation

Deep Learning สำหรับภาพด้วย PyTorch

Strided convolution

Convolution ที่มี stride เท่ากับ 1:

แอนิเมชันแสดง convolution แบบไม่มี stride

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

Convolution ที่มี stride เท่ากับ 2:

แอนิเมชันแสดง convolution แบบมี stride

nn.Conv2d(..., stride=2)
Deep Learning สำหรับภาพด้วย PyTorch

Convolutional generator block

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() )

Generator block ประกอบด้วย:

  • Strided transposed convolution
  • Batch normalization
  • ReLU activation
Deep Learning สำหรับภาพด้วย PyTorch

Deep Convolutional Generator

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)
Deep Learning สำหรับภาพด้วย PyTorch

Convolutional discriminator block

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), )

Discriminator block ประกอบด้วย:

  • Strided convolution
  • Batch normalization
  • Leaky ReLU activation
Deep Learning สำหรับภาพด้วย PyTorch

Deep Convolutional Discriminator

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)
Deep Learning สำหรับภาพด้วย PyTorch

มาฝึกกันเถอะ!

Deep Learning สำหรับภาพด้วย PyTorch

Preparing Video For Download...