T-61.2010 Harjoitustyö: #1 "Ominaiskasvot"

Pääkomponenttianalyysin (PCA) käyttäminen kuva-aineistoon.

Sisältö


Työn tekijä:

Opiskelija: Matti Meikäläinen

Opiskelijanumero: 12345A

Sähköpostiosoite: mmeikala@cc.hut.fi

Esitiedot

Tehtävää varten on hyvä lukea luennon 4 aiheet PCA:sta ja dimensionaalisuuden pienentämisestä, lukea "paperilaskarien" PCA-tehtävät toiselta harjoituskierrokselta, kerrata matriisilaskun perusteet ja ominaisarvojen laskeminen sekä tutustua Matlabin käyttöön.

Tehtäväkuvaus

Tämän tehtävän tarkoituksena on demota luennoilla esitettyjä ominaiskasvoja ja PCA-projektiota.

Työtä varten jokaiselle opiskelijalle on kurssin WWW-sivuilla oma Matlab-tiedosto, josta ladataan joukko harmaasävyvalokuvia, jotka esittävät kasvoja. Jos datasettiä ei löyty, ota yhteyttä Ville Viitaniemeen, Ville.Viitaniemi at tkk.fi.

Tehtävänä on:

Asiaa on käsitelty datamatriisin tiivistämisen ja dekorreloinnin luennolla, luentokalvojen luvussa 4. Avainsanoja ovat "PCA - Principal Component Analysis" ja "eigenfaces".

Työ tehdään ja dokumentointi palautetetaan yksin oman datasetin pohjalta. Keskustelutasolla 1-3 hengen ryhmät voivat olla hyödyllisimpiä. Koodin kopiointi on kielletty T-osaston vilppitapausten toimintaohjeen mukaisesti: http://tieto.tkk.fi/vilppitoimintaohje.html

Dokumentointi

Tästä työstä tulee palauttaa dokumentti ja koodi sähköpostin liitteenä viimeistään 15.1.2008 sähköpostiosoitteeseen vvi@cis.hut.fi . Sähköpostin otsikoksi: "T-61.2010 harjoitustyo #1 OPNRO", jossa OPNRO korvataan omalla opiskelijanumerolla.

Viestissä pitää olla kaksi liitetiedostoa, joista ensimmäisessä liitteessä tulee olla työstä kirjoitettu dokumentti. Siitä pitää käydä ilmi työn tekijä, opiskelijanumero ja sähköpostiosoite, lyhyt selostus työn vaiheista ja tulokset kuvina. Mahdollinen yhteistyö sekä lähteet tulee mainita. Lopussa tulee vastata pohdintaosan (8) kysymyksiin. Tiedoston pitää olla PDF-muodossa ja nimetty muotoon "DT2007_HT1_doc_<opnro>.pdf" eli esimerkiksi "DT2007_HT1_doc_12345A.pdf".

Toisessa liitteessä on käytetty Matlab-koodi yhdessä ajokelpoissa tiedostossa (pääte .m), jonka muoto "DT2007_HT1_m_<opnro>.m", kuten yllä.

Matlabin funktiota datan ja kuvien käsittelyyn

Vinkkejä Matlabin yleiseen käsittelyyn löytyy myös kurssin tietokoneharjoituksista T#2 sekä Internetistä.

Kurssin www-sivulta löytyy myös apufunktioita:

Matriisien käsittelyyn ja analysointiin:

Tässä työssä datamatriisi koostuu harmaasävykuvista. Matlabin Image Processing Toolbox (IPT) sisältää funktiota kuvien käsittelyyn. Ehkä parhaimman kuvan asiasta saa avaamalla Matlab ja etsimällä IPT:n johdannon tai kirjoittamalla "doc images".

Mukana on mm. funktioita:

Kuvatietokanta

Tässä tehtävässä käsitellään eri ihmisten kasvokuvia. Yhdestä ihmisestä voi olla useampi erilainen kuva. Kasvokuva on rajattu varsin tarkasti ja silmien, nenän ja suun sijainti on kaikissa kuvissa suurinpiirtein samassa kohtaa. Kuvat ovat harmaasävykuvia ja samankokoisia. Ehdotetun menetelmän osalta kuvan koko täytyy olla "hyvin pieni".

Hae oma henkilökohtainen kuvatiedosto XXXXXY.mat (Aihe #1) osoitteesta http://www.cis.hut.fi/Opinnot/T-61.2010/Harjoitustyo/.

Käytetty kuvatietokanta on MIT:n tarjoama CBCL http://cbcl.mit.edu/cbcl/software-datasets/FaceData2.html

Copyright 2000. Center for Biological and Computational Learning at MIT and MIT. All rights reserved.

Permission to copy and modify this data, software, and its documentation only for internal research use in your organization is hereby granted, provided that this notice is retained thereon and on all copies. This data and software should not be distributed to anyone outside of your organization without explicit written authorization by the author(s) and MIT. It should not be used for commercial purposes without specific permission from the authors and MIT. MIT also requires written authorization by the author(s) to publish results obtained with the data or software and possibly citation of relevant CBCL reference papers.

We make no representation as to the suitability and operability of this data or software for any purpose. It is provided "as is" without express or implied warranty.

Tehtävänannossa käytettävät muuttujat

Seuraavassa tehtävänannossa käytettyjä muuttujia. Ainut muuttuja, jonka saat omasta datatiedostostasi, on K.


Esimerkkiajo

(1) Kasvokuvien lukeminen Matlabiin

Haetaan oma tiedosto XXXXXY.mat (Aihe #1) osoitteesta http://www.cis.hut.fi/Opinnot/T-61.2010/Harjoitustyo/. (HUOM! Jos tiedostoa ei ole olemassa, mailaa Ville.Viitaniemi miuku-mauku tkk fi, kirjoita viestiin opiskelijanumerosi ja pyydä tiedostoa.)

Luetaan tiedosto komennolla load. Näin on saatu luettua n kuvatiedostoa sisään Matlabin kuvamatriisiin K. Kuvat ovat harmaasävyskaalalla, samankokoisia (r riviä ja c saraketta) ja kuvan kohteet asemoitu. Komennolla montage voi piirtää kuvakokoelman kerralla (tai myMontage, katso yllä).

load([opnro '_train.mat']);     % Tähän oma <opnro>, sisältää matriisin K

r        = size(K,1);
c        = size(K,2);
n        = size(K,4);
datatype = class(K);
disp(['Kuvia on ' num2str(n) ' kappaletta']);
disp(['Kunkin kuvan koko on (' num2str(r) ' x ' num2str(c) ') ja tyyppi ' datatype]);

myMontage(K, 'Alkuperäiset kuvat', 1);


Kuvia on 92 kappaletta
Kunkin kuvan koko on (19 x 19) ja tyyppi uint8

(2) Datamatriisin muodostaminen

Muokataan kukin kuva double-tyyppiseksi ja muodostetaan kustakin kuvasta yksi vektori yhdistämällä sarakkeet (luentokalvoissa riveittäin). Muodostetaan kaikkien kuvien vektoreista matriisi X, jonka rivimäärä on d=rc ja sarakemäärä n.

Kuva- ja datamatriisi

(3) Pääkomponenttianalyysin (PCA) laskeminen

PCA poistaa korrelaatiot vektorialkioiden välillä ja samalla löytää kierron vektoriavaruudessa siten, että uusilla koordinaateilla on maksimaalisen suuret varianssit.

Lasketaan PCA vaiheittain. Poistetaan ensin keskiarvo eli "datapilven" keskiarvo tulee nollaan eli käytännössä keskiarvo (koko d x 1):

Vähennetään saatu keskiarvo matriisista. Haetaan sitten kovarianssimatriisi (koko d x d) laskemalla X:n ulkotulo:

Lopuksi lasketaan ominaisarvot ja -vektorit matriisista C_x komennolla eig. Ominaisvektorit on hyödyllistä järjestää niitä vastaavien ominaisarvojen suuruusjärjestykseen.

(4) Datasetin ominaiskasvot

Ominaiskasvot ovat nyt C_x:n ominaisvektorit, jotka ovat matriisissa, jonka koko on (d x d). C_x:n ominaisarvot löytyvät matriisin D diagonaalilta (komento diag) ja ovat siis skalaareja. Piirretään ominaiskasvot komennolla montage, mitä varten pitää

(5) Kasvokuvien kuvaaminen tasolle

Projisoidaan kaikki kuvat käyttäen kahta suurinta ominaisvektoria. Näin voidaan etsiä kuvien lähekkäisyys.

Poimitaan ominaisarvovektoreista ne kaksi, joiden ominaisarvot ovat suurimmat. Sisältäköön W nämä kaksi ominaisvektoria (d x 2), jolloin kuvat projisoidaan 2D-tasolle:

Y on siis (2 x n). Piirretään n pistettä xy-tasoon esimerkiksi komennolla plot(x,y,'x'), kts. "help plot". Tekstiä (numeroita) voi halutessaan lisätä komennolla text.

(6) Pakkaaminen - kuvien projektio m-ulotteiseen avaruuteen

Etsitään ensin ominaisarvojen kumulatiivinen summa (Aiemmin etsittiin ominaisarvojen suuruusjärjestys.) Tulostetaan kumulatiivinen summa ominaisarvoista. Pois jätettävistä ominaisarvoista saadaan virhe J

Näin ollen seuraavassa kohdassa voidaan valita sopiva määrä ominaisvektoreja mukaan.

jarj.nro | indeksinro | kumul.summa %
    1.0000    1.0000   54.9890
    2.0000    2.0000   65.0714
    3.0000    3.0000   71.6040
    4.0000    4.0000   76.1306
    5.0000    5.0000   79.4855
    6.0000    6.0000   82.1150
    7.0000    7.0000   84.4082
    8.0000    8.0000   85.9933
    9.0000    9.0000   87.2604
   10.0000   10.0000   88.4974
   11.0000   11.0000   89.5934
   12.0000   12.0000   90.5740

Kompressoidaan dataa siten, että otetaan m ensimmäistä (suurimmat ominaisarvot) ominaisvektoria e_i. m:n suuruus olkoon sellainen, että 90 prosenttia vaihtelusta otetaan mukaan.

Valitaan m=12 ominaisvektoria, jotta saavutetaan 90%

Pakkauksessa kukin alkuperäinen kuva esitetään siis vektorilla p, jonka dimensio on (m x 1). p ilmaisee siis, mikä on kunkin ominaiskuvan osuus oikeasta kuvasta. Koko kuva-aineiston pakkaaminen vie siis matriisin (m x n) ja ominaiskuvat (d x m)

(7) Projektiopisteiden palauttaminen kuviksi d-avaruuteen

Palautetaan kaikki n kappaletta vektoreita p (m arvoa) takaisin kuviksi x_hattu (kukin kuva d = r x c pikseliä) .

Muokataan matriisi kuvamuotoon takaisin ja piirretään.

(8) Pohdinnat

Pohdi seuraavia kohtia dokumentissasi: