Dieses Kapitel beschreibt, wie Deep Learning-basierte Objektdetektion genutzt wird.
Mit der Objektdetektion will man verschiedene Instanzen auf dem Bild finden und einer Klasse zuordnen. Dabei werden auch partiell überlappende Instanzen als eigenständige Instanzen unterschieden. Dies wird im folgenden Schema illustriert.Objektdetektion führt zu zwei verschiedenen Aufgabenstellungen: Die Instanzen finden und sie einer Klasse zuordnen. Zu diesem Zweck wird ein kombiniertes Netzwerk verwendet, welches aus drei Hauptteilen besteht. Der erste Teil, das Backbone, besteht aus einem vortrainierten Netzwerk, welches auch zur Klassifikation verwendet werden kann. Seine Aufgabe ist das Generieren verschiedener Merkmalskarten, weshalb der Klassifikations-Layer entfernt wurde. Diese Merkmalskarten verschlüsseln verschiedenste Informationen auf verschiedenen Größenskalen, abhängig davon wie tief im Netzwerk sie sind, siehe dazu auch das Kapitel Deep Learning. Dabei ordnet man Merkmalskarten gleicher Größe (Breite und Höhe) der gleichen Ebene zu. Im zweiten Teil werden ausgewählte Merkmalskarten miteinander verbunden. Genauer, Backbone-Layers verschiedener Ebenen sind als Docking Layer festgelegt. Ihre Merkmalskarten werden miteinander verbunden. Daraus entstehen neue Merkmalskarten, die sowohl Informationen von tiefer als auch höher liegenden Ebenen beinhalten. Diese Merkmalskarten werden im dritten Teil verwendet. Den zweite Teil nennt man auch Merkmalspyramide und zusammen mit dem ersten Teil bilden sie das Merkmalspyramiden-Netzwerk. Der dritte Teil besteht aus zusätzlichen Netzwerken, den Heads, für jede ausgewählte Ebene. Diese kriegen je eine der Merkmalskarten als Eingabe und lernen, potentielle Objekte zu finden, respektive zu klassifizieren. Zusätzlich beinhaltet dieser dritte Teil auch die Reduktion sich überlappender umschließender Rechtecke. Eine Übersicht zu den drei Teilen ist im folgenden Schema gegeben.
Der dritte Teil soll nun genauer betrachtet werden.
In der Objektdetektion wird die Stelle einer Instanz im Bild durch ein
umschließendes Rechteck angegeben.
Somit besteht die erste Aufgabe aus dem Finden eines passenden
umschließenden Rechtecks für jede Instanz.
Dafür generiert das Netzwerk umschließende Referenzrechtecke und lernt,
wie diese anzupassen sind, um bestmöglich zu den Instanzen zu passen.
Diese Referenzrechtecke werden Anchors genannt.
Je näher die Anchors bereits an die Gestalt der verschiedenen Ground Truth
umschließenden Rechtecke kommen, desto einfacher ist es für das
Netzwerk die korrekten Formen zu lernen.
Zu diesem Zweck generiert das Netzwerk einen Satz Anchors auf jedem
Anchor-Punkt, d.h., auf jedem Pixel aller verwendeten Merkmalskarten der
Merkmalspyramide.
Ein solcher Satz besteht aus jeder möglichen Kombination aus Form, Größe
und für den Instanztyp 'rectangle2'
auch Orientierung.
Dabei wird die Form über den Parameter 'anchor_aspect_ratios'
, die
Größe über den Parameter 'anchor_num_subscales'
und die
Orientierung über den Parameter 'anchor_angles'
beeinflusst,
siehe die unten folgende Illustration und
.
Falls die gewählten Parameter mehrere identische Anchors erzeugen,
werden Duplikate vom Netzwerk intern ignoriert.
get_dl_model_param
Das Netzwerk sagt die Anpassungen voraus, um aus den Anchors angepasste umschließende Referenzrechtecke zu erhalten, welche besser zu möglichen Instanzen passen. Es lernt dies über seine Heads für die umschließenden Rechtecke, welche die vorgeschlagenen umschließenden Rechtecke mit den Ground Truth umschließenden Rechtecken vergleichen, d.h. mit der Information, wo im Bild sich einzelne Objekte befinden. Eine Illustration ist unten gegeben.
(1) | (2) |
Wie zuvor erwähnt werden Merkmalskarten verschiedener Ebenen verwendet.
Ob sehr frühe Merkmalskarten (die noch nicht sehr komprimiert sind und
somit auch kleine Merkmale aufzeigen) und sehr tiefe Merkmalskarten
(die sehr komprimiert sind und somit nur große Merkmale aufzeigen) benutzt
werden sollen oder nicht, hängt vom Größenverhältnis der gesuchten Instanzen
zum Gesamtbild ab.
Welche Ebenen berücksichtigt werden, kann über die Parameter
'min_level'
und 'max_level'
bestimmt werden.
Mit diesen umschließenden Rechtecken sind potentielle Instanzen auf dem
Bild geortet, aber noch keiner Klasse zugeordnet.
Folglich besteht die zweite Aufgabe aus dem Klassifizieren des Bildteils
innerhalb des umschließenden Rechtecks.
Dies geschieht über die Heads für die Klassen.
Für weitere Informationen zur Klassifikation im Allgemeinen wird auf das
Kapitel Deep Learning / Klassifikation und den
„Solution Guide on Classification“
verwiesen.
Höchstwahrscheinlich findet das Netzwerk verschiedene vielversprechende
Instanzen für ein einzelnes Objekt.
Solche sich überlappende, vorhergesagte umschließenden Rechtecke werden
über die 'non-maximum suppression' unterdrückt. Letztere kann über
die Parameter 'max_overlap'
und
'max_overlap_class_agnostic'
eingestellt werden, entweder direkt
beim Erstellen des Modells oder über
.
Eine Illustration ist unten gegeben.
set_dl_model_param
(1) | (2) |
Als Ausgabe werden die umschließenden Rechtecke und die Konfidenzwerte zurück gegeben. Erstere schlagen mögliche Orte für Objekte vor während letztere die Zugehörigkeit des darin enthaltenen Bildinhaltes zu einer der Klassen angibt.
In HALCON ist die Objektdetektion mittels DL als Teil des allgemeinen DL Modells implementiert. Für weitere Information zu letzterem wird auf das Kapitel Deep Learning / Modell verwiesen. Es sind zwei verschiedene Instanztypen implementiert, welche sich in den möglichen Orientierungen der umschließenden Rechtecke unterscheiden:
'rectangle1'
Die umschließenden Rechtecke sind achsenparallel.
'rectangle2'
Die umschließenden Rechtecke können beliebig orientiert sein.
Im Falle der Instanz-Segmentierung folgt ein weiterer Teil. Ein zusätzlicher Head erhält als Eingabe jeweils die Teile der Merkmalskarten, die den vorhergesagten umschließenden Rechtecken entsprechen. Daraus sagt es eine (klassenagnostische) binäre Bildmaske voraus. Diese Maske markiert die Bildregion der vorhergesagten Instanz. Eine Übersicht ist im folgenden Schema gegeben.
Die folgenden Abschnitte behandeln den generellen Ablauf der Objektdetektion, Informationen zu den involvierten Daten und Parameter sowie Erklärungen zu den Evaluierungsmaßen.
Dieser Abschnitt beschreibt den generellen Ablauf einer Objektdetektion
mittels Deep Learning.
Er ist unterteilt in die vier Bereiche
Erstellen eines Modells und Vorverarbeitung des Datensatzes,
Trainieren des Modells, Evaluierung des trainierten Modells und Inferenz
auf neuen Bildern.
Dabei wird angenommen, dass der Datensatz bereits gelabelt ist,
siehe den Absatz „Daten“ unten.
Die HDevelop Beispiels-Reihe detect_pills_deep_learning
zeigt eine mögliche Anwendung unterteilt in die einzelnen Bereiche.
Für die Instanz-Segmentierung zeigt das Beispiel
dl_instance_segmentation_workflow
den gesamten Ablauf.
Dieser Abschnitt behandelt das Erstellen eines DL Modells für
Objektdetektion und die notwendigen Anpassungen des Datensatzes an
die Anforderungen des Modells.
Die einzelnen Schritte sind im HDevelop Beispiel
detect_pills_deep_learning_1_prepare.hdev
gezeigt.
Erstellen eines Modells mit dem Operator
Dabei müssen zumindest das Backbone und die Anzahl zu unterscheidender
Klassen angegeben werden.
Falls ein Modell zur Instanz-Segmentierung erstellt werden soll,
ist der Parameter 'instance_segmentation'
zu setzen.
Weitere Parameter können über das Dictionary
angegeben werden.
Diese Parameterwerte sollten gut für die spezifische Aufgabe gewählt
werden, nicht zuletzt um möglicherweise Speicherbedarf und Laufzeit
zu reduzieren.
Für weitere Informationen wird auf die Dokumentation des Operators
verwiesen.
Dem Datensatz entsprechende Anchorparameter können mit Hilfe der
Prozedur
DLModelDetectionParam
determine_dl_model_detection_param
geschätzt werden. Falls der Datensatz jedoch nicht repräsentativ ist, was die möglichen Orientierungen während des Trainings betrifft (z.B. aufgrund möglicher Augmentation), müssen die vorgeschlagenen Werte noch entsprechend angepasst werden.
Es gilt zu beachten, dass nach dem Erstellen eines Modells seine
zugrunde liegende Architektur auf die entsprechenden Eingabewerte
festgelegt ist.
Als Resultat gibt der Operator das Handle 'DLModelHandle'
zurück.
Alternativ kann auch mit dem Operator
ein Modell eingelesen werden, welches zuvor mit
gespeichert wurde.
write_dl_model
Die Information, was auf welchem Bild des Trainings-Datensatzes gefunden werden soll, muss eingelesen werden. Dies kann geschehen durch Einlesen
eines DLDataset
durch den Operator read_dict
einer Datei im COCO Format durch die Prozedur
read_dl_dataset_from_coco
, wobei ein Dictionary
DLDataset
erstellt wird.
Das Dictionary DLDataset
dient als Datenbank, in welchem
alle notwendigen Informationen über die Daten abgespeichert werden.
Für mehr Information zu den Daten und die Art und Weise, wie sie
übergeben werden, wird auf den unteren Absatz „Daten“ und das
Kapitel Deep Learning / Modell verwiesen.
Die Daten von DLDataset
sollen in drei
getrennten Datensätze geteilt werden. Dazu kann die Prozedur
split_dl_dataset
.
verwendet werden.
Die resultierende Aufteilung wird für jeden Sample Eintrag von
DLDataset
jeweils über den Schlüssel split
gespeichert.
Das Netzwerk stellt mehrere Anforderungen an die Bilder, wie die Bilddimensionen und den Grauwertbereich. Jeder einzelne Wert kann über den Operator
abgefragt werden. Alternativ können alle Werte auf einmal über die Prozedur
create_dl_preprocess_param_from_model
.
abgefragt werden.
Die umschließenden Rechtecke der unter
'class_ids_no_orientation'
angegeben Klassen müssen bei der
Vorverarbeitung anders behandelt werden. Deshalb sollten diese Klassen
spätestens zu diesem Zeitpunkt gesetzt sein.
Der Datensatz kann nun vorverarbeitet werden. Dafür kann die Prozedur
preprocess_dl_dataset
verwendet werden. Für die Implementierung einer selbst erstellten Vorverarbeitung kann man sich an dieser Prozedur orientieren. Es wird empfohlen, alle für das Training benötigten Bilder vor dem Training vorzuverarbeiten und abzuspeichern, was das Trainieren signifikant beschleunigt.
Die vorverarbeiteten Daten können mit der Prozedur
dev_display_dl_data
visualisiert werden.
Dieser Abschnitt behandelt das Trainieren des DL Modells für
Objektdetektion.
Die einzelnen Schritte sind im HDevelop Beispiel
detect_pills_deep_learning_2_train.hdev
gezeigt.
Setzen der Trainingsparameter und Abspeichern derselben im
Dictionary TrainParam
.
Diese Parameter beinhalten:
die Hyperparameter, für eine Übersicht wird auf den unteren Abschnitt „Modellparameter und Hyperparameter“ sowie das Kapitel Deep Learning verwiesen.
Parameter zur eventuellen Datenanreicherung.
Trainieren des Modells. Dafür kann die Prozedur
train_dl_model
.
verwendet werden. Diese Prozedur benötigt:
das Handle des Modells, DLModelHandle
das Dictionary mit den Informationen über den Datensatz,
DLDataset
das Dictionary mit den Trainingsparametern,
TrainParam
die Angabe, über wie viele Epochen trainiert werden soll.
Während des Trainings sollte sich der Wert der Gesamt-Zielfunktion verringern.
Dieser Abschnitt behandelt das Evaluieren eines DL Modells für
Objektdetektion.
Die einzelnen Schritte sind im HDevelop Beispiel
detect_pills_deep_learning_3_evaluate.hdev
gezeigt.
Setzen der Modellparameter, welche die Evaluierung beeinflussen.
Die Evaluierung kann bequem mit der Prozedur
evaluate_dl_model
.
durchgeführt werden.
Diese Prozedur erwartet ein Dictionary GenParamEval
mit
den Evaluierungsparametern.
Um die Resultate danach zu visualisieren, muss der Parameter
detailed_evaluation
auf 'true'
gesetzt sein.
Die Ergebnisse der Evaluierung können mit der Prozedur
dev_display_detection_detailed_evaluation
visualisiert werden.
Dieser Abschnitt behandelt die Inferenz auf neuen Bildern durch ein
DL Modell für Objektdetektion.
Die einzelnen Schritte sind im HDevelop Beispiel
detect_pills_deep_learning_4_infer.hdev
gezeigt.
Anfragen der Bildanforderungen des Netzwerks über den Operator
oder die Prozedur
create_dl_preprocess_param_from_model
.
Setzen der Modellparameter die im unteren Abschnitt „Modellparameter und Hyperparameter“ erwähnt sind, über den Operator
Dabei kann die 'batch_size'
im Allgemeinen unabhängig von
der Anzahl der gleichzeitig zu inferierenden Bilder gesetzt werden.
Siehe
für weitere Informationen, wie man
diesen Parameter setzt, um eine größere Effizienz zu erzielen.
apply_dl_model
Generieren des Dictionarys
für jedes Bild.
Dies kann über die Prozedur
DLSample
gen_dl_samples_from_images
getan werden.
Jedes Bild muss auf dieselbe Art und Weise wie für das Training vorverarbeitet werden. Dies kann mit der Prozedur
preprocess_dl_samples
getan werden.
Anwenden des Modells über den Operator
Die Resultate können aus dem Dictionary 'DLResultBatch'
abgerufen werden.
Es wird zwischen den Daten für Training und Evaluierung versus Daten für Inferenz unterschieden. Letztere bestehen ausschließlich aus Bildern. Für Erstere wird jedoch für jedes einzelne Objekt die Information benötigt, zu welcher Klasse es gehört und wo im Bild es sich befindet (gegeben über das umschließende Rechteck). Im Falle der Instanz-Segmentierung werden zusätzlich die pixelgenauen Regionen der Objekte benötigt (gegeben über die Masken).
Ein Grundgedanke der Datenhandhabung: Das Modell interagiert mit den Daten
über Dictionaries.
Dies bedeutet, das Modell erhält die Eingabedaten über das Dictionary
und gibt die Ausgabe über das Dictionary
DLSample
, bzw. DLResult
zurück.
Für weitere Informationen zur Datenhandhabung wird auf das Kapitel
Deep Learning / Modell verwiesen.
DLTrainResult
Der Datensatz besteht aus Bildern und den dazugehörigen Informationen. Damit das Modell diese verarbeiten kann, müssen sie bestimmte Anforderungen erfüllen. Informationen zu den Bildanforderungen finden sich im unteren Abschnitt „Bilder“.
Die Trainingsdaten werden dazu genutzt, ein Netzwerk für eine
spezifische Aufgabe zu trainieren.
Mit Hilfe dieser Daten kann das Netzwerk lernen, welche Klassen es
unterscheiden soll, wie deren Vertreter aussehen und wie es diese
findet.
Die dafür notwendigen Informationen werden dadurch gegeben, dass für
jedes Objekt eines jeden Bildes gesagt wird, zu welcher Klasse es gehört
und wo auf dem Bild es sich befindet.
Im Falle der Instanz-Segmentierung wird zudem für jede Instanz eine
Maske benötigt.
Getan wird dies über das Klassenlabel und das umschließende Rechteck.
Es gibt verschiedene Arten, wie diese Informationen gespeichert und
abgerufen werden können.
Wie die Daten in HALCON für ein DL Modell vorliegen müssen, wird
im Kapitel Deep Learning / Modell erklärt.
Kurz gefasst fungiert ein Dictionary DLDataset
als Datenbank
der Informationen, die von den Trainings- und Evaluierungs-Prozeduren
benötigt werden.
Die Daten können direkt mit Hilfe des MVTec Deep Learning Tools gelabelt
werden, erhältlich auf der MVTec Webseite.
Dabei wird das Dictionary DLDataset
direkt erzeugt.
Sind die Daten bereits im Standard COCO-Format gelabelt, kann
die Prozedur read_dl_dataset_from_coco
verwendet werden
(nur für 'instance_type'
= 'rectangle1'
).
Diese formatiert die Daten und erstellt das Dictionary
DLDataset
.
Für weitere Informationen zum benötigten Part des COCO-Formats wird
auf die Dokumentation der Prozedur verwiesen.
Es sollten genügend Trainingsdaten vorliegen um diese in die drei Untermengen aufzuteilen, welche für das Training, die Evaluierung und das Testen des Netzwerks verwendet werden. Diese Untermengen sind idealerweise unabhängig und gleich verteilt, siehe den Abschnitt „Daten“ im Kapitel Deep Learning.
Es gilt zu beachten, dass das Netzwerk lernen muss, wie es mögliche Positionen und Größen von Instanzen finden soll. Deshalb ist es wichtig, dass auch alle später wichtigen Größen und Positionen im Datensatz repräsentativ vorhanden sind.
Unabhängig von der Anwendung stellt das Netzwerk Anforderungen an die
Bilder wie z.B. die Bilddimensionen.
Die spezifischen Werte hängen vom Netzwerk selbst ab und können
mit
abgefragt werden.
Um diese Anforderungen zu erfüllen, müssen die Bilder eventuell
vorverarbeitet werden.
Die Standard-Vorverarbeitung für den ganzen Datensatz und damit auch der
Bilder kann mit Hilfe der Prozedur get_dl_model_param
preprocess_dl_dataset
durchgeführt werden, bzw. preprocess_dl_samples
für
ein einzelnes Sample.
Für eine selbst erstellte Vorverarbeitung liefern diese Prozeduren eine
Anleitung für die Implementierung.
Abhängig vom Instanztyp, werden die umschließenden Rechtecke unterschiedlich parametrisiert:
'rectangle1'
Die umschließenden Rechtecke werden über
das linke obere Eck ('bbox_row1'
, 'bbox_col1'
) und
das rechte untere Eck ('bbox_row2'
, 'bbox_col2'
)
beschrieben.
Dies ist konsistent zu
.
gen_rectangle1
'rectangle2'
Die umschließenden Rechtecke werden über den Schwerpunkt
('bbox_row'
, 'bbox_col'
), der Orientierung
'bbox_phi'
und den halben Kantenlängen
'bbox_length1'
und 'bbox_length2'
beschrieben.
Die Orientierung wird in Bogenmaß angegeben und gibt den
Winkel zwischen der horizontalen Achse und 'bbox_length1'
an
(mathematisch positiv).
Dies ist konsistent zu
.
gen_rectangle2
'rectangle2'
das orientierte umschließende
Rechteck von Interesse ohne die Ausrichtung des Objekts
innerhalb dieses umschließenden Rechtecks zu berücksichtigen, so kann
der Parameter 'ignore_direction'
auf 'true'
gesetzt
werden.
Die verschiedenen Typen sind in der folgenden Abbildung illustriert.
(1) | (2) | (3) |
Instanz-Segmentierung benötigt, zusätzlich zu engen umschließenden Rechtecken, eine Maske für jedes zu lernende Objekt. Solche Masken sind als Regionen gegeben. Dabei ist zu beachten, dass sich die Regionen stets auf das Bild beziehen.
Die Masken für ein einzelnes Bild werden als Tupel von Regionen gegeben, siehe dazu die folgende Abbildung. Dabei sind die Masken in der gleichen Reihenfolge anzuordnen wie die Ground Truth Annotationen der umschließenden Rechtecke.Die Netzwerk Ausgabe hängt vom Arbeitsschritt ab:
Als Ausgabe gibt der Operator
für
das Modell ein Dictionary train_dl_model_batch
mit dem aktuellen
Wert der Gesamt-Zielfunktion sowie die Werte aller weiteren im Modell
enthaltenen Zielfunktionen zurück.
DLTrainResult
Als Ausgabe gibt der Operator
für das Modell für
jedes Bild ein Dictionary apply_dl_model
zurück.
Im Falle der Objektdetektion beinhaltet dieses Dictionary für jede
gefundene Instanz das umschließende Rechteck, den Konfidenzwert der
zugeordneten Klasse sowie der Maske im Falle der Instanz-Segmentierung.
Dabei können für ein Objekt des Bildes mehrere Instanzen gefunden
werden, siehe die obere Erklärung zur 'non-maximum suppression'.
Die umschließenden Rechtecke werden entsprechend dem Instanztyp
(über DLResult
'instance_type'
bestimmt) parametrisiert und
in pixel-zentrierten, subpixel-genauen Koordinaten angegeben.
Für weitere Informationen zu den dabei verwendeten Bildkoordinaten wird
auf das Kapitel Transformationen / 2D-Transformationen
verwiesen.
Weitere Informationen zum Ausgabe-Dictionary können im Kapitel
Deep Learning / Modell gefunden werden.
Nebst den allgemeinen DL Hyperparametern aus dem Kapitel Deep Learning gibt es für die Objektdetektion noch weitere Hyperparameter:
'bbox_heads_weight'
'class_heads_weight'
'mask_head_weight'
(im Falle der Instanz-Segmentierung)
Diese Hyperparameter können über den Operator
gesetzt werden.
Für weitere Informationen wird auf die Dokumentation des Operators
create_dl_model_detection
verwiesen.
get_dl_model_param
Für die Objektdetektion gibt es zwei Arten von Modellparametern:
Parameter, welche die Architektur beeinflussen. Diese können für ein
erstelltes Modell nicht mehr geändert werden.
Diese Parameter werden beim Erstellen des Modells über den Operator
gesetzt.
create_dl_model_detection
Parameter, welche die Vorhersage und somit auch die Evaluierung beeinflussen. Dabei sind folgende Parameter nur für die Objektdetektion relevant:
'max_num_detections'
'max_overlap'
'max_overlap_class_agnostic'
'min_confidence'
Weitere Erklärungen dazu finden sich in
.
Diese Parameter können beim Erstellen des Modells mit
get_dl_model_param
gesetzt werden oder danach mit
create_dl_model_detection
.
set_dl_model_param
Für die Objektdetektion 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.
Score of Angle Precision (SoAP)
Die Größe SoAP ist ein Maß für die Präzision der inferierten
Orientierungswinkel. Dieses Maß bestimmt sich aus der Winkeldifferenzen
zwischen den inferierten Instanzen (I) und den zugehörigen Ground Truth
Annotationen (GT):
wobei der Index über alle inferierten Instanzen läuft.
Diese Größe ist nur für Modelle mit Instanztyp 'instance_type'
'rectangle2'
definiert.
(1) | (2) |
create_dl_model_detection