tiistai 12. toukokuuta 2015

Luento 13.5: Audiokompressio + vanhat kandityöt


Tänään käsiteltiin ensimmäisellä tunnilla prujun viimeinen kappale: audiokompressio. Audiokompression ideana on tallentaa äänisignaali häviöllisesti poistaen bittejä sieltä missä kuulo ei niitä havaitse. Tässä auttaa kuulon ominaisuuksien tuntemus, joista olennaisin osa on kuulokäyrä. Kuulo havaitsee matalia ja korkeitä ääniä heikommin kuin keskiääniä. Tämän vuoksi epätarkemmin havaittavat taajuudet voidaan esittää pienemmällä bittimäärällä.

Tässä yhteydessä on hyvä muistaa että jokainen poistettu bitti lisää kvantisointikohinaa kuudella desibelillä. Kysymys voidaan siis asettaa muotoon: "montako kuuden desibelin palikkaa kuulokäyrän alle mahtuu kullakin taajuudella". Lisätilaa kuuden desibelin palikoille saadaan havaitsemalla, että äänet peittävät heikompia ääniä alleen. Tässä tapauksessa siis itse kompressoitava signaali peittää näitä heikompia kuuden desibelin palikoita.

Luennolla nähtiin myös esimerkki siitä miltä tulosmaski saattaisi näyttää yksittäisen piippauksen ympäristössä. Jotta kuulomallia voitaisiin käyttää, täytyy signaali jakaa taajuuskaistoihin. Tämä tehdään kaistanpäästösuotimilla, ja kaistoja mp3-standardissa on 32. Kukin kaista voidaan alinäytteistää kertoimella 32, jolloin dataa on saman verran kuin alun perin. Nämä kaistat voidaan sitten kvantisoida kuulomallin mukaisesti. Palautettaessa alkuperäistä näytteenottotaajuutta riittää tehdä ylinäytteistys (nollien lisääminen) kertoimella 32, jolloin havaitaan, että aiemmin laskostunut signaali pomppaakin oikealle paikalleen ja vieläpä oikein päin --- siinäkin tapauksessa, että se olisi sattunut laskostumaan peilikuvakseen.

Tunnin luotiin katsaus laitoksella tehtyihin kanditöihin. Työt löytyvät täältä. Tunnus on sgnkandi ja salasana motiivi.

Luennon jälkeen kommentoitiin että kandityöt näyttivät laajoilta ja vaativilta suorituksilta. On huomattava että esitellyt työt olivat kaikki parhaasta päästä; nelosen ja viitosen töitä. Lisäksi laitos pyrkii tieteellisen fokuksensa mukaisesti panostamaan kanditöihin ja niissä opiskeltavaan tieteelliseen kirjoittamiseen, joten uskon kanditöidemme olevan keskimääräisiä laajempia (ja reilusti yli 8 op arvoisia). Hyvä kandityöhän toimii myös käyntikorttina D-työpaikkaa haettaessa, joten sen tasolla on suuri merkitys tulevaisuuden kannalta.

Kiitos kaikille kurssilaisille ja hyvää kesää! Onnea tenttiin, muista antaa palautetta.

tiistai 5. toukokuuta 2015

Luento 6.5: Hermoverkot


Tänään jatkettiin hahmontunnistusjärjestelmien opiskelua.

Aluksi muisteltiin edellisen viikon asioita lyhyesti, ja vilkaistiin mm. Matlab-demoa, jolla voidaan piirtää hiirellä projektiosuora kaksiulotteisen datan koordinaatistoon. Kun kaksi pistettä suoralta on merkitty, Matlab-skripti projisoi datan tälle suoralle ja piirtää tuloksena saatavien yksiulotteisten näytteiden jakauman sekä luokitteluprosentin. Hyvillä projektiosuorilla data oli täydellisesti luokiteltavissa, mutta huonoilla joukot menivät päällekkäin projisoinnin jälkeen. Fisherin lineaarinen erottelija laskee tämän suoran automaattisesti niin että erottelu on optimaalinen.

Tämän jälkeen paneuduttiin hermoverkkoihin sekä niiden opetukseen, ja mainittiin  lyhyesti opetusalgoritmin perustuvan derivaattaan ja ketjusääntöön. Näiden avulla voidaan päätellä suunta, jossa luokitteluvirhe pienenee jyrkimmin, ja kyseiset 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.

Luentotauolla Matlabilla opetettiin hermoverkko, joka osasi tunnistaa eurooppalaisista rekisterikilvistä kerättyjä merkkejä.Opetus kesti noin 15 minuuttia, ja virheen kehittyminen on esitetty oikealla olevassa kuvassa. Opetuksen aikana mitattiin luokittelijan virhettä opetusaineistossa (10 000 merkkiä) sekä erillisessä testiaineistossa (1 000 merkkiä). Kuvasta nähdään että virhe oli selvästi pienempi opetusaineistolla kuin testijoukossa. Ilmiöstä käytetään nimeä ylioppiminen, ja se tarkoittaa että järjestelmä alkaa oppia opetusaineiston epäolennaisia ja satunnaisia ominaisuuksia, jotka eivät ole yleisesti voimassa. Ensisijainen ratkaisu tähän on lisätä opetusmateriaalin määrää (joko todellisella uudella datalla tai augmentoimalla käytettävissä olevaa dataa; esim. venyttelemällä kuvia, lisäämällä kohinaa jne.).

Verkkoa testattiin esimerkkikuvilla, joista näytettiin hiirellä merkin sijainti. Testissä havaittiin luokittelun toimivan täysin oikein kun merkki oli hyvin laatikon sisällä. Jos merkin lisäksi 10x10-laatikon sisällä oli muutakin, luokittelu meni väärin.

Tavallisen hermoverkon herkkyys merkin oikealle kohdistukselle on yleinen ongelma. Tämä on saatu valtaosin ratkaistua uudemmissa ns. konvoluutioverkoissa, jotka esiteltiin alun perin jo 1980-luvulla, mutta ovat saavuttaneet valtavan suosion vasta laskentatehon lisäännyttyä 2010-luvulla. Syvät (yli 3 tasoa; jopa 30 tasoa) konvoluutioverkot ovat aiheuttaneet läpimurron kuvan- ja puheentunnistuksessa. Alla on lista luennolla vilkaistuista julkaisuista (ja muuten vaan kiinnostavista tuoreista tuloksista):
CVPR-konferenssi on yksi alan merkittävimmistä foorumeista, ja laitos on ylpeä saatuaan julkaisunsa mukaan kesäkuun konferenssiin. Julkaisut ovat suurelta osin vapaasti saatavissa täällä.

Jos haluat tutustua moderneihin hermoverkkoihin, niin yleisimmin käytetyt paketit ovat Caffe, pylearn2 ja Torch7. Aiheeseen liittyvää keskustelua löytyy mm. Redditistä.