Introductie tot GAN’s

Deep Learning voor afbeeldingen met PyTorch

Michal Oleszak

Machine Learning Engineer

Generative Adversarial Networks

Gegenereerde kattenafbeelding.

Deep Learning voor afbeeldingen met PyTorch

Pokemon Sprites-dataset

Voorbeeldafbeeldingen uit de Pokemon Sprites-dataset

  • Pokemon Sprites-dataset van PokeAPI
  • Ongeveer 1300 sprites van dierachtige wezens uit een Pokemon-videogame
  • Doel: nieuwe Pokemons genereren!
Deep Learning voor afbeeldingen met PyTorch

GAN-architectuur

GAN-werkstroomdiagram.

Deep Learning voor afbeeldingen met PyTorch

GAN-architectuur

GAN-werkstroomdiagram.

Deep Learning voor afbeeldingen met PyTorch

GAN-architectuur

GAN-werkstroomdiagram.

Deep Learning voor afbeeldingen met PyTorch

GAN-architectuur

GAN-werkstroomdiagram.

Deep Learning voor afbeeldingen met PyTorch

Leerproces van GAN’s

 

 

GAN-werkstroomdiagram.

  • Generator: leert realistisch ogende beelden maken
  • Discriminator: leert echt van nep te onderscheiden
  • Tegengestelde doelen zorgen dat beide netwerken beter worden
  • Uiteindelijk moet de generator realistische beelden produceren
Deep Learning voor afbeeldingen met PyTorch

Basale Generator

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)
  • Definieer de klasse Generator
  • Reeks generatorblokken, een lineaire laag en een sigmoid-activatie
    def gen_block(in_dim, out_dim):
      return nn.Sequential(
          nn.Linear(in_dim, out_dim),
          nn.BatchNorm1d(out_dim),
          nn.ReLU(inplace=True)
      )
    
  • Voer de input door alle lagen
  • Input: ruis van grootte in_dim
  • Output: beeld van grootte out_dim
Deep Learning voor afbeeldingen met PyTorch

Basale Discriminator

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)
  • Definieer de klasse Discriminator
  • Reeks discriminatorblokken en een lineaire laag
    def disc_block(in_dim, out_dim):
      return nn.Sequential(
          nn.Linear(in_dim, out_dim),
          nn.LeakyReLU(0.2)
      )
    
  • Voer de input door alle lagen
  • Input: beeld van grootte in_dim
  • Output: classificatie van grootte 1
Deep Learning voor afbeeldingen met PyTorch

Laten we oefenen!

Deep Learning voor afbeeldingen met PyTorch

Preparing Video For Download...