|
|
||
|---|---|---|
| .. | ||
| GANPyTorch.ipynb | ||
| GANTF.ipynb | ||
| README.md | ||
| StyleTransfer.ipynb | ||
| StyleTransfer_Keras.ipynb | ||
README.md
Generatiiviset vastakkaisasettelumallit
EdellisessÀ osiossa opimme generatiivisista malleista: malleista, jotka voivat luoda uusia kuvia, jotka muistuttavat harjoitusaineistossa olevia kuvia. VAE oli hyvÀ esimerkki generatiivisesta mallista.
Pre-lecture quiz
Jos kuitenkin yritÀmme luoda jotain todella merkityksellistÀ, kuten maalauksen kohtuullisella resoluutiolla, VAE:lla huomaamme, ettÀ koulutus ei konvergoi hyvin. TÀtÀ kÀyttötapausta varten meidÀn tulisi oppia toinen arkkitehtuuri, joka on erityisesti suunnattu generatiivisille malleille - Generatiiviset vastakkaisasettelumallit, eli GANit.
GANin pÀÀidea on kÀyttÀÀ kahta neuroverkkoa, jotka koulutetaan toisiaan vastaan:
Kuva: Dmitry Soshnikov
â Pieni sanasto:
- Generaattori on verkko, joka ottaa satunnaisen vektorin ja tuottaa kuvan tuloksena.
- Diskriminaattori on verkko, joka ottaa kuvan ja yrittÀÀ mÀÀrittÀÀ, onko se oikea kuva (harjoitusaineistosta) vai generaattorin luoma. Se on kÀytÀnnössÀ kuvaluokitin.
Diskriminaattori
Diskriminaattorin arkkitehtuuri ei eroa tavallisesta kuvaluokitusverkosta. Yksinkertaisimmillaan se voi olla tÀysin yhdistetty luokitin, mutta todennÀköisesti se on konvoluutioneuroverkko.
â GAN, joka perustuu konvoluutioneuroverkkoihin, tunnetaan nimellĂ€ DCGAN
CNN-diskriminaattori koostuu seuraavista kerroksista: useita konvoluutioita ja poolauksia (joilla pienennetÀÀn spatiaalista kokoa) sekÀ yksi tai useampi tÀysin yhdistetty kerros, joilla saadaan "piirrevektori", ja lopuksi binÀÀriluokitin.
â 'Poolaus' tĂ€ssĂ€ yhteydessĂ€ on tekniikka, joka pienentÀÀ kuvan kokoa. "Poolauskerrokset pienentĂ€vĂ€t datan ulottuvuuksia yhdistĂ€mĂ€llĂ€ yhden kerroksen neuroniryhmien tulokset yhdeksi neuroniksi seuraavassa kerroksessa." - lĂ€hde
Generaattori
Generaattori on hieman monimutkaisempi. Voit ajatella sen olevan kÀÀnteinen diskriminaattori. Se alkaa latenttivektorista (piirrevektorin sijaan), sisÀltÀÀ tÀysin yhdistetyn kerroksen, joka muuntaa sen vaadittuun kokoon/muotoon, ja sitÀ seuraavat dekonstruktiot ja skaalaus ylöspÀin. TÀmÀ on samanlainen kuin autokooderin dekooderi-osa.
â Koska konvoluutiokerros toteutetaan lineaarisena suodattimena, joka kulkee kuvan lĂ€pi, dekonstruktio on pohjimmiltaan samanlainen kuin konvoluutio ja voidaan toteuttaa samalla kerroslogiikalla.
Kuva: Dmitry Soshnikov
GANin kouluttaminen
GANit ovat vastakkaisasettelullisia, koska generaattorin ja diskriminaattorin vÀlillÀ on jatkuva kilpailu. TÀmÀn kilpailun aikana sekÀ generaattori ettÀ diskriminaattori parantavat suoritustaan, jolloin verkko oppii tuottamaan yhÀ parempia kuvia.
Koulutus tapahtuu kahdessa vaiheessa:
- Diskriminaattorin kouluttaminen. TÀmÀ tehtÀvÀ on melko suoraviivainen: luomme generaattorin avulla erÀn kuvia, jotka merkitÀÀn 0:ksi (vÀÀrennetty kuva), ja otamme erÀn kuvia syötedatasta (merkittynÀ 1:ksi, oikea kuva). Saamme jonkin diskriminaattorihÀviön ja suoritamme takapropagaation.
- Generaattorin kouluttaminen. TÀmÀ on hieman monimutkaisempaa, koska emme tiedÀ generaattorin odotettua tulosta suoraan. Otamme koko GAN-verkon, joka koostuu generaattorista ja diskriminaattorista, syötÀmme siihen satunnaisia vektoreita ja odotamme tuloksen olevan 1 (vastaa oikeita kuvia). JÀÀdytÀmme sitten diskriminaattorin parametrit (emme halua sen kouluttuvan tÀssÀ vaiheessa) ja suoritamme takapropagaation.
TÀmÀn prosessin aikana sekÀ generaattorin ettÀ diskriminaattorin hÀviöt eivÀt laske merkittÀvÀsti. Ihannetilanteessa niiden tulisi vaihdella, mikÀ vastaa molempien verkkojen suorituskyvyn paranemista.
âïž Harjoitukset: GANit
GANin koulutuksen ongelmat
GANit ovat tunnetusti erityisen vaikeita kouluttaa. TÀssÀ muutamia ongelmia:
- Mode Collapse. TÀmÀ tarkoittaa, ettÀ generaattori oppii tuottamaan yhden onnistuneen kuvan, joka huijaa diskriminaattoria, mutta ei monenlaisia erilaisia kuvia.
- HerkkÀ hyperparametreille. Usein GAN ei konvergoi lainkaan, mutta oppimisnopeuden Àkillinen lasku voi johtaa konvergenssiin.
- Tasapainon yllÀpitÀminen generaattorin ja diskriminaattorin vÀlillÀ. Monissa tapauksissa diskriminaattorin hÀviö voi pudota nollaan suhteellisen nopeasti, mikÀ estÀÀ generaattoria kouluttautumasta edelleen. TÀmÀn voittamiseksi voimme yrittÀÀ asettaa eri oppimisnopeudet generaattorille ja diskriminaattorille tai ohittaa diskriminaattorin koulutuksen, jos hÀviö on jo liian alhainen.
- Korkean resoluution kouluttaminen. TÀmÀ ongelma liittyy samaan kuin autokoodereissa: liian monen konvoluutiokerroksen rekonstruointi johtaa artefakteihin. TÀmÀ ongelma ratkaistaan tyypillisesti niin sanotulla progressiivisella kasvulla, jossa ensin muutama kerros koulutetaan matalaresoluutioisilla kuvilla, ja sitten kerroksia "avataan" tai lisÀtÀÀn. Toinen ratkaisu on lisÀtÀ ylimÀÀrÀisiÀ yhteyksiÀ kerrosten vÀlille ja kouluttaa useita resoluutioita samanaikaisesti - katso lisÀtietoja tÀstÀ Multi-Scale Gradient GANs -paperista.
Tyylinsiirto
GANit ovat loistava tapa luoda taiteellisia kuvia. Toinen mielenkiintoinen tekniikka on niin sanottu tyylinsiirto, jossa otetaan yksi sisÀltökuva ja piirretÀÀn se uudelleen eri tyylillÀ, soveltaen tyylikuvan suodattimia.
NĂ€in se toimii:
- Aloitamme satunnaisesta kohinakuvaasta (tai sisÀltökuvasta, mutta ymmÀrtÀmisen kannalta on helpompi aloittaa satunnaisesta kohinasta).
- Tavoitteenamme on luoda sellainen kuva, joka olisi lÀhellÀ sekÀ sisÀltökuvaa ettÀ tyylikuvaa. TÀmÀ mÀÀritetÀÀn kahdella hÀviöfunktiolla:
- SisÀltöhÀviö lasketaan CNN:n tietyissÀ kerroksissa nykyisestÀ kuvasta ja sisÀltökuvasta saatujen piirteiden perusteella.
- TyylihÀvikkö lasketaan nykyisen kuvan ja tyylikuvan vÀlillÀ ÀlykkÀÀllÀ tavalla kÀyttÀmÀllÀ Gram-matriiseja (lisÀtietoja esimerkkimuistikirjassa).
- Kuvan tasoittamiseksi ja kohinan poistamiseksi otamme kÀyttöön myös Variation loss -hÀviön, joka laskee keskimÀÀrÀisen etÀisyyden vierekkÀisten pikselien vÀlillÀ.
- PÀÀoptimointisilmukka sÀÀtÀÀ nykyistÀ kuvaa gradienttilaskennan (tai jonkin muun optimointialgoritmin) avulla minimoidakseen kokonaismenetyksen, joka on kaikkien kolmen hÀviön painotettu summa.
âïž Esimerkki: Tyylinsiirto
Post-lecture quiz
Yhteenveto
TÀssÀ oppitunnissa opit GANeista ja niiden kouluttamisesta. Opit myös erityisistÀ haasteista, joita tÀmÀ neuroverkkojen tyyppi voi kohdata, sekÀ strategioista niiden voittamiseksi.
đ Haaste
KÀy lÀpi tyylinsiirto-muistikirja kÀyttÀen omia kuviasi.
Kertaus ja itseopiskelu
LisÀtietoja GANeista löydÀt nÀistÀ lÀhteistÀ:
- Marco Pasini, 10 Lessons I Learned Training GANs for one Year
- StyleGAN, GAN-arkkitehtuuri, jota kannattaa harkita
- Creating Generative Art using GANs on Azure ML
TehtÀvÀ
Palaa johonkin tÀmÀn oppitunnin kahdesta muistikirjasta ja kouluta GAN omilla kuvillasi. MitÀ voit luoda?
Vastuuvapauslauseke:
TÀmÀ asiakirja on kÀÀnnetty kÀyttÀmÀllÀ tekoÀlypohjaista kÀÀnnöspalvelua Co-op Translator. Pyrimme tarkkuuteen, mutta huomioithan, ettÀ automaattiset kÀÀnnökset voivat sisÀltÀÀ virheitÀ tai epÀtarkkuuksia. AlkuperÀistÀ asiakirjaa sen alkuperÀisellÀ kielellÀ tulee pitÀÀ ensisijaisena lÀhteenÀ. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskÀÀntÀmistÀ. Emme ole vastuussa tÀmÀn kÀÀnnöksen kÀytöstÀ aiheutuvista vÀÀrinkÀsityksistÀ tai virhetulkinnoista.