METODA PCA A JEJÍ IMPLEMENTACE V JAZYCE C++ Lukáš Frtsch, Ing. ČVUT v Praze, Fakulta elektrotechncká, Katedra radoelektronky Abstrakt Metoda PCA (Prncpal Coponent Analyss- analýza hlavních koponent) ůže být využta k reprezentac např. ldské tváře v tzv. facespace (prostoru tváří), v něž lze efektvně provádět rozpoznávání tváře. Na základě dále uvedeného popsu etody PCA byla pod operační systée Wndows v jazyce Vsual C++ naprograována aplkace, která deonstruje užtí etody v úloze rozpoznávání a též v úloze koprese obrazové nforace. Př návrhu aplkace byl kladen důraz na rychlost výpočtu a na ožnost použtí rozsáhlejších trénovacích sad sníků. Součástí realzace bylo ověření funkčnost algortu pro obě zňované úlohy v prograové prostředí MATLAB. Základní pojy a úvod do probleatky Uvažuje kolekc o počtu P obrázků tváří (též trénovací sadu), kdy všechny ají stejné rozěry WxH. Z těchto obrázků sestrojíe atc o počtu řádků rovné počtu obrazů P v kolekc a o počtu sloupců rovné číslu n=wxh. Obrázky tváří jsou s podobné, ať už ve více č éně rysech, a proto nejsou náhodně dstrbuovány (exstuje ez n nenulová korelace). Hlavní yšlenkou PCA pro ná zaýšlené účely je nalézt vektory, které nejlépe popsují dstrbuc obrázků tváří v celé prostoru obrázků. Tyto nalezené vektory denze n defnují podprostor, který nazýváe prostor obrázků tváří (egenspace, též facespace), jsou lneární kobnací původních vektorů a tvoří báz egenspace. Tyto vektory jsou vlastní vektory kovaranční atce korespondující k původní obrázků a protože jsou podobné obrázků tváří, nazýváe je egenfaces. Tí jse s na úvod uvedl základní teríny a prncpy, [], [2], [4], [5], [6]. 2 Proces rozpoznávání Zabýveje se postupe, který nás dovede až do fáze rozpoznávání tváře, []. Nechť áe kolekc obrázků tváří x,, x2 K, xp, přčež s představuje každý obrázek jako vektor (jednotlvé řádky obrazové atce poskládáe postupně za sebou). Na obr. je uvedena část dalogového okna aplkace, kde se defnuje trénovací sada. V toto konkrétní případě sada obsahuje celke 80 obrázků od čtyř různých osob ( už a 3 ženy) a lze j získat na stránce [7]. Obr. Volba trénovací sady
Další kroke je výpočet průěrného obrázku této sady podle vztahu: P M = x. () P = Od každého obrázku sady odečtee průěrný obraz (provedee centrování dat): x = x M. (2) Takto získané vektory uspořádeje do atce, označe j X, kdy každý řádek atce popsuje jeden z vektorů x. Matce á tedy P řádků a n sloupců a je vstupe do analýzy hlavních koponent, která hledá nožnu vektorů, které nejlépe popsují dstrbuc vstupních dat. Hledané vektory jsou vlastní vektory (hlavní koponenta) kovaranční atce C, kterou získáe následovně: T C = X X. (3) Vdíe, že kovaranční atce získaná podle vztahu (3) á P řádků a P sloupců. Může ít ovše rozěry n x n, pokud provedee transpozc. atce v součnu (3): C = X T X. (4) Zřejě je kovaranční atce získaná podle vztahu (3) z hledska výpočetní náročnost vlastních čísel a vektorů výhodnější. Předpoklade ovše usí být, že P << n. Tedy, že počet obrázků v kolekc je daleko enší než počet obrazových bodů jednoho z obrázků. V opačné případě bycho usel zenšt rozěry obrázků v sadě, což je docela schůdné řešení nebo použít jný přístup. K probleatce výpočetní náročnost, předevší pak z paěťového hledska, se ještě vrátíe na konc příspěvku. Pro rozpoznávání ovše potřebujee ít vlastní vektory atce C. Jak ale uvdíe dále, lze k výpočtu vlastních vektorů atce C použít vlastní vektory atce C. Máe tedy kovaranční atc C získanou podle (3). Tato atce je zřejě reálná a syetrcká. V další kroku usíe nuercky vyřešt rovnc: C V = λ V, (5) tj. nalézt vlastní vektory, které jsou uspořádány po řádcích v atc V a vlastní čísla λ kovaranční atce C. Tento krok není jednoduchý, k jeho vyřešení v aplkac používáe hlavčkový soubor jaa_eg.h z balíku JAMAC++, který lze zdara získat na stránce [3]. Ipleentační část je součástí uvedeného hlavčkového souboru. Je psána oderní prograovací technka- poocí šablon objektových typů. Hlavčkový soubor jaa_eg.h vyžaduje ještě soubory tnt_xxx.h obsahující pleentace pro správu polí. Soubory jsou dstrbuovány s balíke JAMAC++. Po vyřešení rovnce (5) získáe vlastní čísla a vektory atce C. Kovaranční atce C obsahuje nejvýše P vlastních čísel různých od nuly a platí, že tato čísla jsou shodná s vlastní čísly atce C. U vlastních vektorů toto neplatí. Zřejě atce V obsahující v řádcích vlastní vektory á stejné rozěry jako kovaranční atce C, tedy P x P. K vlastní vektorů uspořádaných po řádcích v atc V kovaranční atce C se lze dostat vztahe: V = X V. (6) Dostanee tak atc V obsahující v P řádcích vlastní vektory délky n, které tvoří báz prostoru egenspace. Vektory nyní seřadíe podle příslušných vlastních čísel od největšího k nejenšíu poocí vhodného řadcího algortu. Před započetí řazení s ještě vytvoříe poocné hodnotové pole, které naplníe vzestupnou řadou čísel od 0 do P-. Spolu s prohazování vlastních čísel př řazení prohazujee obsah tohoto hodnotového pole. Zřejě po ukončení řazení obsahuje hodnotové pole odkazy do původního nesetříděného pole. Zde používáe řazení výběre (select sortz posloupnost vlastních čísel postupně vybíráe nální prvek a ten vložíe za jž seřazený úsek). Lze sloučt výpočet atce V s řazení vlastních vektorů do jednoho kroku- př výpočtu (6) uístíe do -tého řádku atce V vektor získaný výpočte vektoru z atce V na řádku rovné hodnotě uístěné na pozc (P--(-)) výše uvedeného poocného hodnotového pole. Uveďe příklad. Máe posloupnost čísel h = {2, 5,, 4}. Vytvoříe poocné hodnotové pole p = [0,, 2, 3]. Posloupnost h seřadíe, dostanee h = {, 2, 4, 5}, prvky pole p se prohodí, čl p = [2, 0, 3, ]. Dále áe atc T V = [ v 2, v 5, v, v 4]. Do. řádku atce V uístíe vektor získaný výpočte x v 5, neboť poslední prvek (postupujee od největšího vlastního čísla k nejenšíu) pole p á hodnotu - tj. odkazuje na
druhý řádek v atc V. Do 2. řádku atce V pak uístíe vektor získaný výpočte x v 4, neboť předposlední prvek pole p á hodnotu 3 a tedy odkazuje na čtvrtý řádek atce V, atd. pro další vektory. Po toto kroku áe sestupně seřazené vlastní vektory atce V. Dále je usíe noralzovat na jednotkovou velkost. Pro každý vektor v z atce V provedee přepočet podle vztahu: v v =. (7) v Pro noru vektoru obecně platí: = v v v naše případě jsou hodnoty vlastních vektorů reálné, proto: v, (8) 2 v v =. (9) Po toto kroku áe určenou báz prostoru egenspace, která je tvořena atcí V, ve tvaru potřebné pro další kroky. Nyní ůžee do egenspace transforovat trénovací obrázky uístěné v atc X. ~ Předpokládeje, že jednotlvé transforované egenfaces vkládáe po řádcích do atce X. Transforac provedee podle vztahu: ~ T x = x V. (0) Na obr. 2 je uvedena část dalogového okna aplkace, kde je zobrazen průěrný obrázek a též zvolený egenface. Vzualzace egenface je provedena tak, že jsou jeho prvky lneárně přeškálovány do rozsahu hodnot 0 až 255. Obr. 2 Průěrný obrázek a zobrazení zvoleného egenface Po toto kroku jse přpraven zahájt proces rozpoznávání obrázku neznáé tváře; označe ho u. Tento obrázek usíe poocí výše získané báze převést do egenspace, tedy: obrázek vycentrujee: u = u M, T vypočtee egenface: u ~ = u V. Zbývá rozhodnout o nejpodobnější tvář z trénovací sady k tvář neznáé. Provedee to tak, že určíe vzdálenost trénovacích egenfaces x~ k egenface ~u. Z nalezené nální vzdálenost nakonec určíe odpovídající tvář z trénovací sady. K určení vzdálenost ůžee použít různé etrky. V této prác jsou na výběr etrky: P 2 Eukldova, ( ~, ~ ) ( ~ [ ] ~ d E u x = u j x [ j]) () = 0 j
P Hangova, d ( ~ ~ = ~ [ ] ~ H u, x ) u j x [ j] (2) = 0 j P j=0 n Zobecněná Mnkowskho, d ( u ~, ~ x ) = n ( u ~ [ j] ~ x [ j] ). (3) M Tí áe popsán postup př úloze rozpoznávání. Na obr. 3 je uvedena část dalogového okna aplkace, kde probíhá proces rozpoznávání. Vstupe je obrázek, jehož nejpodobnější vzor chcee najít v trénovací sadě a výstupe pak nalezené dva nejpodobnější vzory v sadě. Obr. 3 Proces rozpoznávání tváří- levý obrázek je vstup, pravý pak nalezený nejpodobnější obrázek. V rác procesu rozpoznávání lze též nastavt práh úspěšného rozpoznání, který je chápán jako ezní hodnota vzdálenost obrázku pro rozpoznání od obrázku z trénovací sady. Je-l vzdálenost větší než nastavený práh, vypíše se nforace, že nelze nalézt nejpodobnější obrázek. Práh ůže být gnorován. 3 Proces zpětné rekonstrukce Vedle rozpoznávání je v této prác naprograována ještě zpětná rekonstrukce z egenspace, přčež lze s zvolt počet vektorů báze, které ají být k rekonstrukc použty, []. Toto je v podstatě způsob, který se dá využít ke kopres sníků. Popše s proto, co tato úloha vyžaduje. K dspozc áe: báz egenspace V o rozěrech P x n transforovaný obrázek ve forě egenface u ~ resp. ~ x. Předpokládeje, že chcee zrekonstruovat -tý obrázek z trénovací sady s použtí k vektorů báze. Pak lze rekonstrukc vyjádřt vztahe: kde k j= 0 x [ t] = ~ x [ j] v [ t]; 0 t n, (4) x značí -tý zrekonstruovaný obrázek, ~ x. značí -tý egenface, k je počet použtých vektorů báze, n je počet obrazových bodů výchozího obrázku. Po toto kroku nesíe zapoenout přčíst průěrný obrázek: j
) x = x + M. Zpětná rekonstrukce je zatížena určtou chybou ε, kterou ůžee obecně vyjádřt: x (5) ε = x ). (6) Tí jse popsal postup zpětné rekonstrukce sníků s ožností volby počtu použtých bází. Na obr. 4 je uvedena část dalogového okna aplkace, kde probíhá proces zpětné rekonstrukce. Obr. 4 Proces zpětné rekonstrukce Pro jstou představu o vlvu počtu použtých vektorů báze na rekonstruovaný sníek uveďe na obr. 5 přehled sníků získaných z různých počtů vektorů báze. a) b) c) d) e) Obr. 5 Vlv počtu vektorů báze na rekonstrukc obrázku- a) původní obrázek, b) vektor, c) 3 vektory, d) 0 vektorů, e) 25 vektorů báze.
Vhodnější ěřítke pro posouzení vlvu počtu vektorů báze na kvaltu rekonstruovaného obrázku ůže být zobrazení závslost RMSE na počtu vektorů báze použtých k rekonstrukc obrázku, přčež pro RMSE platí: kde RMSE = M N M N = j= ) 2 ( x (, j) x (, j) ), M resp. N je výška (počet řádků obrazové atce) resp. šířka (počet sloupců obrazové atce) obrazu, x ) značí - tý zrekonstruovaný obraz, x značí - tý orgnální obraz. Uvažuje původní obrázek z obr. 5a) a tutéž trénovací sadu popsanou výše. Uvedenou závslost ukazuje obr. 6. (7) Obr.6 Závslost RMSE na počtu vektorů báze použtých k rekonstrukc obrazu Stojí za povšnutí, že význačný zlo v charakterstce nastává pro 5 vektorů báze, což je hodnota o větší než je počet různých osob uístěných v trénovací sadě. Použjee-l v naše případě k rekonstrukc 20 a více vektorů báze, není zde význaný vzuální rozdíl ez orgnální a rekonstruovaný obrázke. 4 Poznáky k pleentac aplkace Na závěr popsu použtí etody PCA uveďe některé poznáky z hledska pleentace, []. V řadě vztahů se počítá s transponovanou forou atce. Saozřejě není vůbec nutné ít vytvořenou vedle atce netransponované ještě atc transponovanou. Stačí u původní atce prohodt řádkový ndex se sloupcový ndexe. Pro velké trénovací sady vdíe vysoké paěťové nároky. Může se stát, že se dynacky přdělovaná paěť vyčerpá dříve než se zahájí nějaký výpočet. Proto bycho neěl pro alokac velkých polí a atc nutných k výpočtů používat operátory new, alloc, příp. u hodnotových polí etodu resze. V této prác je pro rozsáhlá pole a atce používán paěťově apovaný soubor. Konkrétně jde o atc X uchovávající trénovací sadu obrázků a o atc V uchovávající báz egenspace. Zaplatíe za to ovše určtou ztrátou rychlost. Veškeré postupy předpokládaly vstupní obrázky ve stupních šedé. Na nternetu lze ale nalézt rozsáhlé databáze barevných obrázků. Máe několk ožností, jak se s tí vypořádat; buď budee pracovat paralelně s každý kanále zvlášť (pro velké časové a paěťové nároky je
to však nevhodné a též nelogcké) nebo obrázky převedee do stupňů šedé nebo s zvolíe jeden z barevných kanálů R,G,B a s ní etodu rozpoznávání provedee. V této prác funguje poslední ožnost (byl vybrán kanál R) a bez jakýchkol probléů. Výsledky pro jeden ze zvolených kanálů zobrazujee tak, že získané hodnoty obrazových bodů doplníe do zbývajících 2 kanálů (toto se týká zobrazení průěrného obrazu, zvoleného egenface a zrekonstruovaného obrazu). 5 Shrnutí Cíle tohoto příspěvku bylo ukázat využtí etody PCA pro účely rozpoznávání a pro účely koprese obrazu a probleatku jejího prograování v jazyce Vsual C++. Zrealzovaná aplkace ůže sloužt ke studjní účelů v rác seznaování se s etodou PCA nebo jako odrazový ůstek pro další prác v této oblast. Velce zajíavou návaznou prací ůže být oblast koprese vdeosekvencí, kde je nutné řešt optalzace z hledska vysoké časové a paěťové náročnost etody. Lákavou oblastí je též realzace přístupového systéu budov na základě rozpoznávání tváří. Zde by bylo nutné pouze vyřešt propojení sníací kaery s aplkací a ovládání nějakého elektronckého záku, neboť vše ostatní je jž realzováno. V rác realzace aplkace byly uvedené algorty pro kontrolu odzkoušeny v prograové prostředí MATLAB. Tento příspěvek vznkl s přspění grantu GAČR č.02/05/2054 a výzkuného záěru MSM 684077004 (MŠMT). Reference [] Frtsch, L. Prograová podpora sníání obrazu. Praha, 2007. Dploová práce FEL ČVUT. Vedoucí práce Mgr. Petr Páta, Ph.D. [2] Stejskal, J. KLT obrazový kodér. Praha, 2005. Dploová práce FEL ČVUT. Vedoucí práce Mgr. Petr Páta, Ph.D. [3] JAMAC++ package [onlne]. URL: <http://ath.nst.gov/tnt/overvew.htl>. [4] Rozpoznávání tváří [soubor PDF]. URL: <http://pal.altanoptk.co/download/facerec.pdf>. [5] Efektvní vyhledávání v kolekcích obrázků tváří [soubor PDF]. URL: <http://www.cs.vsb.cz/kratky/courses/2003-04/reference/effface.pdf>. [6] A tutoral on Prncpal Coponent Analyss [soubor PDF]. URL: <http://www.snl.salk.edu/~shlens/pub/notes/pca.pdf>. [7] Collecton of Facal Iages: Faces94 [onlne]. URL: <http://cswww.essex.ac.uk/v/allfaces/faces94.htl>. Ing. Lukáš Frtsch ČVUT v Praze Fakulta elektrotechncká, katedra radoelektronky Techncká 2, Praha 6, 66 27 e-al: frtsl@fel.cvut.cz