< eelmine | 3. OSA sisukord | järgmine > |
3.5 Piltide genereerimine autor: Ardi Tampuu
Senistes peatükkides oleme käsitlenud vaid olemasolevatelt piltidelt info välja lugemist, aga see on ainult üks paljudest masinnägemise valdkondadest. Täiesti eraldiseisvaid probleeme on masinnägemises aga veel lugematul hulgal.
Käesolevas alapeatükis käsitleme me uute piltide genereerimist:
- Täiesti nullist, küsides tehisnärvivõrgul ise midagi suvalist välja mõelda.
- Mingi etteantud sisu alusel - loo pilt, mis sisaldab mingit tüüpi asju või mis vastab mingile kirjeldusele.
- Mingi etteantud "stiili" alusel - loo pilt, mis on mingis kunstistiilis, mingi valgusega, mingi domineeriva värvi või tekstuuriga, jne.
Piltide loomine nullist
On erinevaid viise, kuidas õpetada tehisnärvivõrke pilte genereerima. Siin alapeatükis näitame me tulemusi, mis on saavutatud generatiivsete võistlusvõrkude abil (GAN, ingl generative adversarial network).
GAN-id koosnevad kahest tehisnärvivõrgust, millest üks loob (genereerib) pilte, saades sisendiks lihtsalt juhuslike arvudega täidetud vektori. Teine võrk saab sisendiks esimese võrgu poolt loodud pilte ja päris pilte ning õpib tuvastama, kas pilt on päris või genereeritud. Genereerivat võrku optimeeritakse nii, et detekteerival võrgul oleks võimalikult keeruline päris ja võltspiltidel vahet teha. Samaaegselt õpib ka detekteeriv võrk ja saab näidetest õppimise käigus üha osavamaks päris piltide tuvastamises. Seega kaks võrku võistlevad oma vahel, üks püüab õppida teist ära petma ja teine püüab mitte petta saada. Sellise võistluse tulemusena õpib genereeriv võrk lõpuks üsna loomulikke pilte looma, vastasel juhul ei suudaks ta teist võrku ära petta.
Joonisel 31 on näidatud NVIDIA teadlaste poolt loodud GANide abil genereeritud pildid. Need pildid on juhuslikud väljundid, mitte käsitsi valitud kõige paremini õnnestunud pildid. Näidatud on kolme eri tüüpi pilte. Iga objektiklassi jaoks peab treenima eraldi võrgud (genereeriva ja detekteeriva), aga kõigi kolme võrgu ülesehitus on sama.
Joonis 31. NVIDIA genereerivate võrkude poolt loodud pildid autodest, magamistubadest ja nägudest. Ehk siis selliseid inimesi, autosid ja tubasid pole reaalselt olemas.
Allikas
Jooniselt 31 on muuhulgas näha, et on võimalik nullist (juhuslike arvudega täidetud vektori põhjal) luua täiesti usutavana paistvaid portreefotosid. Veelgi enam, on võimalik vaadata täpselt, milise juhusliku vektori põhjal pilt loodi ja kuidas genereeriva võrgu iga kihi neuronid selle näo loomise käigus aktiveerunud olid (kui suured olid nende väljundid). Teatud viisil sisendvektoreid ja eri kihtide neuronite väljundeid keskmistades on võimalik kahte portreed (kahte nägu) omavahel kokku panna. Joonisel 32 on näidatud teatud viisil näopiltide omavaheline kombineerimine.
Joonis 32. Erinevate nägude kombineerimine. Pilte genereerivad süsteemid lubavad luua kahe näo omavahelisi kombinatsioone. Vasakul on nägu, mida kombineeritakse kõigi nelja ülemises read kujutatud näoga. Ülemistest nägudest püütakse säilitada teatud tunnuseid, mis on ka joonisel kirjas. Kõik muu, näiteks nahavärv ja juuksevärv, tuleneb vasakpoolsest pildist. Selliselt nägusid kombineerides genereeritud uued pildid on antud alumises reas.
Allikas (siit näeb ka rohkem näiteid)
Näidisrakendus
Juhuslike piltide genereerimise kõige otsesem kasutusjuht on puuduvate pildialade täitmine konteksti sobiva sisuga. Enamasti pole piltidel "puuduvaid alasid", välja arvatud juhul kui välja prinditud pilt on kahjustada saanud. Siiski on vahel inimestel soov ise pildilt ühtteist digitaalselt välja lõigata, näiteks kui ilusale pulmafotole on lisaks noorpaarile jäänud ka keegi kõrvaline isik. NVIDIA (graafikakaarte tootev firma) teadlased on loonud lahenduse, mis lubab pildilt teatud alad kustutada ja paluda generatiivsel tehisnärvivõrgul need alad taas täita. Joonisel 33. on näide selle rakenduse ühest kasutusjuhust.
Joonis 33. Puuduva pildiosa genereerimine. Soovite kogemata pildile jäänud isikut eemaldada? Pole probleemi. Kustutage ära eemaldamist vajav osa ja võrk genereerib puuduva pildiosa.
Allikas
Puuduva pildiosa täitmist saab ise proovida NVIDIA lehel. (mitte-kohustuslik)
Vahemärkus
Enne, kui liigume keerulisemate genereerimise ülesannete juurde, mainime, et GANid pole ainsad midagi ise luua suutvad tehisnärvivõrgud. On palju alternatiivseid lähenemisi piltide, muusika ja muu sisu genereerimise probleemidele. Autoenkooderid ja variatiivsed autoenkooderid võtavad treenides sisendiks päris pildi, arvutavad mitmete neuronikihtide kaudu sisendpildi põhjal teatud pikkusega tunnustevektori ja siis üritavad järgnevate kihtide abil uuesti tunnusvektori põhjal algset pilti taasluua. Seega - pildil olev info surutakse kokku ühte tunnusvektorisse ja siis genereeritakse selle vektori põhjal uuesti algse pildiga võimalikult sarnane pilt. Selliselt treenitud võrgu abil on võimalik genereerida uusi suvalisi pilte, andes pilte taasloovale võrguosale sisendiks juhuslike arvudega täidetud tunnusvektori (mingist pildist eristatud tunnuste asemel).
Ei ole mingit alust öelda, milline mudelitüüp (GAN, variatiivne autoenkooder, ...) on alati ja kõigi rakenduste jaoks parim. Mitmete lähenemistega on saavutatud huvitavaid tulemusi ja neid on võimalik rakendada paindlikult ka järgnevas alapeatükis mainitud tingimusliku genereerimise jaoks.
Tingimuslik piltide loomine
Tingimuslikud generatiivsed mudelid lubavad luua sama mudelit kasutades erineva sisuga pilte. Seega pole vaja näo- ja autopiltide genereerimiseks eraldi võrke, piisab ühest generatiivsest tehisnärvivõrgust ja lisasisendist, mis defineerib, millise sisuga pilti me soovime. Veelgi enam, me võiksime küsida ka pilti, millel on nii nägu kui ka auto.
Sellist lahendust keeletöötluseks mõeldud tehisnärvivõrkudega kombineerides on võimalik luua lahendus, mis loob pildi sõnalise kirjelduse alusel. Kasutaja trükib sisse kirjelduse ja saab vastuseks pildi, mis sellele kirjeldusele vastab. Tuleb tunnistada, et võrreldes suvaliste piltide loomisega, on see märgatavalt keerulisem probleem. Midagi võib valesti minna nii tekstist arusaamisel kui selle pildiks vormimisel. Loodud pildid on tihti väga nähtavalt veidrad. Siiski on mõningast edu saavutatud, Joonisel 34 on esitatud mõned sõnalise kirjelduse põhjal genereeritud pildid lindudest.
Joonis 34. Sõnalise kirjelduse põhjal genereeritud pildid lindudest. Mõned linnud on deformeerunud kujuga, aga üldjoontes on mudel aru saanud sõnalise kirjelduse mõttest.
Allikas
Lisaks sõnalisele või muul viisil pildi sisu piiritlemisele, on võimalik valida ka pildi stiili. Stiili all mõeldakse siinkohal enamasti tekstuuri, värvivalikut, joonte ja pindade omapärasid jne. Näiteks mustvalgel karikatuuril, fotol ja õlimaalil on kõigil erinev stiil, isegi kui nad kõik kujutavad samas poosis inimest.
Enamasti määratletakse stiili piltide genereerimisel andes ette näide, mille stiili kopeerida soovitakse. Samaaegselt on võimalik määratleda ka soovitud sisu. Üheks võimaluseks sisu määratlemisel on samuti näite ette andmine. Protsessi, mis võtab sisendiks kaks pilti, stiilinäite ja sisunäite, ja loob nende põhjal uue pildi, mis on soovitud sisu ja stiiliga, kutsutakse närvivõrkudel põhinev stiiliülekanne (ingl Neural Style Transfer). Joonisel 35 on näited erineva sisuga fotode stiliseerimisest kuulsate kunstistiilide (kuulsatest maalidest ekstraheeritud stiilide) järgi.
Joonis 35. Närvivõrkudel põhinev stiiliülekanne. Vasakpoolse pildi sisu ja keskmise pildi stiili kombineerides on loodud parempoolne pilt.
Allikas
Keda selline lahendus lummab, võib Tartu Ülikooli Delta õppehoonest leida ekraani, mis sel viisil reaalajas veebikaamera pilti stiliseerib. Astudes veebikaamera vaatevälja, näeb kasutaja ekraanil iseennast maalituna kuulsate maalide stiilis.
See, kuidas me defineerime, mis on stiil ja mis on sisu, ning mil viisil me selle võrgule ette anname, on väga paindlik. Nagu mainitud, võib sisu olla defineeritud näiteks kui objektitüüp, sõnaline kirjeldus või sarnasus teise pildiga. Võimaluste hulk, kuidas sisu (ja stiili) võrgule sisse anda, on piiratud meie kujutlusvõimega. Seega pole võimalik kõiki viise kirjeldada. Siinkohal soovime siiski tuua veel ka teise näite sisu ja stiili kopeerimisest, andmaks lugejale aimduse selle tehnoloogia potentsiaalsest kasust ja ohtudest.
Kui pildil on inimene, siis on masinnägemise meetodite abil võimalik tuvastada selle inimese poos. Seega võime pildil oleva inimese kehapoosi käsitleda soovitud sisuna. Stiilina võib käsitleda mingi teise inimese väljanägemist - andes mudelile ette pildid sellest teisest inimesest (mida rohkem ja rohkemates poosides, seda parem). Nende andmete põhjal ehitame süsteemi, mis genereerib pildi, kus see teine inimene (stiil) on esimese inimesega samas poosis (sisu). Rakendades sellist lahendust kaader kaadri haaval videotele, võime näiteks panna peaministri tantsima. See on potentsiaalselt (kui loodud piltide kvaliteet paraneb) meeletult kasulik lahendus meelelahutustööstuses, näiteks animeeritud tegelaste loomisel. Samas on sellist tehnoloogiat kurjasti ära kasutades võimalik süütuid inimesi ebameeldivatesse situatsioonidesse manada ja neid laimata.
Video. Poosi põhjal piltide genereerimine lubab luua videoid inimestest tegemas asju,
mida nad tegelikult teinud pole.
Veel üks näide:
TÜ Arvutiteaduse instituudi teadlased soovivad uurida, kui hästi inimesed suudavad tuvastada, kas tegu on tehisintellekti poolt genereeritud pildi või pärismaailmas tehtud fotoga. Selle jaoks on loodud küsimustik, mille palume (aga ei kohusta) teil läbida:
Tähelepanu, see link viitab Google'i tööriistadega loodud lahendusele, mis suunab teid juhuslikult ühte neljast testivariandist. Et see lahendus töötaks kõigis veebilehitsejates, püüab meie programm avada teie veebilehitsejas uue akna või vahelehe. Võib juhtuda, et teie veebilehitseja küsib teie käest selleks luba või blokeerib selle vaikimisi.
< eelmine | 3. OSA sisukord | järgmine > |