Upload
duongphuc
View
229
Download
0
Embed Size (px)
Citation preview
Viola-Jones Gesichtserkennung mitWebGL
Tobias Groß, Björn Meier
Hardware/Software Co-Design, University of Erlangen-Nuremberg
18. Juli 2013
Outline
Motivation
Viola-JonesFunktionsweiseBlockbewertungIntegralbildPhasen
Implementierung GPUEinschränkungen und Besonderheiten von WebGLImplementierung mit WebGL
EvaluierungBeispieleAuswertungFazit
18. Juli 2013 | Tobias Groß, Björn Meier | Hardware/Software Co-Design | Viola-Jones mit WebGL 2
Motivation
Verwendung von Gesichtserkennung:
• Bei der Fotografie (Fokussierung)• Zuordnung von Personen auf Bildern• Automatisierte Überwachung
Herausforderungen:
• Fehlerkennung vermeiden• Laufzeit der Erkennung verringern
Lösungsansatz:
• Viola Jones zur Gesichtserkennung einsetzen• Algorithmen auf der GPU ausführen
18. Juli 2013 | Tobias Groß, Björn Meier | Hardware/Software Co-Design | Viola-Jones mit WebGL 3
Outline
Motivation
Viola-JonesFunktionsweiseBlockbewertungIntegralbildPhasen
Implementierung GPUEinschränkungen und Besonderheiten von WebGLImplementierung mit WebGL
EvaluierungBeispieleAuswertungFazit
18. Juli 2013 | Tobias Groß, Björn Meier | Hardware/Software Co-Design | Viola-Jones mit WebGL 4
Funktionsweise
• Bild wird blockweise untersucht(hier Blockgröße von 24x24px)• Dabei ist jeder Block ein
potentielles Gesicht• Um Gesichter unterschiedlicher
Größe zu erkennen, wird das Bildskaliert.• Blockgröße bleibt konstant!
TrainingTrainingsalgorithmus ermittelt Wertefür Schwellenwerte, Filter, etc.Hier wurde keineTrainingsalgorithmus implementiert.Es wurden schon berechnete Werteverwendet.
18. Juli 2013 | Tobias Groß, Björn Meier | Hardware/Software Co-Design | Viola-Jones mit WebGL 5
Skalierung
while image_size >= block_window_size docalculate integralimagefor all stages do
stage_sum = 0for all filter in stage do
filter_value = calculate filterif filter_value > filter_threshold then
stage_sum += filter_alpha2else
stage_sum += filter_alpha1if stage_sum < stage_threshold
face = -1break
elseface = 1
if face == 1face detected
scale image
18. Juli 2013 | Tobias Groß, Björn Meier | Hardware/Software Co-Design | Viola-Jones mit WebGL 6
Blockbewertung
Haar Filter• Bestehen aus 2 bis 4 Flächen• Flächenwert berechnet sich aus
Pixelwertsumme• Wert eines Filters berechnet sich,
indem die hellen Flächen vonden dunklen subtrahiert werden• Filter wird positiv gewertet, wenn
festgelegter Schwellenwertüberschritten ist• Haar Filter ermöglichen es,
entweder Kanten oderHelligkeitsunterschiede zuerkennen
18. Juli 2013 | Tobias Groß, Björn Meier | Hardware/Software Co-Design | Viola-Jones mit WebGL 7
Integralbild
Wofür wird es benötigt?
• Ermöglicht die Berechnung der Pixelwertsumme einer Fläche durch dieBetrachtung von 4 Werten• Dies ist deutlich performanter, als das Aufsummieren aller Pixel einer
Teilfläche
Aufbau:
Abbildung: Quelle: http://www12.informatik.uni-erlangen.de/edu/map/ss11/talks/violajones.pdf18. Juli 2013 | Tobias Groß, Björn Meier | Hardware/Software Co-Design | Viola-Jones mit WebGL 8
Integralbild
Pixelwertsummenberechnung
Benötigte Fläche S:
S = B−C−D+A18. Juli 2013 | Tobias Groß, Björn Meier | Hardware/Software Co-Design | Viola-Jones mit WebGL 9
Filterberechnung
while image_size >= block_window_size docalculate integralimagefor all stages do
stage_sum = 0for all filter in stage do
filter_value = calculate filterif filter_value > filter_threshold thenstage_sum += filter_alpha2
elsestage_sum += filter_alpha1
if stage_sum < stage_thresholdface = -1break
elseface = 1
if face == 1face detected
scale image
18. Juli 2013 | Tobias Groß, Björn Meier | Hardware/Software Co-Design | Viola-Jones mit WebGL 10
Phasen
• Eine Phase gruppiert mehrere Haar Filter• Jeder Filter wird hierbei gewichtet (je ein Wert für positive/negative
Erkennung)• Summe dieser Werte ergibt den Wert der Phase• Dieser Wert wird mit dem Schwellenwert verglichen und entscheidet über die
positive oder negative Erkennung eines Gesichts in einem Block• Wird eine Phase als negativ gewertet, wird der gesamte Block sofort
verworfen• Bei positiver Bewertung wird die nächste Phase ausgeführt• Werden alle Phasen positiv durchlaufen, befindet sich ein Gesicht im
aktuellen Block
18. Juli 2013 | Tobias Groß, Björn Meier | Hardware/Software Co-Design | Viola-Jones mit WebGL 11
Phasen
18. Juli 2013 | Tobias Groß, Björn Meier | Hardware/Software Co-Design | Viola-Jones mit WebGL 12
Phasen
while image_size >= block_window_size docalculate integralimagefor all stages do
stage_sum = 0for all filter in stage do
filter_value = calculate filterif filter_value > filter_threshold then
stage_sum += filter_alpha2else
stage_sum += filter_alpha1if stage_sum < stage_thresholdface = -1break
elseface = 1
if face == 1face detected
scale image
18. Juli 2013 | Tobias Groß, Björn Meier | Hardware/Software Co-Design | Viola-Jones mit WebGL 13
Outline
Motivation
Viola-JonesFunktionsweiseBlockbewertungIntegralbildPhasen
Implementierung GPUEinschränkungen und Besonderheiten von WebGLImplementierung mit WebGL
EvaluierungBeispieleAuswertungFazit
18. Juli 2013 | Tobias Groß, Björn Meier | Hardware/Software Co-Design | Viola-Jones mit WebGL 14
Einschränkungen und Besonderheiten von WebGL
Frei lesbarer SpeicherZusätzliche Daten werden im Shader durch Texturpuffer bereitgestellt.Diese bestehen jedoch aus vec4 (4 Bytes). Werte, die nicht in ein Byte passen,müssen geteilt und in den 4 Bytes kodiert werden.Lesen vom Texturpuffer und Schreiben von Ergebnissen erzeugt durch dieKodierung/Dekodierung zusätzlichen Overhead.
Undefiniertes Verhalten• Browser verhalten sich nicht gleich• Genauigkeit highp wird nicht von jeder/m Hardware/Treiber unterstützt⇒
Überlauf
18. Juli 2013 | Tobias Groß, Björn Meier | Hardware/Software Co-Design | Viola-Jones mit WebGL 15
Einschränkungen und Besonderheiten von WebGL
Schleifengrenzen müssen statisch seinProvisorische Lösung:
for (int i = 0; i < 300; ++i) {if (i >= act_num_filter) {
break;}...
}
Keine Bitoperatoren verfügbarDie Bitoperatoren und (&), oder (|), exklusives oder (^), nicht (~), rechts schieben(> >), links schieben (< <) sind nicht verfügbar
multiply 255.0 bug
18. Juli 2013 | Tobias Groß, Björn Meier | Hardware/Software Co-Design | Viola-Jones mit WebGL 16
Implementierung mit WebGL
18. Juli 2013 | Tobias Groß, Björn Meier | Hardware/Software Co-Design | Viola-Jones mit WebGL 17
Integralberechnung GPU
Zwei Phasen:• Reihenweise Addition• Spaltenweise Addition
Problem:• Es können keine umliegenden
Werte verändert werden.• Für jeden zu ändernden Wert
muss ein Shader aufgerufenwerden.• Jeder Shader muss alle
benötigten Werte berechnen.
⇒ Es werden Werte vielfachberechnet.
18. Juli 2013 | Tobias Groß, Björn Meier | Hardware/Software Co-Design | Viola-Jones mit WebGL 18
Parallele Erkennung
Jede Blockposition ist eineeigene Aufgabe:Anzahl Blockpositionen:(Breite−Blockbreite+1)×(Hohe−Blockhohe+1)Jeder Block wird in einem eigenemShader berechnet.
Problem:Die Größe des Speicherbereichs mit den Ergebnissen entspricht der AnzahlBlöcke.Jedoch: gefundene Gesichter � SpeicherbereichDer gesamte Speicherbereich muss zur Auswertung auf den Host kopiertwerden.⇒ unnötige Daten müssen zwischen Host und GPU kopiert werden.
18. Juli 2013 | Tobias Groß, Björn Meier | Hardware/Software Co-Design | Viola-Jones mit WebGL 19
Outline
Motivation
Viola-JonesFunktionsweiseBlockbewertungIntegralbildPhasen
Implementierung GPUEinschränkungen und Besonderheiten von WebGLImplementierung mit WebGL
EvaluierungBeispieleAuswertungFazit
18. Juli 2013 | Tobias Groß, Björn Meier | Hardware/Software Co-Design | Viola-Jones mit WebGL 20
Beispiele
Hardware:Intel Core i5 CPU 750 @ 2.67GHzATI Radeon HD 5850
Beispiel 1: 1100×750 Pixel
18. Juli 2013 | Tobias Groß, Björn Meier | Hardware/Software Co-Design | Viola-Jones mit WebGL 21
CPU: 2609 ms und 307 TrefferS
chrit
t
Inte
gral
Det
ektio
n
Ges
amt
1 147 639 786 ms2 98 480 579 ms3 72 325 397 ms4 52 211 263 ms5 39 147 186 ms6 27 101 128 ms7 14 68 82 ms8 14 46 60 ms9 9 33 42 ms10 6 21 27 ms11 5 14 19 ms12 4 9 13 ms13 3 6 9 ms14 2 3 5 ms15 2 1 3 ms16 2 1 3 ms17 0 1 1 ms18 1 0 1 ms19 1 0 1 ms
GPU: 2175 ms und 277Treffer
Sch
ritt
Hos
t-GP
U
Inte
gral
Det
ektio
n
GP
U-H
ost
Ges
amt
1 253 177 290 35 799 ms2 57 73 227 25 417 ms3 39 47 166 20 295 ms4 28 30 76 18 165 ms5 23 19 39 15 106 ms6 19 13 26 12 80 ms7 13 9 18 9 56 ms8 14 7 20 6 52 ms9 11 5 13 4 37 ms10 8 6 9 4 30 ms11 6 5 21 3 37 ms12 4 5 7 2 20 ms13 2 4 6 2 16 ms14 2 5 3 1 13 ms15 2 4 2 2 10 ms16 2 4 2 1 9 ms17 1 3 3 1 9 ms18 1 3 3 1 9 ms19 1 4 2 1 8 ms
18. Juli 2013 | Tobias Groß, Björn Meier | Hardware/Software Co-Design | Viola-Jones mit WebGL 22
Beispiel 2: 600×337 Pixel
18. Juli 2013 | Tobias Groß, Björn Meier | Hardware/Software Co-Design | Viola-Jones mit WebGL 23
CPU: 514 ms und 24 Treffer
Sch
ritt
Inte
gral
Det
ektio
n
Ges
amt
1 82 115 197 ms2 29 78 107 ms3 21 48 69 ms4 11 30 41 ms5 8 20 28 ms6 6 13 19 ms7 5 9 14 ms8 4 6 10 ms9 2 4 6 ms10 1 3 4 ms11 1 9 10 ms12 1 2 3 ms13 1 2 3 ms14 0 1 1 ms15 0 0 0 ms
GPU: 640 ms und 25 Treffer
Sch
ritt
Hos
t-GP
U
Inte
gral
Det
ektio
n
GP
U-H
ost
Ges
amt
1 47 54 85 21 216 ms2 24 17 32 12 95 ms3 14 9 17 7 55 ms4 15 8 15 6 50 ms5 12 6 8 4 35 ms6 9 6 6 3 27 ms7 6 5 4 3 21 ms8 5 5 4 2 18 ms9 4 4 4 1 15 ms10 2 5 4 1 13 ms11 2 4 14 2 23 ms12 2 4 15 1 22 ms13 1 4 14 1 21 ms14 1 4 13 1 20 ms15 0 4 1 1 7 ms
18. Juli 2013 | Tobias Groß, Björn Meier | Hardware/Software Co-Design | Viola-Jones mit WebGL 24
Beispiel 3: 3630×2230 Pixel
18. Juli 2013 | Tobias Groß, Björn Meier | Hardware/Software Co-Design | Viola-Jones mit WebGL 25
CPU: 25247 ms und 1111Treffer
Sch
ritt
Inte
gral
Det
ektio
n
Ges
amt
1 1165 7130 8295 ms2 811 4717 5528 ms3 588 2944 3532 ms4 443 1910 2353 ms5 290 1342 1632 ms6 197 854 1051 ms7 187 588 775 ms8 109 450 559 ms9 70 369 439 ms10 55 266 321 ms11 42 171 213 ms12 25 97 122 ms13 20 64 84 ms14 15 41 56 ms15 11 31 42 ms16 7 20 27 ms17 5 13 18 ms18 3 8 11 ms19 3 6 9 ms20 2 3 5 ms21 2 2 4 ms22 1 1 2 ms23 1 1 2 ms24 1 0 1 ms25 1 0 1 ms
GPU: 18131 ms und 1097Treffer
Sch
ritt
Hos
t-GP
U
Inte
gral
Det
ektio
n
GP
U-H
ost
Ges
amt
1 1721 3780 779 421 7140 ms2 573 1715 591 221 3257 ms3 516 1084 484 155 2349 ms4 284 657 368 83 1470 ms5 198 392 272 63 989 ms6 137 231 218 49 679 ms7 95 139 216 43 523 ms8 66 85 211 31 417 ms9 48 52 187 22 332 ms10 35 31 154 19 248 ms11 26 21 93 18 165 ms12 19 14 51 13 104 ms13 15 10 18 9 61 ms14 14 7 18 7 50 ms15 11 6 14 4 39 ms16 9 6 8 4 30 ms17 7 5 7 2 25 ms18 4 6 4 2 19 ms19 4 4 4 2 15 ms20 2 5 4 2 15 ms21 2 5 2 2 12 ms22 1 4 3 1 10 ms23 1 5 2 1 10 ms24 1 5 2 1 9 ms25 0 4 3 1 9 ms
18. Juli 2013 | Tobias Groß, Björn Meier | Hardware/Software Co-Design | Viola-Jones mit WebGL 26
Auswertung
Speedup S:
0.8 < S < 1.5
Identifizierte Probleme• Host - GPU Kopieroperationen• Größe der Speicherbereiche für Ergebnisse• Umrechnung von 4 Byte Vektoren in Integer und umgekehrt• Um Werte zu schreiben muss ein Shader aufgerufen werden
Verbesserungsmöglichkeiten
• Bildskalierung auf der GPU→ ab Schritt 2 entfällt die Kopieroperation auf dieGPU• Block skalieren statt dem Bild→ erneute Integralberechnung entfällt
18. Juli 2013 | Tobias Groß, Björn Meier | Hardware/Software Co-Design | Viola-Jones mit WebGL 27
References
[1] 5KK73 GPU 2012.5kk73 gpu assignment 2012, 2012.[Online; accessed 19-Jul-2013].
[2] Paul Viola and Michael Jones.Robust real-time face detection.International Journal of Computer Vision, 57:137–154, 2004.
18. Juli 2013 | Tobias Groß, Björn Meier | Hardware/Software Co-Design | Viola-Jones mit WebGL 28