Ensin hallinnollinen tiedotus tehtäväpaketin saaneille:
jos palautat ratkaisut viimeistään maanantaina 13.7 klo 8:00 mennessä, voit saada kokonaismerkinnän samalla kuin muut. Tämän jälkeen palautetut tehtäväpaketit tarkastan lomani jälkeen eli elokuun loppupuolella, ja kokonaismerkinnän voi saada vasta sen jälkeen.
Tänään
luennon aiheena oli luokittelu sekä signaaliprosessorit. Koska kurssi on edennyt suunniteltua nopeammassa aikataulussa, käsiteltiin
luokittelua ja
hahmontunnistusta prujun tekstiä laajemmin. Aihe tuntui herättävän kysymyksiä ja se on myös oma tutkimuskohteeni, joten siitä oli helppo puhua. Aluksi esiteltiin esimerkki luokitteluongelmasta mukaillen
Dudan ja Hartin oppikirjaa, jonka ensimmäisessä kappaleessa tarkastellaan luokitteluongelmaa kuvitteellisessa kalatehtaassa. Kun kalojen muoto on saatu irrotettua taustastaan, voidaan siitä laskea erinäisiä suureita ja päätellä näiden perusteella automaattisesti kalalaji. Esimerkissä laskettiin automaattisesti kalan pituus sekä sen keskimääräinen kirkkaus. Näistä kahdesta suureesta todettiin, ettei kumpikaan yksinään riitä ratkaisemaan ongelmaa: on olemassa myös isoja lohia ja tummempia meriahvenia. Luokittelemalla kaksiulotteisia piirrevektoreita (pituus, kirkkaus) saadaan luokat kuitenkin melko erillisiksi toisistaan. Suosittuja luokittelualgoritmeja ovat ainakin seuraavat (kasvavan monimutkaisuuden järjestyksessä):
LDA:sta on viisi harjoitustehtävää huomenna. Esimerkin yhteydessä havaittiin että liiallinen kompleksisuus suhteessa opetusdatan määrään tekee luokkien rajoista epärealistisen monimutkaiset.
Tämän jälkeen paneuduttiin hermoverkkojen opetukseen, ja tarkasteltiin lyhyesti
opetusalgoritmin takana olevia derivointikaavoja. Nämä kaavat löytyvät esim.
täältä. Perus- backpropagationin lisäksi on olemassa kehittyneempiä ja nopeampia opetusalgoritmeja, ja esim. Matlabissa niitä on lähes
parikymmentä. Olennaisin ero algoritmien välillä on niiden nopeudessa ja muistin tarpeessa.
Luentotauon ajaksi laitettiin verkon opetus pyörimään
, ja opetettiin sitä luokittelemaan suomalaisissa rekisterikilvissä olevia kirjaimia ja numeroita (vrt. prujun esimerkki). Opetusaineistona oli n. 7000 kirjainta ja ajo kesti vain 5 minuuttia. Tulosta demottiin skriptillä, jossa hiirellä voitiin näyttää merkin summittainen sijainti isossa kuvassa, ja verkko luokitteli sen johonkin luokkaan. Todettiin, että luokittelun suhteen oli kriittistä mikä kohta tarkalleen verkolle syötettiin. Yleisemminkin käytetty
GIGO-periaate pitää siis paikkansa tässäkin yhteydessä.
Demoja ja esimerkkisovelluksia oli esillä muutenkin melko paljon. Matlabilla esiteltiin suuntaviivoja kuva-analyysille, joka löytäisi verkolle esitettävät objektit kuvasta. Menetelmät riippuvat paljon etsittävän kohteen mukaan, mutta joitain yleisimpiä ratkaisuja kuvaillaan wikipedian
feature detection -artikkelissa. Lisäksi vilkaistiin kahta kasvojen havaitsemiseen kehitettyä ratkaisua.
Perinteisempi näistä etsii kasvokandidaatteja ihonvärin perusteella ja syöttää ne hermoverkolle. Koska kasvojen ala kuvassa voi olla melko suuri, pudotetaan kasvokandidaatin dimensiota esim. 100 x 100 = 10000 komponentista esim. neljäänkymmeneen käyttäen ns.
pääkomponenttianalyysiä. Läpimurroksi kuvailtu
uudempi vaihtoehto kasvojen havaitsemiseen perustuu yksinkertaisten luokittelijoiden yhdistämiseen, niin että jokainen pyrki löytämään mahdollisimman suuren osan ei-kasvoista. Koska näitä on paljon enemmän kuin kasvoja, tulee toteutuksesta tehokas. Tästä algoritmista löytyy C-kielinen toteutus osana
OpenCV-projektia. Toteutus toimii useiden webbikameroiden kanssa "heittämällä". OpenCV on myös muuten lupaava alusta konenäköprojektien toteutukseen Matlabin sijaan. Toinen yleinen vaihtoehto on Java-kielinen
ImageJ.
Aivan luennon lopuksi käsiteltiin kappaleen 9 alkua. Huomisella luennolla demotaan FIR-suotimen toteutusta TI:n C6713-prosessorilla. Normaalisti tämä on ollut yhtenä harjoituksena, mutta tänä vuonna harjoitusta ei saatu mahtumaan mukaan.