Objekterkennung mit künstlichen neuronalen Netzen Frank Hallas und Alexander Butiu Universität Erlangen Nürnberg, Lehrstuhl für Hardware/Software CoDesign Multicorearchitectures and Programming Seminar, Sommersemester 2013
1. Motivation 2. Objekterkennung 3. neuronale Netze 3.1 natürliche neuronale Netze 3.2 künstliche neuronale Netze 4. Implementierung des Netzes 4.1 Modellbildung 4.2 Backpropagation-Algorithmus 4.3 Implementierung 4.4 Probleme 5. Vorstellung der Ergebnisse 5.1 Hardware 5.2 Messergebnisse 6. Ausblicke 2
1. Motivation Objekterkennung und verfolgung: vielfältige Anwendungsmöglichkeiten militärisch (Zielverfolgung) Kraftfahrzeuganwendungen (Fußgängererkennung) Robotikanwendungen (opt. Erfassung von Werkstücken, Spielzeug) 3
1. Motivation Einsatz von neuronalen Netzen Faszination von lernfähigen Computerprogrammen 4
1. Motivation 2. Objekterkennung 3. neuronale Netze 4. Implementierung des Netzes 5. Vorstellung der Ergebnisse 6. Ausblicke 5
2. Objekterkennung Aufgabe: Bekanntes Objekt in unbekannten Bildern wiedererkennen Probleme: - verschiedene Größen von Bildern - unterschiedliche Entfernung zum Objekt (Größe und Skalierung) - unterschiedliche Positionierung des Objekts in dem Bild 6
2. Objekterkennung Abtastung: Probleme: Welche Größenverhältnisse? Welchen Ausschnitt? gerichtete Abtastung und Skalierung oder zufällige Bildbetrachtung? 7
Gliederung 1. Grundidee 2. Objektverfolgung 3. Neuronale Netze 3.1 natürliche neuronale Netze 3.2 künstliche neuronale Netze 4. Implementierung des Netzes 5. Vorstellung der Ergebnisse 6. Ausblicke 8
3. Neuronale Netze 3.1 Neuronale Netze natürliche neuronale Netze 9
3. Neuronale Netze 3.2 Neuronale Netze künstliche neuronale Netze - Allgemein Eingangsgrößen float(0 1) Genereller Aufbau: Eingangsneuronen Hidden-Neuronen Ausgangsneuron float(0 1) 10
3. Neuronale Netze 3.2 Neuronale Netze künstliche neuronale Netze - Allgemein net j = Σ i (Eingangswert i * Gewicht ij ) F(net) = 1+e 1 net θ = float (0 1) θ Schwellwert Sigmoid-Aktivierungs-Funktion 11
3. Neuronale Netze 3.2 Neuronale Netze künstliche neuronale Netze Lernen erfolgt durch Gewichtsanpassung! Lernregeln: Hebb sche Lernregel Delta-Regel Backpropagation Verfahren (verwendete Lernregel) kompetitives Lernen 12
Gliederung 1. Grundidee 2. Objektverfolgung 3. Neuronale Netze 4. Implementierung des Netzes 4.1 Modellbildung 4.2 Backpropagation-Algorithmus 4.3 Implementierung 4.4 Probleme 5. Vorstellung der Ergebnisse 6. Ausblicke 13
4. Implementierung des Netzes 4.1 Modellbildung Genereller Aufbau: Bitmap Daten Eingangsneuronen: Schicht i Hidden-Neuronen: Schicht j F(net) Ausgangsneuronen: Schicht k float = pixel_value 255 F(net) Indizes ab hier i j k 14
4. Implementierung des Netzes 4.1 Modellbildung Modellbildung: Neuronenvektoren: Eingangsvektor Hiddenvektor Ausgangsvektor inputs[input_size] hidden[hidden_size] outputs[output_size] Gewichtsmatrizen: weights_ij [input_size][hidden_size] weights_jk [hidden_size][output_size] 15
4. Implementierung des Netzes 4.2 Backpropagation-Algorithmus Grundsätzliches: Ziel des Algorithmus ist es für bestimmte Eingangswerte (Lernvektoren) die Gewichte so anzupassen, dass ein gewünschter Ausgangswert erzeugt wird. Folglich Minimierung des Ausdrucks: Ausgangswert ist Ausgangswert soll Gewichtsanpassung propagiert vom Ausgang zum Eingang 16
4. Implementierung des Netzes 4.2 Backpropagation-Algorithmus Lernen erfolgt von der Ausgangsschicht in Richtung Eingangsschicht Gewichte werden inital zufällig mit Werten belegt (-0,5.0,5) Literaturvorgabe Anpassung der Gewichte mit den Formeln: w jk = η δ k O j w ij = η δ j O i θ j = η δ j Für x y mit: η: Schrittweite δ y : Ableitungsfaktor O x : Ausgangswert des Neurons x w xy : Gewichtsänderung von Neuron x in Richtung Neuron y 17
4. Implementierung des Netzes 4.2 Backpropagation-Algorithmus Berechnung von δ y Für ein Ausgangsneuron: δ k = O k (1 O k ) (O k t k ) Für ein Hiddenneuron: Mit: t k - Zielwert Minimierung von (O k t k ) δ j = O j 1 O j k K δ k wj k Ableitung der Sigmoid-Funktion: 1 1 (1 1 + e net+θ 1 + e net+θ) 18
4. Implementierung des Netzes 4.3 Implementierung in C++ for(int k = 0; k <= output_size - 1; k++){ delta_k[k] = outputs[k] * (1 - outputs[k]) * (outputs[k] - target[k]); } for(int j = 0; j <= hidden_size - 1; j++){ sum_d_w = 0; for(int k = 0; k <= output_size - 1; k++){ sum_d_w += delta_k[k] * weights_jk[j][k]; } delta_j[j] = hidden[j] * (1 - hidden[j]) * sum_d_w; } for(int k = 0; k <= output_size - 1; k++){ for(int j = 0; j <= hidden_size - 1; j++){ weights_jk[j][k] += -stepsize * delta_k[k] * hidden[j]; } } for(int j = 0; j <= hidden_size - 1; j++){ for(long int i = 0; i <= input_size- 1; i++){ weights_ij[i][j] += -stepsize * delta_j[j] * inputs[i]; } theta[j] += -stepsize * delta_j[j]; } CUDA 19
4. Implementierung des Netzes 4.3 Implementierung Abschätzung Eingangsgröße bei VGA-Auflösung: (Bsp.: 320 x 200 RGB) 320 x 200 x 3 = 192.000 Eingangsvektor: 192.000 Einträge Bei ca. 1 / 3 = Anzahl Hidden / Anzahl Eingänge (Richtwert) 64.000 Hidden-Neuronen 192.000 x 64.000 = 12.288.000.000 45,78 GB große Gewichtsmatrix (4 Byte float) Beschränkung der Hidden-Neuronen auf ca. 100 damit: 192.000 x 100 = 192.000.000 73,24 MB große Gewichtsmatrix 20
4. Implementierung des Netzes 4.3 Implementierung in CUDA global void adjust_weights(float *weights_i_o, float stepsize, float *delta_i_o, float *inputs, int width_max, long int height_max, size_t pitch) { } int idx = blockidx.x * blockdim.x + threadidx.x; int idy = blockidx.y * blockdim.y + threadidx.y; if ((idx < height_max) && (idy < width_max)){ long int index = idx * (pitch/sizeof(float)) + idy; weights_i_o[index] += -stepsize * delta_i_o[idy] * inputs[idx]; w xy = η δ y O x 21
4. Implementierung des Netzes 4.4 Probleme Netz lernte anfangs Bilder wiederzuerkennen aber Falschbilder nicht auszuschließen Lösung abwechselndes Lernen von Lernvektoren und Rauschen bei unterschiedlichen Outputs Ständiger Wechsel der Lernvektoren Häufige Aufrufe von cudamalloc() / cudamallocpitch() und cudamemcpy() / cudamemcpy2d() Bottleneck Geringe Anzahl an Hiddenneuronen kann u.u. zu schlechten Ergebnissen führen mehr Hiddenneuronen mehr Speicherverbrauch größere Ausführungszeit von cudamemcpy() Netz generell sensibel bzgl. der Parameter (zb. Zu große Schrittweite führt unweigerlich zu Oszillation) 22
Gliederung 1. Grundidee 2. Objektverfolgung 3. Neuronale Netze 4. Implementierung des Netzes 5. Vorstellung der Ergebnisse 5.1 Hardware 5.2 Messergebnisse 6. Ausblicke 23
5. Ergebnisse 5.1 Hardware CPU: Intel P6200 @2.13 GHz Intel Xeon E5640 @2.67 GHz AMD FX 8350 @4.0 GHz GPU: Tesla K20 2496 Stream Prozessoren 24
5. Ergebnisse 5.2 Messergebnisse Execution time in ms x1.625 Crossover Input_size K20 25
6. Ausblick Weitere Optimierungsmöglichkeiten Verlagerung aller Lerndaten in den GPU Speicher Portierung des gesamten Lernvorgangs, inklusive Lernvektorwechsel auf die GPU Gewichtmatrizen ebenfalls parallel anpassen, nicht wie bisher von Schicht zu Schicht Implementierung von Suchalgorithmen zur Objektverfolgung 26
Vielen Dank für ihre Aufmerksamkeit!