|
|
||
|---|---|---|
| .. | ||
| GANPyTorch.ipynb | ||
| GANTF.ipynb | ||
| README.md | ||
| StyleTransfer.ipynb | ||
| StyleTransfer_Keras.ipynb | ||
README.md
Generative Adversarial Networks
I forrige seksjon lærte vi om generative modeller: modeller som kan generere nye bilder som ligner på de i treningsdatasettet. VAE var et godt eksempel på en generativ modell.
Pre-lecture quiz
Men hvis vi prøver å generere noe virkelig meningsfullt, som et maleri med rimelig oppløsning, med VAE, vil vi se at treningen ikke konvergerer godt. For dette brukstilfellet bør vi lære om en annen arkitektur som er spesifikt rettet mot generative modeller - Generative Adversarial Networks, eller GANs.
Hovedideen med en GAN er å ha to nevrale nettverk som trenes mot hverandre:
Bilde av Dmitry Soshnikov
✅ Litt vokabular:
- Generator er et nettverk som tar en tilfeldig vektor og produserer et bilde som resultat.
- Discriminator er et nettverk som tar et bilde og skal avgjøre om det er et ekte bilde (fra treningsdatasettet) eller om det ble generert av en generator. Det er i hovedsak en bildekategoriserer.
Discriminator
Arkitekturen til discriminator skiller seg ikke fra et vanlig bildekategoriseringsnettverk. I det enkleste tilfellet kan det være en fullt tilkoblet klassifiserer, men mest sannsynlig vil det være et konvolusjonsnettverk.
✅ En GAN basert på konvolusjonsnettverk kalles en DCGAN
En CNN-discriminator består av følgende lag: flere konvolusjoner+poolings (med minkende romlig størrelse) og én eller flere fullt tilkoblede lag for å få en "funksjonsvektor", og til slutt en binær klassifiserer.
✅ 'Pooling' i denne sammenhengen er en teknikk som reduserer størrelsen på bildet. "Pooling-lag reduserer dimensjonene av data ved å kombinere utgangene fra nevronklynger på ett lag til et enkelt nevron på neste lag." - kilde
Generator
En generator er litt mer komplisert. Du kan betrakte den som en omvendt discriminator. Fra en latent vektor (i stedet for en funksjonsvektor) har den et fullt tilkoblet lag for å konvertere det til ønsket størrelse/form, etterfulgt av dekonvolusjoner+oppskalering. Dette ligner på dekoder-delen av autoencoder.
✅ Fordi konvolusjonslaget implementeres som et lineært filter som beveger seg over bildet, er dekonvolusjon i hovedsak lik konvolusjon og kan implementeres med samme laglogikk.
Bilde av Dmitry Soshnikov
Trening av GAN
GANs kalles adversarial fordi det er en konstant konkurranse mellom generatoren og discriminatoren. Under denne konkurransen forbedres både generatoren og discriminatoren, og nettverket lærer å produsere bedre og bedre bilder.
Treningen skjer i to stadier:
- Trening av discriminator. Denne oppgaven er ganske enkel: vi genererer en batch med bilder fra generatoren, merker dem med 0, som står for falske bilder, og tar en batch med bilder fra input-datasettet (med merkelapp 1, ekte bilder). Vi får en discriminator loss og utfører backprop.
- Trening av generator. Dette er litt mer komplisert, fordi vi ikke direkte vet det forventede resultatet for generatoren. Vi tar hele GAN-nettverket som består av en generator etterfulgt av en discriminator, mater det med noen tilfeldige vektorer, og forventer at resultatet skal være 1 (tilsvarende ekte bilder). Vi fryser deretter parameterne til discriminatoren (vi vil ikke at den skal trenes i dette steget) og utfører backprop.
Under denne prosessen går verken generator- eller discriminator-tapene betydelig ned. I ideelle situasjoner bør de oscillere, noe som tilsvarer at begge nettverk forbedrer ytelsen.
✍️ Øvelser: GANs
Problemer med GAN-trening
GANs er kjent for å være spesielt vanskelige å trene. Her er noen problemer:
- Mode Collapse. Med dette begrepet mener vi at generatoren lærer å produsere ett vellykket bilde som lurer discriminatoren, og ikke en variasjon av forskjellige bilder.
- Sensitivitet for hyperparametere. Ofte kan du se at en GAN ikke konvergerer i det hele tatt, og så plutselig fører en reduksjon i læringsraten til konvergens.
- Å opprettholde en balanse mellom generatoren og discriminatoren. I mange tilfeller kan discriminator-tapet falle til null relativt raskt, noe som resulterer i at generatoren ikke kan trenes videre. For å overvinne dette kan vi prøve å sette forskjellige læringsrater for generatoren og discriminatoren, eller hoppe over trening av discriminator hvis tapet allerede er for lavt.
- Trening for høy oppløsning. Dette reflekterer det samme problemet som med autoencodere, og problemet oppstår fordi rekonstruksjon av for mange lag i konvolusjonsnettverket fører til artefakter. Dette problemet løses vanligvis med såkalt progressiv vekst, der først noen få lag trenes på lavoppløste bilder, og deretter "låses opp" eller legges til lag. En annen løsning er å legge til ekstra forbindelser mellom lagene og trene flere oppløsninger samtidig - se denne Multi-Scale Gradient GANs-artikkelen for detaljer.
Style Transfer
GANs er en flott måte å generere kunstneriske bilder på. En annen interessant teknikk er såkalt style transfer, som tar ett innholdsbilde og tegner det på nytt i en annen stil, ved å bruke filtre fra stilbilde.
Slik fungerer det:
- Vi starter med et tilfeldig støybilde (eller med et innholdsbilde, men for forståelsens skyld er det lettere å starte med tilfeldig støy).
- Målet vårt vil være å lage et bilde som er nært både innholdsbilde og stilbilde. Dette bestemmes av to tapfunksjoner:
- Content loss beregnes basert på funksjonene som er hentet ut av CNN på noen lag fra nåværende bilde og innholdsbilde.
- Style loss beregnes mellom nåværende bilde og stilbilde på en smart måte ved hjelp av Gram-matriser (mer detaljer i eksempelfilen).
- For å gjøre bildet jevnere og fjerne støy, introduserer vi også Variation loss, som beregner gjennomsnittlig avstand mellom nabopiksler.
- Den viktigste optimaliseringssløyfen justerer nåværende bilde ved hjelp av gradient descent (eller en annen optimaliseringsalgoritme) for å minimere det totale tapet, som er en vektet sum av alle tre tapene.
✍️ Eksempel: Style Transfer
Post-lecture quiz
Konklusjon
I denne leksjonen lærte du om GANs og hvordan du trener dem. Du lærte også om de spesielle utfordringene denne typen nevrale nettverk kan møte, og noen strategier for å komme forbi dem.
🚀 Utfordring
Kjør gjennom Style Transfer-notebooken med dine egne bilder.
Gjennomgang og selvstudium
For referanse, les mer om GANs i disse ressursene:
- Marco Pasini, 10 Lessons I Learned Training GANs for one Year
- StyleGAN, en de facto GAN-arkitektur å vurdere
- Creating Generative Art using GANs on Azure ML
Oppgave
Gå tilbake til en av de to notebookene knyttet til denne leksjonen og tren GAN på dine egne bilder. Hva kan du skape?
Ansvarsfraskrivelse:
Dette dokumentet er oversatt ved hjelp av AI-oversettelsestjenesten Co-op Translator. Selv om vi streber etter nøyaktighet, vær oppmerksom på at automatiske oversettelser kan inneholde feil eller unøyaktigheter. Det originale dokumentet på sitt opprinnelige språk bør anses som den autoritative kilden. For kritisk informasjon anbefales profesjonell menneskelig oversettelse. Vi er ikke ansvarlige for misforståelser eller feiltolkninger som oppstår ved bruk av denne oversettelsen.