Rozpoznávání tváří I Vojtěch Franc Centrum strojového vnímání, ČVUT FEL Praha Biometrie ZS 2013 Poděkování Janu Šochmanovi za slajdy vysvětlující AdaBoost
Úlohy rozpoznávání tváří: Detekce Cíl: lokalizovat tvář v obraze Vstup: obrázek 2/21 Výstup: pozice tváře (souřadnice, velikost, popřípadě orientace)
Úlohy rozpoznávání tváří: Verifikace Cíl: ověřit identitu na základě porovnání tváře s databází 3/21 Vstup: obrázek (nebo video) tváře a jméno Výstup: binární rozhodnutí - idenita ověřena nebo zamítnuta Input image User database Kim Ki-Duk Verification machine verified / rejected
Úlohy rozpoznávání tváří: Identifikace Cíl: přiřadit tváři identitu na základě porovnání s databází Vstup: obrázek (nebo video) 4/21 Výstup: jedna z N identit popřípadě odpověď není v databázi
Úlohy rozpoznávání tváří: Vyhledávání Cíl: nalézt v databázi tváře podle zadaného popisu 5/21 Vstup: obrázek tváře (popřípadě slovní popis) Výstup: N nejbližších obrázků v databázi face descriptor Part of the ISO/IEC JTC 1SC 29WG 11 (MPEG7) standard.
Úlohy rozpoznávání tváří: Kategorizace Cíl: zařadit tvář do jedné z N kategorií 6/21 Vstup: obrázek (nebo video) Výstup: jedna z N kategorií Příklady kategorií: muž/žena, věkové kategorie, nálada (úsměv/smutek/neutrální), rasa (běloch/černoch/asiat)
Úlohy rozpoznávání tváří: Detekce mluvčího Cíl: nalézt ve videu kdo mluví 7/21 Vstup: video sekvence s lidmi Výstup: lokalizace mluvících tváří
Úlohy rozpoznávání tváří: Odhad tepové frekvence Cíl: odhadnout tepovou frekvenci sledovaného subjektu 8/21 Vstup: video tváře Výstup: tepová frekvence
Proč je rozpoznávání tváří v obecném případě těžké? Tváře se typicky reprezentují vektorem příznaků a podobnost tváří se měří podobností těchto vektorů (např. jejich Euklidovskou vzdáleností). 9/21 Tváře patřící do stejné třídy mají velkou variabilitu: změna pozice, meřítka, rotace (roll, pan, tilt) změna osvětlení změna výrazu tváře (úsměv, smutek, neutrální,...) zákryty (brýle, pokrývka hlavy), změna účesu, make up, stárnutí...
Složitost rozpoznávání tváří je ovlivňena mnoha faktory Světelné podmínky (venkovní/vnitřní prostor, stíny, přesvětlení obrazu...) 10/21 Použitý snímací senzor: kamera pracující ve viditelném spektru infračervená kamera (s IR přísvícením) stereo kamera 3D skener Statický obrázek / video sekvence Spolupracující / nespolupracující subjekt...
Příklad rozpoznávacího systému, stavební bloky Geometrická a fotometrická normalizace: 11/21 cílem je získat reprezentaci tváře invariantní vůči geometrické transformaci či změně osvětlení geometrická normalizace se typicky řeší nalezením významných bodů na tváři Příznakový popis: tvář se popíše vektorem čísel (jasové hodnoty, popis textury,...) Klasifikace: zařazení vektoru příznaků do třídy detekce geometrická a fotometrická normalizace příznakový popis klasifikace x 1 x 2. x n id/gender/age
Vstup detektoru: obrázek x X Detektor tváří 12/21 Výstup detektoru: množina d D oblastí v obrázku x, které obsahují tváře; oblast je popsaná polohou a velikostí (popřípadě orientací) tváře Kritéria pro hodnocení detektoru Q: X D: přesnost a rychlost Přesnost detektoru tváří se charakterizuje dvěma čísly: 1. True Positive Rate (TPR): pravděpodobnost, že tvář je v obraze nalezena 2. False Positive Rate (FPR): pravděpodnost, že nalezená oblast neobsahuje tvář
Scanning window approach 13/21 Problém detekce tváří lze převést na sekvenci binárních klasifikačních problémů tvář/netvář. FACE Těžký rozhodovací problém Q : X D převedeme na mnoho jednodušších H : X { 1, +1} NONFACE
Binární klasifikátor tváří Klasifikátor h: X {+1, 1} (tvář/netvář) rozhoduje podle znaménka skórovací funkce f : X R, { +1 pokud f(x) 0 H(x) = 1 pokud f(x) < 0 která je lineární kombinací n slabých klasifikátorů 14/21 f(x) = α 1 h 1 (x) + α 2 h 2 (x) +... + α n h n (x) h i : X {+1, 1}... i-tý slabý klasifikátor α i R... váha i-tého slabého klasifikátoru
Slabý klasifikátor pro detektor tváří Slabý klasifikátor je oprahovaná odezva Haarova filtru h i (x) = sign (u,v) A + i (x) x(u, v) x(u, v) + θ (u,v) A i (x) 15/21 Příklady filtrů... -1... +1 Odezvu Haarova filtru lze spočítat velmi rychle pomocí integrálního obrázku I(u, v) = u v x(u, v ) u =1 v =1
Učení klasifikátorů Jak vybrat takouvou podmnožinu slabých klasifikátorů a jejich váhy, abychom výsledný silný klasifikátor byl přesný? 16/21 H(x) = { +1 pro f(x) 0 1 pro f(x) < 0 kde f(x) = α 1h 1 (x) + α 2 h 2 (x) +... + α n h n (x)
Učení klasifikátorů Jak vybrat takouvou podmnožinu slabých klasifikátorů a jejich váhy, abychom výsledný silný klasifikátor byl přesný? 16/21 H(x) = { +1 pro f(x) 0 1 pro f(x) < 0 kde f(x) = α 1h 1 (x) + α 2 h 2 (x) +... + α n h n (x) Klasifikátor se učí sám z množiny trénovacích příkladů {(x1, y1),..., (xm, ym)} (x i, y i = +1) (x i, y i = 1)
Učení klasifikátorů Jak vybrat takouvou podmnožinu slabých klasifikátorů a jejich váhy, abychom výsledný silný klasifikátor byl přesný? 16/21 H(x) = { +1 pro f(x) 0 1 pro f(x) < 0 kde f(x) = α 1h 1 (x) + α 2 h 2 (x) +... + α n h n (x) Klasifikátor se učí sám z množiny trénovacích příkladů {(x1, y1),..., (xm, ym)} (x i, y i = +1) (x i, y i = 1) Učení: optimalizační úloha kdy hledáme vektor vah α RL, tak aby trénovací chyba P (α) = m [H(x i, α) y i ] i=1 byla minimální za podmínky, že počet nenulových komponent vektoru α je roven n.
Učení klasifikátorů Jak vybrat takouvou podmnožinu slabých klasifikátorů a jejich váhy, abychom výsledný silný klasifikátor byl přesný? 16/21 H(x) = { +1 pro f(x) 0 1 pro f(x) < 0 kde f(x) = α 1h 1 (x) + α 2 h 2 (x) +... + α n h n (x) Klasifikátor se učí sám z množiny trénovacích příkladů {(x1, y1),..., (xm, ym)} (x i, y i = +1) (x i, y i = 1) Učení: optimalizační úloha kdy hledáme vektor vah α RL, tak aby trénovací chyba P (α) = m [H(x i, α) y i ] i=1 byla minimální za podmínky, že počet nenulových komponent vektoru α je roven n. AdaBoost: hladová minimalizace horní meze P (α) U(α) = m i=1 exp( y ih(x i, α)).
AdaBoost algoritmus Given: (x 1, y 1 ),..., (x m, y m ); x i X, y i { 1, +1} 17/21
AdaBoost algoritmus Given: (x 1, y 1 ),..., (x m, y m ); x i X, y i { 1, +1} Initialise weights D 1 (i) = 1/m 17/21
AdaBoost algoritmus Given: (x 1, y 1 ),..., (x m, y m ); x i X, y i { 1, +1} Initialise weights D 1 (i) = 1/m For t = 1,..., T : 17/21
AdaBoost algoritmus Given: (x 1, y 1 ),..., (x m, y m ); x i X, y i { 1, +1} Initialise weights D 1 (i) = 1/m For t = 1,..., T : Find ht = arg min ɛ j = m D t (i) y i h j (x i ) h j H i=1 t = 1 17/21
AdaBoost algoritmus Given: (x 1, y 1 ),..., (x m, y m ); x i X, y i { 1, +1} Initialise weights D 1 (i) = 1/m For t = 1,..., T : Find ht = arg min ɛ j = m D t (i) y i h j (x i ) h j H i=1 If ɛ t 1/2 then stop t = 1 17/21
AdaBoost algoritmus Given: (x 1, y 1 ),..., (x m, y m ); x i X, y i { 1, +1} Initialise weights D 1 (i) = 1/m For t = 1,..., T : Find ht = arg min ɛ j = m D t (i) y i h j (x i ) h j H i=1 If ɛ t 1/2 then stop t = 1 17/21 Set αt = 12 log(1 ɛt ɛ t )
AdaBoost algoritmus Given: (x 1, y 1 ),..., (x m, y m ); x i X, y i { 1, +1} Initialise weights D 1 (i) = 1/m For t = 1,..., T : Find ht = arg min ɛ j = m D t (i) y i h j (x i ) h j H i=1 If ɛ t 1/2 then stop t = 1 17/21 Set αt = Update 12 log(1 ɛt ɛ t ) D t+1 (i) = D t(i) exp( α t y i h t (x i )) Z t where Z t is normalisation factor
AdaBoost algoritmus Given: (x 1, y 1 ),..., (x m, y m ); x i X, y i { 1, +1} Initialise weights D 1 (i) = 1/m For t = 1,..., T : Find ht = arg min ɛ j = m D t (i) y i h j (x i ) h j H i=1 If ɛ t 1/2 then stop t = 1 17/21 Set αt = Update 12 log(1 ɛt ɛ t ) D t+1 (i) = D t(i) exp( α t y i h t (x i )) Z t where Z t is normalisation factor Output the final classifier: H(x) = sign ( ) α 1 h 1 (x) 0.35 0.3 0.25 0.2 0.15 0.1 0.05 0 0 5 10 15 20 25 30 35 40
AdaBoost algoritmus Given: (x 1, y 1 ),..., (x m, y m ); x i X, y i { 1, +1} Initialise weights D 1 (i) = 1/m For t = 1,..., T : Find ht = arg min ɛ j = m D t (i) y i h j (x i ) h j H i=1 If ɛ t 1/2 then stop t = 2 17/21 Set αt = Update 12 log(1 ɛt ɛ t ) D t+1 (i) = D t(i) exp( α t y i h t (x i )) Z t where Z t is normalisation factor Output the final classifier: H(x) = sign ( ) α 1 h 1 (x) + α 2 h 2 (x) 0.35 0.3 0.25 0.2 0.15 0.1 0.05 0 0 5 10 15 20 25 30 35 40
AdaBoost algoritmus Given: (x 1, y 1 ),..., (x m, y m ); x i X, y i { 1, +1} Initialise weights D 1 (i) = 1/m For t = 1,..., T : Find ht = arg min ɛ j = m D t (i) y i h j (x i ) h j H i=1 If ɛ t 1/2 then stop t = 3 17/21 Set αt = Update 12 log(1 ɛt ɛ t ) D t+1 (i) = D t(i) exp( α t y i h t (x i )) Z t where Z t is normalisation factor Output the final classifier: H(x) = sign ( ) α 1 h 1 (x) + α 2 h 2 (x) + α 3 h 3 (x) 0.35 0.3 0.25 0.2 0.15 0.1 0.05 0 0 5 10 15 20 25 30 35 40
AdaBoost algoritmus Given: (x 1, y 1 ),..., (x m, y m ); x i X, y i { 1, +1} Initialise weights D 1 (i) = 1/m For t = 1,..., T : Find ht = arg min ɛ j = m D t (i) y i h j (x i ) h j H i=1 If ɛ t 1/2 then stop t = 4 17/21 Set αt = Update 12 log(1 ɛt ɛ t ) D t+1 (i) = D t(i) exp( α t y i h t (x i )) Z t where Z t is normalisation factor Output the final classifier: H(x) = sign ( ) α 1 h 1 (x) + α 2 h 2 (x) +... + α 4 h 4 (x) 0.35 0.3 0.25 0.2 0.15 0.1 0.05 0 0 5 10 15 20 25 30 35 40
AdaBoost algoritmus Given: (x 1, y 1 ),..., (x m, y m ); x i X, y i { 1, +1} Initialise weights D 1 (i) = 1/m For t = 1,..., T : Find ht = arg min ɛ j = m D t (i) y i h j (x i ) h j H i=1 If ɛ t 1/2 then stop t = 5 17/21 Set αt = Update 12 log(1 ɛt ɛ t ) D t+1 (i) = D t(i) exp( α t y i h t (x i )) Z t where Z t is normalisation factor Output the final classifier: H(x) = sign ( ) α 1 h 1 (x) + α 2 h 2 (x) +... + α 5 h 5 (x) 0.35 0.3 0.25 0.2 0.15 0.1 0.05 0 0 5 10 15 20 25 30 35 40
AdaBoost algoritmus Given: (x 1, y 1 ),..., (x m, y m ); x i X, y i { 1, +1} Initialise weights D 1 (i) = 1/m For t = 1,..., T : Find ht = arg min ɛ j = m D t (i) y i h j (x i ) h j H i=1 If ɛ t 1/2 then stop t = 6 17/21 Set αt = Update 12 log(1 ɛt ɛ t ) D t+1 (i) = D t(i) exp( α t y i h t (x i )) Z t where Z t is normalisation factor Output the final classifier: H(x) = sign ( ) α 1 h 1 (x) + α 2 h 2 (x) +... + α 6 h 6 (x) 0.35 0.3 0.25 0.2 0.15 0.1 0.05 0 0 5 10 15 20 25 30 35 40
AdaBoost algoritmus Given: (x 1, y 1 ),..., (x m, y m ); x i X, y i { 1, +1} Initialise weights D 1 (i) = 1/m For t = 1,..., T : Find ht = arg min ɛ j = m D t (i) y i h j (x i ) h j H i=1 If ɛ t 1/2 then stop t = 7 17/21 Set αt = Update 12 log(1 ɛt ɛ t ) D t+1 (i) = D t(i) exp( α t y i h t (x i )) Z t where Z t is normalisation factor Output the final classifier: H(x) = sign ( ) α 1 h 1 (x) + α 2 h 2 (x) +... + α 7 h 7 (x) 0.35 0.3 0.25 0.2 0.15 0.1 0.05 0 0 5 10 15 20 25 30 35 40
AdaBoost algoritmus Given: (x 1, y 1 ),..., (x m, y m ); x i X, y i { 1, +1} Initialise weights D 1 (i) = 1/m For t = 1,..., T : Find ht = arg min ɛ j = m D t (i) y i h j (x i ) h j H i=1 If ɛ t 1/2 then stop t = 40 17/21 Set αt = Update 12 log(1 ɛt ɛ t ) D t+1 (i) = D t(i) exp( α t y i h t (x i )) Z t where Z t is normalisation factor Output the final classifier: H(x) = sign ( ) α 1 h 1 (x) + α 2 h 2 (x) +... + α 40 h 40 (x) 0.35 0.3 0.25 0.2 0.15 0.1 0.05 0 0 5 10 15 20 25 30 35 40
Po prvních 25 iteracích. Příklady nalezených slabých klasifikátorů 18/21
Urychlení detekce pomocí sekvenčního rozhodování Počet slabých klasifikátorů je n 1000, což může být stále časově náročné pokud používáme celý klasifikátor 19/21 H(x) = { +1 pokud f(x) 0 1 pokud f(x) < 0 f(x) = n α i h i (x) i=1 K rozhodnutí o jasných příkladech tváří/netváří stačí jednoduší pravidlo. Detektor lze urychlit použitím sekvenčního rozhodovacího pravidla S t (x) = +1 f t (x) θt A 1 f t (x) θt B # θt B < f t (x) < θt A f t (x) = 1 1 1 1 t α i h i (x) i=1 # # # S 1 (x) S 2 (x) S 3 (x) S n (x) +1 +1 +1 +1
Příklad komerčního detektoru tváří (www.eyedea.cz) Trénovací množina vytvořena tak, aby pokryla co nejvíce variance (rasa, osvětlení, výraz tváře, pozadí obrázku...). Pozitivní příklady (tváří): více než 500, 000 Synteticky generované z cca 60, 000 tváří aplikováním transformací, které nemění třídu obrázku - malá změna rotace, změna měřítka, posunutí. Pozitivní příklady vyžadují manuální anotaci. Negativní příklady (netváře): přibližně 4 10 9 Negativní příklady se generují z množiny obrázků neobsahujících žádné tváře. Není potřeba anotace. Rychlost detektoru závisí na mnoha parametrech (minimální velikost detekované tváře, velikost vstupního obrázku, krok posunutí, rotace...) Například pro rozlišení 640 480 px a minimální velikosti tváře 24 24 px zpracuje detektor cca 10 15 smímků za vteřinu. 20/21
Konec 21/21
Kim Ki-Duk Verification machine verified / rejected
detekce geometrická a fotometrická normalizace příznakový popis klasifikace x 1 x 2. x n id/gender/age
NONFACE FACE
... -1... +1
0 0 5 10 15 20 25 30 35 40 0.35 0.3 0.25 0.2 0.15 0.1 0.05
0 0 5 10 15 20 25 30 35 40 0.35 0.3 0.25 0.2 0.15 0.1 0.05
0 0 5 10 15 20 25 30 35 40 0.35 0.3 0.25 0.2 0.15 0.1 0.05
0 0 5 10 15 20 25 30 35 40 0.35 0.3 0.25 0.2 0.15 0.1 0.05
0 0 5 10 15 20 25 30 35 40 0.35 0.3 0.25 0.2 0.15 0.1 0.05
0 0 5 10 15 20 25 30 35 40 0.35 0.3 0.25 0.2 0.15 0.1 0.05
0 0 5 10 15 20 25 30 35 40 0.35 0.3 0.25 0.2 0.15 0.1 0.05
0 0 5 10 15 20 25 30 35 40 0.35 0.3 0.25 0.2 0.15 0.1 0.05
0 0 5 10 15 20 25 30 35 40 0.35 0.3 0.25 0.2 0.15 0.1 0.05
0 0 5 10 15 20 25 30 35 40 0.35 0.3 0.25 0.2 0.15 0.1 0.05
0 0 5 10 15 20 25 30 35 40 0.35 0.3 0.25 0.2 0.15 0.1 0.05
0 0 5 10 15 20 25 30 35 40 0.35 0.3 0.25 0.2 0.15 0.1 0.05
0 0 5 10 15 20 25 30 35 40 0.35 0.3 0.25 0.2 0.15 0.1 0.05
0 0 5 10 15 20 25 30 35 40 0.35 0.3 0.25 0.2 0.15 0.1 0.05
0 0 5 10 15 20 25 30 35 40 0.35 0.3 0.25 0.2 0.15 0.1 0.05
0 0 5 10 15 20 25 30 35 40 0.35 0.3 0.25 0.2 0.15 0.1 0.05
1 1 1 1 # # # S 1 (x) S 2 (x) S 3 (x) S n (x) +1 +1 +1 +1