Introducere în GAN-uri

Deep Learning pentru imagini cu PyTorch

Michal Oleszak

Machine Learning Engineer

Rețele Generative Adversariale

Imagine de pisică generată.

Deep Learning pentru imagini cu PyTorch

Setul de date Pokemon Sprites

Eșantion de imagini din setul de date Pokemon Sprites

  • Setul de date Pokemon Sprites de la PokeAPI
  • Aproximativ 1300 de sprite-uri de creaturi din jocul video Pokemon
  • Obiectiv: Generarea de noi Pokemoni!
Deep Learning pentru imagini cu PyTorch

Arhitectura GAN

Diagramă flux GAN.

Deep Learning pentru imagini cu PyTorch

Arhitectura GAN

Diagramă flux GAN.

Deep Learning pentru imagini cu PyTorch

Arhitectura GAN

Diagramă flux GAN.

Deep Learning pentru imagini cu PyTorch

Arhitectura GAN

Diagramă flux GAN.

Deep Learning pentru imagini cu PyTorch

Procesul de învățare al GAN-urilor

 

 

Diagramă flux GAN.

  • Generator: învață să producă imagini realiste
  • Discriminator: învață să distingă falsurile de imagini reale
  • Obiectivele conflictuale îmbunătățesc fiecare rețea
  • La final, generatorul produce imagini realiste
Deep Learning pentru imagini cu PyTorch

Generator de bază

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)
  • Definirea clasei Generator
  • Secvență de blocuri generator, un strat liniar și activare 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)
      )
    
  • Propagarea intrării prin toate straturile
  • Intrare: zgomot de dimensiune in_dim
  • Ieșire: imagine de dimensiune out_dim
Deep Learning pentru imagini cu PyTorch

Discriminator de bază

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)
  • Definirea clasei Discriminator
  • Secvență de blocuri discriminator și un strat liniar
    def disc_block(in_dim, out_dim):
      return nn.Sequential(
          nn.Linear(in_dim, out_dim),
          nn.LeakyReLU(0.2)
      )
    
  • Propagarea intrării prin toate straturile
  • Intrare: imagine de dimensiune in_dim
  • Ieșire: clasificare de dimensiune 1
Deep Learning pentru imagini cu PyTorch

Să exersăm!

Deep Learning pentru imagini cu PyTorch

Preparing Video For Download...