380 likes | 490 Vues
Face recognition. Using PCA and EST. Jakub Barták a Zdeněk Běhan. MFF UK. Co je naším cílem. Natrénovat neuronovou síť tak aby byla schopna rozpoznat jednotlivé lidi na fotografiích splňujících nějaké základní podmínky. Problémy. Face detection Zisk vstupních dat
E N D
Face recognition Using PCA and EST Jakub Barták a Zdeněk Běhan MFF UK
Co je naším cílem • Natrénovat neuronovou síť tak aby byla schopna rozpoznat jednotlivé lidi na fotografiích splňujících nějaké základní podmínky
Problémy • Face detection • Zisk vstupních dat • Velikost vstupního prostoru
Face detection problem • V komplexních řešeních problému face recognition je třeba řešit problém nalezení obličeje v obrázku. • Používá se zpravidla detekce očí.
Face detection problem • Další problémy: • Natočení tváře v rovině kamery & v ose těla • Částečné zakrytí tváře • Osvětlení • a další…
Face detection problem • Face detection proto v našem případě neřešíme • Vstupní data získáváme přímým focením • proti bílé zdi • za konstatního osvětlení • konstantního natočení tváře (čelem do kamery) • Přesto o nich nelze prohlásit že jsou ideální…
Vstupní data – zisk dat • Fotky 13 lidí • Od každého člověka 11 fotek s různými výrazy
Vstupní data – zisk dat • Problémy • Rozdílné osvětlení • Máznuté fotky • Žádný model není dokonalý…. (tedy například různé natočení hlavy)
Vstupní data - preprocesing • Ruční preprocesing • Nalezení obličeje a zisk čtvercové fotky se středem v obličeji • Převedení z barevných fotografií na černobílé
Vstupní data - preprocesing • Strojový preprocesing • Resizing na 64x64 pixelu • Normalizace intenzity na rozmezí 0-255
Vstupní data - summary • Máme tedy k dispozici 143 normalizovaných fotografií • Fotografie se liší ve dvou aspektech • Výrazy v obličeji (žádoucí) • Centralizace a natočení obličeje (nežádoucí)
Face recognition - úvod • Naším cílem je roztřídit 143 prvků správně do 13 tříd (v každé bude 11 prvků). • Hodláme využít neuronovou síť
Face recognition - úvod • Problém: Velikost vstupního prostoru a jeho řídkost • Naše fotografie obsahují 4096 pixelů (64x64), kde každý pixel může nabývat hodnot 0-255 • Velikost vstupního prostoru je tedy 2564096 (což je hodně) • V prostoru této velikosti máme 143 vektorů (což je málo)
Face recognition – PCA • Vstupní prostor je však silně korelovaný. • Všechny lidské tváře mají zhruba stejný tvar – ovál s výraznými znaky typu nos, oči a ústa • Některé z těchto určujících znaků jsme si zničili variací výrazů, ale doufáme že to nebude vadit. • Pomocí PCA a EST najdeme bázi nového prostoru, která bude využívat výše zmíněné korelace a pomůže nám zmenšit dimenzi.
Principal Component Analysis (PCA) • Statistická metoda umožňující zmenšit dimenzi vstupního prostoru dat • Umožňuje nalézt bázi nového prostoru jehož bázové vektory odpovídají znakům které nejvíce určují vstupní prostor • První bázový vektor pak odpovídá nejvíce určujícímu znaku, druhý bázový vektor druhému nejvíce určujícímu znaku atd.
Eigen Space Transformation (EST) • Využívá se při face recognition relativně často • Umožnuje provést transformaci vstupního prostoru s minimalizací ztráty informace (ve smyslu nejmenších čverců)
Eigen Space Transformation (EST) • Přetvoříme obrázky z matice 64x64 na vektor 1x4096 a vytvoříme matici těchto vektorů • Máme tedy matici velikosti A=4096x143 (fotek je celkem 143) • Naším cílem je nalézt vlastní vektory matice AxAT, které budou vytvářet bázi nového prostoru. Když je seřadíme podle velikosti vlastních čísel příslušných každému vlastnímu vektoru, dostaneme přesně bázi kterou popisuje PCA.
Eigen Space Transformation (EST) • Problémem je, že matice X= AxAT je matice velikosti 4096x4096 a spočítat v ní vlastní vektory by bylo „lehce“ obtížné
Eigen Space Transformation (EST) • Spočítáme proto vlastní vektory matice X´ =ATxA, tedy matice velikosti 143x143 což je výrazně jednodušší a pak využijeme vztahu • λi = λ’i • ei = λi-1/2*A*e’I • Kde λi je vlastní číslo příslušné matici X, λ’i je vlastní číslo příslušné matici X’. ei a e’i jsou pak vlastní vektory příslušné těmto vlastním číslům.
Eigen Space Transformation (EST) • A takhle vypadají výsledky (10 nejvýznamnějších vlastních vektorů):
Eigen Space Transformation (EST) • 10 nejméně významných vlastních vektorů
Eigen Space Transformation (EST) • Z takto získaných vlastních vektorů jsme vybrali 40 nejvýznamnějších a ty zvolili za bázi nového prostoru. • Pomocí této nové báze jsme aproximovali původní vektory a snížili tak dimenzi z původní 4096 na 40. • To už by neuronová síť měla zvládnout. • Přesnost aproximace byla +- 0.5 bodu intenzity
Neural network training • A taky že zvládla. • Použili jsme síť Learning Vector Quantization (LVQ) s 20 skrytými neurony a síť byla schopna se naučit rozpoznávat bez chyby během 68 epoch.
Experimenty s neuronovou sítí • Na závěr jsme se rozhodli ještě se sítí trochu experimentovat. • Při trénování s 13 skrytými neurony si síť pletla dvě dvojice lidí
Experimenty s neuronovou sítí… • Přidali jsme další neuron do skryté vrstvy (14 celkem) • Sít se zlepšila a už špatně řadí pouze jednoho člověka. Za to si ho plete se dvěma
Experimenty s neuronovou sítí… • Na správné rozpoznání pomohlo až 20 neuronů ve skryté vrstvě (síť se naučila za 68 epoch)
Experimenty s neuronovou sítí… • Při dalších pokusech jsme rozdělili fotografie do dvou skupin. První tvořila trénovací skupinu, druhá pak testovací. • Při rozdělení 8:3 (trénovací:testovací) a původním nastavení (20 vnitřních neuronů) si síť pletla 2 lidi • Při rozdělení 5:6 již lidi 3 • Při rozdělení 2:9 měla síť pořád 93% úspěšnost
Experimenty s neuronovou sítí… • Rozdělení 1:10 • Sít má k dispozici pouze jedinou fotografii aby se naučila rozpoznávat. • 83.8% úspěšnost
Použitá literatura • Recognizing humans by gait via parametric canonical space (Artificial Intelligence in Engineering volume 13) University of Southampton
Slovo závěrem • Hlavní těžiště práce jednoznačně spočívalo v redukci velikosti vstupního prostoru a to správným postupem. • Cestou jsme narazili na bezpočet různě obtížných problému, ale nebáli jsme se je vyřešit. Jak řekl největší český vynálezce všech dob je třeba se nebát, protože někdo musí říct „Tudy ne, přátelé“
Slovo závěrem… • Pokus o spočítání vlastních čísel na matici velikosti 4096x4096 >>eigenVectors = eig(images*images’); …2 minuty …10 minut …20 minut “f*ck” CTR+C >>
Slovo závěrem… • Pár pokusů zobrazit nějaké obrázky v Matlabu (hlavní vlastní vektor):
Slovo závěrem… • Hlavní vlastní vektor podruhé…
Slovo závěrem… • Ani zobrazit černobílý obrázek nemusí být triviální…
Slovo závěrem… • …
Některé pokusy se na vás zkrátka projeví… Zdeněk Běhan a Jakub Barták
Opravdu, ale už opravdu konec… • A to je vše přátelé • Prostor pro dotazy…