IIKKA TEIVAS JALANKULKIJAN HAVAITSEMINEN KUVASTA Kandidaatintyö Tarkastaja: Yliopistonlehtori Heikki Huttunen Jätetty tarkastettavaksi 11.12.2014
I TIIVISTELMÄ IIKKA TEIVAS: Jalankulkijan havaitseminen kuvasta Tampereen teknillinen yliopisto Signaalinkäsittelyn ja tietoliikennetekniikan koulutusohjelma Pääaine: Signaalinkäsittely ja multimedia Tarkastaja: Yliopistonlehtori Heikki Huttunen Avainsanat: Histograms of Oriented Gradients, hahmontunnistus, OpenCV, tukivektorikone Jalankulkijan havaitseminen reaaliajassa on tärkeä turvallisuustekijä tulevaisuuden autoissa ja automatisoidussa valvonnassa. Kyseistä konenäköongelmaa varten on kehitelty monia menetelmiä ja tässä työssä tutkitaan yhtä tälläistä. Kuvan gradienttien suunnista muodostetaan histogrammeja, jotka toimivat piirteinä. Näitä piirteitä verrataan opetusdatasta muodostettuihin tyypillisen ihmismuodon piirteisiin, jolloin yhtäläisyyksistä voidaan päätellä onko kuvassa ihminen vai ei. Työssä keskitytään ihmisten havaitsemiseen staattisista kuvista vapaan lähdekoodin OpenCV-kirjastoa ja kahta valmiiksi opetettua luokitinta hyödyntäen. Tulokset näyttävät, että valmiin toteutuksen luokittimet jättävät parantamisen varaa. Käytetystä testikuvasarjasta tunnistetaan vain noin 65 % jalankulkijoista, jolloin yleisesti menetelmällä saavutetuista tuloksista jäädään jälkeen. Pieniä vääriä havaintoja voidaan karsia sovelluskohteen mukaan pienentämällä kuvaa etukäteen, jolloin tulos ja laskenta-aika paranevat.
II ALKUSANAT Inspiraatio tähän työhön on lähtöisin yliopistonlehtori Heikki Huttuselta ja kiinnostuksestani hahmontunnistuksen sovelluksiin. Haluaisin kiittää ohjaajaani Heikki Huttusta oikean suunnan näyttämisestä ja rakentavista kommenteista. Lisäksi kiitos Tuomas Tikkaselle, keneltä sain paljon apua ongelmiin törmätessäni. Tampereella, 11.12.2014 Iikka Teivas
III SISÄLLYS 1. Johdanto.................................... 1 2. Tausta ja teoria................................. 2 2.1 Katsaus menetelmään.......................... 2 2.2 Piirteiden muodostaminen........................ 3 2.3 Luokittelu................................. 6 2.4 Luokittelukyvyn mittaaminen...................... 9 3. Toteutus..................................... 12 4. Tulokset..................................... 13 4.1 Parametrien vaikutus suorituskykyyn.................. 13 4.2 Luokittimen vaikutus suorituskykyyn.................. 16 4.3 Havaintoja................................. 18 5. Johtopäätökset................................. 22 Lähteet....................................... 23
IV TERMIT JA NIIDEN MÄÄRITELMÄT AUC ROC-käyrän alle jäävä pinta-ala, jota käytetään luokittimen suorituskyvyn mittarina (engl. Area Under the Curve) FIR Digitaalinen suodin, jonka impulssivaste on äärellisen mittainen (engl. Finite Impulse Response) FNR Suure, joka kuvaa väärien negatiivisten tunnistusten suhdetta (engl. False Negative Rate) FPR Suure, joka kuvaa väärien positiivisten tunnistusten suhdetta. Luokittimen spesisyyden komplementti (engl. False Positive Rate) HOG Reunahistogrammeihin perustuva piirre, joita käytetään muun muassa jalankulkijoiden tunnistamisessa (engl. Histograms of Oriented Gradients) RGB Väriavaruus, joka muodostuu punaisesta (red), vihreästä (green) ja sinisestä (blue) kanavasta. ROC Lääketieteessä ja koneoppimisessa usein käytetty graanen analysointimenetelmä (engl. Receiver operating characteristic) SVM Tukivektorikone eli luokittelija, joka perustuu luokkien erottamiseen rajapinnan avulla (engl. Support Vector Machine) TNR Luokittimen spesisyys, eli oikein luokiteltujen negatiivisten näytteiden suhde (engl. True Negative Rate) TPR Luokittimen sensitiivisyys, eli oikein luokiteltujen positiivisten näytteiden suhde (engl. True Positive Rate) VOC Vuosittain julkaistava haaste, jossa tulee ratkaista jokin ajankohtainen ja haastava konenäköongelma. (engl. Visual Object Classes Challenge)
1 1. JOHDANTO Jalankulkijan paikannus on merkittävä ja paljon huomiota herättänyt konenäköongelma, jossa pyritään etsimään ihmisvartalon muotoisia kohteita kuvasta. Muun muassa automatisoidun valvonnan ja autonomisten autojen kehittäminen on herättänyt mielenkiinnon juuri jalankulkijoiden tunnistamista kohtaan. Tehtävä on ihmiselle helppo, mutta koneelle haastava. Tietokoneiden huima laskentatehon kasvu lähivuosina on luonut uusia mahdollisuuksia reaaliaikaisen kuvankäsittelyn tutkimiselle ja menetelmien kehittämiselle. Jalankulkijoiden havaitseminen on ratkaisu monenlaisiin turvallisuushaasteisiin. Esimerkiksi Mercedes-Benzin luksusautoissa avustavat ajotietokoneet etsivät kamerakuvasta jatkuvasti kohteita, jotka saattavat olla ihmisiä ajoradalla. Kun tämä yhdistetään pimeässä ihmistä paremmin näkeviin infrapunakameroihin, sovelluksen vaikutus auton turvallisuuteen on ilmeinen. [4] Myös automatisoidussa videovalvonnassa ihmisten havaitseminen ja laskeminen on osoittautunut oleelliseksi ominaisuudeksi. Esimerkiksi lentokenttien tai ostoskeskusten kävijämäärää voidaan tarkastikin seurata reaaliajassa erilaisilla kamerajärjestelmillä. [7] Kuvausolosuhteet ja ihmisen erilaiset asennot tekevät jalankulkijoiden paikantamisesta erityisen haastavan ongelman, mistä syystä täydellisesti toimivaa menetelmää on vaikea toteuttaa. Piirteet, joilla voidaan tunnistaa ihmiskehon muoto vaativistakin taustoista, eivät saa olla herkkiä skaalalle, valaistukselle tai kuvaussuunnalle. Sovelluksen käyttökohteet luovat tarkat vaatimukset suorituskyvylle, joten menetelmän jatkuva kehittäminen on oleellista. Tässä työssä perehdytään jalankulkijan tunnistamiseen tehokkaimmiksi luokiteltujen Histogram of Oriented Gradients -piirteiden ja tukivektorikoneen yhdistelmällä [1]. Reunahistogrammeista muodostetut piirteet tallentavat kohteen muodot tehokkaasti ja lineaarinen tukivektorikone suorittaa luokituksen. Työssä selitetään piirteiden muodostamisen ja luokituksen toimintaperiaatteet ja taustalla olevat teoriat. Soveltavassa osassa tutkitaan kokonaisuuden suorituskykyä käyttäen ongelmaa varten kehitettyä kuvasarjaa. Työ rakentuu alussa kuvattavasta menetelmän teoriasta, jonka jälkeen siirrytään lyhyeen toteutuksen kuvaamiseen. Luvussa 4 tarkastellaan saatuja tuloksia ja lopussa esitetään johtopäätökset.
2 2. TAUSTA JA TEORIA Tässä luvussa kuvataan kyseessä olevan hahmontunnistusmenetelmän ja tunnistustuloksen analysoinnin taustalla olevat teoriat omissa aliluvuissaan. Ensin käsitellään piirteiden muodostaminen, josta siirrytään luokittimen toimintaperiaatteeseen. Lopuksi esitellään menetelmä tunnistimen luokittelukyvyn mittaamiseen. Teoria piirteiden muodostamisen takana perustuu N. Dalalin ja B. Triggsin kirjoittamaan alkuperäiseen artikkeliin [1]. 2.1 Katsaus menetelmään Jalankulkijan tunnistamista varten kehitetty Histograms of Oriented Gradients (HOG) -piirteitä hyödyntävä menetelmä perustuu normalisoitujen reunahistogrammien muodostamiseen kuvan gradienttien suunnista. Ideana on, että halutun kohteen muodot voidaan tallentaa tehokkaasti vain ääriviivojen informaatiolla. [1] Kuvan 2.1 lohkokaaviosta voidaan nähdä tunnistuksen eri vaiheet. Kuva 2.1 Piirteiden muodostuksen ja luokituksen vaiheet. Tunnistuksen toteuttavalle ohjelmalle syötetty kuva tutkitaan pienemmän tunnistusikkunan avulla. Jokainen ikkuna jaetaan osittain päällekkäisiin lohkoihin ja lohkot edelleen niin sanottuihin soluihin. Solujen jokaiselle kuvapisteelle lasketaan gradientit ja niille magnitudit. Gradientit kvantisoidaan käyttäjän määrittelemään tarkkuuteen, jolloin jokaista solua edustaa tämä määrä piirteitä. Näistä piirteistä muodostetaan histogrammi. Jokaisen solun histogrammi tallennetaan vektoriin, jolloin HOG-piirrevektori on valmis. [1]
2.2. Piirteiden muodostaminen 3 ohko2 l ohko1 l Kuva 2.2 Vihreä ruudukko kuvaa soluiksi jaettua tunnistusikkunaa. Punainen ja sininen neliö ovat kaksi peräkkäistä lohkoa 50 % limittäin. Alkuperäisessä toteutuksessa tunnistusikkuna on kooltaan 64 kuvapistettä leveä ja 128 kuvapistettä korkea. Ikkuna jaetaan 16x16:n kuvapisteen kokoisiin lohkoihin, jotka ovat 50 % päällekkäin toistensa kanssa. Tällöin ikkunassa on 105 lohkoa. Jokainen lohko jaetaan neljään soluun. Lohkojen ja solujen rakenne on esitetty kuvassa 2.2. Yksittäisen solun gradientit kvantisoidaan 9 tasaiseen väliin. Piirrevektorin pituus on tässä tapauksessa 105x4x9 = 3780. Suurella määrällä piirteitä voidaan luoda tarkka tunnistin, mutta luokittelusta muodostuu laskennallisesti monimutkainen ja hidas. [9, 1] 2.2 Piirteiden muodostaminen Hahmontunnistuksessa analysoitavat kuvat usein normalisoidaan yhtenä esikäsittelyn vaiheena. Tässä menetelmässä ensimmäisenä vaiheena kuvien väri- ja gammaarvot normalisoidaan ennen varsinaista käsittelyä. Hyöty on kuitenkin pieni, koska myöhemmässä vaiheessa tehtävä lohkonormalisointi tuottaa lähes saman tuloksen. [1] Toinen askel on gradienttikuvien muodostaminen. Gradienttien laskeminen on hyvin kriittinen vaihe piirrevektorin muodostamisessa, sillä se vaikuttaa suoraan tunnistimen suorituskykyyn. Yleinen tapa laskea kuvan gradientit on suodattaa kuva kaksiulotteisella FIR-suotimella, jonka tulos vastaa hyvin kuvan diskreettia derivaattaa. Paras tulos saadaan hyvin yksinkertaisella yksiulotteisella maskilla. Esimerkkinä käytetään [-1,0,1]-maskia x-tasossa ja tämän transpoosia y-tasossa. Monimut-
2.2. Piirteiden muodostaminen 4 kaisempia maskeja (kuten Sobel-operaattoria) voidaan myös käyttää, mutta nämä usein huonontavat tunnistimen suorituskykyä. Värikuville gradientit lasketaan jokaiselle RGB-värikanavalle erikseen ja valitaan näistä yksi suurimman gradienttivektorin normin perusteella. [1] Kuvapisteiden gradienttien muodostamiseksi lasketaan konvoluutio kuvamatriisin ja valitun maskin kanssa. Tässä konvoluutio [-1,0,1]-maskilla tarkoittaa, että jokaisen pikselin gradienttia arvioidaan sen viereisten pikseleiden erotuksena, eli vaakagradientille G(x,y) = G(x+1,y) - G(x-1, y). Pystygradientti lasketaan vastaavasti ylemmän ja alemman pikselin erotuksena. Gradientin magnitudin approksimointia varten tarvitaan x- ja y-askelin suuntaiset gradientit. Vaakagradientti lasketaan kaavalla ja pystygradientti kaavalla G x (x, y) = [ 1, 0, 1] I(x, y) (2.1) G y (x, y) = [ 1, 0, 1] T I(x, y). (2.2) Näistä saadaan yhdessä magnitudi kaavalla G(x, y) = G 2 x + G 2 y (2.3) ja suunta kaavalla φ(x, y) = arctan( G y G x ). (2.4) Kuvassa 2.3 on esitetty esimerkkikuvan molemmat gradienttikuvat ja valmiit HOGpiirteet. [9] Seuraava vaihe on gradienttihistogrammin muodostaminen. Solun sisäisistä gradienttien suunnista muodostetaan histogrammi, jossa kuvapisteiden gradienttien normit tai magnitudit toimivat painokertoimina. Kertoimena voidaan käyttää esimerkiksi jotakin gradientin magnitudin funktiota, mutta magnitudi itsessään tuottaa parhaimmain tuloksen. [1]
2.2. 5 Piirteiden muodostaminen (a) Alkuperäinen kuva, (b) horisontaali gradienttikuva, (c) vertikaali gradienttikuva, (d) HOG-piirteet pään alueella. Kuva 2.3 Histogrammien muodostamista varten gradienttien suunnat kvantisoidaan 180 asteen välille, jolloin puhutaan niin kutsutusta etumerkittömästä gradientista. Orientaatiot 181 360 asteen välillä "käännetään"yksikköympyrän y-askelin positiiviselle puolelle vähentämällä orientaatioista 180 astetta [8]. Jalankulkijoiden vaihtelevan vaatetuksen ja erilaisten taustojen vuoksi etumerkillisen gradientin käyttö ei juuri paranna tulosta. Sen sijaan esimerkiksi autoja tunnistettaessa etumerkillisen gradientin käyttö ja välien määrän kaksinkertaistaminen parantaa tunnistustulosta. Kvantisointitasojen määräksi valitaan yleensä 9. Määrän kasvatus parantaa tunnistustarkkuutta, mutta tasojen määrä pidetään mahdollisimman alhaisena laskentaajan minimoimiseki tulosta huomattavasti huonontamatta. [1] Kuvasta 2.4 voidaan nähdä esimerkki yhden solun histogrammista. Histogrammin x-askelilla on 9 asteväliä ja y-askelilla gradienttivektorien magnitudi. Orientaatioita ei pyöristetä lähimpään asteväliin, vaan parhaan tuloksen saavuttamiseksi asteluku jaetaan kahteen osaan. Esimerkiksi 85 asteen orientaatio jaetaan 70 ja 90 asteen välille suhteilla (90 85)/20 = 1/4 ja (85 70)/20 = 3/4 [8].
2.3. Luokittelu 6 Kuva 2.4 Histogrammi muodostetaan jakamalla orientaatiot 20 asteen väleihin. Seuraavassa vaiheessa valaistuksen ja kontrastin muutokset kuvassa otetaan huomioon gradienttien paikallisella normalisoinnilla. Gradienttien vahvuudet normalisoidaan tilatasossa suuremmissa kokonaisuuksissa, eli lohkoissa. Lohkot ovat 50 % limittäin, joten jokainen solu vaikuttaa useampaan kuin yhteen lopulliseen piirrevektorin elementtiin. Tunnistustulokseen tarjoaa merkittävän parannuksen lohkoittain normalisointi, ja se voidaan tehdä monella eri tavalla. Yleisesti käytettyjä menetelmiä ovat normalisointi L1-sqrt -normin, L2-normin tai L2-Hystereesinormin avulla. L2-normi eli euklidinen normi on yksi käytetyimmistä, ja sitä hyödynnetään myös tässä työssä. Vektorin v L2-normi tarkoittaa sen neliöityjen elementtien summan neliöjuurta ja se määritellään kaavalla v 2 = Normalisointi tapahtuu tällöin kaavalla v N i=1 v2 i, jossa N on vektorin pituus. v v 2 2 + e, (2.5) jossa v on normalisoimaton vektori sisältäen lohkon sisäisten solujen histogrammit ja e pieni positiivinen vakio. Pienen vakion lisäämisellä vältytään nollalla jakamiselta. Lohkonormalisoinnin jälkeen viimeisenä vaiheena solujen histogrammeista muodostetaan lopullinen HOG-piirrevektori. [1] 2.3 Luokittelu Kun HOG-piirteet on saatu lasketuksi, täytyy niiden perusteella tehdä päätös onko ikkunan sisällä ihminen vai ei. Tätä varten opetetaan luokittelija, joka alkuperäisessä artikkelissa on tukivektorikone (Support Vector Machine, SVM). Tässä aliluvussa käsitellään kahta tyypillistä lineaarisesti eroteltavaa luokitustilannetta. Tukivektorikone on niin kutsuttu binaariluokitin, eli sen toiminta perustuu kah-
2.3. Luokittelu 7 den luokan erottamiseen toisistaan. Erottelu tapahtuu rajapinnalla, joka pyrkii asettumaan luokkien väliin mahdollisimman kauas kummankin näytteistä. Kun luokkien näytteiden väliin jäävä marginaali on mahdollisimman suuri, on luokitin optimaalinen. Erotinrajapinta on tässä tapauksessa muotoa w T x + b = 0. Kuvassa 2.5 on esitelty kaksi luokat 1 ja 2 oikein jakavaa erotinrajapintaa, joista kuitenkin vasen on parempi vaihtoehto marginaalin z1 ollessa suurempi. [11] Kuva 2.5 Kaksi erilaista erotinrajapintaa. Opetusdatan avulla tukivektorikone etsii parametrit w = [w 1, w 2,..., w n ] T joiden avulla voidaan määritellä diskriminanttifunktio ja b d w,b (x) = w T x + b, (2.6) jossa w R n on pinnan painokerroinvektori, b kynnyspainokerroin ja x syötetty n-ulotteinen data. Luokittelupäätös tapahtuu diskriminanttifunktion merkin perusteella, jolloin luokkarajaksi muodostuu pinta d w,b (x) = 0. Onnistuneen opetusvaiheen jälkeen diskriminanttifunktio määrittelee kumpaan luokkaan syötetty data kuuluu. Luokittelusääntö tuntemattomalle datalle x p määritellään ehdoilla ja d w,b (x p ) 0, x p C 1 (2.7) d w,b (x p ) < 0, x p C 2, (2.8) joissa C 1 ja C 2 ovat luokkia. [6] Jotta optimaalinen luokitustulos saavutetaan, tulee erotinrajapinnan etäisyys olla molempien luokkien näytteistä sama ja maksimaalisen suuri. Pisteen euklidinen etäisyys z erotinrajapinnasta lasketaan kaavalla
2.3. Luokittelu 8 z = d w,b(x) w. (2.9) Optimaalisen päätöstason löytämiseksi on monta tapaa, mutta yleisesti käytetty menetelmä perustuu neliölliseen optimointiin. Tukivektorikoneen opetus perustuu tällöin marginaalin M maksimointiin minimoimalla normi w = (w T w). Marginaali lasketaan kaavalla M = 2 w. (2.10) Tästä seuraa, että neliöllinen optimointiongelma on ratkaistu, kun minimoidaan funktio J(w, b) = 1 2 w 2 (2.11) ehdolla y i [w T x i + b] 1, (2.12) jossa x i on opetusdatan näyte ja y i tämän luokka, kun i = 1, 2,..., n. Kuvassa 2.6 on esitelty tilanne, jossa luokat menevät limittäin, eikä niitä voida erotella edellä mainitulla tavalla. Kyseinen luokitusongelma voidaan ratkaista niin kutsutulla joustavan marginaalin luokittimella. [11] Kuva 2.6 Joustavan marginaalin erotinrajapinta limittäisille luokille. Luokkien vaikea erottelu otetaan huomioon erotinrajapinnan muodostamisessa apumuttujalla γ i, joka on näytteen i etäisyys rajapinnasta. Marginaalin etäisyydellä pätee yhtälö γ i = 0. Tavoitteena on maksimoida marginaali samalla minimoiden väärällä puolella olevien ja marginaalin sisällä olevien näytteiden määrä, eli kun γ i > 0. Neliöllisen optimoinnin kaavaan muokataan lisäämällä väärällä puolel-
2.4. Luokittelukyvyn mittaaminen 9 la olevien näytteiden etäisyyksien summa. Tällöin optimointiongelma ratkaistaan minimoimalla funktio ehdolla J(w, b) = 1 l 2 w 2 + C γ i (2.13) i=1 y i [w T x i + b] 1 γ i, (2.14) jossa positiivinen vakio C kontrolloi kilpailevien termien vaikutusta tulokseen. [6] Käytännössä tukivektorikoneen opetus tapahtuu valmiilla C++-kirjastoilla, joita ovat esimerkiksi LIBSVM ja SVMLight. Alkuperäisessä työssä opetus on toteutettu jälkimmäisellä. LIBSVM on kehitetty Taiwanin kansallisessa yliopistossa, ja on yksi suosituimpia vapaan lähdekoodin koneoppimiskirjastoja. [12, 1] 2.4 Luokittelukyvyn mittaaminen Piirteiden laskemisen ja luokituksen jälkeen tulee valmiin tunnistimen suorituskykyä analysoida löytääkseen optimaaliset parametrit ja saavuttaakseen parhaan mahdollisen suorituskyvyn. Satunnaisesti parametriarvoja vaihtamalla voidaan nähdä miten suorituskyky muuttuu, mutta optimaalisten arvojen löytämistä varten on olemassa tehokas menetelmä. Receiver operating characteristic (ROC) -analyysi on graanen kahden luokan luokittimen analysointimenetelmä, joka perustuu luokittimen sensitiivisyyteen ja spesisyyteen. Sensitiivisyydellä tarkoitetaan luokittimen oikein luokiteltujen positiivisten näytteiden määrää (True Positive Rate, TPR) ja spesisyydellä oikein luokiteltujen negatiivisten näytteiden määrää (True Negative Rate, TNR). Kuvan 2.7 kaltaisesta sekaannusmatriisista saadaan yksi piste kuvaajaan. Piirtämällä sensitiivisyys spesisyyden funktiona eri parametriarvoilla saadaan ROC-käyräksi kutsuttu kuvaaja. [10] Kuva 2.7 Sekaannusmatriisi kahden luokan ongelmalle. TP (True Positives), FN (False Negatives), FP (False Positives), TN (True Negatives). ROC-analyysissä kuvaajan y-askeli kuvaa sensitiivisyyttä ja x-akseli spesisyyden komplementtia (1-spesisyys), jolloin tämä akseli edustaa väärin luokiteltujen
2.4. Luokittelukyvyn mittaaminen 10 positiivisten näytteiden määrää (False Positive Rate, FPR). TPR ja FPR voidaan laskea luokittelun tulosten sekaannusmatriisista (kuva 2.7) yhtälöillä ja T P R = TP TP + FN (2.15) F P R = FP FP + TN. (2.16) Kuvassa 2.8 on esimerkki kolmesta binääriluokittimen ROC-käyrästä. Kuvaajan vasemmassa alakulmassa luokitin tulkitsee kaikki näytteet negatiiviseksi, kun taas oikeassa yläkulmassa luokitin tulkitsee kaikki näytteet positiiviseksi. Optimaalinen tilanne on sellainen, jossa kaikki positiiviset näytteet on tunnistettu oikein ilman vääriä tunnistuksia. Tästä johtuen kuvaajan vasempaa yläkulmaa lähimmät pisteet ovat yleensä parhaimpia luokittimia. [10] Kuva 2.8 Kolme erilaista ROC-käyrää. Vaikka ROC-käyrä on hyvä tapa analysoida luokittimen suorituskykyä, halutaan kuvaajan tieto usein tiivistää yhteen lukuun helppoa vertailua varten. Yksi paljon käytetty suorituskyvyn mittari saadaan laskemalla käyrän alle jäävä pinta-ala, eli Area Under the Curve (AUC). Mitä suurempi AUC, sitä keskimääräisesti parempi luokitin. Parhaimmassa tapauksessa AUC saa arvon 1,0 ja huonoimmassa tapauksessa arvon 0,5, jolloin puhutaan satunnaisesta luokittelusta. [3] Kuvassa 2.8 luokittimella 2 on selvästi suurin AUC, joten se on keskimääräisesti paras näistä kolmesta.
2.4. Luokittelukyvyn mittaaminen 11 Kuvaan on piirretty vertailuksi myös satunnaisen luokittelijan ROC-käyrä sinisellä. Toisena binääriluokittimen tarkkuuden mittarina voidaan käyttää F-scorea, joka perustuu tarkkuuden ja sensitiivisyyden optimointiin. Sensitiivisyys eli TPR tunnetaan F-scoren yhteydessä myös englanninkielisellä termillä recall, jota merkitään tässä kirjaimella r. Tarkkuus p (engl. precision) määritellään kaavalla p = TP TP + FP, (2.17) jonka huomataan muodostuvan lähes samaan tapaan kuin sensitiivisyyden, mutta nyt oikein tunnistettuja näytteitä verrataan kaikkiin löydettyihin positiivisiin näytteisiin. Usein käytetty F-score on F1-score, joka on tarkkuuden ja sensitiivisyyden harmoninen keskiarvo ja se määritellään kaavalla F 1 = 2pr p + r. (2.18) F-score saa arvoja nollan ja yhden väliltä yhden ollessa paras ja nollan huonoin. F- score tiivistää yksittäisen luokitustuloksen vertailtavaksi lukuarvoksi, kun taas AUC on hyvä yleistävä mittari luokittimen suorituskyvylle. [5] Sensitiivisyyden ja tarkkuuden avulla voidaan luoda ROC-käyrään verrattava kuvaaja eli niin kutsuttu PR-käyrä (engl. Precision-Recall Curve), jonka avulla voidaan arvioida luokittimen suorituskykyä graasesti. Ero ROC-käyrään on, että nyt optimaalinen luokittelija halutaan mahdollisimman lähelle kuvaajan oikeaa yläkulmaa, koska sekä sensitiivisyys että tarkkuus halutaan molemmat maksimoida. ROCanalyysi voi yksinään antaa luokittelijan suorituskyvystä optimistisen kuvan, varsinkin jos luokkien jakauma on pahasti vääristynyt. Koska kahden luokittimien ROCkäyrät ovat lähes samankaltaiset, voidaan vertailu suorittaa PR-käyrän avulla. Tämä perustuu siihen, että käyrä dominoi ROC-avaruudessa, jos ja vain jos se dominoi PRavaruudessa. Lisäksi jos luokittelija optimoi ROC-käyrän pinta-alan, ei ole taattua, että luokittelija optimoi PR-käyrän pinta-alan. [2]
12 3. TOTEUTUS Seuraavissa kappaleissa kerrotaan lyhyesti työn soveltavan osuuden vaiheista ja toteutustavoista. Soveltavan osuuden perustana on HOG-piirteisiin perustuvan tunnistimen testaus ja oleellisten parametrien vaikutuksen analysointi. Tarkoituksena on testata saatavilla olevia valmiita jalankulkijoiden tunnistamista varten luotuja ratkaisuja ja niiden toimivuutta sellaisenaan. HOG-piirteisiin perustuvat menetelmät on suunniteltu toimimaan reaaliaikaisesti, mutta tässä työssä keskitytään jalankukijoiden tunnistamiseen staattisista kuvista. Käytetty järjestelmä perustuu avoimen lähdekoodin OpenCV-kirjastoon, jossa jalankulkijoiden tunnistus on toteutettu. Valmis Python-skripti laskee jokaiselle sisääntulona annetulle kuvalle HOG-piirteet ja vertaa niitä painokerroinvektoriin. Tässä työssä käytetään valmiiksi opetettua tunnistinta eli valmista painokerroinvektoria. HOGDescriptor-luokan funktio palauttaa valmiiksi ihmisten tunnistusta varten opetetun tunnistimen painokerroinvektorin. Tunnistus tapahtuu niin, että detect-funktio laskee pistetulon painokerroinvektorin w ja sisään tulevasta ikkunasta lasketun piirrevektorin h kanssa kaavalla h T w. Kun tulos on käyttäjän määrittelemää raja-arvoa suurempi, kyseisessä ikkunassa on ihminen. Isot kuvat tutkitaan detectmultiscale-funktiolla, joka liu'uttaa tunnistusikkunaa kuvan läpi kutsuen jokaiselle erikseen detect-funktiota. Ulostulona skripti tulostaa nelikulmioita sisääntulevasta kuvasta löydettyjen ihmisten ympärille. Testaamisessa käytetty INRIA-kuvasarja on alkuperäistä työtä varten koottu haastava kuvasarja pystyasennossa olevia ihmisiä 1. Testaamisessa on käytetty kuvasarjan alkuperäisen kokoisia valokuvia ja näihin liittyviä tiedostoja, joissa on esitetty kuvissa esiintyvien ihmisten tilatason koordinaatit. Koordinaattien lukemiseen tiedostosta on käytetty VOC Challenge -kehitystyökaluja 2. Tunnistusfunktion luomien suorakulmioiden koordinaatit otetaan talteen ja verrataan ilmoitettuihin ihmisten koordinaatteihin. Tällä tavoin saadaan suorituskyvyn analysointia varten tarvittavat tiedot, kuten oikeat ja väärät positiiviset ja väärät negatiiviset tunnistukset. Analysointi ja testaus on toteutettu kokonaan MATLABohjelmiston avulla. 1 http://pascal.inrialpes.fr/data/human/ 2 http://pascallin.ecs.soton.ac.uk/challenges/voc/
13 4. TULOKSET Tässä luvussa esitetään työn soveltavan osuuden tuloksia ja havaintoja. Aluksi tutkitaan eri parametrien vaikutusta tunnistimen suorituskykyyn, minkä jälkeen esitetään kahden eri luokittimen tuottamat tulokset. Lopussa käsitellään muutamia yleisiä havaintoja tunnistimen laadusta. 4.1 Parametrien vaikutus suorituskykyyn Testauksessa käytetyssä kuvasarjassa on 289 kuvaa, joissa jokaisessa kuvassa on vähintään yksi ihminen. Taustalla olevia kaukaisia ja epäselviä ihmisiä ei oteta huomioon ollenkaan, vaan keskitytään selkeästi ihmissilminkin nähtäviin jalankulkijoihin. Testaus on tehty tarkasteltavia parametreja lukuun ottamatta valmiin scriptin vakioarvoilla ja Default-luokittimella. Koska menetelmän täytyy pystyä tunnistamaan ihmisiä eri koossa eli toisin sanoen eri etäisyyksiltä, tulee ikkunaa skaalata suuremmaksi. HOGDescriptor-luokassa on oma tunnistusfunktio eri skaaloille. Yksi merkittävimmistä funktion parametreista on scale0, eli kerroin tunnistusikkunan suurentamiselle suhteessa kuvaan eri tunnistusiteraatioilla. Asia on helppo ajatella ikkunan suurentamisena, mutta todellisuudessa laskennallisista syistä itse kuvaa skaalataan pienemmäksi jokaisella skaalan iteraatiolla. Esimerkiksi skaalakertoimella 1, 05 kuva I tunnistetaan skaaloissa 1, 05 k I, jossa k = 0, 1, 2,..., 64. Jokaisella iteraatiolla tunnistusikkuna liu'utetaan määritellyin askelein kuvan läpi tunnistaen kyseiseen ikkunakokoon sopivat ihmiset. Kuvassa 4.1 on skaalan vaikutus tunnistustarkkuuteen, aikaan ja F-scoreen. Kuvaajista voidaan nähdä skaalan vaikuttavan suorituskykyyn hyvin vähän, mutta laskenta-aikaan skaalalla on suuri vaikutus. Suuremmalla kertoimella tunnistusikkuna kasvaa nopeammin, jolloin yhden iteraation laskenta-aika pienenee nopeammin. Pääpainon ollessa tunnistustarkkuudessa skaalakerroin 1, 05 tuottaa parhaan tunnistusprosentin häviävän pienellä aikaerolla suurempiin kertoimiin verrattuna. Tunnistustarkkuuden (TT) lisäksi taulukosta 4.1 voidaan nähdä tarkemmin oikeiden positiivisten määrä suhteessa vääriin. Jos tämä suhde halutaan maksimoida, skaalakerroin 1, 09 on testatuista paras. F-scoren huomataan muuttuvan hyvin vähän kertoimien 1, 05 ja 1, 09 välillä, joten kerrointa valittaessa tulee päättää, halutaanko maksimaalinen vai optimaalinen tulos.
4.1. Parametrien vaikutus suorituskykyyn 14 Kuva 4.1 Skaalan vaikutus tunnistustarkkuuteen, aikaan ja F-scoreen. Skaala 1,02 1,03 1,04 1,05 1,06 1,07 1,08 1,09 1,1 Aika 85,44 62,26 52,65 46,32 39,43 34,74 32,78 31,46 30,81 TT 53,82 64,17 63,32 65,02 62,81 61,96 62,13 59,42 56,02 F1 0,44 0,56 0,58 0,62 0,61 0,62 0,63 0,63 0,61 TP 317 378 373 383 370 365 366 350 330 FN 272 211 216 206 219 224 223 239 259 FP 517 369 327 270 246 230 200 171 163 Taulukko 4.1 Tulokset skaalan eri arvoilla. Toinen merkittävä parametri on winstride eli tunnistusikkunan askel kuvapisteinä. Oletuksena askelkoon tulee olla ikkunan kokoon nähden pieni, jotta kuvassa esiintyvä ihminen saadaan osumaan ikkunan keskelle jollain iteraatiolla. Kuvassa 4.1 on esitetty ikkunan askelkoon vaikutus suorituskykyyn ja laskenta-aikaan. Kuvasta voidaan havaita, että askelkoon liiallisella suurentamisella on suuri vaikutus oikein tunnistuneiden ihmisten määrään. Askelkoon suurentaminen tietyn pisteen jälkeen ei enää merkittävästi lyhennä laskentaan vaadittavaa aikaa, jolloin parasta arvoa
4.1. Parametrien vaikutus suorituskykyyn 15 valittaessa voidaan arvioida jälleen oikeiden positiivisten suhdetta vääriin. Kuva 4.2 Ikkunan askelkoon vaikutus tunnistustarkkuuteen, aikaan ja F-scoreen. Askelkoko 2 4 6 8 10 12 14 16 18 20 Aika 492 134 182 46 148 57 134 30 106 50 TT 65,53 65,87 62,47 65,02 61,79 57,72 52,80 48,89 41,25 34,12 F1 0,44 0,52 0,55 0,62 0,63 0,61 0,60 0,59 0,54 0,47 TP 386 388 368 383 364 340 311 288 243 201 FN 203 201 221 206 225 249 278 301 346 388 FP 758 517 366 270 202 173 128 87 72 63 Taulukko 4.2 Tulokset ikkunan askelkoon eri arvoilla. Tarkemmat tulokset on esitetty taulukossa 4.2. Tuloksista voidaan nähdä, että ikkunan askelkoon ollessa 8 eli lohkon kokoinen, saavutetaan paras tunnistustarkkuus ja F-score järkevällä suoritusajalla. Kuvasta 4.2 voidaan huomata mielenkiintoinen ilmiö, jossa neljällä jaolliset askelkoot ovat laskennallisesti nopeimpia. Tämä johtuu todennäköisesti laskennan helppoudesta, kun ikkunan askelkoko on jaollinen
4.2. Luokittimen vaikutus suorituskykyyn 16 lohkojen koolla, joka on 8 kuvapistettä x- ja y-suunnassa. 4.2 Luokittimen vaikutus suorituskykyyn Tässä aliluvussa tarkastellaan kahden valmiin luokittimen vaikutusta tunnistimen suorituskykyyn. Koska tässä työssä kuvan 2.7 kaltaisesta sekaannusmatriisista puuttuu oikeat negatiiviset eli True Negative -arvot, ei AUC:ta voida laskea kappaleen 2.5 mukaisesti. Oikeat negatiiviset arvot ovat käytännössä jokaisen tunnistusiteraation ikkunat, joista oikeaoppisesti ihmistä ei havaita. Tämän vuoksi FPR-arvoa on mahdoton laskea ja vaikea approksimoida. Koska AUC on tärkeä mittari, voidaan kahden luokittimen AUC-arvoja vertailla suhteellisesti. Nyt jokaisesta kuvasta leikataan jokainen ihminen tunnistusikkunan kokoiseksi kuvaksi, ja samalla leikataan satunnaisesti samankokoisia kuvia taustasta, missä ihmistä ei ole. Analyysissä käytettäviä positiivisia kuvia on 589 ja negatiivisia kuvia 508 kappaletta. Nyt voidaan laskea jokaiselle tallennetulle kuvalle HOG-piirteet ja laskea niiden avulla pistetulo eri luokittimien painokerroinvektorien kanssa. Näistä tuloksista voidaan piirtää ROC-käyrä, joka simuloi varsin hyvää luokitustulosta. Kuvassa 4.3 on kahden testatun luokittimen ROC-käyrät. Default- ja Daimlerpainokerroinvektorit testattiin vakioparametreilla ja samalla testikuvasarjalla. Daimlerluokitin käyttää Defaultia pienempää tunnistusikkunaa (48x96), joten kuvasarjan kuvia skaalataan kertoimella 3/4. Tällöin myös piirteitä on reilusti vähemmän eli 1980. Kuvaajasta voidaan todeta Daimler-luokittimen olevan hieman Defaultia parempi AUC:n ollessa 5 % suurempi. Kuva 4.3 Daimler- ja Default-luokittimien ROC-käyrät ja AUC-arvot.
4.2. Luokittimen vaikutus suorituskykyyn 17 ROC-käyrän lisäksi voidaan tutkia samasta datasta saatua PR-käyrää kuvassa 4.4. Kuvaajasta voidaan todeta Daimler-luokittimen dominoivan koko PR-avaruutta, joten edellä tehty johtopäätös pitää paikkaansa. Nyt Daimler-luokittimen AUC on vain 4 % Defaultia parempi, mutta tulos on selkeä. Daimler-luokittimella saadaan hieman parempia tuloksia kaikkialla ROC- ja PR- avaruudessa, joten luokittimen käyttö Defaultin sijaan on perusteltua. Kuva 4.4 Daimler- ja Default-luokittimien PR-käyrät ja AUC-arvot.
4.3. Havaintoja 18 4.3 Havaintoja Tässä aliluvussa esitetään muutama esimerkkitapaus yksittäisistä tunnistustuloksista. Testikuvat on käsitelty default-luokittimella ja vakioparametreilla. Oleellisten parametrien vakioarvot ovat lueteltuna alla. Tässä hitt reshold tarkoittaa luokittimen päätöspinnan raja-arvoa. hitthreshold = 0 winstride = (8,8) scale = 1.05 Alla esitettävissä kuvissa oikealla yläkulmassa on tunnistusikkunan kokoinen kohdistettu kuva ihmisestä ja tälle yhtälön score = h T w tuottama tulos, jota tässä kutsumme scoreksi. Default-luokittimella tunnistusikkunan scoren tulee ylittää arvo 6,66, jotta pistetulon tuottama skalaari ylittää raja-arvon eli tässä arvon nolla. Kuvien tunnistustulosten analysointia varten taulukossa 4.3 on esitetty eri päätösrajaarvojen aiheuttamat oikeat ja väärät positiiviset tulokset. Tässä raja-arvon pienentäminen tarkoittaa, että luokittelijasta tehdään niin sanotusti liberaalimpi eli pienempi score tulkitaan ihmiseksi. Raja-arvon kasvattaminen vastaavasti tekee luokittelijasta konservatiivisemman, joka tarkoittaa edellisen vastakohtaa. Kappaleessa 4.2 kootun negatiivisen kuvadatan scoren keskiarvo on 3,159, jota voidaan lisäksi käyttää vertailukohtana. Tämä tarkoittaa sitä, että jos tunnistusikkunan tuottaman score on tätä suuruusluokkaa, sisältö tulkitaan negatiiviseksi. hittreshold -2,0-1,5-1,0-0,5 0 0,5 1,0 1,5 2,0 TP 57 159 305 379 383 327 233 147 73 FP 6393 4575 2408 903 207 68 21 5 1 Taulukko 4.3 Oikeat ja väärät positiiviset tunnistukset eri päätösraja-arvoilla.
4.3. Havaintoja 19 Kuva 4.5 Hyvin tunnistunut kuva. Kuvassa 4.5 on halutulla tavalla tunnistettu jalankulkija. Scoren ollessa reilusti päätösraja-arvoa suurempi voidaan sanoa kuvan olevan tunnistimelle helppo. Kuvasta voidaan myös nähdä, että vain osittain näkyvän ihmisen (vasen reuna) score ei riitä tunnistumiseen. Tämä on valitettava asia, sillä esimerkiksi liikenteessä ihminen voi olla monesti osittain jonkin esteen takana. Jotta osittaiset ihmiset saataisiin tunnistettua, tulisi luokittimesta tehdä liberaalimpi, jolloin väärien positiivisten tulosten määrä kasvaisi.
4.3. Havaintoja 20 Kuva 4.6 Huonosti tunnistunut kuva. Kuvassa 4.6 on huonosti tunnistunut kuva, jossa rannalla seisovaa miestä ei ole havaittu. Mahdollisesti miehen takin väri on liian lähellä hiekkarannan väriä, jolloin HOG-piirteiden rajoitukset tulevat esiin. Todennäköisesti miehen ylävartalon tulos laskee scorea sen verran, että raja-arvo ei ylity. Tarkemmalla testauksella saadaan selville, että henkilö saadaan tunnistumaan laskemalla raja-arvoa -0,5 saakka, tai puolittamalla tunnistusikkunan askelkoko. Raja-arvon lasku puoli yksikköä tarkoittaa, että nyt scoren täytyy ylittää luku 6, 66 0, 5 = 6, 16, jotta ihminen tunnistetaan. Yläkulmassa olevan scoren mukaan tämän ei pitäisi riittää. Raja-arvoa laskettaessa mies tunnistetaan hieman yläkulman pientä kuvaa suuremmalla tunnistusikkunalla, jolloin score on tätä suurempi. Tämä johtuu todennäköisesti opetusdatan kuvien asettelusta, jossa ihmisen ympärillä on keskimäärin hieman enemmän taustaa kuin pienessä kuvassa. Yksittäisen kuvan tulosta on helppo parantaa pienillä muutoksilla, mutta tämän jälkeen seuraukset koko dataan tulee selvittää. Taulukosta 4.3 nähdään, että rajaarvon pienentämisellä on raju vaikutus väärien positiivisten määrään. Myös taulukosta 4.2 voidaan nähdä, että ikkunan askelkoon puolituksella itse tulos ei huonone, mutta väärien positiivisten määrä kaksinkertaistuu.
4.3. 21 Havaintoja Kuva 4.7 Huonosti tunnistunut kuva. Kuvassa 4.7 nähdään jälleen huonosti tunnistunut kuva. Suorassa seisova mies ei tunnistu oikein, vaikka tausta on lähes yksivärinen. Miehen score ei ole lähelläkään päätösraja-arvoa, vaan asettuu negatiivisten kuvien keskiarvon lähettyville. Tämä saattaa johtua vaativasta vaatetuksesta ja valaistuksesta. Koska tausta ja vaatteet ovat hyvin tummia, HOG-piirteiden avulla tunnistaminen jälleen vaikeutuu. Nyt käden alueelta tunnistetaan virheellisesti ihminen scoren ollessa reilusti raja-arvon yläpuolella. Laskettaessa raja-arvoa -0.5 asti saadaan mies tunnistettua ilman yhtäkään väärää positiivista. Kuva on hyvä esimerkki konenäön rajoitteista. Ihmiselle kuva vaikuttaa helpolta, mutta HOG-piirteiden perusteella kuvassa ei ole lainkaan jalankulkijaa siellä missä pitäisi. Osa miehestä on silti tunnistunut, joten käyttösovelluksesta riippuen tulos voi olla riittävä.
22 5. JOHTOPÄÄTÖKSET HOG-piirteillä on saavutettu varsinkin ihmisiä havaitessa hyviä tuloksia. Esimerkiksi Said et al. (2011) saavuttivat tätä työtä vastaavalla menetelmällä noin 86 % tunnistustarkkuuden INRIA-kuvasarjan positiivisella testidatalla [9]. Tässä työssä luokittimen opetus sivuutettiin ja hyödynnettiin valmiiksi opetettuja luokittimia. Tällä tavoin saavutettiin noin 65 %:n tunnistustarkkuus samalla testidatalla. Valmiiksi opetetut painokerroinvektorit ovat tässä työssä yksi hyvää tulosta rajoittava tekijä. Lisäksi INRIA-kuvasarja on tarkoituksella haasteellinen, joten tavallista huonompi tulos on ymmärrettävää ilman optimointitoimenpiteitä. Opetusnäytteillä on suuri merkitys tunnistustulokseen, joten suoria johtopäätöksiä menetelmän lopullisesta suorituskyvystä ei voida tehdä. Voidaan kuitenkin sanoa, että menetelmä tälläisenään riittää varsin hyvin monenlaiseen reaaliaikaiseen käyttöön, jolloin esimerkiksi yksittäiset vaikeat asennot eivät estä jalankulkijan havaitsemista. Videokamera ottaa sekunnissa kymmeniä kuvia, joista jokainen prosessoidaan erikseen. Todennäköistä on, että videokuvassa liikkuva jalankulkija tunnistetaan suurimmassa osassa kuvista per sekuntti, eikä toteutus kärsi muutamista tunnistamatta jääneistä kuvista. Tämä tarkoittaa, että halvalla webkameralla ja vähäisillä ohjelmointitaidoilla on jo mahdollista saavuttaa varsin hyvä reaaliaikainen järjestelmä jalankulkijoiden havaitsemista varten. Testatuilla parametreilla yhden kuvan prosessointi kestää noin kymmenesosa sekunnin, joten täysin sulavaan reaaliaikaiseen käyttön tulisi laskenta-aika saada noin kolmannekseen tästä. Laskenta-aikaa on helppo tiputtaa esimerkiksi kasvattamalla skaalakerrointa ja vähentämällä skaalan iteraatioita, mikä toisaalta vaikuttaa tunnistustarkkuuteen negatiivisesti. Koska usein ihmisten todennäköinen etäisyys kameraan tiedetään, monessa käyttötarkoituksessa paras tapa ohjelman nopeuttamiseksi olisi skaalausfunktion muokkaaminen niin, että ennen skaalan iterointia kuvaa pienennettäisiin esimerkiksi puoleen. Tämä laskisi kuvan laskenta-aikaa merkittävästi ja ennen kaikkea vähentäisi ongelmaksi muodostuneita pieniä vääriä positiivisia tunnistuksia. Näen HOG-piirteiden käytön hahmontunnistustarkoituksessa erittäin lupaavana ja ajankohtaisena. Vaikka testatulla valmiilla ohjelmalla ei tavoitettuja tuloksia saatu, voidaan silti sanoa menetelmän toimivan hyvin ihmismuotoja tai mitä tahansa yksikäsitteisiä muotoja havaitessa.
23 LÄHTEET [1] N. Dalal and B. Triggs, Histograms of oriented gradients for human detection, in Computer Vision and Pattern Recognition, 2005. CVPR 2005. IEEE Computer Society Conference on, vol. 1, June 2005, pp. 886893 vol. 1. [2] J. Davis and M. Goadrich, The relationship between precision-recall and ROC curves, in Proceedings of ICML '06, 233-240, 2006. [3] T. Fawcett, An introduction to ROC analysis, Pattern recognition letters, vol. 27, no. 8, pp. 861874, 2006. [4] U. Franke, D. Pfeier, C. Rabe, C. Knoeppel, M. Enzweiler, F. Stein, and R. G. Herrtwich, Making bertha see, in Proceedings of the IEEE International Conference on Computer Vision, 2013, pp. 214221. [5] C. Goutte and E. Gaussier, A probabilistic interpretation of precision, recall and f-score, with implication for evaluation, in Advances in Information Retrieval, ser. Lecture Notes in Computer Science. Springer Berlin Heidelberg, 2005, vol. 3408, pp. 345359. [6] V. Kecman, Basics of machine learning by support vector machines, in Real World Applications of Computational Intelligence, ser. Studies in Fuzziness and Soft Computing. Springer Berlin Heidelberg, 2005, vol. 179, pp. 49103. [7] J. Li, L. Huang, and C. Liu, People counting across multiple cameras for intelligent video surveillance, in Advanced Video and Signal-Based Surveillance (AVSS), 2012 IEEE Ninth International Conference on, Sept 2012, pp. 178 183. [8] C. Mccormick, HOG person detector tutorial, computer vision and machine learning projects and tutorials, verkkosivu Saatavissa (viitattu 27.11.2014): https://chrisjmccormick.wordpress.com/2013/05/09/ hog-person-detector-tutorial/. [9] Y. Said, M. Atri, and R. Tourki, Human detection based on integral Histograms of Oriented Gradients and SVM, in Communications, Computing and Control Applications (CCCA), 2011 International Conference on, March 2011, pp. 15. [10] P.-N. Tan, Receiver Operating Characteristic, in Encyclopedia of Database Systems. Springer US, 2009, pp. 23492352. [11] K. Theodoridis, S. Koutroumbas, Support vector machines, in Pattern Recognition, Fourth Edition. Academic Press, 2009.
Lähteet 24 [12] Wikipedia, LIBSVM Wikipedia, the free encyclopedia, Saatavissa (viitattu 27.8.2014): http://en.wikipedia.org/wiki/libsvm, 2014.