Challanges for Driver Assistance Systems Car Detection using Local Orientation Coding and Bayesian Classification
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
Seminar Bildverstehen und Mustererkennung Challanges for Driver Assistance Systems Car Detection using Local Orientation Coding and Bayesian Classification Westfälische Wilhelmsuniversität Münster Fachbereich Mathematik und Informatik Institut für Informatik bearbeitet von Christoph Bartenhagen Matrikelnr.: 321626 Wintersemester 07/08
Inhaltsverzeichnis Kapitel 1 Einführung 2 1.1 Computer Vision . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 Ein paar Worte zu dieser Arbeit . . . . . . . . . . . . . . . . . 3 Kapitel 2 Hypothesis Generation – Local Orientation Coding 4 2.1 Die Labels . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.2 Thresholding . . . . . . . . . . . . . . . . . . . . . . . . 5 2.3 Die Ausführung . . . . . . . . . . . . . . . . . . . . . . . 6 2.4 Generation der Hypothese . . . . . . . . . . . . . . . . . . . 7 Kapitel 3 Hypothesis Verification – Der Bayes-Klassifikator 9 3.1 Wieso Bayes ? . . . . . . . . . . . . . . . . . . . . . . . . 9 3.2 Die Stichprobe . . . . . . . . . . . . . . . . . . . . . . . . 9 3.3 Die Merkmale . . . . . . . . . . . . . . . . . . . . . . . . 9 3.4 Das Training . . . . . . . . . . . . . . . . . . . . . . . . 10 3.5 Die Klassifikation . . . . . . . . . . . . . . . . . . . . . . 11 3.6 Ein Ergebnis . . . . . . . . . . . . . . . . . . . . . . . . 11 Kapitel 4 Diskussion 12 4.1 Erfahrungen mit Local Orientation Coding . . . . . . . . . . . . . 12 4.2 Erfahrungen mit der Bayes-Klassifikation . . . . . . . . . . . . . 14 4.3 Performance . . . . . . . . . . . . . . . . . . . . . . . . . 15 4.4 Das Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Quellenverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . 17 1
Kapitel 1 Einführung 1.1 Computer-Vision: Einem Computer das Sehen beibringen Am Anfang steht das Bild. Für den Computer zunächst nur eine rechteckige Sammlung unzusammenhängender Pixel, einer Matrix aus Farb- oder Grauwerten. Was kann dieses Bild bedeuten ? Was stellt es dar ? Die Klassifikation von Bildern als Teilgebiet der Computer-Vision versucht dies zu beantworten indem es mögliche Bildinhalte in Klassen zusammenfasst und versucht Bilder oder Auschnitte diesen Klassen zuzuordnen. Eine Sparte sogenannter Advanced Driver Assistence Systems (ADAS) macht es sich zur Aufgabe aus Bildern Fahrzeuge herauszulesen. Es soll errechnet werden wo im Bild sich z.B. Autos befinden. Ein drittes Auge als Frühwarnsystem: Den Fahrer benachrichtigen oder selbst navigierend (z.B. bremsend) in den Verkehr eingreifen. Weiterführende Berechnungen bezüglich Distanzen zwischen den Fahrzeugen, deren Geschwindigkeiten, oder genaueren Klassifikationen z.B. hinsichtlich Fahrtrichtung etc. sind denkbar und möglich. Die Bilder sind in diesem Zusammenhang oftmals Aufnahmen direkt aus dem Fahrzeug. Eine oder mehr Kameras filmen die Fahrbahn und liefern das Bildmaterial zur Klassifikation. Einer Klassifikation hinsichltich zweier Klassen: Fahrzeug und kein Fahrzeug (sprich Umgebung). Doch wie lernt nun der Computer wie ein Fahrzeug aussieht ? Was macht ein Fahrzeug aus ? Und besonders wichtig hinsichtlich der Klassifikation: Was unterscheidet es von seiner Umgebung ? Merkmale eines Autos die für die Wahrnehmung des Menschen selbstverständlich sind müssen für den Computer von Grund auf neu erdacht und definiert werden.: ● Textur/Farben: Autos besitzen oft sich wiederholende homogene oder gleichmäßig gemusterte Flächen gleicher Farbe. ● Schatten: Bei guter Beleuchtung (hellichtem Tag) besitzen Autos einen Schatten, d.h. stark schwankende Intensitäten der Farbwerte weisen auf Hindernisse wie ein Fahrzeug hin. ● Licht: Gerade bei Detektionen bei Dunkelheit kann es hilfreich sein die Vorder- und Rücklichter von Autos zu betrachten. ● Symmetrie: Autos sind oftmals sowohl von vorne als auch von hinten sowie horizontal wie vertikal symmetrisch aufgebaut. ● Kanten: Viele Autos haben eine schlichte rechteckige Form und besitzen vorwiegend vertikale und vor allem horizontale Kanten (Scheiben, Stoßstangen, Nummernschild, etc.). Die Detektion von Autos in Bildern gliedert sich meistens in zwei Schritte: Hypothesis Generation (HG): Diese erste Maßnahme stellt unter obigen Merkmalen (einzeln oder in Kombination) eine Hypothese auf, wo sich im Bild ein Fahrzeug befinden könnte. Hypothesis Verification (HV): Die Hypothese kann oftmals falsch sein. Denn bei komplexen Bildinhalten können fremde Objekte auch schnell Merkmale von Autos annehmen: Schatten anderer Hindernisse wie Fußgängern oder Kanten von Häusern, Schildern oder Fahrbahnmakierungen etc.. Deswegen wird die Hypothese unter Betrachtung bestimmter Merkmale einem Klassifikator (oftmals Neuronale Netze, Support Vektor Machines, oder Bayes) unterworfen, welcher abschließend möglichst verlässlich ihre Identität klären soll. 2
1.2 Ein paar Worte zu dieser Arbeit Es exisitieren nur wenige frei verfügbare, bewährte wissenschaftliche Arbeiten und geprüfte Veröffentlichungen (beispielsweise von Automobilherstellern) zu diesem Thema, welche einen nötigen Detailgrad aufweisen, welcher eine Realisierung im Umfang eines Seminars möglich machen würde. Die Quelle Diese Arbeit stützt sich bei der Generation der Hypothese (HG) auf einen technischen Report von Christian Goerick vom Institut für Neuroinformatik in Bochum (siehe Quellen [1] und [2]), welcher eine Methode names „Local Orientation Coding“ (LOC) vorstellt. Dieser Ansatz fußt auf Letzterem der obigen Merkmale aus 1.1, d.h. er versucht Autos anhand deren horizontalen und vertikalen Kanten zu detektieren. Der folgende Aufbau Im folgenden Kapitel 2 wird im Zuge der Generierung der Hypothese (HG) somit auf die theoretische Funktionsweise der LOC-Methode eingegangen. Kleinere Abweichungen werden aber schon bei der Anwendung des Operators auftreten, wenn es darum geht potentielle Autos einzurahmen. Die eingrahmten Bildregionen müssen wie beschrieben in einem zweiten Schritt verifiziert werden (HV). Abweichend von obigem Report wird dazu statt eines Neuronalen Netzes ein Bayes-Klassifikator herangezogen. Das Kapitel 3 wird dazu die nötigen Implementierungsdetails verraten. Abschließend wird in Kapitel 4 auf die Stärken und Schwächen des LOC-Operators eingegangen. Probleme, welche während der Implementierung, der Klassifikation und des Testens auftraten werden diskutiert und münden in ein abschließendes Fazit. Technische Details Der gesamte Algorithmus wurde in Java (1.6.003, Version 6 Update 3) mit der Netbeans Entwicklungsumgebung (Version 5.51) unter Windows XP implementiert und liegt dieser Arbeit als Quellcode bei. Zur nötigen Bildverarbeitung wurde auf die Java-Bibliothek JAI (Java Advanced Imaging, Version 1.1.3) zurückgegriffen. Sie ist für die Ausführung des Programms unabdingbar. Die Wahl dieser Bibliothek beruht auf der Unterstützung mehrer Bildformate und auf der einfachen Verfügbarkeit diverser Bildverarbeitungsoperatoren wie Schärfung, Glättung, Ausschneiden, Skalieren und Farbkonvertierungen im Zuge der Implementierung, des Testens und der Optimierung. 3
Kapitel 2 Hypothesis Generation - Local Orientation Coding Der LOC-Ansatz ist ein Detektor für Kanten in einem Grauwertbild sowie deren Richtung. Kanten in einem Bild sind Regionen in denen es starke Schwankungen bei Grauwerten gibt. Das bedeutet: Der Operator berechnet zum Bild eine Matrix, in welcher starke Änderungen benachbarter Grauwerte in grobe vier Richtungen (0° bzw. 360°, 90°, 180° und 270°) durch ein Label markiert werden, welches zudem noch Informationen über die Orientierung der Kante gibt. Homogene Bereiche im Bild ohne starke Unterschiede zwischen benachbarten Bildpunkten werden somit aussortiert. Im besten Fall sollte sich also das Auto mit all seinen auffälligen Kanten wie einleitend beschrieben durch besonders viele Markierungen in der LOC-Matrix bemerkbar machen. 2.1 Der LOC-Operator im Detail – Die Labels Sei zunächst ein Grauwertbild (MxN-Bildmatrix) I gegeben mit Grauwert I(m,n) an den Koordinaten m und n mit dem Ursprung (0,0) oben links im Bild. Anders als bei dem üblichen Kantendetektor per Gradientenbildung findet bei der LOC-Operation keine Faltung statt. Es wird lediglich über das Bild iteriert und Pixel werden verglichen: Für jeden Pixel (dem sogenannten Referenzpixel R) im Bild wird ein Vergleich mit seinen vier Nachbarn (oben, unten, links, rechts) angestrebt. Ist der Unterschied im Grauwert groß genug, d.h. die Distanz der Grauwerte größer als ein vorgegebener Grenzwert t, so wird R als Kantenpunkt durch ein Label aus einer 3x3-Label-Matrix analog zur Pixelrichtung des Nachbarn von R = I(r,c) aus markiert: I(m-1, n) 0 1 0 Nachbarschaft: I(m, n-1) R I(m, n+1) LOC-Label-Matrix: L = 2 R 4 I(m+1, n) 0 8 0 Genügen mehrere Nachbarn dem Grenzwert t so werden die Labels aufaddiert: Für eine Nachbarschaft N aus vier Pixeln (bzw. der Richtung der vier Nachbarpixel: links (0,-1), rechts (0,1), oben (-1,0) und unten (1,0)) ergibt sich somit das Label I'(m,n) = ∑ (i,j) aus N { L(i,j), falls I(m,n) - I(m + i,n + j) t 0 , sonst } Daraus ergeben sich 16 verschiedene mögliche Labelmarkierungen (0 bis 15; insbesondere 0 für homogene Regionen). 4
Hinsichtlich Autos interessieren uns nur horizontale und vertikale Kanten mit entsprechenden Labels: Horizontale Kanten: Die Pixel links und rechts sind im Grauwert ähnlich zu R, die Grauwerte oben und/oder unten haben eine genügend große Distanz zu R. Dies entspricht Labelmarkierungen 1, 8 und (insbesondere) 9. Vertikale Kanten: Die Pixel oben und unten sind im Grauwert ähnlich zu R, die Grauwerte links und/oder rechts haben eine genügend große Distanz zu R. Dies entspricht Labelmarkierungen 2, 4 und (insbesondere) 6. Dies vereinfacht den Prozess der HG: Man kann sich auf Markierungen 1,8,9 bzw. 2,4,6 beschränken wenn man sich auf die Suche nach den Fahrzeugen macht. Eines fehlt noch: Es wurde häufig ein Grenzwert t genannt, welchen die Distanz zweier benachbarter Grauwerte überschreiten muss. Wo kommt dieser Grenzwert her ? Der folgende Abschnitt geht der Sache auf den Grund. 2.2 Der LOC-Operator im Detail – Thresholding Der Grenzwert (Threshold) sagt aus wie signifikant eine Kante minimal sein muss um als solche akzepiert zu werden. Er sorgt somit dafür, dass homogene Regionen mit nur schwachen Grauwertschwankungen nicht als Kanten markiert werden. Dazu bietet sich nun an die kleinste Grauwertdifferenz der am wenigsten signifikanten Kontur im Bild herzunehmen. Es lohnt sich zudem präziserweise für alle vier (Kanten-)Richtungen einen eigenen Grenzwert zu berechnen. Dazu zählt man zunächst pro Kantenrichtung ((0,-1),(0,1),(-1,0),(1,0)) alle vorkommenden Differenzen (-255 bis 255) mittels eines Histogramms H: M-1-i N-1-j H i,j (d) = ∑∑ m=0 n=0 {1,0, falls sonst I(m,n) - I(m + i,n + j) = d } Ein Beispielhistogramm zeigt Abbildung 1. Alle Histogramme weisen ähnliche Formen auf, denn: Die Anhäufung an der Differenz 0 kommt durch (viele) homogene Regionen im Bild zustande. Die weiteren (kleinen) Maxima und Minima zeugen von vielen unterschiedlichen Kanten im Bild. Zur Bestimmung des Grenzwertes genügt es die positiven Differenzen zu betrachten: Die am wenigsten signifikante Kante ist die kleinste Kante mit den geringsten Grauwertdifferenzen. Dies ist äquivalent zum ersten lokalen Minimum im Abbildung 1: Ein Histogramm der Grauwertdifferenzen Histogramm rechts von 0. Die Differenz an welcher das Minimum liegt soll der Grenzwert für die Richtung (i,j) werden. 5
Die positiven Differenzen der Gegenrichtung (-i,-j) entsprechen den negativen Differenzen der Hinrichtung (i,j). Das bedeutet: Es genügt es für die Gegenrichtung (-i,-j) das den Betrag des erstes Minimums links von 0 zu suchen. Es müssen also lediglich zwei Histogramme berechnet werden um alle vier Grenzwerte zu bestimmen. 2.3 Der LOC-Operator im Detail – Die Ausführung Führt man nun abschließend die Erkenntnisse aus 2.1 und 2.2 zusammen so ergibt sich folgende Rechenvorschrift für eine LOC-Label-Matrix mit sämtlichen Label-Markierungen: I Label (m,n) = i j { ∑ ∑ L(i,j) ⋅ 1, 0, I(m,n) - I(m + i,n + j) t(i,j) sonst } (i,j) Richtungen aus Nachbarsch. N Wobei t die Grenzwert-Matrix ist mit t(i,j) = Grenzwert in Richtung (i,j). Man erhält also eine neue Matrix I' mit Werten zwischen 0 und 15. Das folgende Beispiel (Abbildung 2) illustriert dies nun anhand einer Autobahnszene samt Labelbild in welchem alle für diese Arbeit interessanten horizontalen Labels (1,8,9) und vertikalen Labels (2,4,6) schwarz markiert wurden: Abbildung 2: Autobahnaufnahme und angewandter LOC-Operator Man erkennt an diesem Beispiel: Horizontale und vertikale Strukturen wie die Autos aber auch Straßenlaternen und Leitplanken und zum Teil Bäume werden wie geplant hervorgehoben. Homogene Regionen wie der Himmel oder die Straße enthalten wenige bis gar keine derartige Kanteninformationen. Der LOC-Operator hat seine Arbeit getan. Nun gilt es in dem erhaltenen Kantenbild die Autos aufzuspüren. Es folgt nun die Generation der Hypothese. 6
2.4 Generation der Hypothese – Wo sind die Autos ? Von nun an wird es in dieser Arbeit spezieller: Diese Implementierung des Algorithmus ist auf Aufnahmen der Quelle[5] abgestimmt worden. Der Erfolg der Methode hängt nun stark von der weiteren Parametrisierung ab, welche wiederum auf der Montage der Kamera (Position, Blickwinkel etc.) und der Qualität des Bildmaterials beruht . Standardmäßig werden die Bilder zunächst von ihrer Anfangsgröße von 800x600 Pixeln auf 400x300 Pixel skaliert. Die Suche nach den Autos kann nun beginnen: Die Idee hinter dem LOC-Operator ist wie eingangs erwähnt, die Detektion von Fahrzeugen anhand wiederholt auftretender horizontaler und vertikaler Strukturen. Es bietet sich also nun an die berechnete Label-Matrix ILabel nach dem Auftreten der Labels 1,8,9 und 2,4,6 zu durchsuchen: Vorab gilt es somit horizontale Labels zeilenweise und vertikale Labels spaltenweise zu zählen. Dies geschieht ähnlich wie beim Thresholding in 2.2 durch Histogramme. D.h. es werden berechnet: Zeilenhistogramm: 3x300-Matrix , welche für jede Zeile die Anzahl an Labels 1,8 und 9 enthält. Spaltenhistogramm: 3x400-Matrix, welche für jede Spalte die Anzahl an Labels 2,4 und 6 enhält. Da nur zwischen honizontal und vertikal unterschieden wird, werden Anzahlen die in den Histogrammen der Einfachheit halber zu 1x300- bzw. 1x400-Matrizen (-Vektoren) aufaddiert. Eine Region um ein potentielles Auto ist sinnvollerweise rechteckig, d.h. sie besteht aus vier Grenzen (untere, obere, linke und rechte Grenze). Deshalb gliedert sich das Finden dieser Region in vier Schritte: Finde zuerst die untere Grenze Suche im Zeilenhistogramm von unten nach oben nach der ersten Zeile, wessen Anzahl horizontaler Labels einem Grenzwert genügt. Anschaulich ist dieser Grenzwert also die minimale Breite (in Pixeln), die ein Auto aufweisen soll. Da die Autos, je höher sie im Bild auftauchen, immer kleiner werden bietet es sich dabei an diesen Grenzwert dynamisch in Abhängigkeit von der betrachteten Zeile zu veranschlagen: In etwa ein Fünftel oder ein Zehntel des Zeilenindexes hat sich bewährt (bei Zeile 200 also z.B. 40 oder 20 Pixel). Aufgrund der Kameraposition (zu sehen z.B. in Abbildung 2 oben) kann man bei der Suche die Bereiche im unteren Fünftel (Motohaube) und der oberen Hälfte (Himmel) unangetastet lassen. Finde die obere Grenze Die obere Grenze lässt sich erfahrungsgemäß schätzen: Ein Auto ist in der Regel ungefähr so hoch wie breit. Deshalb liefert die oben erhaltene minimale Breite in der Regel die passendsten Höhen und besten Ergebnisse. Finde die linke Grenze Analog zur unteren Grenze wird nun das Spaltenhistogramm nach einer dem Grenzwert genügenden Spalte duchsucht. Doch zunächst ist etwas zu beachten: Damit senkrechte Störobjekte wie beispielsweise Schilder, Häuser oder Laternen das Ergebnis nicht verfälschen wird das Spaltenhistogramm erst jetzt berechnet und zwar eingeschränkt auf den Bildbereich zwischen der oberen und unteren Grenze; die Störfaktoren der weiteren Umgebung werden also ausgeblendet. Analog zu den Überlegungen bei der oberen Grenze wird hier der Grenzwert auf die minimale Breite gesetzt. 7
Finde zuletzt die rechte Grenze Diese findet sich genauso wie die linke Grenze: Es wird die nächste dem Grenzwert genügende Spalte im (eingschränkten) Spaltenhistogramm hergenommen. Es lässt sich bei der Suche auch erst ein Stück nach der linken Grenze beginnen (geschätzt durch die minimale Breite, oder deren Hälfte). Die Region ist nun komplett Sie wird aus der oberen linken Koordinate (obere und linke Grenze) sowei Breite (rechte – linke Grenze) und Höhe (untere – obere Grenze) zusammengesetzt. Finde weitere Regionen Dieser Vorgang soll sich nun wiederholen, denn es sollen schließlich mehrere potentielle Auto im Bild entdeckt werden: Starte ab einer unteren Grenze eine weitere Suche bis die Bildmitte (in der Regel etwa der Himmel) erreicht wird. Suche für jedes Paar aus oberer und unterer Grenze jeweils alle möglichen Paare aus linken und rechten Grenzen. D.h. wiederhole deren Suche nach einer gefundenen rechten Grenze von dort aus bis maximal zum rechten Bildende. Überprüfe jede Region Jede gefundene Region wird einigen Tests unterzogen um falsche Prognosen herauszufiltern: Ist die Region nicht entartet (d.h. Höhe/Breite ≥ 0.6 und umgekehrt) ? Dies soll Regionen ausschließen, welche beispielsweise viel breiter als höher sind und umöglich ein normales Auto umschließen können. Überlappt sie sich mit vorherigen Regionen ? Ähnelt eine gefundene Region stark einer vorherigen (bereits verifizierten) Region so wird sie ausgelassen. Und nicht zuletzt die Frage aller Fragen: Enthält diese Region überhaupt ein Auto ? Darauf wird im folgenden Kapitel 3, der Verifikation der Hypothese, detailliert eingegangen. Es sei jedoch zunächst noch Zeit für ein Beispielergebnis in Form von Abbildung 3: Die Szene aus Abbildung 2 wurde auf potentielle Autostandorte abgesucht. Alle gefundenen wurden Regionen wurden rot eingezeichnet, jedoch wurde ihnen die abschließende Verifikation verwehrt. Viele der gefundenen Regionen gerade im Bereich der Leitplanken links und rechts sind aufgrund ihrer ebenfalls auffälligen horizontalen und vertikalen Strukturen Fehlprognosen. Eine möglichst verlässliche Verifikation soll sie nun im besten Fall enttarnen und aussortieren. Abbildung 3: Potentielle Autostandorte 8
Kapitel 3 Hypothesis Verification – Der Bayes-Klassifikator Die Ausgangssituation ist nun die Folgende: Das Bild wurde durch den LOC-Operator gejagt. Daraufhin wurde die entstandene Label-Matrix einem Such-Algorithhmus unterworfen, welcher eine potentielle Anwärter-Region auf ein Auto liefert. Die Gefahr eines Irrtums ist groß, sodass ein Klassifikation nun entgültig sagen soll: Gehört diese Region zur Klasse der Autos (C1) oder zur Klasse der Umgebung (C2) ? Dies macht ein Bayes-Klassifikator. 3.1 Wieso Bayes ? Hier weicht diese Arbeit am Stärksten vom LOC-Bericht ab. Dort wurde die Klassifikation durch ein Neuronales Netz vorgenommen. Die Wahl des Bayes-Klassifikators ist vor Allem auf Übersichtlichkeit und Nachvollziehbarkeit zurückzuführen: Die berechneten Bayes-Parameter lassen leichter Rückschlüsse auf die Trainigsdaten zu, die Überwachung des Trainings und der Klassifikation fällt damit viel leichter als bei einem Neuronalen Netz mit bis zu 500 Neuronen (siehe LOC-Bericht [1]). Tatsächlich aufgetretene Fehler bei Mittelwert- und Varianzbildung beispielsweise sind so während der Trainigsphase früh aufgefallen und behoben worden. Dies schien in Anbetracht dieser Seminararbeit und der alleinigen Arbeit daran schließlich von entscheidendem Vorteil zu sein. 3.2 Bayes – Die Stichprobe Der Klassifikator braucht Trainigsdaten entsprechend seiner Klassen. Das bedeutet hier, dass als Samples sowohl Bilder von Autos (von hinten und von vorne) als auch typische Bilder aus der Umgebung von Autos ihren Weg ins Trainig fanden: Insgesamt 330 Trainingsbilder. 180 davon von Autos (100 Front- und 80 Heckaufnahmen) und 150 von diversen Umgebungsobjekten wie Straßen (mit und ohne Fahrbahnmarkierungen), Büschen und Bäumen, Fußwegen, usw.. Alle diese Bilder sind Auschnitte von Bildern (128x128 Pixel groß) aus einer Internetdatenbank von CBCL (Center for Biological and Computational Learning, siehe Quelle [6]) welche 512 (Groß-) Aufnahmen von Fahrzeugen umfasst. Ausschnitte bedeutet, dass explizit Autos (bzw. Teile von Ihnen) umrahmt und ausgschnitten wurden. Ebenso gezielt Objekte aus deren Umgebung. Die Ausschnitte wurden stets standardmäßig auf eine Größe von 50x50 Pixeln skaliert. 3.3 Bayes – Die Merkmale Den Grundgedanken weiterführend, dass sich Autos durch systematische horizontale und vertikale Strukturen auszeichnen, bietet es sich an als Merkmale für das Trainig wie für die Klassifiaktion die LOC-Spalten- und Zeilenhistogramme (wie aus Kapitel 2 2.4 bekannt) herzunehmen. Sie enthalten nämlich genau die Informationen überdie Verteilung von Kanten im Bild. Der besseren Unterscheidung zwischen Umgebung und Fahrzeug wegen werden hier sogar alle Labels berücksichtigt. Denn im besten Falle sieht das Szenario wie folgt aus: Ein Auto weist vorwiegend homogene Flächen (Label 0) und vertikale wie horizontale Kanten (Labels 1,8,9 bzw, 2,4,6) auf. Fremde Umgebungsobjekte sollten dagegen noch mehr homogene Bereiche und/oder vielfältigere Kanten (-richtungen) besitzen, d.h. einerseits eine stärkere Anhäufung 0-wertiger Regionen und andererseits eine breitere Streuung verschiedenster Labels 1 bis15. 9
3.4 Bayes – Das Training Das Training besteht beim Bayes-Klassifikator aus der Schätzung zweier Wahrscheinlichkeiten samt Parameter anhand der Stichprobe: Zum Einen P(Ci): Der Wahrscheinlichkeit für das Auftreten von Klasse Ci (i = 1,2). Diese Wahrscheinlichkeit erhält man aus der Anzahl verwendeter Samples: Anzahl Samples aus Klasse C i P(C i ) = Größe der Stichprobe In diesem Fall also: 180 150 Auto: P(C1 ) = und Umgebung: P(C 2 ) = 330 330 Des Weiteren p(x|Ci): Der (klassenbedingten) Wahrscheinlichkeit für das Auftreten eines Merkmals x bei Vorgabe von Klasse Ci (i = 1,2). Es wird angenommen, dass p(x|Ci) der Normalverteilung entspricht, also im eindimensionalen Fall: 2 p(x|Ci ) = 1 2 i exp− 2 1 x - i i (i = 1,2) wobei i = Ei {(x - i ) 2 } die Standardabweichung und i=E i {x} der Mittelwert der Klasse Ci ist. Die Merkmale sind wie oben beschrieben das Zeilenhistogramm und das Spaltenhistogramm; beides 16x50-Matrizen (16 Labels 0-15 bei einer (Standard-) Bildgröße von 50x50 Pixeln). Der Klassifikator soll zeilen- bzw. spaltenweise mit den Daten trainiert werden. d.h. man hat es zunächst mit einer 16-dimensionalen Normalverteilung zu tun. Nun lässt sich jedoch annehmen, dass die Verteilung der Labels, das heißt das Vohandensein verschiedener Kanten im Bild unabhängig voneinander geschieht: Da wir entweder nur horizontale bzw. vertikale Kanten erwarten (Auto) oder gar nichts Spezielles (die unvorhersehbare Umgebung) sagt das Vorhandensein der einen Kantenrichtungen nichts über das Auftreten der anderen Kantenrichtungen aus. Bezieht man diese Erkenntniss auf den Merkmalsvektor x ∈ℕ16 so lässt sich sagen, dass xi und xj aus x statistisch unabhängig sind. Die 16-dimensionale Normalverteilung zerfällt damit in ein Produkt von 16 eindimensionalen Normalverteilungen p(xj|Ci) (j = 1,...,16). Es müssen im Trainig also abschließend für die eindimensionalen Normalverteilungen folgende Parameter je Klasse Ci bestimmt werden: Ein Mittelwertsvektor i∈ℝ 16 und ein Vektor mit Standardabweichungen i ∈ℝ16 . Jeweils getrennt für Zeilen und Spalten. 1 Zudem sieht man, dass auch der erste Term im weiteren Verlauf konstant ist und somit 2 i ebenfalls als ein Vektor t i ∈ℝ 16 vorberechnet werden kann. Alle diese Daten werden schließlich in externe Dateien abgespeichert. Darauf wird dann nun im Folgenden die Klassifikation zugreifen. 10
3.5 Bayes – Die Klassifikation Nun befindet man sich wieder mitten im Programm: Es gilt eine Bildregion zu klassifizieren. Diese Region wird zunächst aus dem Bild ausgeschnitten. Um Varianzen bei der Größe des Auschnitts zu verhindern und eine gute Vergleichsmöglichkeit zu den Trainigsdaten zu bewahren wird auch er auf die Standardgröße von 50x50 Pixeln skaliert. Es werden noch die Merkmale benötigt: Es gilt dazu analog zum obigen Training die 50x50-Label- Matrizen und anschließend die 16x50-Zeilen- und Spaltenhistogramme zu berechnen. Für jede Zeile und Spalte x wird gemäß der allgemeinen Bayes-Klassifikations-Regel errechnet zu welcher Klasse (Auto oder Umgebung) sie am wahrscheinlichsten zuzuordnen ist: x gehört eher zu einem Auto: x ∈ C1 ⇔ p(x | C 1 ) ⋅ P(C1 ) p(x | C 2 ) ⋅ P(C 2 ) x gehört eher zur Umgebung: x ∈ C2 ⇔ p(x | C2 ) ⋅ P(C2 ) p(x | C 1 ) ⋅ P(C1 ) Man erhält also 100 Zuweisungen. Werden mindestens 85 Merkmale der Auto-Klasse zugewiesen so bleibt die Region erhalten, mit der Hoffnung, dass sich in ihr ein Fahrzeug (oder ein Teil dessen) befindet. Ansonsten wird die Region verworfen. 3.6 Bayes – Ein Ergebnis Man erinnere sich an die Abbildung 3 aus dem 2. Kapitel (2.4). Dort wurden alle möglichen Regionen gesucht und eingezeichnet, ungeachtet jeglicher Verifikation durch Bayes. Die rechte Abbildung 4 zeigt nun denselben Vorgang mit dem Unterschied, dass jede Region, sobald sie gefunden wurde, durch Bayes einem Fahrzeug oder einem Umgebungsobjekt zugeordnet wurde. Falsche Prognosen wurden nun korrekt aussortiert. In diesem Fall haben also die Regionen um die Leitplanken die Verifikation nicht überlebt. Es bleiben lediglich wie gewünscht die drei markierten Autos zurück. Abbildung 4: Regionen nach der Bayes-Klassifikation Die Arbeit für dieses Bild ist damit getan, die Autos wurden gefunden. Doch wie verlässlich arbeitet der Algorithmus ? Unter welchen Umständen könnten Probleme auftreten ? Wie sicher filtert der Bayes-Klassifikator die falschen Regionen heraus ? Diese und weitere Fragen werden im anschließenden Kapitel 4 diskutiert. Es folgt ein Erfahrungsbericht. 11
Kapitel 4 Diskussion – Erfahrungen mit der Detektion von Fahrzeugen Der Algorithmus ist mit Abschluss von Kapitel 2 und 3 nun komplett. In Java implementiert, wurde er unter verschiedenen Bedingungen und an vielen (Autobahn-) Aufnahmen (siehe Quelle [5]) ausprobiert und unter diversen Konfigurationen getestet. Ein solches System, welches dem Fahrer im Straßenverkehr helfen soll, seine Aufmerksamkeit unterstützt und Unfällen vorbeugen soll muss vor allem verlässlich und robust sein. Viele nicht oder erst spät detektierte Autos machen das System unnötig oder gefährlich. Falsche Warnungen oder Hinweise können irritieren, falsches Verhalten im Verkehr provozieren und machen es wenig vertrauenswürdig und ebenso gefährlich. Es folgen nun einige Erkenntnisse über die Stärken und Schwächen des LOC-Operators und des Bayes-Klassifikators. 4.1 Erfahrungen mit Local Orientation Coding Der LOC-Algorithmus spielt mit seiner Label-Matrix sowohl bei der Generierung der Hypothese (HG), der Suche der potentiellen Standorten von Autos, als auch bei ihrer Verifikation (HV), bei der Auswahl von Merkmalen, die zentrale Rolle. Er bringt allerdings Probleme mit sich: Eine starke Anfälligkeit für Fehlprognosen während der HG Der LOC-Autodetektor legt es auf die systematischen horizontalen und vertikalen Strukturen von Autos an. Eine typische Straßen oder Autobahnszene ist üblicherweise gespickt mit Objekten ähnlicher Strukturen wie beispielsweise Häuser, Fahrbahnmakierungen, Straßenlaternen, Leitplanken, Bäume, Schilder oder Schatten. Abbildung 5 zeigt ein LOC-Label-Bild (horizontale Labels 1,8,9 und vertikale Labels 2,4,6 schwarz markiert) einer recht komplexe Beispielszene: Abbildung 5: HG-Fehlprognosen einer komplexen Autobahnszene Links ist noch mittig ein weißer Wagen zu erkennen, sogar mit recht deutlichen Kanten. Im Label- Bild rechts ist er, selbst für das menschliche Auge, nahezu verschwunden. Die Bäume im Hintergrund weisen starke Grauwertdifferenzen und damit starke Kanten auf. Ebenso die Leiplanken. Prompt sind auch die Hypothesen alle fehlerhaft: Regionen am Pfeiler und Schild links, an den Leitplanken und Fahrbahnmarkierungen sollen angeblich ein Auto enhalten. Ein Auto könnte allenfalls durch Zufall gefunden werden. Erst, wenn das Auto näher in den (nahezu) Kantenfreien vorderen Straßenbereich rückt könnte es Chancen auf eine Detektion haben. 12
Und dort finden sich auch die Stärken des LOC-Operators: Fahrzeuge auf naher bis mittlerer Distanz haben oftmals die größten Chancen gefunden zu werden. Eine Idee für eine erfolgreichere und umfassenderere Detektion wäre es Objekte abseits der Fahrbahn gar nicht erst bei der Generierung der LOC-Labels zu beachten: Die Einbindung eines Algorithmus zur Fahrbahnerkennung könnte helfen falsche Kanten entstehen zu lassen, wodurch weniger falsche Regionen ermittelt würden und sich Fahrzeuge besser von Hintergrund abhöben. Schwierigkeiten und Sensibilität bei der Konfiguration der Parameter Abschnitt 2.4 des zweiten Kapitels deutet es an: Die Generierung sinnvoller Hypothesen hängt sehr stark von einigen Parameter ab. Ab welchem Grenzwert werden untere, linke und rechte Kanten als solche akzeptiert ? Einige Grenzwerte bringen manchmal in bestimmten Situationen bessere Ergebnisse als Andere. Setzt man sie zu hoch an werden einige Autos mit undeutlichen Kanten vielleicht übergangen. Sind sie zu niedrig findet man zu viele falsche Regionen (siehe im Abschnitt oben über die Anfälligkeit). Da Straßenszenen unterschiedlich komplex sind (von leeren Landstraßen bis zu Autobahnen oder Stadtszenen mit diversen Streckenobjekten) ist es sehr schwer sich auf eine konkrete Berechnung der Grenzwerte festzulegen. Gerade die linken und rechten Grenzen können da gelegentlich problemtisch sein, denn Autos haben zwar oftmal glatte obere und untere Kanten sind aber links und rechts manchmal leicht abgerundet oder etwas schräg; gerade wenn die etwas geneigt zur Kamera stehen. Klare und starke vertikale Kanten sind in diesen Fällen eher rar. Siehe dazu ein Beispiel in Abbildung 6 rechts. Man schaut leicht seitlich auf das Auto und es hat schräge Kanten. Im Label- Bild rechts sind alle vertikalen Labels (2,4,6) schwarz markiert. Eine Detektion einer rechten und speziell einer linken Grenze ist sehr schwierig. Will man dieses Auto finden muss der Abbildung 6: Schwere Detektion anhand vertikaler Kanten Grenzwert entsprechend großzügig angesetzt werden, was dazu führt, dass eventuell viele Hypothesen gebildet werden, welche die Verifikation vor eine große Herausforderung stellen und das Risiko für Fehlklassifikationen erhöhen. Bei der Suche nach den unteren Grenzen ist zudem zu beachten, dass die Kanten von entfernten Autos manchmal geradezu verschwindend klein werden. Auch hier muss, will man genügend Fahrzeuge finden, der Grenzwert teilweise großzügig berechnet werden. Zudem ergibt sich bei den unteren Grenzen ein weiters Problem, welches nun folgt. Schatten Im ersten Abschnitt schon als falsche Kanten angesprochen, beherbergen sie noch anderes Fehlerpotential: Schatten können während der HG mit ihren Kanten zwar einerseits bei der Suche der unteren Grenze der Region helfen, werden sie jedoch zu groß lassen sie die unteren Kanten der (im speziellen dunklen) Autos manchmal verschwinden. Regionen um Autos beginnen so manchmal (wenn überhaupt) erst in der Mitte des Fahrzeugs in etwa auf Höhe der Stoßstange. Dies Verzerrt die Regionen um ein Auto und kann eine richtige Verifikation und genaue Markierung behindern. 13
Abbildung 7 rechts gibt ein Beispiel. Durch die schwarze Lackierung und den Schatten taucht im Labelbild eine deutliche untere Kante erst in Höhe des Nummernschildes auf. Die detektierte Region markiert demnach nur einen Teil des Autos. Abbildung 7: Detektion bei Schatten Der LOC-Operator kann somit gerade mit sehr sonnigen oder hell beleuchteten, schattigen Bildern (oder mit dunklen Autos samt Schatten) Probleme haben (für sehr dunkle- oder Nachaufnahmen ist er, als Kanten-Detektor natürlich von Natur aus nicht geeignet). Die besten Ergebnisse gab es oftmals bei bewölkten Aufnahmen am (späten) Nachmittag. Eine Kombination von LOC und einem Detektor von Fahrzeugen anhand deren Schatten wäre durchaus denkbar und sinnvoll um die Ergenisse zu verbessern. Perspektivische Schwierigkeiten Der LOC-Operator legt es auf horizontale und vertikale Kanten an. Somit kann es bei Autos, welche leicht schräg zur Kamera stehen zu Detektionsfehler kommen. Fahrzeuge auf (leichten) Erhebungen/Vertiefungen oder in Kurven oder schlicht quer zur Kamera stehende oder fahrende Autos können eventuell einer Detektion entgehen, da die Label-Matrix zu wenige Kanten aufweist. Ähnliche Fehler können duch wackelige Aufnahmen entstehen. Perspektivische Veränderungen/Verzerrungen können im Extremfall (kurzzeitig) die sensible Parametrisierung der HG (siehe oben) stören. Der LOC-Operator liefert somit auf geradlinigen Fahrbahnen wie zum Beispiel Autobahnen die zuverlässigsten Ergenisse. (Es sei in diesem Zusammenhang kurz anzumerken, dass diese Arbeit auf Standbildern von Autobahnszenen (siehe Quelle [5]) optimiert wurde.) Zudem müssen die Parameter für die Generierung der Hypothese (siehe Kapitel 2, 2.4) stets für jede neue Kameraperspektive neu konfiguriert und getestet werden um sinnvolle Ergebnisse zu liefern. 4.2 Erfahrungen mit der Bayes-Klassifikation Die Wichtigkeit des Klassifikators und seine Herausfordeurng steht und fällt mit der Qualität des Detektors während der Generation der Hypothese. Je nach den oben beschriebenen Problemsituationen können die übergebenen zu klassifizierenden Regionen schonmal sehr zahlreich oder nur sehr klein sein (Auschnitte des Fahrzeugs wie die Windschutzscheibe oder eine Tür etc.). Auch der Klassifikator kann dabei Probleme haben: Schwierigkeiten beim Training Fahrzeuge: Die zu detektierenden Fahrzeuge zeichnen sich zwar oftmals durch klare horizontale und vertikale Strukturen aus. Nichtsdestotrotz sind deren Variationen sehr zahlreich. Sie unterscheiden sich je nach Fahrzeugtyp in ihrer Form und ihrer Höhe und die Ansicht, ob von vorne oder von hinten, offenbart oftmals verschiedene Strukturen. Sehr rundliche Fahrzeuge machen sowohl die Detektion als auch die Verifikation nicht sehr einfach. Speziallfälle wie Busse oder Lastwagen sind schon bei der HG Themen für sich und wurden bei dieser Arbeit auch nicht berücksichtigt. Die Auswahl und der Umfang der Trainingssamples ist somit recht aufwändig. 14
Umgebung: Wie trainiert man Objekte, die schon in ihren Kategorien praktisch beliebig sind ? Man kann beim Training nur auf typische Streckenobjekte wie in Kapitel 3 (3.2) beschrieben zurückgreifen. Es ist jedoch unmöglich bei einem vielfältigen Einsatzgebiet des Detektors (gerade beispielweise innerhalb von Städten) der Vielzahl der Streckenrandobjekte gerecht zu werden. Man könnte dem jedoch beispielsweise entgegenwirken indem man vor der Verifikation wie zu Anfang in 4.1 beschrieben (z.B. Fahrbahndetektion) möglichst gut die Umgebung um die Fahrbahn herum ausblendet und möglichst viele exakte Hypothesen bildet. Der Klassifikator und damit das Training würde entlastet. Schwierigkeiten bei der Klassifikation Rundliche oder schräg zur Kamera stehende Fahrzeuge können wie bei der HG in 4.1 auch hier Schwierigkeiten bereiten: Die Merkmalsvektoren der Spaltenhistogramme können in Extremfällen nur wenige Hinweise auf vertikale Strukturen liefern. Dies kann die Klassifiaktion verfälschen. Ein weiteres Problem ist auch ein Ähnliches wie bei der HG: Viele Streckenrandobjekte weisen im schlimmsten Fall ähnlich viele horizontale und vertikale Strukturen auf wie die Fahrzeuge selbst. Da hier auch die Merkmalsbildung auf diesen Strukturen beruht, kann es manchmal schnell zu Fehlklassifikationen kommen. Die Merkmale sind schlicht nicht ausreichend. Denn sie beschreiben zwar die Fahrzeuge gut, aber manchmal ebenso gut falsche Objekte. Es ist letztendlich für eine genügende Verlässlichkeit des Klassifikators notwendig weitere fahrzeugspezifische Merkmale (Schatten, Symmetrie, Textur etc., siehe Einleitung Kapitel 1) miteinzubeziehen. Eine Kombination verschiedener Ansätze könnte auch hier wieder sinnvoll sein. 4.3 Die Performance – Eine Echtzeit-Anwendung ? Der Algorithmus ist für den Einsatz im Straßenverkehr gedacht. Er wird konsequent mit Bildmaterial aus Videoaufnahmen der Fahrbahn gespeist. Das bedeutet, dass die Detektion der Autos möglichst in Realzeit ablaufen muss um Veränderungen im Bild (das Auftauchen von Autos) schnell zu erkennen und häufige Updates liefern zu können. Die Generation der Hypothese mit LOC kommt dem ausreichend nache: Die Labels sind schnell gebildet, es wird schließlich nur mehrmals über das Bild iteriert: Vergleich aller Nachbarn pro Pixel, sowie Berechnung der Histogramme im Zuge der Grenzwertbildung (siehe Kapitel 2, 2.1 und 2.2). Ein Aufwand von O(MN), bei einer Bildgröße von MxN Pixeln. Bei auftretenden Bildern der Standardgrößen von 400x300 (einmalig pro Detektionsvorgang) und 50x50 Pixeln (in der Regel mehrfach) eine schnelle Angelegenheit. Das Suchen der Bildregionen ist schwerer zu kalkulieren, hängt es doch stark von der Komplexität des Bildes ab, wie viele Grenzen gefunden werden. Im schlimmsten Falle werden für jeden Pixeln zwei Histogramme der Höhe bzw. Breite des Bildes durchsucht. Ein maximaler Aufwand im Bereich von O(M ∙ N ∙ (M + N)) = O(M2 ∙ N + M ∙ N²). Die Größe des Bildes macht sich tatsächlich bemerkbar: Nach Versuchen mit Bildausmaßen von 666x 500, 533x400, 200x100 und 400x300 Pixeln (ursprünglich 800x400) schien Letzteres der beste Kompromiss aus nötiger Bildqualität und Geschwindigkeit zu sein. Der LOC-Operator liefert tatsächlich Ergebnisse in Sekundenbruchteilen und kann sich in Realzeit- Anwendungen behaupten. 15
Die Verifikation bremst den Vorgang: Das stete Ausschneiden der Bildregionen sowie deren Skalierung auf 50x50 Pixeln (bei bilinearer Interpolation) für jede Verifikation benötigt schnelle Bildverarbeitungsalgorithmen. Und deren Herausforderung schwankt sehr stark mit der Komplexität des Bildes: Einfach aufgebaute Szenen mit nur wenigen horizontalen Strukturen sorgen nur für wenige Auto-Prognosen und einer Verifikation in Real-Zeit, bei komplexeren Szenen können es durchaus Dutzende sein, was die Berechnungszeit dementsprechend beeinträchtigt. Dabei hat auch der LOC-Operator während der HG eine Verantwortung, welcher er aber nicht immer nachkommen kann, wie es sich in 4.1 herausstellte. Die Verifikation dieser Implementierung erfüllt somit oftmals leider keinen Echtzeit-Anspruch. Alternative Wege wie das direkte Skalieren der Spalten- und Zeilenhistogramme aus der HG-Phase, könnten den Vorgang eventuell beschleunigen, schafften es aber nicht mehr in diese Implementierung. 4.4 Das Fazit Der LOC-Operator als Kanten-Detektor eignet sich gut für einfache Aufnahmen, d.h. auf planer Fahrbahn mit wenigen Störfaktoren am Streckenrand. Wenn dazu noch die Lichtsituation gemäßigt ist, werden Fahrzeuge auf naher bis mittlerer Entfernung recht zuverlässig und nahezu in Echtzeit erkannt. Für komplexere Szenarien muss der Ansatz jedoch mit anderen Methoden kombiniert werden um sichere und verlässlichere Ergebnisse zu erzielen. Und das ist schließlich unabdingbar für einen sicheren Einsatz im Straßenverkehr. 16
Quellenverzeichnis [1] Christian Goerick, „Local Orientation Coding and Adaptive Thresholding for Real Time Early Vision“ [2] Christian Goerick, Michael Brauckmann, „Local Orientation Coding and Neural Network Classifiers with an Application to Real Time Car Detection and Tracking“ [3] Zehang Sun, George Bebis, Ronald Miller, „On-Road Vehicle Detection: A Review“ [4] Xiaoyi Jiang, Folien zur Vorlesung Mustererkennung im WS 06/07, Kapitel 4 und 5 [5] Das Programm wurde getestet und optimiert mit Bildern von http://www.autobahn-bilder.de/ [6] Der Klassifikator wurde trainiert mit Bildern aus der Datenbank http://cbcl.mit.edu/cbcl/software-datasets/CarData.html des „Center for biological and Computational Learning“ (kurz CBLC). Zu finden unter http://cbcl.mit.edu/cbcl/index.html (Es sei aber erwähnt, dass sämtliche Abbildungen aus der Java-Implementation dieser Arbeit stammen und eigens angefertigt wurden.) 17
Sie können auch lesen