Workshop ML Essentials 2020

Generative Adversarial Networks (GAN)

@tsabsch

thanks to:

Quelle Icons auf folgenden Slides: freepik.com

Vorstellung

... und ihr?

Hat jemand schon Erfahrung mit GANs?

Was wollt ihr mit GANs machen?

@moseroli

@_nicoax

Brock, A., Donahue, J., & Simonyan, K. (2018). Large Scale GAN Training for High Fidelity Natural Image Synthesis

Was haben die Bilder gemeinsam?

Es fing 2014 an ...

  • Basics / Autoencoder
  • Was sind Generative Adversarial Networks?
  • Wofür kann man GANs verwenden?
  • WGAN, PGAN, CycleGAN, StyleGAN, cGAN, ....
  • Beispiele

Agenda

Theorie

Praxis Teile

  • Bild Daten
  • Geht das auch mit Text?

Abschluss

  • Wo gehts hin mit GANs?
  • Ideen Sammeln

(14:15 - 17:45)

Basics

Supervised Learning (Classifier)

Daten

(Pixel)

Modell
(Funktion)

Training

1 ->

2 ->

Label

\text{net}_{j} = \sum^{n}_{i=1} x_{i} w_{ij} \\ o_{j} = \varphi(\text{net}_{j} - \theta_j)

f(    ) = 2 (81%)

Prediction

Autoencoder

Bottleneck

repräsentiert

encode

decode

  • Anomalie Detection
  • Style Transfer
  • uvm.

Daten
(Komprimierung)

Label
(Komprimierung)

Daten
(SW -> Color)

Label
(SW -> Color)

Gabi

Diana

Ludwig

Auktionshaus Miller's

Kunstfälscherin

Junior

Senior

Was sind GANs? Eine kleine Analogie ...

  • Gabi möchte Kunst fälschen
  • Sie bekommt Feedback vom Auktionshaus
  • Diana muss noch lernen Fälschungen zu erkennen

Generieren, Bewerten und Lernen

Ist das echt?

Fälschung

So sehen echte Bilder aus!

Wieder was gelernt!

Ziel: Kunst erzeugen, die von echter Kunst nicht zu unterscheiden ist. (nash equilibrium, classifier = 0,5)

Generative Adversarial Network

Generator

Diskriminator (classifier)

/

learn a loss function

Generative Adversarial Network

Generator

Diskriminator

We propose a new framework for estimating generative models via an adversarial process, in which we simultaneously train two models: a generative model G that captures the data distribution, and a discriminative model D that estimates the probability that a sample came from the training data rather than G. The training procedure for G is to maximize the probability of D making a mistake. This framework corresponds to a minimax two-player game.

Goodfellow et al.:

Anwendungen und Beispiele

Aktives Forschungsfeld

Erhöhung der Bildauflösung (Super Resolution)

Ledig, C., Theis, L., Huszár, F. et al. Photo-realistic single image super-resolution
using a generative adversarial network. CVPR 2017

SRGAN

  • 4x Zoom
  • Loss
    • Adversarial: Discriminator entscheidet zwischen generierten hochaufgelösten Bildern SR und den echten Bildern HR
    • Content loss:
      • MSE SR und HR
      • VGG 19 Euklidische Distanz zwischen SR und HR 
  • ResNet
  • Trainingsdaten: SR -> Gaussian Filter und Downsampling Faktor r

SRGAN-Architektur

Picture Inpainting

Source NVIDIA research https://youtu.be/gg0F5JjKmhA:

Picture Inpainting

  • Vorbereitung
    • Training: 55166 Masken generiert
    • Testing: 25000 Masken
    • Datensätze: ImageNet, Place2, CelebA-HQ
  • Input: Bild + Binäre Maske
  • Während dem Training werden nur die Gewichte mit der Binären Maske angepasst.

U-Net

Einfärben von Schwarzweiß-Bildern

Original

SW

GAN

Nazeri, K., Ng, E., & Ebrahimi, M. Image colorization using generative adversarial networks. LNCS 2018

Style Transfer (CycleGAN)

Zhu, J., Park, T., Efros, A. et al. Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks.

Automatisierte Fotobearbeitung

Original

GAN

Zhu, J., Park, T., Efros, A. et al. Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks.

pix2pix

Ist das Kunst?

Edmond de Belamy

von GAN generiertes Bild

verkauft für 432.500 $ (Auktionshaus Christie's)

Künstler: Obvious (Gruppe)

 

Copyright Obvious

Gesichter erzeugen

powerd by StyleGAN, Karras et. al

TailorGAN

TailorGAN: Making User-Defined Fashion Designs, Chen et al. 2020

Eigenschaften übertragen

Karras et al. StyleGAN 2018

Karras et al. StyleGAN2 2019

Pause?

(S)Implementation

from keras.models import Sequential
from keras.layers import Dense, LeakyReLU, Reshape, MaxoutDense

img_shape = (28, 28)  # image height, width
res = 28 ** 2
noise_res = int(res / 4)

G = Sequential()
G.add(Dense(int(res/4), input_shape=(noise_res,)))
G.add(LeakyReLU())
G.add(Dense(int(res/2)))
G.add(LeakyReLU())
G.add(Dense(int(res)))
G.add(LeakyReLU())
G.add(MaxoutDense(res))
G.add(Reshape(img_shape))

Übung 1:

Übung 1 Aufgaben:

  1. Visualisiere einen Noise Vektor
  2. Manipuliere den Noise Vektor und schau was passiert
  3. Suche einen passenden latenten Vektor für jede Zahl

(S)Implementation


from keras.layers import Flatten

D = Sequential()
D.add(Flatten(input_shape=img_shape))
D.add(Dense(int(res/2)))
D.add(LeakyReLU())
D.add(Dense(int(res/4)))
D.add(LeakyReLU())
D.add(Dense(int(res/8)))
D.add(LeakyReLU())
D.add(Dense(1, activation='sigmoid'))
from keras.datasets import mnist
import numpy as np

(images, _), (_, _) = mnist.load_data()

# normalise data
images = (images - np.min(images)) / (np.max(images) - np.min(images))
from keras.models import Model
from keras.layers import Input
from keras.optimizers import Adam

optimizer = Adam(0.0002, 0.5)
D.compile(loss='binary_crossentropy', optimizer=optimizer)

D.trainable = False
z = Input(shape=(noise_res,))
full_gan = Model(z, D(G(z)))
full_gan.compile(loss='binary_crossentropy', optimizer=optimizer)
epochs = 30000
batch_size = 32
half_batch_size = int(batch_size / 2)

for epoch in range(epochs):
    # get half the batch from real images
    real_idxs = np.random.randint(images.shape[0], size=half_batch_size)
    real_batch = images[real_idxs]
    
    # get other half from generated images
    noise = np.random.normal(size=(half_batch_size, noise_res))
    fake_batch = G.predict(noise)
    
    # train discriminator
    D.train_on_batch(real_batch, np.ones(half_batch_size))
    D.train_on_batch(fake_batch, np.zeros(half_batch_size))

    # train generator
    noise = np.random.normal(size=(batch_size, noise_res))
    full_gan.train_on_batch(noise, np.ones(batch_size,))

Results

Wow! Gar nicht mal so gut!

GAN training is hard...

UNROLLED GENERATIVE ADVERSARIAL NETWORKS, Metz et. al ICLR 2017

GAN Herausforderungen

  • Mode Collapse: Generator findet Beispiele die den Discriminator täuschen und schränkt dadurch seine Lernfähigkeit ein -> es werden immer die gleichen Bilder erzeugt.
  • Hyperparameters: Durch die hohe Anzahl an Parameter (Kernel Size, Filter, Learning rate, Dropout, Batch Size, Latent Space, ...) können kleine Veränderungen dazu führen, dass das GAN nicht mehr konvergiert. Parametersuche ist Trial & Error.

Oscillating Loss: Loss sollte sich eigentlich über längeren Zeitraum als Stabil abzeichnen. Batch ~2000 

first there was ...

                 GAN and cGAN

  • "fully connected" (VGG, MLPs)
  • viele viele Parameter
  • cGAN = conditional GAN (zusätzlicher Input zur "Klasse")

Conditional GAN

Conditional GAN

  1. Visualisiere verschiedene Zahlen
  2. Manipuliere den Noise
  3. Was passiert wenn man den gleichen Noise mit verschiedenen Zahlen visualisiert?

sample = torch.LongTensor([4]).to(device)

test_img_2= G(noise, sample)

im_show_with_title(test_img_2.reshape(28,28).detach().cpu(), str(sample))

Deep Convolutional GAN

Radford, A., Metz, L., & Chintala, S. Unsupervised Representation Learning
with Deep Convolutional Generative Adversarial Networks

  • Convolutional-Architektur
  • Batchnormalisierung
  • (Leaky) Rectified Linear Unit
  • Strided Convolutions statt Pooling
  • Fügt sinnvolle Fehlerfunktion hinzu: Wasserstein-Distanz
  • aka Earthmover Problem
  • Abstand von 2 Distributions
  • Macht Ähnlichkeit von 2 Bildern messbar

Wasserstein GAN

Arjovsky, M., Chintala, S., & Bottou, L. (2017). Wasserstein GAN.

  • Discriminator wird zum Critic: Statt der Wahrscheinlichkeit Real/Fake wird ein Score berechnet. (Motivation: Generator Training soll die Distanz zwischen den Verteilungen real und fake Daten minimieren
  • Labels: [-1, 1]
  • Critic Loss:   [Durchschnitt Real Score] - [Durchschnitt Fake Score]
  • Generator loss: - [Durchschnitt Fake Score]

Wasserstein GAN

Wasserstein GAN

Arjovsky, M., Chintala, S., & Bottou, L. (2017). Wasserstein GAN.

Image to Image Translation

  • cGAN + L1
  • generator is a U-Net
  • discriminator is a convolutional PatchGAN
    (classify NxN Patches)

CycleGAN

  • like Image to Image Translation
  • F(G(x)) x  und  G(F(y) ≈ y  
    (inverse mapping, cycle Loss)
  • unpaired training data

Unpaired Image-to-Image Translation using Cycle-Consistent Adverserial networks -Jun-Yan Zhu et al. BAIR 2018

CycleGAN

  • 2 Generator
    • G_BA konvertiert Bilder von der Domäne B nach A
    • G_AB konvertiert Bilder von der Domäne A nach B
  • 2 Discriminator
    • D_A validiert Bilder von Domäne A und G_BA
    • D_B validert Bilder von Domäne B und G_AB
  • Training:
    • Validity: Täuschen die generierten Bilder den jeweiligen Discriminator?
    • Reconstruction: Wenn die Generatoren hintereinander ausgeführt werden, wie ähnlich ist das Bild zum original Bild
    • Identity: Wie stark bleiben Bilder unverändert wenn es aus der gleichen Domäne wie der Generator stammt?

GAN Grenzen

  • Kleine Bilder: 100x100 Pixel
  • Mehr Ressourcenverbrauch: 1024x1024 Pixel
  • Instabiles Training bei großen Bilder: Discriminator fällt es sehr einfach die Bilder zu unterscheiden.
     
  • Herausforderung: Stabiles Training des Generators um große Bilder zu generieren.

Progressive GAN

PROGRESSIVE GROWING OF GANS FOR IMPROVED QUALITY, STABILITY, AND VARIATION, Karras et al. ICLR 2018

  • uses Wasserstein loss
  • progressively grow G and D
  • better, faster, higher resolutions
  • higher variation minibatch standard deviation

(training time: 8 Tesla V100 x 4 days)

Progressive GAN

StyleGAN (2)

A Style-Based Generator Architecture for Generative Adversarial Networks, Karras et al. 2019

  • combine style transfer and GAN
  • different styles on different layers (fine, coarse styles)
  • progressive training
  • style mixing

StyleGAN (2)

  • Änderungen am Generator
  • Kein direkter Noise Input
  • Mapping Network: (Synthesis Network)
    • Input: Konstanter Vektor
    • Output: Stylevektor
  • Noise Layer: Variationen werden hier eingeführt
  • Statt Deconvolution Bilinear Upsampling Layer

StyleGAN (2)

Texte Generieren

                     ... mit GANs?

  • ist aktives Forschungsgebiet: funktioniert (noch) nicht gut
  • Text != Image

Text

  • Diskret: Zeichen, Wörter
  • Zeitliche Dimension: Reihenfolge von Wörter
  • Schritt für Schritt Verarbeitung
  • Sehr sensibel gegenüber Veränderungen von Wörtern/Zeichen
  • Grammatik

Image

  • Stetig: Pixel
  • Räumliche Dimension:
  • Parallele Verarbeitung
  • Robust gegenüber Veränderungen

Exkurs: RNN Texte Generieren 

  • RNN: Durch "Picking" (ArgMax an Hidden States) wird an jeder Stelle der "vorhersagte" Token gewählt
  • Vermutung mit GANs: G(z) -> generierte Satz den wir anschließend mit dem Discriminator bewerten
  • Problem: "Picking" ist nicht differenzierbar -> durch ArgMax an der Softmax können wir keinen Gradienten für den Generator bestimmen, wodurch kein effektives Training möglich ist

Texte Generieren

                     ... mit GANs?

Hauptproblem: Durch das "Picking" kein effektives Training

  1. Reinforcement Learning: States sind Wortfolgen und Actions ist das nächste Wort
  2. Gumbel-Softmax: Durch Gumbel Verteilung wird die Softmax zu einer stetigen Funktion
  3. Auto Encoder: Zuerst Autoencoder trainieren und nach latenten Vektor trainieren (LatextGAN)

Texte Generieren

                     ... mit GANs?

  • ist aktives Forschungsgebiet: funktioniert (noch) nicht gut
  • Texte werden Wort für Wort generiert
  • das "Picking" des wahrscheinlichsten Wortes ist nicht differenzierbar
  • Es gibt funktionierende Ansätze (RL, Gumbel-softmax)
    • RelGAN
    • LatextGAN
  • Besser funktionieren LMs (Bert, gpt-2, ...)
    try here: https://github.com/huggingface/transformers

Ausblick

  • Wohin geht die GAN Reise?
  • Was würdet ihr mit GANs ausprobieren?

GAN Workshop - ML Essentials

By Oliver Moser

GAN Workshop - ML Essentials

Einführung in das Thema GANs

  • 261
Loading comments...

More from Oliver Moser