ako naučiť robota vidieť ľudskú tvár pomocou knižnice dlib · seminár robotika.sk ako...
TRANSCRIPT
![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](https://reader030.vdocuments.site/reader030/viewer/2022040713/5e19285974937e7c7b505064/html5/thumbnails/1.jpg)
Seminár Robotika.SK
Ako naučiť robota vidieť ľudskú
tvár pomocou knižnice Dlib
Andrej Lúčny
Katedra aplikovanej informatiky FMFI UK
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](https://reader030.vdocuments.site/reader030/viewer/2022040713/5e19285974937e7c7b505064/html5/thumbnails/2.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040713/5e19285974937e7c7b505064/html5/thumbnails/3.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040713/5e19285974937e7c7b505064/html5/thumbnails/4.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040713/5e19285974937e7c7b505064/html5/thumbnails/5.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040713/5e19285974937e7c7b505064/html5/thumbnails/6.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040713/5e19285974937e7c7b505064/html5/thumbnails/7.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040713/5e19285974937e7c7b505064/html5/thumbnails/8.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040713/5e19285974937e7c7b505064/html5/thumbnails/9.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040713/5e19285974937e7c7b505064/html5/thumbnails/10.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040713/5e19285974937e7c7b505064/html5/thumbnails/11.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040713/5e19285974937e7c7b505064/html5/thumbnails/12.jpg)
12
•P
rízn
ak b
y m
al b
yť
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](https://reader030.vdocuments.site/reader030/viewer/2022040713/5e19285974937e7c7b505064/html5/thumbnails/13.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040713/5e19285974937e7c7b505064/html5/thumbnails/14.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040713/5e19285974937e7c7b505064/html5/thumbnails/15.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040713/5e19285974937e7c7b505064/html5/thumbnails/16.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040713/5e19285974937e7c7b505064/html5/thumbnails/17.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040713/5e19285974937e7c7b505064/html5/thumbnails/18.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040713/5e19285974937e7c7b505064/html5/thumbnails/19.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040713/5e19285974937e7c7b505064/html5/thumbnails/20.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040713/5e19285974937e7c7b505064/html5/thumbnails/21.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040713/5e19285974937e7c7b505064/html5/thumbnails/22.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040713/5e19285974937e7c7b505064/html5/thumbnails/23.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040713/5e19285974937e7c7b505064/html5/thumbnails/24.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040713/5e19285974937e7c7b505064/html5/thumbnails/25.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040713/5e19285974937e7c7b505064/html5/thumbnails/26.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040713/5e19285974937e7c7b505064/html5/thumbnails/27.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040713/5e19285974937e7c7b505064/html5/thumbnails/28.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040713/5e19285974937e7c7b505064/html5/thumbnails/29.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040713/5e19285974937e7c7b505064/html5/thumbnails/30.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040713/5e19285974937e7c7b505064/html5/thumbnails/31.jpg)
• 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](https://reader030.vdocuments.site/reader030/viewer/2022040713/5e19285974937e7c7b505064/html5/thumbnails/32.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040713/5e19285974937e7c7b505064/html5/thumbnails/33.jpg)
Seminár Robotika.SK
Ako naučiť robota vidieť ľudskú tvár
pomocou knižnice Dlib
Andrej Lúčny
Katedra aplikovanej informatiky FMFI UK
http://dai.fmph.uniba.sk/w/Andrej_Lucny
Ďakujeme za pozornosť