|
|
||
|---|---|---|
| .. | ||
| GANPyTorch.ipynb | ||
| GANTF.ipynb | ||
| README.md | ||
| StyleTransfer.ipynb | ||
| StyleTransfer_Keras.ipynb | ||
README.md
Generativa Adversariella NĂ€tverk
I föregÄende avsnitt lÀrde vi oss om generativa modeller: modeller som kan generera nya bilder som liknar de i trÀningsdatamÀngden. VAE var ett bra exempel pÄ en generativ modell.
Quiz före förelÀsningen
Men om vi försöker generera nÄgot riktigt meningsfullt, som en mÄlning med rimlig upplösning, med VAE, kommer vi att mÀrka att trÀningen inte konvergerar sÀrskilt bra. För detta anvÀndningsomrÄde bör vi lÀra oss om en annan arkitektur som Àr specifikt inriktad pÄ generativa modeller - Generativa Adversariella NÀtverk, eller GANs.
Huvudidén med en GAN Àr att ha tvÄ neurala nÀtverk som trÀnas mot varandra:
Bild av Dmitry Soshnikov
â Lite vokabulĂ€r:
- Generator Àr ett nÀtverk som tar en slumpmÀssig vektor och producerar en bild som resultat.
- Discriminator Àr ett nÀtverk som tar en bild och ska avgöra om det Àr en riktig bild (frÄn trÀningsdatamÀngden) eller om den genererats av en generator. Det Àr i grunden en bildklassificerare.
Discriminator
Discriminatorns arkitektur skiljer sig inte frÄn ett vanligt bildklassificeringsnÀtverk. I det enklaste fallet kan det vara en helt ansluten klassificerare, men oftast kommer det att vara ett konvolutionellt nÀtverk.
â En GAN baserad pĂ„ konvolutionella nĂ€tverk kallas en DCGAN
En CNN-discriminator bestÄr av följande lager: flera konvolutioner + pooling (med minskande spatial storlek) och en eller flera helt anslutna lager för att fÄ en "funktionsvektor", samt en slutlig binÀr klassificerare.
â "Pooling" i detta sammanhang Ă€r en teknik som minskar bildens storlek. "Pooling-lager minskar datans dimensioner genom att kombinera utgĂ„ngarna frĂ„n neuronkluster i ett lager till en enda neuron i nĂ€sta lager." - kĂ€lla
Generator
En generator Àr nÄgot mer komplicerad. Du kan se den som en omvÀnd discriminator. Med start frÄn en latent vektor (istÀllet för en funktionsvektor) har den ett helt anslutet lager för att omvandla den till önskad storlek/form, följt av dekonvolutioner + uppskalning. Detta liknar dekoder-delen av autoencoder.
â Eftersom konvolutionslagret implementeras som ett linjĂ€rt filter som traverserar bilden, Ă€r dekonvolution i princip liknande konvolution och kan implementeras med samma lagerlogik.
Bild av Dmitry Soshnikov
TrÀning av GAN
GANs kallas adversariella eftersom det pÄgÄr en stÀndig tÀvling mellan generatorn och discriminatorn. Under denna tÀvling förbÀttras bÄde generatorn och discriminatorn, vilket gör att nÀtverket lÀr sig att producera bÀttre och bÀttre bilder.
TrÀningen sker i tvÄ steg:
- TrÀning av discriminatorn. Denna uppgift Àr ganska enkel: vi genererar en batch av bilder med generatorn, mÀrker dem som 0 (vilket stÄr för falska bilder), och tar en batch av bilder frÄn inmatningsdatamÀngden (med etikett 1, riktiga bilder). Vi fÄr en discriminatorförlust och utför backpropagation.
- TrÀning av generatorn. Detta Àr nÄgot mer komplicerat eftersom vi inte direkt vet det förvÀntade resultatet för generatorn. Vi tar hela GAN-nÀtverket som bestÄr av en generator följt av en discriminator, matar det med nÄgra slumpmÀssiga vektorer och förvÀntar oss att resultatet ska vara 1 (motsvarande riktiga bilder). Vi fryser sedan parametrarna för discriminatorn (vi vill inte att den ska trÀnas i detta steg) och utför backpropagation.
Under denna process gÄr varken generatorns eller discriminatorns förluster ner sÀrskilt mycket. I en idealisk situation bör de oscillera, vilket motsvarar att bÄda nÀtverken förbÀttrar sin prestanda.
âïž Ăvningar: GANs
Problem med GAN-trÀning
GANs Àr kÀnda för att vara sÀrskilt svÄra att trÀna. HÀr Àr nÄgra problem:
- Mode Collapse. Med detta menas att generatorn lÀr sig att producera en framgÄngsrik bild som lurar discriminatorn, men inte en variation av olika bilder.
- KÀnslighet för hyperparametrar. Ofta kan man se att en GAN inte konvergerar alls, och sedan plötsligt minskar inlÀrningshastigheten vilket leder till konvergens.
- Att hÄlla en balans mellan generatorn och discriminatorn. I mÄnga fall kan discriminatorns förlust sjunka till noll relativt snabbt, vilket resulterar i att generatorn inte kan trÀna vidare. För att övervinna detta kan vi försöka sÀtta olika inlÀrningshastigheter för generatorn och discriminatorn, eller hoppa över trÀningen av discriminatorn om förlusten redan Àr för lÄg.
- TrÀning för hög upplösning. Detta problem liknar det med autoencoders och uppstÄr eftersom rekonstruktion av för mÄnga lager i ett konvolutionellt nÀtverk leder till artefakter. Problemet löses vanligtvis med sÄ kallad progressiv tillvÀxt, dÀr de första lagren trÀnas pÄ lÄgupplösta bilder och sedan "lÄses upp" eller lÀggs till fler lager. En annan lösning Àr att lÀgga till extra kopplingar mellan lager och trÀna flera upplösningar samtidigt - se denna Multi-Scale Gradient GANs-artikel för detaljer.
Stilöverföring
GANs Àr ett utmÀrkt sÀtt att generera konstnÀrliga bilder. En annan intressant teknik Àr sÄ kallad stilöverföring, som tar en innehÄllsbild och ritar om den i en annan stil genom att applicera filter frÄn en stilbild.
SÄ hÀr fungerar det:
- Vi börjar med en slumpmÀssig brusbild (eller med en innehÄllsbild, men för förstÄelsens skull Àr det enklare att börja med slumpmÀssigt brus).
- VÄrt mÄl Àr att skapa en bild som ligger nÀra bÄde innehÄllsbilden och stilbilden. Detta bestÀms av tvÄ förlustfunktioner:
- InnehÄllsförlust berÀknas baserat pÄ de funktioner som extraheras av CNN vid vissa lager frÄn den aktuella bilden och innehÄllsbilden.
- Stilförlust berÀknas mellan den aktuella bilden och stilbilden pÄ ett smart sÀtt med hjÀlp av Gram-matriser (mer detaljer i exempelnotebooken).
- För att göra bilden mjukare och ta bort brus introducerar vi ocksÄ Variationsförlust, som berÀknar det genomsnittliga avstÄndet mellan nÀrliggande pixlar.
- Den huvudsakliga optimeringsloopen justerar den aktuella bilden med hjÀlp av gradientnedstigning (eller nÄgon annan optimeringsalgoritm) för att minimera den totala förlusten, som Àr en viktad summa av alla tre förluster.
âïž Exempel: Stilöverföring
Quiz efter förelÀsningen
Slutsats
I denna lektion lÀrde du dig om GANs och hur man trÀnar dem. Du lÀrde dig ocksÄ om de speciella utmaningar som denna typ av neuralt nÀtverk kan möta och nÄgra strategier för att övervinna dem.
đ Utmaning
Kör igenom Stilöverföringsnotebooken med dina egna bilder.
Granskning & SjÀlvstudier
För referens, lÀs mer om GANs i dessa resurser:
- Marco Pasini, 10 Lessons I Learned Training GANs for one Year
- StyleGAN, en de facto GAN-arkitektur att övervÀga
- Skapa generativ konst med GANs pÄ Azure ML
Uppgift
GÄ tillbaka till en av de tvÄ notebookarna som Àr kopplade till denna lektion och trÀna om GAN pÄ dina egna bilder. Vad kan du skapa?