Introduktion till GANs

Djupinlärning för bilder med PyTorch

Michal Oleszak

Machine Learning Engineer

Generative Adversarial Networks

Genererad kattbild.

Djupinlärning för bilder med PyTorch

Pokemon Sprites-datamängden

Urval av bilder från Pokemon Sprites-datamängden

  • Pokemon Sprites-datamängden från PokeAPI
  • Cirka 1 300 sprites av djurliknande varelser från ett Pokemon-spel
  • Mål: Generera nya Pokémons!
Djupinlärning för bilder med PyTorch

GAN-arkitektur

Diagram över GAN-arbetsflöde.

Djupinlärning för bilder med PyTorch

GAN-arkitektur

Diagram över GAN-arbetsflöde.

Djupinlärning för bilder med PyTorch

GAN-arkitektur

Diagram över GAN-arbetsflöde.

Djupinlärning för bilder med PyTorch

GAN-arkitektur

Diagram över GAN-arbetsflöde.

Djupinlärning för bilder med PyTorch

GANs inlärningsprocess

 

 

Diagram över GAN-arbetsflöde.

  • Generator: lär sig att producera realistiska bilder
  • Diskriminator: lär sig att skilja falska från äkta bilder
  • Motstridiga mål gör att varje nätverk förbättras i sin uppgift
  • Till slut ska generatorn producera realistiska bilder
Djupinlärning för bilder med PyTorch

Grundläggande 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)
  • Definiera klassen Generator
  • En sekvens av generatorblock, ett linjärt lager och en sigmoidaktivering
    def gen_block(in_dim, out_dim):
      return nn.Sequential(
          nn.Linear(in_dim, out_dim),
          nn.BatchNorm1d(out_dim),
          nn.ReLU(inplace=True)
      )
    
  • Skicka indata genom alla lager
  • Indata: brus av storleken in_dim
  • Utdata: bild av storleken out_dim
Djupinlärning för bilder med PyTorch

Grundläggande diskriminator

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)
  • Definiera klassen Discriminator
  • En sekvens av diskriminatorblock och ett linjärt lager
    def disc_block(in_dim, out_dim):
      return nn.Sequential(
          nn.Linear(in_dim, out_dim),
          nn.LeakyReLU(0.2)
      )
    
  • Skicka indata genom alla lager
  • Indata: bild av storleken in_dim
  • Utdata: klassificering av storleken 1
Djupinlärning för bilder med PyTorch

Nu kör vi en övning!

Djupinlärning för bilder med PyTorch

Preparing Video For Download...