Głęboka splotowa GAN

Głębokie uczenie dla obrazów z PyTorch

Michal Oleszak

Machine Learning Engineer

Intuicja głębokiej splotowej GAN

  • W dyskryminatorze warstwy liniowe zastępujemy splotowymi
  • W generatorze stosujemy odwrotne sploty
  • Trening GAN bywa niestabilny – potrzebne są dodatkowe ustawienia
Głębokie uczenie dla obrazów z PyTorch

Wytyczne DCGAN

  • Głęboka splotowa GAN (DCGAN)
  • Wytyczne DCGAN:
    • Stosować wyłącznie sploty z krokiem
    • Nie używać warstw liniowych ani poolingu
    • Stosować normalizację wsadową
    • W generatorze używać aktywacji ReLU (ostatnia warstwa: tanh)
    • W dyskryminatorze używać aktywacji Leaky ReLU

wykresy funkcji aktywacji

Głębokie uczenie dla obrazów z PyTorch

Splot z krokiem

Splot z krokiem 1:

Animacja splotu bez kroku.

nn.Conv2d(..., stride=1)

Splot z krokiem 2:

Animacja splotu z krokiem.

nn.Conv2d(..., stride=2)
Głębokie uczenie dla obrazów z PyTorch

Blok splotowego generatora

def dc_gen_block(
    in_dim, out_dim, kernel_size, stride
):

return nn.Sequential( nn.ConvTranspose2d( in_dim, out_dim, kernel_size, stride=stride, ),
nn.BatchNorm2d(out_dim),
nn.ReLU() )

Blok generatora składa się z:

  • Transponowanego splotu z krokiem
  • Normalizacji wsadowej
  • Aktywacji ReLU
Głębokie uczenie dla obrazów z PyTorch

Głęboki splotowy generator

class DCGenerator(nn.Module):
    def __init__(self, in_dim, kernel_size=4, stride=2):
        super(Generator, self).__init__()
        self.in_dim = in_dim

self.gen = nn.Sequential( dc_gen_block(in_dim, 1024, kernel_size, stride), dc_gen_block(1024, 512, kernel_size, stride), dc_gen_block(512, 256, kernel_size, stride),
nn.ConvTranspose2d(256, 3, kernel_size, stride=stride),
nn.Tanh() )
def forward(self, x): x = x.view(len(x), self.in_dim, 1, 1) return self.gen(x)
Głębokie uczenie dla obrazów z PyTorch

Blok splotowego dyskryminatora

def dc_disc_block(
    in_dim, out_dim, kernel_size, stride
):

return nn.Sequential( nn.Conv2d( in_dim, out_dim, kernel_size, stride=stride, ),
nn.BatchNorm2d(out_dim),
nn.LeakyReLU(0.2), )

Blok dyskryminatora składa się z:

  • Splotowej z krokiem
  • Normalizacji wsadowej
  • Aktywacji Leaky ReLU
Głębokie uczenie dla obrazów z PyTorch

Głęboki splotowy dyskryminator

class Discriminator(nn.Module):
    def __init__(self, kernel_size=4, stride=2):
        super(Discriminator, self).__init__()

self.disc = nn.Sequential( dc_disc_block(3, 512, kernel_size, stride), dc_disc_block(512, 1024, kernel_size, stride), nn.Conv2d(1024, 1, kernel_size, stride=stride), )
def forward(self, x): x = self.disc(x) return x.view(len(x), -1)
Głębokie uczenie dla obrazów z PyTorch

Czas na ćwiczenia!

Głębokie uczenie dla obrazów z PyTorch

Preparing Video For Download...