< eelmine | 3. OSA sisukord | järgmine > |
3.3 Objektituvastus autor: Ardi Tampuu
Eelmises peatükis seletasime piltidelt sisulise info kättesaamiseks kasutatavate tehisnärvivõrkude - konvolutsiooniliste võrkude - peamisi tööpõhimõtteid. Need võrgud otsivad teatud tunnuseid erinevatest pildiosadest ja ehitavad kiht kihi haaval neist lokaalsetest tunnustusest üha keerukamaid tunnuseid, mille põhjal siis lõpuks otsustada, mida pilt kujutab.
Selles peatükis me käsitleme olulisi ja huvitavaid näited konvolutsiooniliste võrkude kasutamisest objektide äratundmiseks ja nende asukoha määramiseks. Sealjuures püüame võimalikult vähe rääkida sellest, kuidas need lahendused täpselt töötavad. Tegu on enamasti tipptasemel lahendustega (loodud näiteks Google'i ja Facebooki poolt), kus on lisaks konvolutsioonile kasutatud veel muidki trikke, mida me selle kursuse raames käsitleda ei jõua.
Joonisel 17 on toodud üks näide keerukamast võrgust, mis sisaldab kokku üle 30 kihi, millest 24 on konvolutsioonilised. Nii paljude kihtidega võrku on isegi keeruline joonisel kujutada, sest kihid ei mahu lehekülje laiusele ära. Sellise sügavusega võrk pole praktikas haruldane, näiteks ResNeti tüüpi võrgud võivad olla lausa sadu kihte sügavad (meenutame, et sügavus tähendab kihtide arvu ning sellest tulenevad ka mõisted "sügavõpe" ja "sügavad tehisnärvivõrgud").
Kuigi praktikas kasutatavad võrgud sisaldavad ka muid kihte, mängivad kõigis neis lahendustes konvolutsioonilised kihid olulist rolli. Seega, pidagem meeles: konvolutsioonilised kihid on masinnägemises A ja O, asendamatu, kõige alus.
Joonis 17. Väga paljude kihtidega võrk. 24 konvolutsiooonilise kihiga võrk, mida kasutatakse objektide lokaliseerimiseks pildil. Järjestikku rakendatud konvolutsioonilised kihid pole joonisel isegi ühekaupa välja toodud, sest muidu läheks joonis lihtsalt liiga pikaks. Nii paljude (ja rohkemate) kihtidega võrgud on masinnägemises üldlevinud.
Allikas
Numbrite tuvastamine konvolutsiooniliste tehisnärvivõrkudega
Enne kui liigume viimaste aastate sensatsioonilisemate masinnägemise lahenduste juurde, alustagem algusest. Konvolutsioonilised võrgud sellisel kujul, nagu neid tänapäeval tuntakse, leiutas Yann LeCun aastal 1989 (link artiklile). Tema töö eesmärk oli luua lahendus, mis suudaks tuvastada ümbrikutelt postiindekseid. Veel mõnda aega tagasi pidi iga ümbriku ja postkaardi õigesse postkontorisse suunamiseks keegi kuskil oma inimsilmade ja inimmõistusega ümbrikult numbrid lugema ja selle õigesse kasti asetama. See tähendas suurt tööjõukulu postifirmale ja väga igavat ja rutiinset tööd töötajatele. Efektiivsuse tõstmiseks otsiti lahendust, kus arvuti suudaks ise lugeda postiindeksi ja suunata lindil liikuva kirja automaatselt õigesse kasti, ilma inimese sekkumiseta.
Et teadlastel oleks võimalik eksperimenteerida ja proovida sellist automaatset numbrite lugemise süsteemi luua, oli USA rahvuslik standardite ja tehnoloogiabüroo loonud andmestiku erinevate inimeste poolt käsitsi kirjutatud numbritest. Kümme näidet igast numbrist selles MNIST nime kandvas andmestikus on antud Joonisel 18.
Joonis 18. MNIST andmestiku näide. Pildid sisaldavad ainult musti ja valgeid piksleid ja on 28x28 pikslit suured.
Allikas
Tõesti, juba aastal 1989 suutis töögrupp Yann LeCuni eestvedamisel luua lahenduse, mis tuvastab neid käsitsi kirjutatud numbreid 95% täpsusega. Nende lahendus kasutas tehisnärvivõrku, mis sisaldas kahte konvolutsioonilist kihti. Hiljem on tema lahendust edasi arendatud ja tänapäeval on võimalik konvolutsioonilisi võrke kasutades õigesti tuvastada 99.8% numbritest. Vaadates joonisel 19 olevaid näiteid, on realistlik arvata, et ka inimene ei suudaks alati 100% täpsusega aimata, millist numbrit kirjutaja mõelnud on.
Joonis 19. Keerulised näited käsitsi kirjutatud numbritest. Need on tihti ka inimesele raskesti arusaadavad.
Allikas
1990ndate lõpus rakendati sarnaseid võrke ka pangatšekkidelt arvenumbrite ja summade lugemisel. Seega usaldati seda tehnoloogiat piisavalt, et selle abil raha liigutada. Samuti loodi juba 1990ndatel võrgud, mis tuvastavad individuaalseid tähti - küll ainult juhul kui iga täht on eraldi kastikesse kirjutatud. Vabalt kirjutatud käekirjalise teksti puhul on keeruline probleem juba ainuüksi mõista, kus üks täht algab ja teine lõpeb.
Selle alapeatüki kokkuvõttev mõte võiks olla järgnev: Konvolutisoonilised võrgud on juba 30 aastat olemas olnud ja neid on juba rohkem kui 20 aastat igapäevaselt oluliste ülesannete lahendamisel kasutatud.
CIFAR10 andmestik. Kümne erineva objektitüübi eristamine väikestel 32x32 piksli suurusega piltidel.
Enne kui jõuame objektide tuvastamiseni kõrgema kvaliteediga fotodel, peatume põgusalt objektide tuvastamisel väikestel 32x32 pikslistel värvilistel pildikestel. Selliseid pilte sisaldavad CIFAR10 ja CIFAR100 andmestikud, millest esimene sisaldab pilte kümnest erinevast klassist ja teine sajast erinevast klassist. On oluline mõista, et mida suurem on pilt, seda rohkem arvutusi nõuab selle pildi töötlemine, näiteks konvolutsiooni rakendamine igasse mingi suurusega pildiossa. Pildil, mis on 10 korda laiem ja 10 korda kõrgem on 100 korda rohkem piksleid, seega tuleb teha 100 korda rohkem arvutusi, et sellelt pildilt näiteks horisontaalsed jooned üles leida. Et arvutused ei võtaks liiga kaua aega, kasutame ka Masinnägemise praktilistes näidetes just CIFAR10 andmestikku. Seega tutvustame seda andmestikku põgusalt ka siin loengus.
Joonis 20. CIFAR10 andmestiku näide. See andmestik sisaldab pilte kümne erineva objektiklassi kohta. Iga klassi kohta on andmestikus 6000 pilti. Pildid on 32x32 pikslit suured ja värvilised (igal pikslil on 3 väärtust, punane, roheline ja sinine).
Allikas
Kui numbrite tuvastamisel mustvalgetelt piltidelt (MNIST andmestik) on võimalik teatud trikkide abil saavutada 99% (aga mitte 99.8 %) ka teiste masinõppe meetodite abil (nt. tugivektormasinad), siis CIFAR10 andmestikul heade tulemuste saavutamiseks on tehisnärvivõrgud põhimõtteliselt ainukene meetod. Väga keeruliste närvivõrkudega on sel andmestikul võimalik saavutada lausa 99 protsendiline täpsus. Praktikumis peame me arvutusvõimsuse piirangute tõttu rahulduma 92 protsendise täpsusega mudeliga.
Oluline verstapost masinnägemises - 1000 klassi eristamine piltidel
Arvutiprogrammi, mis suudab eristada 1000 erinevat objektitüüpi, peeti tehisintellektiga tegelevate inimeste poolt märgiliseks saavutuseks. Kui arvuti suudab eristada tuhandet erinevat asja, siis samasugune programm suudab loogiliselt mõeldes väikeste täiendustega eristada üldse kõiki asju (või vähemalt kõiki mingis kontekstis olulisi asju). Ja arvuti, mis saab piltidest nii põhjalikult aru, on üsna lähedal sellele, mida inimesed tajuvad "tehisintellektina".
Taaskord, et proovida luua selline tehislik nägemissüsteem, oli vaja kõigepealt luua andmestik. ImageNet andmestik sisaldab pilte 1000 erineva eseme ja loomaliigi kohta. Iga klassi kohta on keskmiselt üle 1000 pildi. Kokku sisaldab andmestik 1.2 miljonit pilti koos igale pildile vastava märgendiga (mis objekt pildil on).
ImageNeti andmestiku pildid on 224x224 pikslit suured ja värvilised (3 värvikanalit: punane, roheline, sinine). Tegu on fotodega, kus asub tihti mitu objekti, aga igale pildile vastab ainult üks õige vastus, nii et ennustusküsimus on pigem "mis on peamine objekt pildil?". Kuna see küsimus on veidi ebaselge ja ka inimesed ei pruugi omavahel nõustuda, mis on pildil "peamine", kasutatakse mõõdikuna ka "top 5" täpsust.
Top 5 täpsus - kas õige vastus on mudeli poolt ennustatud 5 kõige tõenäosema vastuse hulgas. Ehk mudelil on võimalus pakkuda vastust 5 korda.
Aastal 2011 võitis ImageNeti objektituvastusvõistluse lahendus, mille top 5 täpsus oli 75%. Seega 25 protsendil piltidest ei suutnud see mudel ka viie pakkumisega eeldatud klassile pihta saada. See lahendus ei kasutanud konvolutsioonilisi tehisnärvivõrke. Aastal 2012 võitis ImageNeti võistluse Alex Krizhevsky, kasutades 8-kihilist tehisnärvivõrku, mis sisaldas mitut konvolutsioonilist kihti. Tema mudeli top 5 täpsus oli 85%, ehk see eksis 25% asemel ainult 15% juhtudest. Joonisel 21 on toodud välja selle mudeli ennustused mõnede piltide puhul.
Konvolutsioonilise tehisnärvivõrgu kasutamine vähendas vigade arvu 40% võrreldes eelnevate lahendustega. Ärge arvake, et need eelnevad lahendused olid lihtlabased või naiivsed - need olid parimad meetodid, mida parimad teadlased 2011. aastal välja mõelda suutsid. Seega tehisnärvivõrkude mäekõrgune edu, põhimõtteliselt üldse esimesel katsel neid nii suurel skaalal rakendada, innustas kõiki masinnägemisega tegelevaid inimesi samuti konvolutsioonilisi võrke kasutusele võtma.
Joonis 21. AlexNeti võrgu ennustused ImageNet piltidel. Iga pildi all on välja toodud pildile vastav märgend (õige vastus) ja mudeli 5 esimest ennustust. Tulba pikkus peegeldab seda, kui tõenäoliseks mudel mingit pakkumist peab. Roosalt on värvitud tulp, mis vastab õigele, eeldatud vastusele. Näidetest võib näha, et ka juhul kui mudel eksib, on ennustused enamasti mõistlikud ja pildi sisuga seonduvad.
Allikas
See võrk, mida tänapäeval kutsutakse AlexNetiks, on tõesti maailmakuulus. Teised teadlased on 7 aasta jooksul seda tööd üle 50 000 korra viidanud, mis on kordi rohkem mainimisi kui enamus teadlasi saavutab kogu karjääri jooksul. Seda sama võrgu ülesehitust (kihtide järjekorda ja neuronite arvu kihtides) kasutades on loodud sadu tuhandeid rakendusi tudengiprojektides, teadustöödes ja ka firmades, mis mingil viisil piltidega tööd teevad. Ja see on ainult üks, tänapäeva mõttes üsna lihtsa ülesehitusega võrk, lõpmatust hulgast võimalikest võrkudest.
AlexNeti edu mõjul algas meeletult kiire areng masinnägemises ja tehisnärvivõrkude arendamises. Erinevad töögrupid maailma tippülikoolides ja suurfirmades (Google, Facebook, Microsoft, Baidu jne) leiutasid veel hulga kavalaid nõkse, mis lubasid treenida veel rohkemate kihtidega ja veel efektiivsemaid konvolutsioonilisi võrke. Top 5 täpsus ImageNet andmestikul on nende edasiarenduste mõjul veel märgatavalt paremaks muutunud (vt Joonis 22) ja tänasel päeval võib öelda, et paremini ei olegi enam võimalik seda ülesannet lahendada. Seega võistlust lihtsalt objektituvastuses enam ei peeta, teaduskogukond on liikunud edasi objektide asukoha tuvastamise ja muude, keerukamate probleemide lahendamise suunas. Mõnda neist huvitavatest probleemidest käsitleme ka järgnevates alapeatükkides.
Joonis 22. Parimad tulemused ImageNeti andmestikul. Sinised tulbad kujutavad igal aastal võistluse võitnud lahenduse poolt tehtud eksimuste hulka protsentides. Punane joon kujutab inimeste poolt tehtavat vigade hulka. Aastal 2018 seda võistlust enam ei peetud, sest tulemused olid juba väga-väga head ja 1000 klassi eristamise probleem on sisuliselt lahendatud.
Allikas
Objektide asukoha tuvastamine
Tuvastada, et pilt sisaldab mingit objekti, on huvitav, aga mitte alati väga kasulik. Enamasti sisaldavad pildid mitut objekti või mitut inimest. Oleks kasulik teada, kus iga objekt asub ja mis tüüpi ta on. Sellist ülesannet kutsutakse objektide lokaliseerimiseks ja klassifitseerimiseks. Näited märgendatud piltidest, ehk sellest, mida me loodame, et objekte lokaliseeriv ja äratundev mudel meile väljundina annab, on antud Joonisel 23. Iga treeningandmepunkt koosneb pildist, sellele vastavatest kastidest ning objektitüüpidest neis kastides.
Joonis 23. Objektide lokaliseerimise ülesanne. Märgendatud näited (treeningandmed) ImageNeti 2014. aasta objektide lokaliseerimise ja tuvastamise võistluselt.
Allikas
Mudelite täpsust mõõdetakse eraldi kahe mõõdiku järgi. Esiteks selle järgi, kui täpselt on iga objekt klassifitseeritud, ja teiseks selle järgi, kui hästi objekti piirav kast kattub eeldatud "õige" kastiga.
Sellise ülesande saab jagada kaheks erinevaks osaks:
- ennusta teatud asukohaga ja suurusega kastid, kus tundub, et on mingi objekt,
- klassifitseeri see objekt,
aga on kavalam lahendada mõlemat ülesannet koos. Lahendades neid probleeme eraldi, peab lahenduse esimene osa otsustama, kus mingi objekt algab ja lõpeb, ilma teadmata, mis objektiga on üldse tegu. Samuti võivad objektid kattuda ja on keeruline tõmmata piir, kus käesolev objekt lõpeb ja algab mingi teine, muust klassist objekt. Näiteks Joonise 23 parempoolsel pildil "kiiver", "inimene" ja "mootorratas" tüüpi objektid kattuvad. On raske otsustada mitu objekti ja kus täpselt selles pildiosas asuvad, kui me ei lahenda klassifitseerimise ja lokaliseerimise probleeme koos.
Joonisel 24 on näidatud ühe lokaliseerimist ja klassifitseerimist samaaegselt lahendava võrgu, nimega Faster R-CNN, väljundid. Selle näite peamine eesmärk on lugejale demonstreerida, et lokaliseerimise ja äratundmise probleemi on konvolutsiooniliste võrkude abil võimalik lahendada üsna hästi.
Joonis 24. Objektide lokaliseerimine Faster R-CNN võrguga. See joonis demonstreerib, et objektide lokaliseerimine on tehisnärvivõrkudega lahendatav ülesanne. Mõnel juhul on mõni objektiosa objekti ümbritsevast kastist välja jäänud (vt. lehma kõrv keskmisel ülemisel pildil), aga üldiselt on objektide asukohad täpsed.
Allikas
Pildi segmenteerimine
Keerukuselt järgmine samm pildilt sisu täpsemaks kättesaamiseks on pildi segmenteerimine. Objektide ümber kaste joonistades märkame kahte olulist puudust:
- Ebakorrapärase kujuga (mitte ristkülikukujuliste) objektide puhul sisaldab kast ka palju muud kui märgitud objekt. Teatud juhtudel võib kasti sisse jääda lausa mitu teist väiksemat objekti.
- Kastid kattuvad omavahel, seega ei tea me ikkagi väga täpselt kus üks objekt algab ja teine lõpeb.
Segmenteerimine seisneb pildi piksel piksli haaval objektideks (ja taustaks) märgendamisest. Eristatakse kahte tüüpi segmenteerimist:
- Semantiline segmenteerimine - milline piksel kuulub millist tüüpi objektile?
- Iga objekti eraldi segmenteerimine - milline piksel kuulub millisele objektile, eristades sama tüüpi objektid teineteisest.
Tuvastamise, lokaliseerimise ja segmenteerimise probleemide erinevused on illustreeritud Joonisel 25, mille aluseks on Microsofti välja antud COCO andmestik. COCO andmestikus on iga foto kohta ka sellele vastav sama kõrguse ja laiusega segmentatsioonipilt. See võimaldab treenida mudeleid, mis õpiksid fotodest segmentatsioonipilte tegema.
Joonis 25 Erinevad objektide tuvastamise ülesanded. (a) Lihtsalt klassifitseerimine: Mis objektid on pildil?
(b) Lokaliseerimine ja klassifitseerimine: Mis objektid on pildil ja kus?
(c) Semantiline segmenteerimine - milline piksel kuulub millisele objektitüübile?
(d) Individuaalne segmenteerimine - millised pikslid kuuluvad igale objektile?
Allikas
Semantiline segmenteerimine (ingl semantic segmentation) on väga levinud ja kasulik näiteks isejuhtivate autode puhul. Pole oluline kes ja kui mitu inimest on teel selleks, et teha otsus pidurdada. Piisab teadmisest, et teel on inimesed. Iga objekti eristamisest on loobutud, sest mida rohkem me ülesannet lihtsustame, seda vähem arvutusi on vaja teha ja seda kiiremaks muutub reaktsiooniaeg. Kui isejuhtivate autodele piisab tõesti ainult semantilisest segmenteerimisest, pole mõtet raisata aega ja arvutuslikke ressursse objektide eraldi segmenteerimisele.
Teadustöödest tundub, et semantilise segmenteerimise rakendustes lihtsustataksegi käesolevat probleemi võimalikult palju. Pole vaja piksleid 1000 erinevasse klassi jaotada, piisab sellest, kui jaotame nad rühmadesse "liikuvad objektid" ja "staatilised objektid". On ka näiteid töödest, kus kaamerapilt segmenteeritakse lihtsalt "sõidetavaks teeosaks" ja "mittesõidetavaks alaks" (osa pildist, kus on objektid, ehitised jms). Natukene rohkemate klassidega segmenteerimise näide isejuhtivate autode valdkonnast on toodud Joonisel 26.
Joonis 26. Semantiline segmenteerimine isejuhtivate autode valdkonnas. Kaamerapilt on muudetud pildiks, kus on näha eri tüüpi objektide täpsed asukohad piksli täpsusega.
Allikas
Individuaalsete objektide segmenteerimine (ingl instance segmentation) võimaldab iga inimese ja auto eraldi objektina tuvastada, tema liikumist järjestikel ajahetkedel jälgida ja edasist käitumist ennustada. Väljaspool liikluskonteksti võimaldab selline lahendus näiteks pildil olevad objektid kokku lugeda - mitu lammast on pildil? (Loomade loendamine on reaalne probleem põllumajanduses.) Või näiteks, mitu inimest osales meeleavaldusel?
Joonis 27. Individuaalne segmenteerimine Microsoft COCO andmetel. Näited individuaalse segmenteerimise eeldatud väljundist (märgendatud treeningandmetest). Mudel peab õppima eristama sama tüüpi aga erinevaid objekte (nt. erinevaid koeri) ja märkima need piksli täpsusega. Tausta eraldi ei märgendata.
Allikas (adapteeritud)
Sellise segmenteerimise potentsiaalsete rakenduste hulk on väga suur. Tartu Ülikooli arvutiteaduse instituudis töötatakse näiteks lahenduste kallal, mis loevad mikroskoobipildilt kokku eri tüüpi rakke, eristavad rakkudest rakutuumad jne, lihtsustades ja automatiseerides nii bioloogide tööd.
Joonis 28. Individuaalne segmenteerimine mikroskoopia andmetel. Käesoleval juhul on võrgu eesmärgiks segmenteerida rakutuumad. Taustal on näha sisendpilt - mustvalge mikroskoobipilt. Väljundiks on iga rakutuuma asukoht piksli täpsusega, mis on visualiseerimise eesmärgil osaliselt ka mikroskoobipildile kantud (luubialune osa).
Autor: Dmytro Fishman. Vaata lisaks https://www.biorxiv.org/content/10.1101/764894v1.
Kas ka sinu hobi- või töövaldkonnas on mõni tüütu loendamisprobleem, mida saaks sel viisil lahendada? Objektide eraldi segmenteerimise probleemi on põhjalikult uuritud ja väga head lahendused on kõigile vabalt kättesaadavad, näiteks Facebook on oma mudelid avalikuks teinud. Joonisel 29 näeme Facebooki MaskRCNN-i nimelise lahenduse poolt tehtud segmentatsiooni.
Joonis 29. Facebooki MaskRCNN konvolutsioonilise segmenteerimis-võrgu väljund. Süsteem suudab vähemalt esiplaanilasuvad objektid täpselt üksteisest eristada. Siinkohal polnudki mudelile seatud eesmärk taevas ja puud eraldi märkida nagu semantilise segmenteerimise puhul. Küll aga võinuks süsteem ka taamal olevad inimesed tuvastada.
Allikas
Kokkuvõtteks, konvolutsiooniliste võrkudega saab piltidelt lugeda välja väga erinevat infot nii objektide asukohtade kui neis sisalduva info kohta. Näiteks on võimalik pildilt tuvastada, kus asuvad pildil numbrid ja mis numbrid need on. Seda saab kasutada muuhulgas fotodelt majanumbrite automaatseks tuvastamiseks (kasutatakse Google Mapi kaartide loomiseks) kui ka dokumendifotodelt isikukoodi ja muude numbrite välja lugemiseks (mida Eesti firma Veriff edukalt teeb). Võimalike masinnägemise rakenduste hulk on tõesti peaaegu, et lõputu. Ainukeseks probleemiks on see, et selliste tehisnärvivõrkude treenimiseks on tihti vaja palju märgendatud andmeid. Keerulisemate ülesannete puhul lausa miljoneid näiteid. On olemas ka meetodid, mis mudelite näidetevajadust vähendavad, aga selle kursuse raames me neid kahjuks tutvustada ei jõua. Sügavama huvi puhul soovitame võtta TÜ arvutiteaduse instituudi ainet Tehisnärvivõrgud (ingliskeelne).
< eelmine | 3. OSA sisukord | järgmine > |