Wprowadzenie do GAN

Głębokie uczenie dla obrazów z PyTorch

Michal Oleszak

Machine Learning Engineer

Generatywne sieci antagonistyczne

Wygenerowany obraz kota.

Głębokie uczenie dla obrazów z PyTorch

Zestaw danych Pokemon Sprites

Przykładowe obrazy z zestawu danych Pokemon Sprites

  • Zestaw danych Pokemon Sprites z PokeAPI
  • Około 1300 sprite'ów stworzeń z gry wideo Pokemon
  • Cel: Generowanie nowych Pokemonów!
Głębokie uczenie dla obrazów z PyTorch

Architektura GAN

Diagram przepływu pracy GAN.

Głębokie uczenie dla obrazów z PyTorch

Architektura GAN

Diagram przepływu pracy GAN.

Głębokie uczenie dla obrazów z PyTorch

Architektura GAN

Diagram przepływu pracy GAN.

Głębokie uczenie dla obrazów z PyTorch

Architektura GAN

Diagram przepływu pracy GAN.

Głębokie uczenie dla obrazów z PyTorch

Proces uczenia GAN

 

 

Diagram przepływu pracy GAN.

  • Generator: uczy się tworzyć realistyczne obrazy
  • Dyskryminator: uczy się odróżniać fałszywe obrazy od prawdziwych
  • Sprzeczne cele sprawiają, że każda sieć doskonali swoje zadanie
  • Na końcu generator powinien tworzyć realistyczne obrazy
Głębokie uczenie dla obrazów z PyTorch

Podstawowy 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)
  • Definiuje klasę Generator
  • Sekwencja bloków generatora, warstwa liniowa i aktywacja 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)
      )
    
  • Przekazuje dane przez wszystkie warstwy
  • Wejście: szum o rozmiarze in_dim
  • Wyjście: obraz o rozmiarze out_dim
Głębokie uczenie dla obrazów z PyTorch

Podstawowy dyskryminator

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)
  • Definiuje klasę Discriminator
  • Sekwencja bloków dyskryminatora i warstwa liniowa
    def disc_block(in_dim, out_dim):
      return nn.Sequential(
          nn.Linear(in_dim, out_dim),
          nn.LeakyReLU(0.2)
      )
    
  • Przekazuje dane przez wszystkie warstwy
  • Wejście: obraz o rozmiarze in_dim
  • Wyjście: klasyfikacja o rozmiarze 1
Głębokie uczenie dla obrazów z PyTorch

Czas na ćwiczenia!

Głębokie uczenie dla obrazów z PyTorch

Preparing Video For Download...