|
|
||
|---|---|---|
| .. | ||
| GANPyTorch.ipynb | ||
| GANTF.ipynb | ||
| README.md | ||
| StyleTransfer.ipynb | ||
| StyleTransfer_Keras.ipynb | ||
README.md
Generatiiviset vastakkaiset verkot
EdellisessÀ osiossa opimme generatiivisista malleista: malleista, jotka voivat luoda uusia kuvia, jotka muistuttavat koulutusdatan kuvia. VAE oli hyvÀ esimerkki generatiivisesta mallista.
Ennakkokysely
Kuitenkin, jos yritÀmme luoda jotain todella merkityksellistÀ, kuten maalauksen kohtuullisella resoluutiolla, VAE:lla huomaamme, ettÀ koulutus ei etene hyvin. TÀtÀ kÀyttötarkoitusta varten meidÀn tulisi oppia toinen arkkitehtuuri, joka on erityisesti suunnattu generatiivisiin malleihin - Generatiiviset vastakkaiset verkot, 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 pyrkii mÀÀrittÀmÀÀn, onko se oikea kuva (koulutusdatasta) vai generaattorin tuottama. Se on pohjimmiltaan kuvien luokittelija.
Diskriminaattori
Diskriminaattorin arkkitehtuuri ei eroa tavallisesta kuvien luokitteluun tarkoitetusta verkosta. Yksinkertaisimmillaan se voi olla tÀysin yhdistetty luokittelija, mutta todennÀköisimmin se on konvoluutioverkko.
â GAN, joka perustuu konvoluutioverkkoihin, kutsutaan nimellĂ€ DCGAN
CNN-diskriminaattori koostuu seuraavista kerroksista: useita konvoluutioita+poolauksia (joilla pienennetÀÀn spatiaalista kokoa) ja yksi tai useampi tÀysin yhdistetty kerros, joka tuottaa "piirrevektorin", lopuksi binÀÀriluokittelija.
â 'Poolaus' tĂ€ssĂ€ yhteydessĂ€ tarkoittaa tekniikkaa, joka pienentÀÀ kuvan kokoa. "Poolauskerrokset pienentĂ€vĂ€t datan dimensioita 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. Aloittaen latenttivektorista (piirrevektorin sijaan), siinÀ on tÀysin yhdistetty kerros, joka muuntaa sen vaadittuun kokoon/muotoon, jota seuraa dekonvoluutio+skaalaus. TÀmÀ on samanlainen kuin autokooderin dekooderi-osa.
â Koska konvoluutiokerros toteutetaan lineaarisena suodattimena, joka kulkee kuvan lĂ€pi, dekonvoluutio on pohjimmiltaan samanlainen kuin konvoluutio ja voidaan toteuttaa samalla kerroslogiikalla.
Kuva: Dmitry Soshnikov
GANin koulutus
GANeja kutsutaan vastakkaisiksi, 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 koulutus. TÀmÀ tehtÀvÀ on melko suoraviivainen: generaattori tuottaa erÀn kuvia, jotka merkitÀÀn 0:ksi (vÀÀrennetty kuva), ja otetaan erÀ kuvia syöttödatasta (merkittynÀ 1:ksi, oikea kuva). Saamme jonkin diskriminaattorihÀviön ja suoritamme takaisinkulun.
- Generaattorin koulutus. 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). Sitten jÀÀdytÀmme diskriminaattorin parametrit (emme halua sen kouluttavan tÀssÀ vaiheessa) ja suoritamme takaisinkulun.
TÀmÀn prosessin aikana sekÀ generaattorin ettÀ diskriminaattorin hÀviöt eivÀt laske merkittÀvÀsti. Ihannetilanteessa niiden tulisi vÀrÀhdellÀ, mikÀ vastaa molempien verkkojen suorituskyvyn paranemista.
âïž Harjoitukset: GANit
GANin koulutuksen ongelmat
GANit ovat tunnetusti erityisen vaikeita kouluttaa. TÀssÀ muutamia ongelmia:
- Mode Collapse. TÀllÀ termillÀ tarkoitetaan, ettÀ generaattori oppii tuottamaan yhden onnistuneen kuvan, joka huijaa diskriminaattoria, mutta ei monipuolista valikoimaa erilaisia kuvia.
- HerkkÀ hyperparametreille. Usein voi nÀhdÀ, ettÀ GAN ei konvergoi ollenkaan, ja sitten oppimisnopeuden Àkillinen lasku johtaa konvergenssiin.
- Tasapainon yllÀpitÀminen generaattorin ja diskriminaattorin vÀlillÀ. Monissa tapauksissa diskriminaattorin hÀviö voi pudota nollaan suhteellisen nopeasti, mikÀ johtaa siihen, ettÀ generaattori ei pysty enÀÀ kouluttautumaan. 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 koulutus. Sama ongelma kuin autokoodereilla, tÀmÀ ongelma syntyy, koska liian monen konvoluutiokerroksen rekonstruointi johtaa artefakteihin. TÀmÀ ongelma ratkaistaan tyypillisesti niin sanotulla progressiivisella kasvulla, jossa ensin muutama kerros koulutetaan matalaresoluutioisilla kuvilla, ja sitten kerrokset "avataan" tai lisÀtÀÀn. Toinen ratkaisu olisi lisÀtÀ ylimÀÀrÀisiÀ yhteyksiÀ kerrosten vÀlillÀ ja kouluttaa useita resoluutioita samanaikaisesti - katso tÀmÀ Multi-Scale Gradient GANs -paperi saadaksesi lisÀtietoja.
Tyylinsiirto
GANit ovat erinomainen tapa luoda taiteellisia kuvia. Toinen mielenkiintoinen tekniikka on niin sanottu tyylinsiirto, joka ottaa yhden sisÀltökuvan ja piirtÀÀ sen uudelleen eri tyylillÀ, soveltaen suodattimia tyylikuvasta.
NĂ€in se toimii:
- Aloitamme satunnaisesta kohinakuvaasta (tai sisÀltökuvasta, mutta ymmÀrtÀmisen vuoksi 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 tietyillÀ kerroksilla nykyisestÀ kuvasta ja sisÀltökuvasta saatujen piirteiden perusteella.
- TyylihÀviö lasketaan nykyisen kuvan ja tyylikuvan vÀlillÀ ÀlykkÀÀllÀ tavalla kÀyttÀmÀllÀ Gram-matriiseja (lisÀtietoja esimerkkimuistikirjassa).
- Jotta kuva olisi tasaisempi ja poistaisi kohinaa, lisÀÀmme 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 kÀyttÀmÀllÀ gradienttilaskentaa (tai jotain muuta optimointialgoritmia) minimoidakseen kokonaishÀviön, joka on kaikkien kolmen hÀviön painotettu summa.
âïž Esimerkki: Tyylinsiirto
JĂ€lkikysely
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, de facto GAN-arkkitehtuuri harkittavaksi
- 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?