Dieses Kapitel beschreibt die Verwendung von Advanced Object Detection auf Basis von Deep Learning.
Bei der Advanced Object Detection besteht das Ziel darin, verschiedene Objekte innerhalb eines Bildes zu finden und ihnen eine Klasse zuzuweisen. Mehrere Objekte können im selben Bild auftreten und sich teilweise überlappen, während sie dennoch als unterschiedliche Objekte erkannt werden. Dies wird im folgenden Schema veranschaulicht.
Im Gegensatz zur Bildklassifikation, bei der einem gesamten Bild eine einzelne Klasse zugewiesen wird, führt Advanced Object Detection sowohl die Lokalisierung von Objekten als auch deren Klassifikation innerhalb eines einzelnen Netzwerks durch.
Es basiert auf einer effizienten Detektionsarchitektur, die die Robustheit und Performance im Vergleich zu bisherigen Ansätzen verbessert. Insbesondere wird die Erkennung von Objekten unterschiedlicher Größen verbessert und die Robustheit gegenüber variierenden Bildbedingungen erhöht.
Das Modell sagt umschließende Rechtecke voraus, die die Position potenzieller Objekte im Bild angeben.
Als Ausgabe liefert das Modell für jedes erkannte Objekt folgende Informationen:
Eine achsenparalleles umschließendes Rechteck (Instanztyp
'rectangle1')
Eine Klassenzuweisung
Einen Konfidenzwert
Der Konfidenzwert bezeichnet einen modellabhängigen Score, der die relative Sicherheit des Netzwerks widerspiegelt, dass das vorhergesagte umschließendes Rechteck einem Objekt der zugewiesenen Klasse entspricht.
Advanced Object Detection unterstützt ausschließlich den Instanztyp
'rectangle1'.
Daher sind alle umschließenden Rechtecke achsenparallel.
Für die Objekterkennung mit orientierten umschließenden Rechtecke siehe das Kapitel Deep Learning / Instanz-Segmentierung und Objektdetektion.
In HALCON ist die Advanced Object Detection im allgemeinen Deep-Learning-Framework implementiert. Weitere Informationen zum Deep-Learning-Modell im Allgemeinen finden sich im Kapitel Deep Learning / Modell.
Die folgenden Abschnitte beschreiben den allgemeinen Ablauf für die Advanced Object Detection, Informationen zu den verwendeten Daten sowie Erläuterungen zur Netzwerkausgabe.
In diesem Abschnitt wird der allgemeine Ablauf für eine Anwendung der Advanced Object Detection basierend auf Deep Learning beschrieben.
Die Vorverarbeitung und die Datenaugmentation werden über eine Transform-Pipeline definiert. Die Pipeline spezifiziert eine Sequenz von Transformationen, die auf die Eingabebilder angewendet werden, bevor sie vom Modell verarbeitet werden.
Der allgemeine Ablauf für Advanced Object Detection gliedert sich in die folgenden vier Teile:
Laden des Modells und Konfiguration der Transform-Pipeline
Training des Modells
Evaluierung des trainierten Modells
Inferenz auf neuen Bildern
Es wird vorausgesetzt, dass der Datensatz bereits gelabelt ist, siehe auch den Abschnitt „Daten“.
Ein vollständiger Ablauf ist im HDevelop-Beispiel
dl_advanced_detection_workflow.hdev dargestellt. Die
Beispielreihe detect_pills_deep_learning_*.hdev
veranschaulicht die einzelnen Ablauf-Schritte unter Verwendung von
Advanced Object Detection.
Details zur Definition und Konfiguration von Transform-Pipelines,
einschließlich Datenaugmentation, sind im HDevelop-Beispiel
dl_transform_pipeline.hdev beschrieben.
Dieser Teil umfasst die Vorbereitung des Datensatzes sowie die Erstellung einer Transform-Pipeline zur Vorverarbeitung und Augmentation der Daten.
Laden eines vortrainierten Detektions-Modells mit dem Operator
Einlesen des Datensatzes mit Bildern und Annotationen in ein
Dictionary DLDataset.
Aufteilen des durch das Dictionary DLDataset
repräsentierten Datensatzes. Dies erfolgt mit der Prozedur
split_dl_dataset.
Erstellen einzelner Transform-Methoden zur Definition der gewünschten Vorverarbeitungs- und Augmentierungsschritte. Typische Transformationen umfassen zufällige Perspektivtransformationen, Spiegeln, Normalisierung und Skalierung.
Typische Transform-Methoden werden mit Operatoren erstellt wie:
Kombinieren der einzelnen Transformationen zu einer Transform-Pipeline unter Verwendung des Operators
Speichern der resultierenden Pipeline im
Dictionary DLDataset. Separate Pipelines können für Training,
Validierung und Testdaten definiert werden. Typischerweise wird
Datenaugmentation nur während des Trainings angewendet, während
für Validierungs- und Testdaten ausschließlich deterministische
Vorverarbeitungsschritte verwendet werden.
In diesem Teil erfolgt das Training des Modells mit dem vorbereiteten Datensatz.
Setzen der Trainingsparameter und Speichern im Dictionary
TrainParam.
Training des Modells mit der Prozedur
train_dl_model.
Während des Trainings wird die Transform-Pipeline auf die Eingabedaten angewendet. Dies ermöglicht die Durchführung von Datenaugmentation und weiteren Vorverarbeitungsschritten vor der Verarbeitung durch das Netzwerk.
In diesem Teil erfolgt die Evaluierung des trainierten Modells.
Evaluierung des Modells mit der Prozedur
evaluate_dl_model.
Visualisierung der Evaluierungsergebnisse mit der Prozedur
dev_display_detection_detailed_evaluation.
Dieser Teil umfasst die Anwendung des trainierten Detektions-Modells.
Erzeugen eines Daten-Dictionary DLSample für jedes
Eingabebild mit der Prozedur
gen_dl_samples_from_images.
Anwenden der für Testdaten definierten Transform-Pipeline auf die erzeugten Samples unter Verwendung des Operators
Anwenden des Modells mit dem Operator
Auslesen der Detektionsergebnisse aus dem Dictionary
'DLResultBatch'.
Es wird zwischen Daten für Training und Evaluierung sowie Daten für Inferenz unterschieden. Trainings- und Evaluierungsdaten bestehen aus Bildern mit zugehörigen Annotationen, während Inferenzdaten ausschließlich aus Bildern bestehen.
Als grundlegendes Konzept erfolgt die Datenverarbeitung über
Dictionaries. Die Eingabedaten werden über ein Dictionary
DLSample übergeben, und die Ergebnisse werden in Dictionaries
wie DLResult zurückgegeben. Weitere Informationen zur
Datenverarbeitung finden sich im Kapitel
Deep Learning / Modell.
Der Datensatz besteht aus Bildern und entsprechenden Annotationen. Für jedes Objekt müssen das Klassenlabel sowie dessen Position im Bild angegeben werden.
Für jedes Objekt werden folgende Informationen benötigt:
Die Koordinaten der linken oberen Ecke
('bbox_row1', 'bbox_col1')
Die Koordinaten der rechten unteren Ecke
('bbox_row2', 'bbox_col2')
Ein zugehöriges Klassenlabel
Diese Parameter definieren ein achsenparalleles umschließendes Rechteck und
sind konsistent mit dem Operator .
gen_rectangle1
Der Datensatz ist in einem Dictionary DLDataset
organisiert, welches die Bilder zusammen mit ihren Annotationen
sowie zusätzliche für Training und Evaluierung erforderliche
Informationen speichert.
Das Beispiel detect_pills_deep_learning_1.hdev
veranschaulicht die Vorbereitung und Strukturierung eines solchen
Datensatzes.
Das Netzwerk stellt Anforderungen an die Eingabebilder, wie beispielsweise Bilddimensionen und Wertebereiche. Diese Anforderungen sind modellabhängig und können mit dem Operator
abgefragt werden.
Die erforderlichen Vorverarbeitungs- und Augmentierungsschritte werden über eine Transform-Pipeline definiert. Die Transformationen werden zur Laufzeit auf die Bilder angewendet, bevor sie vom Modell verarbeitet werden, und nicht im Datensatz gespeichert.
Für die Inferenz werden ausschließlich die Bilder benötigt. Zur Sicherstellung einer konsistenten Vorverarbeitung wird dieselbe Transform-Pipeline wie für das Modell angewendet.
Neben den allgemeinen Deep-Learning-Hyperparametern, die in Deep Learning beschrieben sind, existieren weitere Hyperparameter, die für die Objekterkennung relevant sind:
'bbox_heads_weight'
'class_heads_weight'
Diese Hyperparameter beeinflussen die Gewichtung der jeweiligen Komponenten der Zielfunktion während des Trainings.
Für ein Advanced Object Detection-Modell beeinflussen mehrere Modellparameter die Vorhersagen und somit auch die Evaluierungsergebnisse:
Parameter, die die Vorhersagen und somit die Evaluierung beeinflussen:
'max_num_detections'
'max_overlap'
'max_overlap_class_agnostic'
'min_confidence'
Bei der Advanced Object Detection kann das Modell mehrere überlappende umschließende Rechtecke für dasselbe Objekt vorhersagen. Zur Reduzierung solcher Duplikate wird Non-Maximum-Suppression (NMS) angewendet.
Das Suppressionsverhalten kann über die Parameter
'max_overlap' und
'max_overlap_class_agnostic' gesteuert werden.
Der Parameter 'max_overlap' definiert die maximal zulässige
Überlappung zwischen umschließenden Rechtecken derselben Klasse. Wird dieser
Wert überschritten, bleibt nur das umschließende Rechteck mit der höchsten
Confidence erhalten.
Der Parameter 'max_overlap_class_agnostic' erweitert dieses
Verhalten auf umschließende Rechtecke unterschiedlicher Klassen.
Diese Parameter beeinflussen die finalen Detektionsergebnisse und somit die Evaluierung.
Die Parameter können bei der Erstellung des Modells oder
nachträglich mit dem Operator gesetzt
werden. Weitere Informationen finden sich beim Operator
set_dl_model_param.
get_dl_model_param
Für Advanced Object Detection werden in HALCON folgende Evaluierungsmaße unterstützt. Es gilt zu beachten, dass zur Berechnung eines solchen Maßes die zugehörige Ground Truth Annotation notwendig ist.
Mean average precision, mAP und average precision (AP)
einer Klasse für eine gegebene IoU, ap_iou_classname
Die Größe AP ist ein Mittelwert maximaler Precision-Werte für verschiedene Recall-Werte. In einfachen Worten besagt dieses Maß, ob die vorhergesagten Objekte dieser Klasse weitgehend richtige Vorhersagen sind oder nicht. Dabei erhalten Vorhersagen mit hoher Konfidenz ein höheres Gewicht. Je höher der Wert desto besser.
Damit eine Vorhersage als richtig zählt, muss beides stimmen, die top-1 Klassenzuordnung sowie auch die Lokalisierung im Bild. Die Lokalisierung wird über die Intersection over Union (IoU) gemessen: Eine Instanz zählt als korrekt geortet, wenn die IoU höher als der geforderte Schwellenwert ist. Die IoU wird unten ausführlicher erklärt. Somit ist die Größe AP sowohl von der Klasse als auch dem IoU-Schwellenwert abhängig.
Als Resultate können folgenden Werte erhalten werden:
Die spezifischen AP-Werte, die Mittelung über alle Klassen,
die Mittelung über die IoU-Schwellenwerte sowie die Mittelung über
sowohl alle Klassen als auch die Schwellenwerte.
Letzteres ist die Größe mean average precision, mAP, ein Maß
zur Bestimmung wie gut die Instanzen gefunden und klassifiziert wurden.
'True Positives', 'False Positives' und 'False Negatives'
Das Konzept von 'True Positives', 'False Positives' und 'False Negatives' wird im Kapitel Deep Learning erklärt. Es trifft auch bei der Objektdetektion zu, mit der Ausnahme dass es verschiedene Arten von 'False Positives' gibt wie z.B.:
Eine Instanz wurde falsch klassifiziert.
Eine Instanz wurde auf dem Hintergrund gefunden
Die Position einer Instanz wurde ungenügend präzise gefunden, d.h. die IoU zwischen der Instanz und dem Ground Truth Objekt ist kleiner als der bei der Evaluierung verwendete IoU-Schwellenwert.
Duplikate, d.h. mindestens zwei Instanzen überlappen
hauptsächlich mit dem selben Ground Truth Objekt aber überlappen
miteinander weniger als durch 'max_overlap' erlaubt,
weshalb keine der Instanzen unterdrückt wird.
Es gilt zu beachten, dass diese Werte nur aus der detaillierten
Evaluierung erhältlich sind. Dies bedeutet, in
evaluate_dl_model muss der Parameter
detailed_evaluation auf 'true' gesetzt sein.
Vorher erklärte Maße verwenden die Intersection over Union (IoU). Die IoU ist ein Maß zur Genauigkeit der Lokalisierung. Für ein vorgeschlagenes umschließendes Rechteck wird das Verhältnis folgenden beiden Flächen betrachtet: Die Fläche der Schnittmenge und die Fläche der Vereinigungsmenge des vorgeschlagenen umschließenden Rechtecks und des Ground Truth umschließenden Rechtecks. Die folgende Abbildung zeigt ein visuelles Beispiel.
| ( 1) | ( 2) |
'rectangle1'.
(1) Im Eingabebild sieht man das Ground Truth umschließende Rechteck
(in Orange) und das vorhergesagte umschließende Rechteck
(in Hellblau).
(2) Die IoU ist das Verhältnis zwischen den beiden Flächen Schnittmenge
und Vereinigungsmenge.
Aktuell unterstützt die Advanced Object Detection ausschließlich
achsenparallele umschließende Rechtecke ('rectangle1').