Konenäkö -kurssin 2010 materiaalia Tietotekniikan laitos Jyväskylän yliopisto Konenäkö -kurssi, 16.11.2010
Sisältö Automaattinen luokittelu 1 Automaattinen luokittelu Tavoite: esimerkiksi kirjaintunnistus (OCR) Esikäsittely Datan piirteytys, miksi ja miten 2 Perusmenetelmä: lähimmät naapurit Täydellinen luokittelu usein mahdotonta Kuinka hyvin luokittuu? Sekaannusmatriisi Erilaisia luokittimia 3
Tavoite: esimerkiksi kirjaintunnistus (OCR) Esikäsittely Datan piirteytys, miksi ja miten Mitä on luokittelu? Miksi automatisoida se? Luokittelu on vastauksen hakemista esim. tällaisiin: Kuulostaako musiikkikappale Abbalta vai Beatlesiltä? Onko valokuvassa Ananas, Banaani vai Cayennepippuri? Onko kuvassa kirjain A, B, vai C, D, E, F,..., Ä,...? Luokittelu, eli kategorian tunnistaminen, on ihmiselle usein helppoa, jos hänellä on riittävästi kokemusta aihepiiristä. Ihminen on kuitenkin aika hidas luokittelija jos täytyisi tunnistaa 100 000 kuvaa, haluaisimme tietokoneen tekevän tämän automaattisesti, ettei työ kestäisi vuosikausia.
Esimerkki: kirjaintunnistus Tavoite: esimerkiksi kirjaintunnistus (OCR) Esikäsittely Datan piirteytys, miksi ja miten Mikä 80-numeroinen luku tässä on: (ensimmäiset 80 merkkiä MNIST -datasta http://yann.lecun.com/exdb/mnist/) Optinen merkintunnistus (optical character recognition, OCR): Sovelluksina kirjojen digitointi, lomakkeiden, postinumeroiden ym. käsittely,... Vähentää manuaalista työtä kummasti! Saattaapi olla haasteellista (esim. erilaiset käsialat) Merkintunnistus on vain yksi esimerkki kuvan luokittelusta...
Tavoite: esimerkiksi kirjaintunnistus (OCR) Esikäsittely Datan piirteytys, miksi ja miten Muita esimerkkejä: pohjaeläimet, paperin viat Viimeaikaista tutkimusta Jyväskylän yliopiston tietotekniikan laitoksella: Tuotevikojen havainnointi ja luokittelu paperirainasta otetuista kuvista. Pohjaeläimien lajintunnistus biomonitorointia varten (kuva oikealla). Kuvan tai sen osasen tunnistaminen on yleensä osa laajempaa järjestelmää/sovellusta, joka sitä hyödyntää em. esimerkeissä siis tekstin digitointi, paperin vika-analyysi, vesistöjen tilan kartoitus.
Tavoite: esimerkiksi kirjaintunnistus (OCR) Esikäsittely Datan piirteytys, miksi ja miten Tavoite: luokittelija on oppiva järjestelmä Tavoitteena on tietysti luoda sellainen luokittelija, joka osaa luokitella kuvia, joita se ei ole aikaisemmin nähnyt (mutta jotka oletettavasti kuuluvat niihin luokkiin, joiden tunnistamiseksi se on tehty, esim. kirjoitettuihin merkkeihin). Luokittelijalla täytyy olla jonkinlainen muisti. Käytetään ns. opetusaineistoa, jonka luokat tunnetaan ja joka syötetään luokittelijalle ennen kuin se päästetään kentälle töihin. Tarvitaan oppivia ja muistavia algoritmeja. Algoritmien testaamiseen ja vertailuun käytetään testiaineistoa, jonka luokittelu myös tunnetaan, mutta jossa ei ole samoja yksilöitä kuin opetusaineistossa.
Esikäsittely Automaattinen luokittelu Tavoite: esimerkiksi kirjaintunnistus (OCR) Esikäsittely Datan piirteytys, miksi ja miten Luokittelu tehdään tyypillisesti erikseen jokaiselle osakuvalle, joka on kiinnostava (esim. yksi merkki tekstin osana, yksi pohjaeläin monista, maamerkki kaupunki- tai maastokuvassa, yhdet kasvot valvontakamerassa... ). Kiinnostava(t) osakuva(t) löydetään esikäsittelymenetelmin, jollaisia kurssilla on tähän asti käsitelty (kynnystykset, reunahaut ym.). Pikselidatan perusteella ei kannata luokitella (liian paljon dataa, ei siirto-/rotaatioinvarianssia) vaan on syytä hakea pienempi määrä hyödyllisiä piirteitä (pinta-alat, histogrammit, fourier descriptorit ym.) joiden perusteella eri luokkiin kuuluvat kuvat toivottavasti erottuvat.
Tavoite: esimerkiksi kirjaintunnistus (OCR) Esikäsittely Datan piirteytys, miksi ja miten Oppikirjaesimerkki: koripalloilijat ja ratsastajat Piirrevektoriin on kerätty objektia kuvaavia suureita eli piirteitä. Henkilöitä kuvaavia piirteitä voisivat olla pituus ja paino. Seuraavassa kuvassa (adaptoitu kurssin oppikirjasta) voisi olla koripalloilijoita (X) ja ratsastajia (o) merkittynä piirreavaruuteen: Kahden piirteen avaruus voidaan visualisoida, mutta oikeasti luokitteluun tarvitaan varmasti useampia. Menetelmät ja käsitteet yleistyvät n-ulotteiseen piirreavaruuteen.
Perusmenetelmä: lähimmät naapurit Muistina referenssijoukko, jonka luokitus tunnetaan. Pyritään tunnistamaan uusi, ennennäkemätön datapiste. Valitaan K kpl lähintä naapuria referenssijoukosta. Annetaan vastaukseksi se luokka, johon kuuluu enemmistö tästä lähinaapurustosta. Perusmenetelmä: lähimmät naapurit Täydellinen luokittelu usein mahdotonta Kuinka hyvin luokittuu? Sekaannusmatriisi Erilaisia luokittimia
Perusmenetelmä: lähimmät naapurit Täydellinen luokittelu usein mahdotonta Kuinka hyvin luokittuu? Sekaannusmatriisi Erilaisia luokittimia Epätriviaaliin tehtävään ei löydy täydellistä ratkaisua Reaalimaailmassa meillä on: Häiriöinen ja epätäydellinen syöte (kaikkea kohinaa ja epäfokusta ei saada pois millään) Päällekkäiset jakaumat (vrt. MNIST-kuvat: onko merkki 3 vai huonosti piirretty 5? Onko 1, 7, vai 9? Rotaatioinvariantti piirre merkeille 6 ja 9 tekisi mitä?) Voi olla täysin mahdotonta saada 100% tarkka luokittelu. Teoreettista maksimia ei edes voida tietää! Lisäksi (ainakin): Virheet mahdollisia opetusaineiston keräämisessä tai tallennuksessa. Mitä luokittelumenetelmää kannattaa käyttää, riippuu sovelluksesta. Testiaineiston avulla haetaan tunnuslukuja, joilla algoritmien pätevyyttä voidaan vertailla.
Sekaannusmatriisi (confusion matrix) Perusmenetelmä: lähimmät naapurit Täydellinen luokittelu usein mahdotonta Kuinka hyvin luokittuu? Sekaannusmatriisi Erilaisia luokittimia Binääriluokitin ( onko kuvassa juuri tietty numero?) antaa vastauksen kyllä (positiivinen) tai ei (negatiivinen). Toinen sana luokittimen arvaukselle on ennuste. Se voi sitten olla oikein tai väärin verrattuna testiaineiston tunnettuun totuuteen. Oikein ja väärin menneiden testiennusteiden lukumäärät merkitään nelikenttään nimeltä sekaannusmatriisi (confusion matrix): totuus pos. neg. ennuste pos. TP FP ennuste neg. FN TN Luvuille käytetään kuvaavia nimiä: TP=true positive, FP=false positive, FN=false negative, TN=true negative. Yleinen onnistumisprosentti on (TP+TN) / (TP+FP+FN+TN). Sensitiivisyys TP / (TP+FN). Spesifisyys TN / (TN+FP).
Sekaannusmatriisi monelle luokalle Perusmenetelmä: lähimmät naapurit Täydellinen luokittelu usein mahdotonta Kuinka hyvin luokittuu? Sekaannusmatriisi Erilaisia luokittimia Monen luokan luokittimelle voidaan tehdä samanlainen taulukko: totuus 1 2 3 4 ennuste 1 o v v v ennuste 2 v o v v ennuste 3 v v o v ennuste 4 v v v o Oikeiden ennusteiden määrät voidaan lukea diagonaalilta. Väärin menneistä nähdään mm. mitkä luokat mahdollisesti sekoittuvat helpoiten keskenään.
Erilaisia luokittimia Perusmenetelmä: lähimmät naapurit Täydellinen luokittelu usein mahdotonta Kuinka hyvin luokittuu? Sekaannusmatriisi Erilaisia luokittimia Luokitusmenetelmiä on monia, mm.: lähin naapurusto hermoverkot tukivektorikoneet päätöspuut Käydään seuraavaksi tarkemmin läpi vaikkapa eräs hermoverkko.
Neuroni http://commons.wikimedia.org/wiki/image:neuron.jpg Luonnon hermosolu inspiraationa matemaattiselle mallille: Hermosoluun saapuu eri lähteistä sähkökemiallisia signaaleja. Mikäli signaalien summa ylittää tietyn kynnyksen, hermosolu laukeaa ja välittää signaalin eteenpäin.
Keinotekoinen neuroni, aktivaatiofunktio Keinotekoinen hermosolu yhdistää herätteet esim. painotetulla summalla. Ulostulo on yksi luku, joka tulee ns. aktivaatiofunktiosta, esim. hyperbolisesta tangentista. Matemaattisesti esim. o = f (b + n i=1 w i(a) i ), missä o on ulostulo, (a) i ovat n kpl syötteitä, w i painokertoimet ja f on aktivaatiofunktio; b on bias- eli painotustermi, joka siirtää aktivaation kynnyspistettä. Demo: Plottaillaan aktivaatiofunktioita Octavella (logsig, tanh eri biaseilla ja jyrkkyysparametreilla)
Kerros, joka koostuu useista neuroneista Laitetaan useita keinotekoisia hermosoluja riviin. Jokaisella neuronilla on omat painokertoimet, ja niissä operoi aktivaatiofunktio. Sekä sisääntulo että ulostulo ovat vektoreita. Matemaattisesti esim. (o l ) j = f j (bj l + n l 1 i=1 w j,i l (ol 1 ) i ), missä o l on ulostulovektori, (o l 1 ) i ovat n l 1 kpl syötteitä, wj,i l on i:nnen syötteen painokerroin j:nnessä neuronissa, f j on aktivaatiofunktio; bj l on j:nnen neuronin bias. Indeksointi l 1 syötevektorille ja l ulostulovektorille ennakoi useiden kerrosten ketjuttamista (seur. kalvo).
Useita kerroksia yhdistämällä saadaan MLP (MLP = multilayer perceptron ) Erikokoisia kerroksia voidaan yhdistää mikä tahansa määrä. Jokaisen kerroksen ulostulo lasketaan periaatteessa samoin. Kerroksen l ulostulo syötetään eteenpäin kerrokselle l + 1 (ei takaisinkytkentöjä; feedback-hermoverkot ovat toinen stoorinsa). Pienellä kikkailulla koko homma painotustermeineen voidaan esittää matriisimuodossa, jossa jokaista kerrosta vastaa yksi kerroinmatriisi ja yksi funktiomatriisi...
MLP:n ulostulo matriisimuodossa Kompakti esitystapa MLP:lle on o 0 = x, o l = F l (W l ô (l 1) ) for l = 1,..., L. (1) Tässä x on syötevektori. Se asetetaan nollannen kerroksen ulostuloksi. Kunkin kerroksen ulostulon kaavassa on erikoismerkintä ô (l 1). Se tarkoittaa operaatiota, jossa vektorin alkuun lisätään ylimääräinen ykkönen. Silloin bias-termit voidaan sijoittaa kutakin kerrosta vastaavan matriisin W l ensimmäiseksi sarakkeeksi ja vaikutus on sama kuin edellä esitettiin. F l puolestaan tarkoittaa sitä, että sovelletaan aktivaatiofunktiota vektorin alkioihin.
Luokkien koodaaminen monikerrosverkolle Luokat koodataan binäärivektoreina, esim: (1, 1, 1) = ananas, ( 1, 1, 1) = banaani, ( 1, 1, 1) = cayennepippuri. Hermoverkko kuvaa datan luokitteluavaruuteen; tulokseksi voi ottaa lähimmän prototyyppipisteen. Etäisyys koodivektorista kuvaa tietyllä tapaa luokitustuloksen epävarmuutta.
Lisähuomioita perus-mlp:stä Hermoverkon iloja ovat mm. epälineaarisuus (käyrät jakopinnat), yleispätevyys (teoriassa voi approksimoida mitä tahansa jatkuvaa funktiota), laskennan rinnakkaistuvuus, kiehtova biologinen analogia (joskin nykytiedon valossa epärealistinen). Aktivaatiofunktioiksi valitaan usein logistinen sigmoidi tai hyperbolinen tangentti. Ovat derivoituvia, minkä hyöty selviää seuraavilla kalvoilla. Kannattanee olla sama aktivaatiofunktio kaikilla kerroksilla. Viimeisellä kerroksella voi käyttää lineaarista aktivaatiofunktiota. Näin ollen ulostulojen arvot eivät rajoitu välille [0, 1] (logsig) tai [ 1, 1] (tanh). Riippuu tilanteesta, mitä halutaan.
Kustannusfunktio: kuinka huonosti verkko toimii Verkon opettamisen tavoitteena on saada piirrevektorit kuvautumaan mahdollisimman lähelle todellisen luokan koodausta. (Opetusdatalle tämä on liiankin helppoa; tärkeintä on varmistaa että kuvaus yleistyy testidatalle). Arvioidaan sitä, miten huonosti verkko toimii! Yritetään löytää huonoutta kuvaavan funktion minimikohta. Kustannukseksi käy esim. keskimääräinen virhe J({W}) = 1 N 2N i=1 N (x i) y i 2 missä N (x i ) on hermoverkon tuloste opetusvektorille x i ja y i on tunnettu totuus siitä, mihin ideaalinen hermoverkko kuvaisi x i :n.
Backpropagation -opetus Merkitään i:nnen opetusvektoriparin aiheuttamaa virhettä e i = N ({W l })(x i ) y i. Osoittautuu, että edellä mainitun kustannusfunktion gradientti voidaan laskea iteratiivisesti matriisimuodossa virheen etenemisen (backpropagation) avulla: W l J({W l }) = 1 N N i=1 ξ l i [ô (l 1) i ] T, missä (aloittaen viimeisestä eli L:nnestä kerroksesta) ξ L i = e i, ξ l i = Diag{(F l ) (W l ô (l 1) i )} (W (l+1) 1 ) T ξ (l+1) i. (3) Kaavassa W (l+1) 1 on matriisi, joka saadaan poistamalla W (l+1) :stä ensimmäinen sarake, jossa on neuronien bias-termit. (2)
Miten huonous minimoidaan Koska käytettävissä on kustannuksen gradientti, voidaan käyttää esim. jyrkimmän laskun menetelmää: Jokaisella kierroksella jokaisesta painosta vähennetään pienellä vakiokertoimella kerrottu osittaisderivaattansa. Pikkuhiljaa verkko konvergoi varmasti kustannusfunktion lokaaliin minimiin, mikäli askelpituus on riittävän pieni.
Muita opetusmenetelmiä ja formulointeja Edellä esitettiin derivoituva kustannusfunktio sekä ehkä yksinkertaisin mahdollinen kustannusfunktion gradienttiin perustuva opetusmenetelmä (myös melkolailla tehottomin). Tehokkaampia MLP:lle soveltuvia optimointimenetelmiä ovat mm. konjugaattigradienttimenetelmät, BFGS-menetelmä, Levenberg-Marquardt,... Geneettiset algoritmit käyvät myös. Kustannus voidaan formuloida myös eri tavoin, mm. epäsileäksi funktioksi (jolla ei siis ole kaikkialla gradienttia). Siihenkin on olemassa menetelmiä!
Käytännön demo (Tässä kohtaa luentoa vilkaistiin Matlabissa/Octavessa toimivaa hermoverkkokoodia. Ajeltiinkin esimerkkiskriptejä, ja nähtiin kun ne tulostelivat minimoinnin edetessä mm. kustannusfunktion arvoa, gradientin suuruutta sekä kolmen luokan sekaannusmatriisia (datana oli muuten kolmen iiris-kukkalajikkeen yksilöitä, piirteenä terä- ja varsilehtien pituus ja leveys). Odotetusti diagonaalille alkoi kertyä valtaosa luokituksista. Vääriäkin luokituksia jäi, mikä on myös normaalia. Iirisdata luokittuu lähes täysin, mutta jyrkimmän laskun menetelmällä kestää kauan eikä ekasta lähtöpisteestä aina löydy hyvää lokaalia minimiä. Koodit olivat vuoden 2008 bugisia malleja; ne löytyvät jonkun linkin takaa nettisivultani, jos haluaa ja uskaltaa niitä katsella. Vähempibugiset versiot pittäisi tulla ihan meidän YouSource -järjestelmään jahka ennätän ne sinne laittamaan.)
Yhteenveto Luokittelua tarvitaan monessa konenäköjärjestelmässä. Kohteen paikannus, esikäsittely ja piirteytys tarpeen ennen luokittelua. Luokat ja luokittelun tulkinta riippuu sovelluksesta. Algoritmeja on monia; tässä käytiin esimerkin vuoksi läpi MLP-neuroverkko. Sekaannusmatriisit ja tunnusluvut apuna menetelmien vertailussa. Tässä lyhyessä luennossa jätettiin huomioimatta paljon, mm. luokittelun lähisukulainen klusterointi ja siihen liittyvät ohjaamattoman oppimisen menetelmät. MLP-hermoverkosta esitettiin vain perusperusteet. Hermoverkoissa yleisesti ottaen ja myös muissa luokittelumenetelmissä olisi paljon ammennettavaa, erityisesti tukivektorikoneet (SVM), päätöspuut (decision trees) sekä boosting-tyyppiset ratkaisut (esim. Haar Cascades). Kiinnostunut lukija ohjaa itsensä kirjallisuusviitteisiin tahi Internetin ihmemaahan hakusanojen kera.
Kirjallisuutta Automaattinen luokittelu Kirjoja hermoverkko- ja tukivektoriluokittelusta: Simon Haykin: Neural Networks and Learning Machines, Prentice Hall, 2008 Cristopher M. Bishop: Neural networks for pattern recognition, Oxford University Press, 1995 John Shawe-Taylor & Nello Christianini: An Introduction to Support Vector Machines and Other Kernel-based Learning Methods, Cambridge University Press, 2000 Valmiita avoimen lähdekoodin ohjelmakirjastoja löytyy, esim.: libsvm tukivektorikone, http://www.csie.ntu.edu.tw/ cjlin/libsvm/ fann monikerroshermoverkko, http://leenissen.dk/fann/ flann nopea lähinaapurialgoritmi, http://www.cs.ubc.ca/ mariusm/index.php/flann/flann