< eelmine | 3. OSA sisukord | järgmine > |
3.4 Näotuvastus autor: Ardi Tampuu
Näotuvastus kui objektiklassi ära tundmine
Kui meil on teatud piiratud arv inimesi, keda me peame õppima üksteisest eristama, siis saame rakendada täpselt samasuguseid meetodeid nagu objektituvastuses. Kui objektituvastuses olid klassideks erinevad objektid ja loomaliigid, siis näotuvastuses on klassideks inimesed. Klassifikatsiooniküsimuseks on: "Milline neist inimestest on pildil?".
Võimalik rakendamise näide
Firmas on 100 töötajat. Võõrad inimesed tööruumidesse ei pääse. Kas on võimalik luua lahendus, mis lubaks neid sadat töötajat näo järgi ära tunda? Selle abil oleks võimalik otsustada, kas antud töötaja tohib või ei tohi teatud arvutit kasutada või teatud ruumi siseneda.
Sarnase probleemipüstituse lahendamiseks on Oxfordi teadlaste poolt loodud VGGFace2 andmebaas. See andmestik sisaldab 3.3 miljonit väga täpselt märgendatud pilti 9000 erineva inimese kohta. Siinkohal mainime, et valesti (ebatäpselt) märgendamine on nägude puhul probleem, sest ka inimene ei saa vahel aru, kes on pildil. VGGFace2 andmestikus on iga inimese kohta pilte erinevates poosides (mitte ainult eestvaates), tehes äratundmise keerulisemaks. Keerulisemate andmete peal treenides saame ka parema mudeli. Ka masinõppe meetodite puhul kehtib "raske trennis, lihtne võistlusel" printsiip - kui treeningandmestik sisaldab keerulisi näiteid, õpib mudel probleemist sügavamalt aru saama ja lõplik mudel on uutel näidetel täpsem.
Joonis 30. VGGFace2 andmebaas. Mõned pildid mõne isiku kohta 9000 inimest ja 3.3 miljonit pilti sisaldavast VGGFace2 andmebaasist. Nagu näha on sama isiku kohta käivad pildid erinevates poosides ja situatsioonides.
Allikas
Tulemused: Oxfordi teadlased suutsid sellel suurel ja keerukal andmestikul treenida võrgu, mis saavutab ligikaudu 97% täpsuse, kui on vaja eristada 500 erinevat isikut. Vähem erinevaid poose sisaldaval andmestikul testides saavutati lausa 98.2% täpsus.
Kuna 100 isiku omavahel eristamine on lihtsam kui 500, võime eespool esitatud rakendamise näite puhul kinnitada, et sadat töötajat on võimalik tehisnärvivõrkude abil üsna edukalt näo järgi eristada. Selline lahendus võiks olla turvalisem kui uksekaart (sest kaarti on võimalik kaotada/varastada) ja mugavam kui koodi sisse trükkimine.
Siiski on sellisel lähenemisel mitu suurt puudust. Esiteks pole kindel, kuidas mudel vastab, kui kaamerasse näidata väljaprinditud pilti mõnest töötajast. Teiseks on juba treenitud mudelit keeruline muuta - näiteks juhul kui ettevõttes üks töötaja vahetub või tuleb juurde. Sel juhul tuleb mudel täiesti nullist uuesti treenida.
Kolmandaks, kui pildil on tundmatu isik (mitte keegi firma töötajate hulgast), siis klassifikatsiooni teostaval võrgul pole võimalik vastata "see pole mitte keegi, keda ma tean". Oma ülesehituse tõttu tehisnärvivõrk lihtsalt leiab, millisele 100st töötajast käesolev pilt enim sarnaneb (milline meie töötajatest on pildil? ; millise klassi tõenäosus on suurim?).
Veelgi hullem, tehisnärvivõrgud on tihti liiga enesekindlad. Isegi juhul, kui pildil on tegelikult tundmatu isik, võib võrk oma vastuses väga kindel olla (ennustatud klassi tõenäosus on suur). Seega pole sellist võrku kasutades lihtne tundmatuid isikuid eristada. Just seetõttu oli rakendamise näitesse lisatud ka klausel, et võõrad isikud ruumidesse ei pääse. Ainult sel tingimusel piisab klassifikatsioonist piiratud hulga ja teada olevate inimeste (klasside) vahel. Liigse enesekindluse probleemist räägime ka praktilises näites, mis asub loengu lõpus.
Et paremini tuvastada tundmatuid isikuid on näotuvastust võimalik käsitleda mitme inimese vahel valiku tegemise ("kes on pildil?") asemel hoopis binaarse probleemina - "kas pildil on isik A?". Sel juhul on vaja iga töötaja ära tundmiseks treenida eraldi võrk, mis vastab "ei" või "jah". Kui mitte ükski võrk ei vasta "jah", siis järelikult on tegu tundmatu inimesega. Selline lähenemine on pisut kohmakas, sest tuleb treenida palju mudeleid. Samas võimaldab see tuvastada tundmatuid isikuid ja uue inimese lisamine tähendab ühe uue mudeli treenimist, mitte kogu süsteemi uuesti treenimist. Järgmises alapeatükis käsitleme veidi sarnase loogikaga lähenemist, mis on üldisem, efektiivsem (ei ole vaja eraldi mudelit iga inimese kohta) ja võimaldab samuti isik isiku haaval vastata, kas tegu on selle inimesega.
Näotuvastus kui kauguse arvutamine
Juba 2015. aastal kirjeldasid Google'i teadlased alternatiivset lähenemist nägude tuvastamise probleemile. Nimelt pakkusid nad välja, et on vaja luua mudel, mis saab sisendiks mingid kaks näopilti ja väljastab nende vahelise kauguse. Kusjuures, see kaugus peab olema defineeritud nii, et see otseselt peegeldaks nägude sarnasust (ja mitte näiteks piksliväärtuste sarnasust). Sarnased näod, sealhulgas erinevad pildid ühest ja samast inimesest, peavad olema omavahel lähedal. Erinevad (erinevate inimeste) näod peavad olema üksteisest kaugel.
Tsitaat:
"In this paper we present a system, called FaceNet, that directly learns a mapping from face images to a compact Euclidean space where distances directly correspond to a measure of face similarity. " (link artiklile)
"Selles artiklis esitleme me süsteemi, nimega FaceNet, mis õpib tõlkima näopildid otse kompaktsesse eukleidilisse ruumi, milles kaugused vastavad otseselt nägude sarnasuse mõõdule."
Sellist mudelit on võimalik treenida kas
- Andes sisendiks pildipaari ja märgendi, kas tegu on sama inimesega või mitte (märgend=1, kui sama inimene, märgend=0, kui erinevad). Võrk õpib ennustama väärtusi 1 lähedal, kui sisendpiltidel oli sama isik, ja 0 kui sisendpildid olid erinevatest isikutest.
- Andes sisendiks 3 pilti. Kaks neist kujutavad sama isikut, kolmas kedagi teist. Mudel õpib samaaegselt kahandama samade ja kasvatama erinevate nägude vahemaad. See on ideelt sarnane eelmise lähenemisega, aga praktikas muudab veidi treenimise protseduuri ja kulgu.
Selliste mudelite tööpõhimõte on muuta konvolutsiooniliste võrkude abil mõlemad pildid esmalt mingi pikkusega tunnusvektoriks ja siis arvutada lihtsalt erinevus nende kahe vektori vahel (näiteks eukleidiline kaugus või absoluuterinevuste summa). Gradientlaskumise abil on võimalik selliste võrkude kaale optimeerida nii, et kaugused peegeldavad pildil olevate nägude sarnasust.
Sel viisil nägude äratundmiseks on vaja ainult ühte mudelit (mitte ühte mudelit isiku kohta), et mõõta sarnasust kõikvõimalike näopaaride vahel. Sealhulgas on võimalik kasutada seda sama mudelit, et võrrelda inimeste nägusid, keda mudel varem näinud pole.
Sellise mudeli treenimiseks võib kasutada ükskõik millist andmestikku, mis sisaldab märgendatud nägusid, sealhulgas eelnevas alapeatükis mainitud vabalt kättesaadavat andmestikku. Siiski tuleb mainida, et kommertslahendused Google'i ja Facebooki poolt on treenitud, kasutades lausa sadu miljoneid näopilte.
Näotuvastuse praktiline näide
Näotuvastuse ja teiste isikutuvastuseks vajalike masinnägemise rakenduste väljaarendamisega tegeleb igapäevaselt Eesti firma Veriff. Nende probleemistikust (mida täpselt on vaja veebikaamera pildilt tuvastada) räägib järgnevas videos Veriffi automatiseerimise juht Taivo Pungas. See video on lindistatud spetsiaalselt meie kursuse jaoks.
< eelmine | 3. OSA sisukord | järgmine > |