Введение в 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

Базовый генератор

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
  • Последовательность блоков генератора, линейного слоя и функции активации 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)
      )
    
  • Передача входных данных через все слои
  • Вход: шум размерности in_dim
  • Выход: изображение размерности out_dim
Глубокое обучение для работы с изображениями на PyTorch

Базовый дискриминатор

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...