Høgskolen i Østfold Avdeling for informasjonsteknologi Fag IAD33505 Bildebehandling og mønstergjenkjenning Laboppgave nr 6 Analyse av luktedata Sarpsborg 18.02.2005 18.02.05 Log GKS Log, GKS 07.10.03 Ny oppgave MK MK MK Rev. Dato. Beskrivelse. Skrevet av Kontrollert Godkjent Fil : Skrevet ut av : i 18.02.2005 2:18 Antall sider : 10
Labkjøring: Alle gruppene må senest ha kjørt oppgaven i uke 8. Presentasjon og skriftlig innlevering etter gjennomført laboppgave. Dette er likt for alle laboppgavene med mindre annet er beskrevet særskilt i oppgaven. Presentasjonsdel: Straks etter at gruppen har gjennomført laben, skal gruppen gi en muntlig presentasjon, en slags miniforelesning (trening mot hovedprosjekt), av laboppgaven. Maks. 30 min. Gruppen avtaler tidspunkt og sted med faglærer. Alle i gruppen skal delta i presentasjonen! Pass på at i presentasjonen inngår tilstrekkelig mange illustrasjoner (se også skriftlig del). Alle spørsmål i oppgaveteksten skal besvares (se også skriftlig del). Følgende spørsmål skal også besvares under presentasjonen: Hvilke problemer møtte dere på underveis? Hvilke forbedringer, eventuelt ny løsningsstrategi, ville bli gjort dersom oppgaven skulle være løst på nytt? Oppgavens vanskelighetsgrad? (1 (lett) 5 (meget vanskelig)). Skriftlig del: Denne delen skal være en skriftlig labbesvarelse i kortversjon. Alle aktuelle presentasjoner skalinngå. Pass på at de kommer i kronologisk rekkefølge. Alle spørsmål i laboppgaveteksten skal besvares. Dersom gruppen har skrevet egne MatLabprogrammer, så skal de vedlegges. Til slutt skal rapporten inneholde en konklusjon som oppsummerer oppgaven: hva dere har lært, hvilke problemer oppsto underveis og hvilke forbedringer bør gjøres. Innføring i bildebehandling - HIØ side 2
Innledning. Oppgaven tar for seg en fullstendig analyseprosess og klassifisering av data innsamlet fra en elektronisk nese. Formål. Få forståelse for hvordan en elektronisk nese fungerer. Benytte prinsipal komponentanalyse (PCA) som verktøy for databehandling. Bruke et nevralt nettverk på egne innhentete data. Utstyr. Datamaskin med installert Mat Lab med toolboksene Image Processing Toolbox (IPC), Signal Processing Toolbox (SPT) og Neural Network Toolbox (NNT). En elektronisk nese. Generelt om oppgaven. I dette prosjektet skal vi gjøre en fullstendig beslutningsprosess basert på data innhentet fra en elektronisk nese. Først skal vi øve på å bruke en preprosesseringsmetode som kalles prinsipal komponentanalyse. Deretter skal vi ta for oss hvordan data fra den elektroniske nesen er representert. I siste fase skal vi selv innhente våre egne lukteprøver som vi så skal klassifisere ved bruk av et nevralt nettverk. Innføring i bildebehandling - HIØ side 3
Del 1 Prinsipal komponentanalyse (PCA) Prinsipal komponentanalyse, eller forkortet PCA, er en velbrukt metode som ofte brukes for å bearbeide rådata før videre klassifisering eller mønstergjenkjenning skjer. Kort fortalt brukes PCA som et verktøy for å øke spredningen/standardavviket mellom forskjellige klynger av mønstre og for å fjerne støy. Hvis vi oppfrisker litt kunnskap fra statistikk, husker vi at standardavviket sier noe om hvordan en variabel varierer rundt middelverdien sin. Jo større standardavvik, jo lengre vekk fra middelverdien vil dataene være. Dette kan enten skyldes støy, eller at variabelen faktisk har en variasjon som beskrives ved bruk av standardavviket. Av den grunn er vi interessert i å finne ut hvilke variasjonsretninger som er viktige og hvilke som er støy. Et lite eksempel Den enkleste måten å forstå bruken av PCA på er ved å betrakte et eksempel. Figur 1 viser to normalfordelte klynger i et xy-plan. Siden dataene er todimensjonale, kan de variere i to retninger, langs x- eller y-aksen. Fra figuren kan vi se at x- og y-aksen ikke er de best egnede retningene til å beskrive variasjonen til de to klyngene. De to sentrale variasjonsretningene er inntegnet i det ekstra aksesystemet på figuren i tillegg til fordelingsfunksjonene langs disse nye aksene. Dette systemet er rotert i forhold til de opprinnelige aksene, men gir en bedre beskrivelse av de to variasjonskomponentene. Disse skal vi fra nå av kalle prinsipale komponenter. Av de to prinsipale komponentene som vises i figur 1, ser vi at den lengste komponenten (kalt den første prinsipale komponenten) er den aksen hvor de to klyngene best kan skilles fra hverandre. En normal trukket fra denne aksen et passende sted mellom de to klyngene vil gi den beste lineære separeringen som er mulig for disse dataene. Den andre prinsipale komponenten som viser den nest sterkeste variasjonen innad i dataene er strengt tatt ikke nødvendig, siden denne ikke bringer ny informasjon inn i separasjonen. Innføring i bildebehandling - HIØ side 4
En datamengde har like mange prinsipale komponenter som det finnes dimensjoner i dataene. Jobber vi med mer enn tre dimensjoner i dataene våre får vi problemer med å visualisere disse komponentene. Vi er da interessert i å finne de komponentene som angir den største variasjonen for dataene, siden det er her vi har størst mulighet til å skille mellom forskjellige mønsterklasser. På denne måten brukes også PCA til å redusere dimensjonaliteten. Irisdata For å få øvelse i hvordan PCA fungerer, skal vi prøve oss på et kjent datasett, irisdatasettet, som ligger i filen iris.data.txt. Denne filen og andre aktuelle filer for oppgaven ligger på følgende adresse: //Leia / fag/ bildeb /Lab6 / Filen inneholder informasjon om tre irisblomster: Iris-setosa, Iris-versicolor og Iris-virginica. Det er femti blomster av hver type. Informasjon om hver blomst er stengelens lengde og tykkelse og kronbladets lengde og bredde. Filen inneholder fem kolonner: disse nevnte fire datakolonner og en kolonne med blomsternavn. Filen kan leses inn ved for eksempel kommandoen [x1, x2, x3, x4, navn] = textread( iris.data.txt, %f, %f, %f, %f, %s ). Blomstenes talldata har fire egenskaper og dermed også fire prinsipale komponenter. Legg inn dataene i en matrise X slik at hver trekkverdi utgjør en rad i matrisen. Gi deretter følgende sekvens i MatLab: X = prestd(x); [transmatrix, pca, egenverdier] = princomp(x); (*) Matrisen pca inneholder nå alle irisdataene etter at de er transformert over i rommet utspent av de prinsipale komponentene, mens transmatrix er matrisen som utfører selve transformasjonen, slik at pca = X * transmatrix. (**) Hvis du tester dette, vil du oppdage at MatLab også trekker fra middelverdiene, slik at det blir en forskyvning i løsningen.(dette komme klart fram regner ut differansen mellom pca gitt i (*) og den i (**). Hver kolonne i transmatrix er en retningsvektor for en prinsipal komponent i sortert rekkefølge. Den første kolonnen inneholder den største komponenten, den andre kolonnen den nest største, osv. Matrisen pca inneholder derfor irisdataene projisert ned på hver av de prinsipale komponentene. Den første kolonnen er projeksjonene på den første prinsipale komponenten, osv. Variabelen egenverdier inneholder størrelsen på de tilhørende egenverdiene som korresponderer med de prinsipale komponentene. Disse kan brukes til å se hvor mye hver enkelt egenverdi bidrar til det totale standardavviket. Innføring i bildebehandling - HIØ side 5
Plott de transformerte mønstrene (radene i matrisen pca) i planet for de forskjellige komponentene, f.eks. mønstrene projisert ned på komponent 1 mot mønstrene projisert ned på komponent 2. Figur 2 viser irisdataene for de to største prinsipale komponentene. På denne måten kan du finne ut hvor mange av de fire variasjonskomponentene som er interessante. Trenger vi alle de fire prinsipale komponentene for å gjøre en fornuftig gjenkjenning? I tilfelle nei, hvor mange trenger vi? Finn også ut hvorfor vi må benytte funksjonen prestd før vi utfører PCA. Del 2 Elektronisk nese og lukt som signal (teoridel) Den gjeldende definisjonen på en elektronisk nese er et sensorsystem med delvis spesifikke sensorer og et påfølgende gjenkjenningssystem som benyttes til å sanse luktmolekyler på samme måte som den menneskelige nesen. Selve sensorene er kort beskrevet transistorer som har varierende ledningsevne når luktmolekyler er i nærheten, eller rettere sagt i kontakt med halvledermaterialet i transistorens kløft. Disse transistorene finnes i dag i ulike varianter med forskjellige stoffer som de reagerer på. Sensorene endrer også karakteristikk avhengig av temperaturen som de er innstilt på. Ved å danne et array av transistorer med flere forskjellige egenskaper og arbeidstemperaturer, dannes grunnlaget for videre bearbeidelse av luktedata innhentet av sensorene. Utstyrets oppstilling Modellen gjør bruk av fire ulike sensorer som hver arbeider på fire forskjellige temperaturer, i alt 16 sensorer. Nesen benytter et nesehus i rustfritt stål formet som et rør med kvadratisk tverrsnitt. På hver av de fire sidekantene - som hver har fire åpninger - sitter et kretskort som holder et sett med fire ulike sensorer som arbeider på en bestemt temperatur. I enden av nesehuset er det plassert en vifte som danner gjennomstrømning av lukten, eller selve "sniffet". Dermed strømmer lukten gjennom nesehuset og inn til de 16 sensorene som dermed begynner å variere i ledningsevne. En forenklet skisse av dette oppsettet vises i figur 3. Innføring i bildebehandling - HIØ side 6
Informasjonsbehandling Sensorene som reagerer på lukten i nesehuset reagerer med gradvis å øke spenningen over transistoren etter hvert som en lukt brer seg i det sensitive området hos transistoren. Dette gjør at responsen fra en sensor varierer i tid, slik at vi ikke enkelt kan lese av en eller annen verdi for så å klassifisere lukten, men vi må ta hensyn til et lengre tidsforløp for hvordan sensoren reagerte mens lukten var tilstede. I tillegg er nesen utstyrt med flere forskjellige sensorer som hver gir et forskjellig tidsforløp for at vi skal kunne fange inn forskjellige lukter. Figur 4 viser typisk hvordan en elektronisk nese reagerer ved eksponering av en lukt. De ulike kurvene er spenningsforløpene til 24 forskjellige sensorer. Vi ser at for denne lukten reagerer sensorene svært ulikt og opererer på forskjellige nivåer. (Luktmålingene er gjort ved KTH i Sverige.) Noen av sensorene viser en ganske aktiv respons, mens andre igjen ikke viser tegn til aktivitet. Informasjonen som har blitt registrert fra en elektronisk nese, må så ordnes på en slik måte at vi kan gjøre oss opp en formening om hvilken lukt vi faktisk har registrert. Innen forskning på biologiske lukteorganer arbeider man ofte ut fra at en lukteopplevelse er bestemt både ut fra en tidsmessig komponent så vel som hvilke luktesensorer som er aktive. Dermed kan lukt sees i sammenheng med både synets to romlige komponenter og lydens avhengighet av både tid og frekvens. Dersom vi drar en parallell til vår elektroniske nese, kan vi betrakte den registrerte informasjonen som et signal varierende i to dimensjoner, nemlig tid og sensornummer. Innføring i bildebehandling - HIØ side 7
Mønstergjenkjenning Gjenkjenning av lukter må ut fra det som tidligere er nevnt skje på grunnlag av det todimensjonale signalet som sensorene har registrert. Dersom vi har 16 sensorer som hver har entidsregistrering på 1000 punkter er det naturlig at vi ikke kan benytte oss av hele råmaterialet til klassifisering. Vi må derfor lete etter trekkverdier eller egenskaper hos disse signalene som vi har tilgjengelige. En måte å gjøre dette på, er å velge ut en bestemt egenskap hos spenningskurvene til sensorene. Det kan også vise seg at bestemte tidspunkt, som for eksempel tidspunktet for et knekkpunkt på kurvene, eller et annet tidspunkt hvor sensorene går i metning er av interesse. Dermed kan vi redusere datamengden til å gjelde et signal med like mange komponenter som sensorer, og den videre klassifiseringen kan gjennomføres. I den påfølgende prosesseringen er det vanlig at man benytter seg av PCA, slik at klassifisering for et nevralt nettverk blir lettere. Avlesning av måledata på den kunstige nesen Her benyttes skriptet enose_read_dde_data.m. Innføring i bildebehandling - HIØ side 8
Del 3 Luktgjenkjenning fra registrerte prøver Filen lukteprover.mat inneholder fem lukteprøver. To og to er sprengstoffprøver, mens den siste er en bakgrunnsmåling. Dataene er justert slik at alle kurvene har samme referanseverdi. Last dataene fra filen inn i MatLab ved: load lukteprover (forsøk gjerne også load lukteprover, who) Lukteprøvene er her lagret i 3-dimensjonale arrays. Plott de fem prøvene hver for seg. (Blant de fem prøvene vil du også finne prøven vist i figur 4.) For å få til et 2-D plott av et 3-D array må dataene konverteres til et array med kun to dimensjoner. Dette kan du gjøre for eksempel ved kommandoen: prove(:, :) = Explosive1(1, :, :); Ser det ut til at det er noen synlig forskjell på luktene ut fra responskurvene? Ved å velge den samme trekkverdien for alle lukteprøvene, for eksempel verdien til hver sensors responskurve ved sampleverdien n = 200, blir lukteprøven redusert til et sett med 24 punkter for hver av de fem lukteprøvene. Velg selv en slik trekkverdi og dann en datamatrise hvor trekkverdien representerer lukteprøven. Utfør PCA på datamatrisen din slik som beskrevet i deloppgave 1 og plott de to største prinsipale komponentene mot hverandre. Figur 5 viser et slikt PCA-plott for de fem lukteprøvene når responskurvene ble avlest ved n = 200. Tren opp et nevralt nettverk som gjenkjenner de fem lukteprøvene basert på PCAdataene. Her må du selv velge hvordan nettverket skal se ut og hvordan du skal organisere utgangene. Innføring i bildebehandling - HIØ side 9
Del 4 Luktgjenkjenning fra egne registrerte prøver I denne siste, men viktigste deloppgaven skal vi selv innhente lukteprøver som vi skal analysere. Begynn med å velg ut mellom 3 ulike luktkilder etter eget ønske, bruk fantasien La to lukter være klart forskjellige, mens den tredje er ikke så forskjellig fra de to andre. Pass på at en luktkilde avgir lukt for eksempel ved avgassing. Benytt den elektroniske nesen til å registrere seks målinger fra hver av lukteprøvene i tillegg til seks målinger uten lukt (bakgrunnslukt). o Her er det viktig å la nesen få hvile seg mellom hver serie, dvs. trekke frisk luft, slik at ikke lukt henger igjen fra forrige prøve. La nesen hvile minst 3 minutter mellom hver prøve. o Hver serie bør være av omtrent lik lengde, minst 45 sekunder, slik at sensorene stabiliserer seg og blir mettet. o For hver luktkilde skal dere fjerne den første av målingene, siden denne har en tendens til å avvike sterkt fra senere målinger når nesen har blitt mer vant til lukten. o Lagre deretter seriene i en fil slik at det lar seg gjøre å benytte prøvene i ettertid. Dere vil sikkert oppdage at sensorene ikke arbeider ut fra samme nullnivå når dere har registrert prøvene. Juster derfor dataene i etterkant slik at de korresponderer både i tid og i verdi ved tidspunktet da lukteprøven ble presentert, slik at dere får kurver i samme stil som i figur 4. Når dere føler at dere har fått nok datamateriale, skal dere gjennomføre tilsvarende PCA-analyse som i oppgaven med de ferdige prøvene. Bestem dere også for hvor mange prinsipale komponenter dere ønsker å bruke (vanligvis brukes 2-4). Dere vil oppdage at valget av trekkverdi er svært sentralt for gjenkjenningen. Eksperimenter dere derfor fram til en fornuftig verdi. Innføring i bildebehandling - HIØ side 10