Giới thiệu về GAN

Deep Learning cho Ảnh với PyTorch

Michal Oleszak

Machine Learning Engineer

Generative Adversarial Networks

Ảnh mèo được tạo.

Deep Learning cho Ảnh với PyTorch

Bộ dữ liệu Pokemon Sprites

Mẫu ảnh từ bộ dữ liệu Pokemon Sprites

  • Bộ dữ liệu Pokemon Sprites từ PokeAPI
  • Khoảng 1300 sprite sinh vật giống động vật từ game Pokemon
  • Mục tiêu: Tạo Pokemon mới!
Deep Learning cho Ảnh với PyTorch

Kiến trúc GAN

Sơ đồ quy trình GAN.

Deep Learning cho Ảnh với PyTorch

Kiến trúc GAN

Sơ đồ quy trình GAN.

Deep Learning cho Ảnh với PyTorch

Kiến trúc GAN

Sơ đồ quy trình GAN.

Deep Learning cho Ảnh với PyTorch

Kiến trúc GAN

Sơ đồ quy trình GAN.

Deep Learning cho Ảnh với PyTorch

Quy trình học của GAN

 

 

Sơ đồ quy trình GAN.

  • Generator: học tạo ảnh trông thật
  • Discriminator: học phân biệt ảnh giả và thật
  • Mục tiêu đối kháng giúp mỗi mạng giỏi hơn
  • Cuối cùng, generator tạo ảnh chân thực
Deep Learning cho Ảnh với PyTorch

Generator cơ bản

class Generator(nn.Module):
    def __init__(self, in_dim, out_dim):
        super(Generator, self).__init__()

self.generator = nn.Sequential( gen_block(in_dim, 256), gen_block(256, 512), gen_block(512, 1024), nn.Linear(1024, out_dim), nn.Sigmoid(), )
def forward(self, x): return self.generator(x)
  • Định nghĩa lớp Generator
  • Chuỗi khối generator, một lớp linear và kích hoạt sigmoid
    def gen_block(in_dim, out_dim):
      return nn.Sequential(
          nn.Linear(in_dim, out_dim),
          nn.BatchNorm1d(out_dim),
          nn.ReLU(inplace=True)
      )
    
  • Truyền đầu vào qua mọi lớp
  • Đầu vào: nhiễu kích thước in_dim
  • Đầu ra: ảnh kích thước out_dim
Deep Learning cho Ảnh với PyTorch

Discriminator cơ bản

class Discriminator(nn.Module):
    def __init__(self, im_dim):
        super(Discriminator, self).__init__()

self.disc = nn.Sequential( disc_block(im_dim, 1024), disc_block(1024, 512), disc_block(512, 256), nn.Linear(256, 1), )
def forward(self, x): return self.disc(x)
  • Định nghĩa lớp Discriminator
  • Chuỗi khối discriminator và một lớp linear
    def disc_block(in_dim, out_dim):
      return nn.Sequential(
          nn.Linear(in_dim, out_dim),
          nn.LeakyReLU(0.2)
      )
    
  • Truyền đầu vào qua mọi lớp
  • Đầu vào: ảnh kích thước in_dim
  • Đầu ra: phân loại kích thước 1
Deep Learning cho Ảnh với PyTorch

Ayo berlatih!

Deep Learning cho Ảnh với PyTorch

Preparing Video For Download...