Kodning av ansiktstextur med oberoende komponenter Jörgen Ahlberg Report no. LiTH-ISY-R-2297 ISSN 1400-3902
Avdelning, Institution Division, department Datum Date Image Coding Group 2000-10-02 Department of Electrical Engineering Språk Language Svenska/Swedish Engelska/English Rapporttyp Report: category Licentiatavhandling Examensarbete C-uppsats D-uppsats Övrig rapport ISBN ISRN Serietitel och serienummer Title of series, numbering ISSN 1400-3902 URL för elektronisk version www.icg.isy.liu.se LiTH-ISY-R-2297 Titel Title Kodning av ansiktstextur med oberoende komponenter Författare Author Jörgen Ahlberg Sammanfattning Abstract I denna rapport redovisas ett experiment att komprimera ansiktstexturer med hjälp av oberoende komponenter. För att genomföra experimentet har vi samlat ett antal ansiktsbilder i en träningsmängd, utfört en geometrisk normalisering på dessa samt klippt bilderna så att endast själva ansiktet (inte hela huvudet) finns med. På datamängden har vi sedan utfört en principalkomponentanalys, och jämfört dess möjlighet till bildkompression med oberoende transformkomponenter. 95-11-01/lli Nyckelord Keywords Ansiktstextur, ICA, oberoende komponenter
Oberoende komponentanalys - introduktion I PCA (principalkomponentanalys) försöker man finna de komponenter hos träningsdata som har maximal varians. Om träningsdata är gaussiska får man då oberoende komponenter, i annat fall får man nöja sig med okorrelerade komponenter. Ofta modellerar man sina data som varandes gaussiska, och kan således nöja sig med en PCA (man kan ändå inte göra något bättre), men om man har tydligt icke-gaussiska data skulle man gärna finna de oberoende komponenterna i stället. Typiska applikationer är att skilja olika signalkällor från varandra (cocktail-partyproblemet) eller datakompression; informationsteorin säger oss att optimal kompression förutsätter oberoende meddelanden (eftersom den ömdesidiga informationen då är noll). Hur hittar man då oberoende komponenter? Centrala gränsvärdessatsen ger, under vissa förutsättningar, att komponenter i träningsdata som är en linjärkombination av ingående signaler blir gaussiskt fördelade. Om vi i stället kan finna icke-gaussiska komponenter borde alltså de vara de ursprungliga signalerna. Vi satsar alltså på att finna en uppsättning komponenter som är så icke-gaussiska som möjligt; vi utför en Independent Component Analysis, ICA. Självklart är inte bara metoden utan också själva idén med ICA meningslös om indata faktiskt är gaussiska - då bör vi göra en PCA i stället. Vad betyder då Så icke-gaussisk som möjligt? Det förutsätter att vi har ett sätt att mäta gaussicitet (eller snarare icke-gaussicitet) på. Hyvärinen [1] redogör för kurtosis och negentropi som möjliga praktiska mått på icke-gaussicitet. Vidare visas att det är samma sak att försöka minimera den ömsesidiga informationen som att maximera negentropin. Hyvärinen visar också ett exempel där ICA utförts på (blockuppdelade) naturliga bilder. De oberoende komponenterna var slående lika Gabor-wavelets, vilket antyder att bildkomprimeringsalgoritmer baserade på sådana kan vara bra (i betydelsen liten ömsesidig information). Det är också intressant att notera att det är just sådana komponenter som det mänskliga synsinnet uppfattar. För detaljer om ICA hänvisas till en tidig artikel där konceptet definieras [5] eller något av Hyvärinens artiklar [1,2]. Experiment med ansiktstexturer Eftersom vi i gruppen tidigare arbetat med kodning av ansiktstexturer via PCA (se t.ex [4]), ligger tanken att koda ansiktstexturer med oberoende komponenter nära till hands. Denna kodning ska sedan jämföras med en enkel PCA-kodare. Beskrivning av experimentet Som ingående datamängd använder vi samlat hundra ansiktsbilder, utfört en geometrisk normalisering på dessa samt klippt bilderna så att endast själva ansiktet (inte hela huvudet) finns med. Geometrisk normalisering innebär att ett polygonnät anpassats till varje ansikte, och sedan formats om till en standardiserad form. På detta vis kan ansikten uttryckas som linjärkombinationer av varandra, utan att få dubbla ögonpar och andra obehagliga artefakter. 5
Flera metoder och algoritmer för att beräkna de oberoende komponenterna (dvs utföra en ICA) finns. Här har FastICA-algoritmen använts, eftersom den finns fritt tillgänglig som ett paket till MatLab [3]. FastICA-algoritmen tillåter ICA i ett K-dimensionellt underrum av träningsrummet, dvs en PCA utförs först, och sedan utförs en ICA i det rum som spänns upp av de K principala komponenterna. Basfunktioner sedan har beräknats på följande fyra vis: 1. PCA: Låt en bild representeras av en p-dimensionell kolumnvektor a i, och samla dessa i en matris A =[a 1,..., a N ]. Eftersom N (antalet träningsbilder) är mindre än p (antalet pixlar i varje bild) så kan man göra en PCA på A T i stället för på A för att spara tid. De beräknade principalkomponenterna multipliceras sedan med A för att ge de äkta principalkomponenterna. De nio första principalkomponenterna visas i figur 1. 2. ICA i ett niodimensionellt underrum. De nio oberoende komponenterna visas i figur 2. 3. ICA i ett femtiodimensionellt underrum; nio oberoende komponenter visas i figur 3. 4. ICA i ett hundradimensionellt underrum; nio oberoende komponenter visas i figur 4. Hur använder vi alltså dessa baser för bildkompression? Jo, låt den inkommande bilden x avbildas på de oberoende komponenterna/principalkomponterna enligt y =Tx, där T =[t 1,..., t M ] T och vektorn t i är den i:te transformkomponenten. Den M-dimensionella vektorn med transformkoefficienter y kan vi representera med ett lägre antal bitar genom att antingen kvantisera den hårdare (eller listigare) eller genom att slänga bort vissa koefficienter (dvs låta M < N). Innan vi transformerar x subtraherar vi medelansiktet (estimerat från träningsdata) samt även DC-nivån (samma sak har gjorts med träningsdata innan beräkning av PCA/ICA). Vid rekonstruktion måste således DC-nivån återställas och medelansiktet adderas. Enklast gör vi det genom att utöka matrisen T med en DC-basfunktion t 0 = [ 1 1] T D (1) där D är dimensionen hos x. Det totala systemet (kodning och avkodning) ges alltså av ỹ = qt ( M ( x x) ) (2) där q( ) är en kvantiserare, q -1 ( ) en inverskvantiserare och T 1 x = T Mq () ỹ + x, (3) T M = [ t 0,, t M 1 ] T. (4) Vi kan direkt, redan innan vi utfört experimentet, konstatera att transformkoefficienterna erhållna via PCA-transform antagligen kan modelleras väl som varandes gaussiska. Därmed vet vi hur vi bör kvantisera dess koefficienter. ICA-transformkoefficienterna är däremot inte gaussiska, och dessutom lär dess koefficienter vara olika fördelade. Vi måste därför konstruera en separat kvantiserare för varje koefficient. Vi kommer i detta experiment bortse från det, och bara använda likformig kvantisering. 6
Utförande Låt oss först studera bilderna i figur 1-4. Kan vi på grundval av dessa sluta oss till hur lämpliga de olika baserna är för bildkomprimering? Ja, faktiskt! Vi kan lätt se att ju större underrum vi gör vår ICA i, desto mer spatiellt lokaliserade är transformkomponenterna. Detta medför ett problem: Om vi har beräknat vår transform i ett stort underrum, och sedan vill gå över i ett mindre underrum för att öka kompressionen måste vi också göra om vår ICA! Om vi låter bli det kommer den rekonstruerade bilden förlora i kvalitet inom ett (för varje slängd komponent) spatiellt begränsat område, vilket upplevs som störande. Vi får alltså inte en skalbar kodare, dvs vi kan inte variera antalet koefficienter utan att ändra kodarstrukturen (transformen). För att bekräfta utför vi det första experimentet och försöker komprimera ansiktet som visas i figur 5 a) (ansiktet är givetvis inte med i träningsmängden). I figur 5 b) har vi använt 100 oberoende komponenter för att rekonstruera ansiktet; PSNR är 33.8 db. I figur 5 c) har vi använt samma komponenter, men bara 50 av dem; PSNR sjunker med 5 db! I figur 5 d), slutligen, har vi gjort en ny ICA i 50-dimensioner och använder alla 50. PSNR går upp till 33.1 db. I samtliga fall är varje transformkoefficient kvantiserad till 8 bitar, dvs b) representeras med 100 bytes medan c) och d) endast tar upp 50 bytes. För den oinvigde kan det vara svårt att se kvalitetsskillnaden (speciellt om bilderna är utskrivna på papper, då skrivarens rastrering kan medföra en värre distorsion än kompressionen!), men man bör betänka att kompressionen distorderar så att ansiktet blir mer och mer likt medelansitket. Bilden ser alltså fortfarande ganska bra ut även vid hög distorsion, men blir mindre lik originalpersonen. Eftersom vi här dessutom studerar geometriskt normaliserade ansikten, upplevs alla ansikten som mer lika varandra. I figur 6 visas PSNR för varje antal koefficienter mellan 2 och 99. Den heldragna linjen visar PSNR då en ny ICA utförts för varje underrum, medan punkterna visar PSNR för en 100-dimensionell ICA. Slutsats: Transformkodning med ICA ger en ej skalbar kodare. Om vi begränsar oss till ICA-transformer där vi utfört ICA i samma underrum som vi utför transformen i kan vi jämföra resultaten med en PCA-kodare. Rimligen får vi då ungefär samma resultat eftersom vi återskapar ansiktet inom samma underrum; möjligen kan vi får kvantiseringseffekter som skiljer dem åt (teoretiskt bör ICA vara bättre, men eftersom vi inte känner fördelingarna hos transformkoefficienterna är detta inte säkert). Nytt experiment: Ansiktet i figur 5 a) har kodats med 10, 50 respektive 100 transformkoefficienter. Alla transformkoefficienter har kvantiserats likformigt till 8 bitar. Resultaten visas i figur 7; PSNR skiljer sig som väntat inte åt mellan metoderna. Slutsats: Utan specialiserade kvantiserare är PCA och ICA likvärdiga för ansiktstexturkodning. 7
Slutsats Så länge vi inte studerar statistiken för varje transformkoefficient vinner vi ingenting på att använda ICA i stället för PCA. Tvärtom förlorar vi skalbarheten som finns hos en PCA-kodare, vilket alltså gör PCA-kodaren att föredra. Det bör tilläggas att det är ganska mycket jobb att studera statistiken för transformkoefficienterna. Antagligen skiljer sig inte enbart komponent i och j åt, utan även komponent i från en transform beräknad i ett N-dimensionellt underrum från motsvarande komponent beräknad i ett M- dimensionellt underrum. Referenser [1] A. Hyvärinen and E. Oja, Independent Component Analysis: A Tutorial, Helsinki University of Technology, Finland, April 1999. Available at http://www.cis.hut.fi/ projects/ica. [2] A. Hyvärinen, Survey on Independent Component Analysis, Neural Computing Surveys, Vol. 2, pp. 94-128, 1999. Available at http://www.cis.hut.fi/ projects/ica. [3] The FastICA-package for MatLab. http://www.cis.hut.fi/projects/ica/ fastica/ [4] J. Ström, F. Davoine, J. Ahlberg, H. Li and R. Forchheimer, "Very Low Bit Rate Facial Texture Coding", Proc. of the IWSNHC3DI'97, Rhodes, Greece, September 1997, pp. 237-240. Also in Proc. of the ECMAST Workshop, Milan, Italy, May 1997. [5] P. Comon, Independent component analysis, A new concept?, Signal Processing, Vol. 36, 1994, pp. 287-314. 8
Figur 1: De nio första principalansiktena. Figur 2: De nio oberoende ansiktena ur ett niodimensionellt underrum. 9
Figur 3: Nio oberoende ansikten ur ett femtiodimensionellt underrum. Figur 4: Nio oberoende ansikten ur ett hundradimensionellt underrum. 10
a b c d Figur 5: a) Originalansiktet; b) Ansiktet representerat med 100 oberoende komponenter beräknade i ett 100-dimensionellt underrum (33.8 db); c)... 50 oberoende komponenter beräknade i ett 100-dimensionellt underrum (28.8 db); d)... 50 komponenter ur ett 50- dimensionellt rum (33.1 db). 34 33 32 31 PSNR (db) 30 29 28 27 26 0 10 20 30 40 50 60 70 80 90 100 # koefficienter Figur 6: PSNR för ICA-kodning med variabelt antal koefficienter. Streckad linje: ICA utförd i underrum med samma dimension som antalet koefficienter. Heldragen linje: ICA utförd i 99 dimensioner. 11
ICA: PCA: # koefficienter: 10 50 100 PSNR (db): 30.3 33.1 33.8 Figur 7: Transformkodning med ICA och PCA. 12