Objektdetektion

Liste der Operatoren ↓

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.

image/svg+xml 'apple' 0.9 'apple' 0.7 'lemon' 0.9
Ein mögliches Beispiel der Objektdetektion: Auf dem Eingabebild werden drei verschiedene Instanzen gefunden und ihrer entsprechenden Klasse zugeordnet.

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.

image/svg+xml (1) (2) (3) + 'lemon' 0.9 'apple' 0.7 'apple' 0.9 confidences confidences confidences +
Schematische Übersicht der genannten drei Teile: (1) Das Backbone. (2) Merkmalskarten des Backbones werden miteinander kombiniert, woraus neue Merkmalskarten entstehen. (3) Zusätzliche Netzwerke, die Heads, lernen, potentielle Objekte zu erkennen und zu klassifizieren. Überlappende umschließende Rechtecke werden unterdrückt.

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 Mermkalspyramide. Ein solcher Satz besteht aus jeder möglichen Kombination aus Form, Größe und für den Instanztyp 'rectangle2'"rectangle2""rectangle2""rectangle2""rectangle2" auch Orientierung. Dabei wird die Form über den Parameter 'anchor_aspect_ratios'"anchor_aspect_ratios""anchor_aspect_ratios""anchor_aspect_ratios""anchor_aspect_ratios", die Größe über den Parameter 'anchor_num_subscales'"anchor_num_subscales""anchor_num_subscales""anchor_num_subscales""anchor_num_subscales" und die Orientierung über den Parameter 'anchor_angles'"anchor_angles""anchor_angles""anchor_angles""anchor_angles" beeinflusst, siehe die unten folgende Illustration und get_dl_model_paramget_dl_model_paramGetDlModelParamGetDlModelParamGetDlModelParam. Falls die gewählten Parameter mehrere idente Anchors erzeugen, werden Duplikate vom Netzwerk intern ignoriert.

image/svg+xml (1) (2) (4) (3)
Schema der Anchors auf der Merkmalskarte (rechts) und dem Eingabebild (links). (1) Anchors werden auf den Merkmalskarten der verschiedenen Ebenen generiert, z.B. die gezeigten Referenzrechtecke (in Hellblau, in Orange und in Dunkelblau). (2) Anchors verschiedener Größen werden generiert durch Setzen von 'anchor_num_subscales'"anchor_num_subscales""anchor_num_subscales""anchor_num_subscales""anchor_num_subscales". (3) Anchors verschiedener Seitenverhältnisse werden generiert durch Setzen von 'apsect_ratios'"apsect_ratios""apsect_ratios""apsect_ratios""apsect_ratios". (4) Anchors verschiedener Orientierungen werden generiert durch das Setzen von 'anchor_angles'"anchor_angles""anchor_angles""anchor_angles""anchor_angles" (nur für den Instanztyp 'rectangle2'"rectangle2""rectangle2""rectangle2""rectangle2").

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.

image/svg+xml image/svg+xml
(1) (2)
Darstellung der Vergleiche von umschließenden Rechtecke, illustriert für den Instanztyp 'rectangle1'"rectangle1""rectangle1""rectangle1""rectangle1". (1) Das Netzwerk passt das umschließenden Referenzrechteck (in Hellblau) an, um ein besser geeignetes umschließendes Rechteck (in Orange) vorauszusagen. (2) Während des Trainings vergleicht das Netzwerk das vorhergesagte umschließende Rechteck (in Orange) mit dem Ground Truth umschließenden Rechteck, mit dem es sich am meisten überlagert, und lernt daraus die Anpassungen.

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'"min_level""min_level""min_level""min_level" und 'max_level'"max_level""max_level""max_level""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'"max_overlap""max_overlap""max_overlap""max_overlap" und 'max_overlap_class_agnostic'"max_overlap_class_agnostic""max_overlap_class_agnostic""max_overlap_class_agnostic""max_overlap_class_agnostic" eingestellt werden, entweder direkt beim Erstellen des Modells oder über set_dl_model_paramset_dl_model_paramSetDlModelParamSetDlModelParamSetDlModelParam. Eine Illustration ist unten gegeben.

image/svg+xml image/svg+xml
(1) (2)
Unterdrückung signifikant überlappender umschließender Rechtecke, illustriert für den Instanztyp 'rectangle1'"rectangle1""rectangle1""rectangle1""rectangle1". (1) Das Netzwerk findet mehrere vielversprechende Instanzen. (2) Die Unterdrückung sich überlappender Instanzen wird über den Parameter 'max_overlap'"max_overlap""max_overlap""max_overlap""max_overlap" gesetzt. Sich überlappende Instanzen verschiedener Klassen werden nicht unterdrückt. (3) Über den Parameter 'max_overlap_class_agnostic'"max_overlap_class_agnostic""max_overlap_class_agnostic""max_overlap_class_agnostic""max_overlap_class_agnostic" werden auch sich stark überlappende Instanzen verschiedener Klassen unterdrückt.

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:

Instanztyp 'rectangle1'"rectangle1""rectangle1""rectangle1""rectangle1"

Die umschließenden Rechtecke sind achsen-parallel.

Instanztyp 'rectangle2'"rectangle2""rectangle2""rectangle2""rectangle2"

Die umschließenden Rechtecke können beliebig orientiert sein.

Die folgenden Abschnitte behandeln den generellen Ablauf der Objektdetektion, Informationen zu den involvierten Daten und Parameter sowie Erklärungen zu den Evaluierungsmaßen.

Genereller Ablauf

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.

Erstellen eines Modells und Vorbereiten des Datensatzes

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.

  1. Erstellen eines Modells mit dem Operator

    Dabei müssen zumindest das Backbone und die Anzahl zu unterscheidender Klassen angegeben werden. Weitere Parameter können über das Dictionary DLModelDetectionParamDLModelDetectionParamDLModelDetectionParamDLModelDetectionParamDLModelDetectionParam 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. 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'"DLModelHandle""DLModelHandle""DLModelHandle""DLModelHandle" zurück.

    Alternativ kann auch mit dem Operator

    ein Modell eingelesen werden, welches zuvor mit write_dl_modelwrite_dl_modelWriteDlModelWriteDlModelWriteDlModel gespeichert wurde.

  2. Die Information, was auf welchem Bild des Trainings-Datensatzes gefunden werden soll, muss eingelesen werden. Dies kann geschehen durch Einlesen

    • eines DLDatasetDLDatasetDLDatasetDLDatasetDLDataset durch den Operator read_dictread_dictReadDictReadDictReadDict

    • einer Datei im COCO Format durch die Prozedur read_dl_dataset_from_coco, wobei ein Dictionary DLDatasetDLDatasetDLDatasetDLDatasetDLDataset erstellt wird.

    Das Dictionary DLDatasetDLDatasetDLDatasetDLDatasetDLDataset 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.

  3. Die Daten von DLDatasetDLDatasetDLDatasetDLDatasetDLDataset 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 DLDatasetDLDatasetDLDatasetDLDatasetDLDataset jeweils über den Schlüssel splitsplitsplitsplitsplit gespeichert.

  4. 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.

    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.

Trainieren des Modells

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.

  1. Setzen der Trainingsparameter und Abspeichern derselben im Dictionary TrainingParamTrainingParamTrainingParamTrainingParamtrainingParam. 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.

  2. Trainieren des Modells. Dafür kann die Prozedur

    • train_dl_model.

    verwendet werden. Diese Prozedur benötigt:

    • das Handle des Modells, DLModelHandleDLModelHandleDLModelHandleDLModelHandleDLModelHandle

    • das Dictionary mit den Informationen über den Datensatz, DLDatasetDLDatasetDLDatasetDLDatasetDLDataset

    • das Dictionary mit den Trainingsparametern, TrainingParamTrainingParamTrainingParamTrainingParamtrainingParam

    • die Angabe, über wie viele Epochen trainiert werden soll.

    Während des Trainings sollte sich der Wert der Gesamt-Zielfunktion verringern.

Evaluierung des trainierten Modells

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.

  1. Setzen der Modellparameter, welche die Evaluierung beeinflussen.

  2. Die Evaluierung kann bequem mit der Prozedur

    • evaluate_dl_model.

    durchgeführt werden. Diese Prozedur erwartet ein Dictionary GenParamEvalGenParamEvalGenParamEvalGenParamEvalgenParamEval mit den Evaluierungsparametern. Um die Resultate danach zu visualisieren, muss der Parameter detailed_evaluationdetailed_evaluationdetailed_evaluationdetailed_evaluationdetailedEvaluation auf 'true'"true""true""true""true" gesetzt sein.

  3. Die Ergebnisse der Evaluierung können mit der Prozedur

    • dev_display_detection_detailed_evaluation

    visualisiert werden.

Inferenz auf neuen Bildern

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.

  1. Anfragen der Bildanforderungen des Netzwerks über den Operator

    oder die Prozedur

    • create_dl_preprocess_param_from_model.

  2. Setzen der Modellparameter die im unteren Abschnitt „Modellparameter und Hyperparameter“ erwähnt sind, über den Operator

    Dabei kann die batch_sizebatch_sizebatch_sizebatch_sizebatchSize im Allgemeinen unabhängig von der Anzahl der gleichzeitig zu inferierenden Bilder gesetzt werden. Siehe apply_dl_modelapply_dl_modelApplyDlModelApplyDlModelApplyDlModel für weitere Informationen, wie man diesen Parameter setzt, um eine größere Effizienz zu erzielen.

  3. Generieren des Dictionaries DLSampleDLSampleDLSampleDLSampleDLSample für jedes Bild. Dies kann über die Prozedur

    • gen_dl_samples_from_images

    getan werden.

  4. 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.

  5. Anwenden des Modells über den Operator

  6. Die Resultate können aus dem Dictionary 'DLResultBatch'"DLResultBatch""DLResultBatch""DLResultBatch""DLResultBatch" abgerufen werden.

Daten

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).

Ein Grundgedanke der Datenhandhabung: Das Modell interagiert mit den Daten über Dictionaries. Dies bedeutet, das Modell erhält die Eingabedaten über das Dictionary DLSampleDLSampleDLSampleDLSampleDLSample und gibt die Ausgabe über das Dictionary DLResultDLResultDLResultDLResultDLResult, bzw. DLTrainResultDLTrainResultDLTrainResultDLTrainResultDLTrainResult zurück. Für weitere Informationen zur Datenhandhabung wird auf das Kapitel Deep Learning / Modell verwiesen.

Daten für das Training und die Evaluierung

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. 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 DLDatasetDLDatasetDLDatasetDLDatasetDLDataset 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 DLDatasetDLDatasetDLDatasetDLDatasetDLDataset direkt erzeugt. Sind die Daten bereits im Standard COCO-Format gelabelt, kann die Prozedur create_dl_dataset_from_coco verwendet werden (nur für 'instance_type'"instance_type""instance_type""instance_type""instance_type" = 'rectangle1'"rectangle1""rectangle1""rectangle1""rectangle1"). Diese formatiert die Daten und erstellt das Dictionary DLDatasetDLDatasetDLDatasetDLDatasetDLDataset. 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.

Bilder

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 get_dl_model_paramget_dl_model_paramGetDlModelParamGetDlModelParamGetDlModelParam 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 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.

Umschließende Rechtecke

Abhängig vom Instanztyp, werden die umschließenden Rechtecke unterschiedlich parametrisiert:

Instanztyp 'rectangle1'"rectangle1""rectangle1""rectangle1""rectangle1"

Die umschließenden Rechtecke werden über das linke obere Eck ('bbox_row1'"bbox_row1""bbox_row1""bbox_row1""bbox_row1", 'bbox_col1'"bbox_col1""bbox_col1""bbox_col1""bbox_col1") und das rechte untere Eck ('bbox_row2'"bbox_row2""bbox_row2""bbox_row2""bbox_row2", 'bbox_col2'"bbox_col2""bbox_col2""bbox_col2""bbox_col2") beschrieben. Dies ist konsistent zu gen_rectangle1gen_rectangle1GenRectangle1GenRectangle1GenRectangle1.

Instanztyp 'rectangle2'"rectangle2""rectangle2""rectangle2""rectangle2"

Die umschließenden Rechtecke werden über den Schwerpunkt ('bbox_row'"bbox_row""bbox_row""bbox_row""bbox_row", 'bbox_col'"bbox_col""bbox_col""bbox_col""bbox_col"), der Orientierung 'bbox_phi'"bbox_phi""bbox_phi""bbox_phi""bbox_phi" und den halben Kantenlängen 'bbox_length1'"bbox_length1""bbox_length1""bbox_length1""bbox_length1" und 'bbox_length2'"bbox_length2""bbox_length2""bbox_length2""bbox_length2" beschrieben. Die Orientierung wird in Bogenmaß angegeben und gibt den Winkel zwischen der horizontalen Achse und 'bbox_length1'"bbox_length1""bbox_length1""bbox_length1""bbox_length1" an (mathematisch positiv). Dies ist konsistent zu gen_rectangle2gen_rectangle2GenRectangle2GenRectangle2GenRectangle2.

Ist im Falle von 'rectangle2'"rectangle2""rectangle2""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'"ignore_direction""ignore_direction""ignore_direction""ignore_direction" auf 'true'"true""true""true""true" gesetzt werden. Die verschiedenen Typen sind in der folgenden Abbildung illustriert.
image/svg+xml image/svg+xml image/svg+xml
(1) (2) (3)
Darstellung der umschließenden Rechtecke der verschiedenen Instanztypen: (1) Instanztyp 'rectangle1'"rectangle1""rectangle1""rectangle1""rectangle1". (2) Instanztyp 'rectangle2'"rectangle2""rectangle2""rectangle2""rectangle2", wobei das umschließende Rechteck in Richtung Bananenspitze orientiert ist. (3) Instanztyp 'rectangle2'"rectangle2""rectangle2""rectangle2""rectangle2", wobei das orientierte umschließende Rechteck von Interesse ist, jedoch ohne Berücksichtigung der Ausrichtung der Bananenspitze innerhalb des umschließenden Rechtecks.
Netzwerk Ausgabe

Als Trainingsausgabe gibt der Operator train_dl_model_batchtrain_dl_model_batchTrainDlModelBatchTrainDlModelBatchTrainDlModelBatch für das Modell ein Dictionary DLTrainResultDLTrainResultDLTrainResultDLTrainResultDLTrainResult mit dem aktuellen Wert der Gesamt-Zielfunktion sowie die Werte aller weiteren im Modell enthaltenen Zielfunktionen.

Als Inferenz- und Evaluierungs-Ausgabe gibt der Operator apply_dl_modelapply_dl_modelApplyDlModelApplyDlModelApplyDlModel für das Modell für jedes Bild ein Dictionary DLResultDLResultDLResultDLResultDLResult zurück. Im Falle der Objektdetektion beinhaltet dieses Dictionary für jede gefundene Instanz das umschließende Rechteck sowie den Konfidenzwert der zugeordneten Klasse. 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 'instance_type'"instance_type""instance_type""instance_type""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.

Modellparameter und Hyperparameter

Nebst den allgemeinen DL Hyperparametern aus dem Kapitel Deep Learning gibt es für die Objektdetektion noch weitere Hyperparameter:

Diese Hyperparameter können über den Operator create_dl_model_detectioncreate_dl_model_detectionCreateDlModelDetectionCreateDlModelDetectionCreateDlModelDetection gesetzt werden. Für weitere Informationen wird auf die Dokumentation des Operators get_dl_model_paramget_dl_model_paramGetDlModelParamGetDlModelParamGetDlModelParam verwiesen.

Für die Objektdetektion gibt es zwei Arten von Modellparametern:

Evaluierungsmaße für die Daten der Objektdetektion

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.

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.
image/svg+xml image/svg+xml IoU=
(1) (2)
Visuelles Beispiel des IoU, illustriert für den Instanztyp 'rectangle1'"rectangle1""rectangle1""rectangle1""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.

Liste der Operatoren

create_dl_model_detectionCreateDlModelDetectionCreateDlModelDetectioncreate_dl_model_detection
Erzeugen eines Deep Learning-Netzwerks zur Objektdetektion.