Die Bildklassifizierungsmodelle, die wir bisher behandelt haben, nahmen ein Bild und lieferten ein kategorisches Ergebnis, wie beispielsweise die Klasse "Zahl" in einem MNIST-Problem. In vielen Fällen möchten wir jedoch nicht nur wissen, dass ein Bild Objekte darstellt – wir möchten auch deren genaue Position bestimmen können. Genau darum geht es bei der Objekterkennung.
Bild von der YOLO v2 Webseite
Angenommen, wir wollten eine Katze auf einem Bild finden, dann wäre ein sehr naiver Ansatz zur Objekterkennung folgender:
- Zerlege das Bild in eine Anzahl von Kacheln.
- Führe eine Bildklassifikation auf jeder Kachel durch.
- Die Kacheln, die eine ausreichend hohe Aktivierung zeigen, können als die Kacheln betrachtet werden, die das gesuchte Objekt enthalten.
Bild aus dem Übungsnotebook
Dieser Ansatz ist jedoch alles andere als ideal, da er es dem Algorithmus nur erlaubt, die Begrenzungsbox des Objekts sehr ungenau zu lokalisieren. Für eine präzisere Lokalisierung müssen wir eine Art Regression durchführen, um die Koordinaten der Begrenzungsboxen vorherzusagen – und dafür benötigen wir spezielle Datensätze.
Dieser Blogbeitrag bietet eine großartige Einführung in die Erkennung von Formen.
Für diese Aufgabe könnten Sie auf die folgenden Datensätze stoßen:
- PASCAL VOC – 20 Klassen
- COCO – Common Objects in Context. 80 Klassen, Begrenzungsboxen und Segmentierungsmasken
Während es bei der Bildklassifikation einfach ist, die Leistung des Algorithmus zu messen, müssen wir bei der Objekterkennung sowohl die Richtigkeit der Klasse als auch die Genauigkeit der vorhergesagten Position der Begrenzungsbox messen. Für Letzteres verwenden wir die sogenannte Intersection over Union (IoU), die misst, wie gut sich zwei Boxen (oder zwei beliebige Bereiche) überlappen.
Abbildung 2 aus diesem ausgezeichneten Blogbeitrag über IoU
Die Idee ist einfach – wir teilen die Fläche der Überschneidung zwischen zwei Figuren durch die Fläche ihrer Vereinigung. Für zwei identische Flächen wäre IoU gleich 1, während für vollständig getrennte Flächen IoU gleich 0 ist. Ansonsten variiert der Wert zwischen 0 und 1. Wir betrachten typischerweise nur die Begrenzungsboxen, bei denen IoU über einem bestimmten Wert liegt.
Angenommen, wir möchten messen, wie gut eine bestimmte Objektklasse
- Betrachten Sie die Precision-Recall-Kurve, die die Genauigkeit in Abhängigkeit von einem Erkennungsschwellenwert (von 0 bis 1) zeigt.
- Abhängig vom Schwellenwert werden mehr oder weniger Objekte im Bild erkannt, und es ergeben sich unterschiedliche Werte für Präzision und Recall.
- Die Kurve sieht wie folgt aus:
Bild aus NeuroWorkshop
Die durchschnittliche Präzision für eine gegebene Klasse
Wir betrachten nur die Erkennungen, bei denen IoU über einem bestimmten Wert liegt. Beispielsweise wird im PASCAL VOC-Datensatz typischerweise
Bild aus NeuroWorkshop
Die Hauptmetrik für die Objekterkennung wird Mittlere Durchschnittliche Präzision (Mean Average Precision, mAP) genannt. Sie ist der Wert der Durchschnittlichen Präzision, gemittelt über alle Objektklassen und manchmal auch über
Es gibt zwei Hauptklassen von Objekterkennungsalgorithmen:
- Region Proposal Networks (R-CNN, Fast R-CNN, Faster R-CNN). Die Hauptidee ist, Regions of Interest (ROI) zu generieren und CNN darüber laufen zu lassen, um maximale Aktivierung zu finden. Dies ähnelt dem naiven Ansatz, mit der Ausnahme, dass ROIs auf eine intelligentere Weise generiert werden. Ein Hauptnachteil solcher Methoden ist, dass sie langsam sind, da viele Durchläufe des CNN-Klassifikators über das Bild erforderlich sind.
- One-pass (YOLO, SSD, RetinaNet) Methoden. In diesen Architekturen wird das Netzwerk so gestaltet, dass es sowohl Klassen als auch ROIs in einem Durchgang vorhersagt.
R-CNN verwendet Selective Search, um eine hierarchische Struktur von ROI-Regionen zu generieren, die dann durch CNN-Feature-Extraktoren und SVM-Klassifikatoren geleitet werden, um die Objektklasse zu bestimmen, sowie durch lineare Regression, um die Koordinaten der Begrenzungsbox zu bestimmen. Offizielles Paper
Bild von van de Sande et al. ICCV’11
Bilder aus diesem Blog
Dieser Ansatz ähnelt R-CNN, aber die Regionen werden definiert, nachdem die Convolution-Schichten angewendet wurden.
Bild aus dem offiziellen Paper, arXiv, 2015
Die Hauptidee dieses Ansatzes ist die Verwendung eines neuronalen Netzwerks zur Vorhersage von ROIs – des sogenannten Region Proposal Network. Paper, 2016
Bild aus dem offiziellen Paper
Dieser Algorithmus ist sogar schneller als Faster R-CNN. Die Hauptidee ist folgende:
- Wir extrahieren Features mit ResNet-101.
- Die Features werden durch Position-Sensitive Score Map verarbeitet. Jedes Objekt aus
$C$ Klassen wird in$k\times k$ Regionen unterteilt, und wir trainieren, um Teile von Objekten vorherzusagen. - Für jeden Teil aus den
$k\times k$ Regionen stimmen alle Netzwerke für Objektklassen ab, und die Objektklasse mit der maximalen Stimmenanzahl wird ausgewählt.
Bild aus dem offiziellen Paper
YOLO ist ein Echtzeit-One-Pass-Algorithmus. Die Hauptidee ist folgende:
- Das Bild wird in
$S\times S$ Regionen unterteilt. - Für jede Region sagt CNN
$n$ mögliche Objekte, Koordinaten der Begrenzungsbox und Confidence=Wahrscheinlichkeit * IoU voraus.
Bild aus dem offiziellen Paper
- RetinaNet: Offizielles Paper
- PyTorch-Implementierung in Torchvision
- Keras-Implementierung
- Objekterkennung mit RetinaNet in Keras-Beispielen
- SSD (Single Shot Detector): Offizielles Paper
Setzen Sie Ihr Lernen im folgenden Notebook fort:
In dieser Lektion haben Sie einen Überblick über die verschiedenen Möglichkeiten zur Objekterkennung erhalten!
Lesen Sie diese Artikel und Notebooks über YOLO und probieren Sie sie selbst aus:
- Guter Blogbeitrag über YOLO
- Offizielle Seite
- Yolo: Keras-Implementierung, Schritt-für-Schritt-Notebook
- Yolo v2: Keras-Implementierung, Schritt-für-Schritt-Notebook
- Objekterkennung von Nikhil Sardana
- Ein guter Vergleich von Objekterkennungsalgorithmen
- Überblick über Deep-Learning-Algorithmen für die Objekterkennung
- Eine Schritt-für-Schritt-Einführung in die grundlegenden Objekterkennungsalgorithmen
- Implementierung von Faster R-CNN in Python für die Objekterkennung











