33
Seminár Robotika.SK Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib Andrej Lúčny Katedra aplikovanej informatiky FMFI UK [email protected] http://dai.fmph.uniba.sk/w/Andrej_Lucny www.robotika.sk/cviko7-faces.zip www.robotika.sk/cviko7.zip

Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib · Seminár Robotika.SK Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib Andrej Lúčny Katedra

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib · Seminár Robotika.SK Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib Andrej Lúčny Katedra

Seminár Robotika.SK

Ako naučiť robota vidieť ľudskú

tvár pomocou knižnice Dlib

Andrej Lúčny

Katedra aplikovanej informatiky FMFI UK

[email protected]

http://dai.fmph.uniba.sk/w/Andrej_Lucny

www.robotika.sk/cviko7-faces.zip www.robotika.sk/cviko7.zip

Page 2: Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib · Seminár Robotika.SK Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib Andrej Lúčny Katedra

Regresia

2

príznak (feature)

hodnota

• Učíme stroj nejakú funkciu ku ktorej máme

sadu vzoriek (príznak, hodnota)

0 1 2 29 1

128

x 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 f 128 127 126 124 122 120 117 114 110 107 103 99 94 90 85 80 74 69 63 58 52 46 40 34 28 22 16 11 5 20

Page 3: Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib · Seminár Robotika.SK Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib Andrej Lúčny Katedra

Slabý regresor (Regresný strom)

3

29 1

128

0

13

11

2

127 115 99 94 90 65 31 13

12 14 26

22

∆=2126

x 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 f 128 127 126 124 122 120 117 114 110 107 103 99 94 90 85 80 74 69 63 58 52 46 40 34 28 22 16 11 5 20 g 127 127 115 115 115 115 115 115 115 115 115 99 94 90 65 65 65 65 65 65 65 65 31 31 31 31 13 13 13 13

Page 4: Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib · Seminár Robotika.SK Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib Andrej Lúčny Katedra

Ako získame regresný strom?

4

• Povieme si nech je hĺbky 3

• Vo vnútornom vrchole dáme porovnanie na náhodne

zvolený (deliaci) príznak (menší vľavo, väčší vpravo)

• V liste dáme priemer z hodnôt, ktoré zodpovedajú

príznakom s ktorými sa do listu dostaneme

Page 5: Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib · Seminár Robotika.SK Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib Andrej Lúčny Katedra

Ako nájsť strom s malou chybou?

5

• Takto vygenerovaný strom nemusí byť práve

najvhodnejší, čo s tým?

1. Pri voľbe deliaceho príznaku môžeme uvažovať viac

možností a vybrať si lepšiu (takú, ktorá aproximuje

dáta s menšou chybou, t.j. súčet druhých mocnín

rozdielov vzoriek v ľavom podstrome od ich

priemeru plus analogický súčet pre vzorky v pravom

podstrome je najmenší)

2. Môžeme vygenerovať viac stromov a vybrať ten s

najmenšou chybou

Page 6: Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib · Seminár Robotika.SK Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib Andrej Lúčny Katedra

6

∆=436

∆=820

∆=4000

∆=2000

∆=1200

RegressionTree

Page 7: Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib · Seminár Robotika.SK Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib Andrej Lúčny Katedra

Gradient Boosting

7

• Ako to vylepšiť ?

1. Vyrátame rozdiel medzi tým, čo sa strom naučil a čo

sme ho chceli naučiť

2. Tento rozdiel učíme ďalší slabý regressor

3. A tak ďalej až po určitý zvolený počet regresorov

4. Odozva takejto sústavy regresorov bude súčet ich

odzviev na príznak

odhad odhad

chyby

odhad chyby

odhadu chyby

odhad ... odhad ... + + + +

Page 8: Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib · Seminár Robotika.SK Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib Andrej Lúčny Katedra

8

1

2

3

4

5

6

Page 9: Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib · Seminár Robotika.SK Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib Andrej Lúčny Katedra

9

17

18

19

20

∆=0

Page 10: Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib · Seminár Robotika.SK Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib Andrej Lúčny Katedra

Gradient Boosting

10

20

1

RegressionTree

Page 11: Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib · Seminár Robotika.SK Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib Andrej Lúčny Katedra

Príznaky na obraze

11

landmark

Page 12: Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib · Seminár Robotika.SK Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib Andrej Lúčny Katedra

12

•P

rízn

ak b

y m

al b

od

oln

ý v

oči

zm

ene

osv

etle

nia

, po

sun

uti

u, p

rek

lop

eniu

,

zašu

men

iu

Page 13: Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib · Seminár Robotika.SK Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib Andrej Lúčny Katedra

Príznaky na obraze

13

• Ako pozná táto bodka, že je tá, ktorú chceme?

1. Porovnáva svoju hodnotu s okolím.

2. Blízko nej sú hodnoty menšie

3. Ďalej od nej sú hodnoty väčšie

Page 14: Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib · Seminár Robotika.SK Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib Andrej Lúčny Katedra

Príznaky na obraze

14

• Najjednoduchší vhodný príznak je teda porovnanie

intenzít dvoch pixelov v okolí relatívnom ku pozícii z

ktorej sa pýtame

>

Page 15: Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib · Seminár Robotika.SK Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib Andrej Lúčny Katedra

Regresor landmarkov

15

• Čo keď nie sme v správnom mieste, ale sme blízko?

- z toho, že porovanie pixelov nie je v poriadku, môže

vyplynúť, že sa napríklad máme posunúť vľavo

< ←

Page 16: Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib · Seminár Robotika.SK Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib Andrej Lúčny Katedra

Regresor landmarkov

16

• Príznaky: porovnanie intenzít pixelov relatívne k

miestu kde sme

• Vrátená hodnota: ako posunúť miesto

Page 17: Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib · Seminár Robotika.SK Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib Andrej Lúčny Katedra

Kde na to zoberieme vzorky?

17

• Na vzorkách obrazu si označíme landmarky

• A ako vzorovú zlú pozíciu vezmeme landmark z inej

vzorky

...

Page 18: Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib · Seminár Robotika.SK Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib Andrej Lúčny Katedra

Kde začneme?

18

• Na obvyklej, t.j. priemernej pozícii

• Pokiaľ sa nám podarí

naučiť regresor s

nulovou chybou, tak

na jedno jeho

zavolanie sa

presunieme na správne

miesto.

Page 19: Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib · Seminár Robotika.SK Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib Andrej Lúčny Katedra

Kaskádny regresor

19

• A čo keď sa to nepodarí?

• Tu už odpoveď poznáme: použijeme gradient boosting,

akurát druhej úrovne

• Vzorkami učenia druhej kaskády budú výsledky

posunutia priemernej polohy regresorom v prvej

kaskáde

• Pritom je dobre vziať na posun nie celý výstup

regresora, ale len 0.9 časť z neho, lepšie to konverguje

R1 R2 R3 R4

Page 20: Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib · Seminár Robotika.SK Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib Andrej Lúčny Katedra

1D → 2D, 1 → 68

20

• Čo sa zmení, keď chceme hľadať landmarky v 2D?

• Čo sa zmení, keď nie jeden landmark, ale viacero?

1. Príznak ostáva (porovnanie dvoch pixelov), ale oveľa

ťažie sa definuje čo to znamená, pozerať sa na ne zo

svojho miesta (lebo landmarkov je veľa a brať ich po

jednom nie je dobrý nápad, musia držať určitý tvar).

Riešenie: similarity transform

2. Hodnota sa mení z vektora posunutia na viacero

vektorov posunutia.

3. Zadefinovať inciálnu úvodnú polohu nie je problém

Page 21: Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib · Seminár Robotika.SK Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib Andrej Lúčny Katedra

Príprava vzoriek

21

• Urobíme mnoho fotiek tvárí a označíme na ne potrebné

body, čím ich bude viac, tým lepšie to bude fungovať.

• Popíšeme pritom tiež kde na obraze sa tvár nachádza.

• Dlib používa 68

bodov

• Existujú voľne

dostupné datasety,

viď.

data/datasets

Page 22: Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib · Seminár Robotika.SK Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib Andrej Lúčny Katedra

Predspracovanie

22

• Remapujeme na štandardnú veľkosť

• Riešime tým zväčšenie či zmenšenie spracúvanej

tváre

Page 23: Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib · Seminár Robotika.SK Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib Andrej Lúčny Katedra

Iniciálny stav – priemer vzoriek

23

Page 24: Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib · Seminár Robotika.SK Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib Andrej Lúčny Katedra

24

• Ako relativizovať súradnice pixelov použitých pri

deliacich porovnávaniach voči aktuálnemu odhadu

landmarkov?

• Tvár na spracúvanom obraze môže byť posunutá i

mierne pootočená

aktuálny odhad iniciálny priemer

Riešenie:

Similarity

transform

Page 25: Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib · Seminár Robotika.SK Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib Andrej Lúčny Katedra

Similarity transform

25

• Je afínne zobrazenie, ktoré jednu sadu bodov čo

najpresnejšie umiestňuje na inú sadu bodov

• V našom prípade ide o momentálny odhad polohy

landmarkov a priemerné rozloženie landmarkov

(teoreticky by rovnako poslúžilo akékoľvek pevne

zvolené)

• Keď sa potom 68 landmarkov pozerá na dva

pixely umiestnené k nim podľa určitého vektora,

tak vlastne sa pozerá vždy na rovnaké súradnice

voči priemernému rozloženiu landmarkov na

obraze získanému cez similarity transform

(nemusíme samozrejme transformovať celý obraz,

len dva pixle)

Page 26: Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib · Seminár Robotika.SK Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib Andrej Lúčny Katedra

Features

26

• Pracuje sa s obrázkami 128x128, čo je stále veľmi

veľa možností pre dvojice prixelov, ktoré budeme

porovnávať

• Preto náhodne a spravodlivo vyberieme len určitý

počet pixelov a len tie používame na porovnávanie

• (pritom je to skôr počet súradníc pixelov)

Page 27: Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib · Seminár Robotika.SK Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib Andrej Lúčny Katedra

Trénovanie kaskádneho regresora

27

TrainRegression

• Po 5 minútach oznámi koľko to bude trvať,

cca dokopy 40 minút na 8 jadier + CUDA

• 10 kaskád

• v každej regresor

• v ňom 500

regresných stromov

hĺbky 4

• 400 pixelov

vybraných zo

128x128

• 20 pokusov pri

voľbe deliaceho

príznaku

Page 28: Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib · Seminár Robotika.SK Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib Andrej Lúčny Katedra

Použitie natrénovaného regresora

28

• Trénovanie trvá dlho, ale 10 x 500 x 4 porovnaní

pixelov pri použití je nič. Preto je veľmi rýchly, < 1ms

FacialLandmarks

Page 29: Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib · Seminár Robotika.SK Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib Andrej Lúčny Katedra

Ale kde je tvár?

29

• Regresoru musíme povedať kde na obrázku je tvár

• A to musíme zistiť nejakou inou metódou

• Dlib používa na tento účel HOG detektor

Page 30: Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib · Seminár Robotika.SK Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib Andrej Lúčny Katedra

30

One Millisecond Face Alignment with an Ensemble of

Regression Trees

Vahid Kazemi & Josephine Sullivan

KTH, Royal Institute of Technology

Computer Vision and Active Perception Lab

Teknikringen 14, Stockholm, Sweden

www.csc.kth.se/~vahidk/face/KazemiCVPR14.pdf

Autori metódy

Page 31: Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib · Seminár Robotika.SK Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib Andrej Lúčny Katedra

• Open source knižnica na

strojové učenie a počítačové

videnie

• Autor: Davis King

• Boost Software License

• Linux, Windows, Mac

• CUDA based

• Od roku 2002

Page 32: Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib · Seminár Robotika.SK Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib Andrej Lúčny Katedra

Použitie

Pokiaľ vieme pozíciu facial landmarkov,

dokážeme veľa vecí:

•Zvýšiť úspešnosť detekcie tvárí

•Sledovať ľudí, počítať ich

•Aplikovať na ich tvár rôzne filtre.

•Zistiť polohu hlavy, robot potom môže

človeka sledovať, alebo napodobňovať

Veľa pekných zdrojákov sa dá získať za registráciu zdarma z článkov na www.learnopencv.com

32

Page 33: Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib · Seminár Robotika.SK Ako naučiť robota vidieť ľudskú tvár pomocou knižnice Dlib Andrej Lúčny Katedra

Seminár Robotika.SK

Ako naučiť robota vidieť ľudskú tvár

pomocou knižnice Dlib

Andrej Lúčny

Katedra aplikovanej informatiky FMFI UK

[email protected]

http://dai.fmph.uniba.sk/w/Andrej_Lucny

Ďakujeme za pozornosť