Вступ до GAN

Глибоке навчання для зображень із PyTorch

Michal Oleszak

Machine Learning Engineer

Генеративно-змагальні мережі

Згенероване зображення кота.

  • https://thesecatsdonotexist.com
  • Generative Adversarial Networks (GANs)
  • Генерація нових зразків на основі тренувальних даних
Глибоке навчання для зображень із PyTorch

Набір даних Pokemon Sprites

Приклади зображень із набору Pokemon Sprites

  • Набір Pokemon Sprites з PokeAPI
  • Близько 1300 спрайтів істот з відеогри Pokemon
  • Мета: згенерувати нових покемонів!
Глибоке навчання для зображень із PyTorch

Архітектура GAN

Схема роботи GAN.

Глибоке навчання для зображень із PyTorch

Архітектура GAN

Схема роботи GAN.

Глибоке навчання для зображень із PyTorch

Архітектура GAN

Схема роботи GAN.

Глибоке навчання для зображень із PyTorch

Архітектура GAN

Схема роботи GAN.

Глибоке навчання для зображень із PyTorch

Процес навчання GAN

 

 

Схема роботи GAN.

  • Генератор: навчається створювати реалістичні зображення
  • Дискримінатор: навчається відрізняти фейки від справжніх
  • Суперечні цілі змушують обидві мережі ставати кращими
  • Врешті генератор має видавати реалістичні зображення
Глибоке навчання для зображень із PyTorch

Базовий 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)
  • Оголосіть клас Generator
  • Послідовність блоків генератора, лінійний шар і сигмоїда
    def gen_block(in_dim, out_dim):
      return nn.Sequential(
          nn.Linear(in_dim, out_dim),
          nn.BatchNorm1d(out_dim),
          nn.ReLU(inplace=True)
      )
    
  • Пропустіть вхід через усі шари
  • Вхід: шум розміру in_dim
  • Вихід: зображення розміру out_dim
Глибоке навчання для зображень із PyTorch

Базовий 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)
  • Оголосіть клас Discriminator
  • Послідовність блоків дискримінатора та лінійний шар
    def disc_block(in_dim, out_dim):
      return nn.Sequential(
          nn.Linear(in_dim, out_dim),
          nn.LeakyReLU(0.2)
      )
    
  • Пропустіть вхід через усі шари
  • Вхід: зображення розміру in_dim
  • Вихід: класифікація розміру 1
Глибоке навчання для зображень із PyTorch

Давайте потренуємось!

Глибоке навчання для зображень із PyTorch

Preparing Video For Download...