Deep 3D Matching

Liste der Operatoren ↓

Diese Kapitel beschreibt die Verwendung von Deep 3D Matching.

Deep 3D Matching wird verwendet, um Objekte in einer Szene genau zu erkennen und ihre 3D-Pose zu berechnen. Dieser Ansatz ist besonders effektiv für komplexe Szenarien, in denen herkömmliche 3D-Matching-Techniken (wie das formbasierte 3D-Matching) aufgrund von Variationen im Erscheinungsbild von Objekten, Verdeckungen oder verrauschten Daten Schwierigkeiten haben können. Im Vergleich zum oberflächenbasierten Matching arbeitet das Deep 3D-Matching mit einem kalibrierten Mehrbild-Setup und benötigt keine Daten von einem 3D-Sensor.

image/svg+xml
Ein mögliches Beispiel für eine Deep 3D Matching Anwendung: Ein Objekt wird aus verschiedenen Winkeln aufgenommen und erkannt, anschließend wird seine 3D Pose berechnet.

Das Deep 3D Matching-Modell besteht aus zwei Komponenten, die sich zwei unterschiedlichen Aufgaben widmen, nämlich die Lokalisierung von Objekten und Bestimmung von Objektposen. Für eine Deep 3D Matching-Anwendung werden beide Komponenten auf dem 3D-CAD-Modell trainiert, das in den Anwendungsszenen gefunden werden soll.

HALCON bietet Funktionalitäten um beide Komponenten eines Deep 3D Matching-Modells zu trainieren. Falls Sie Unterstützung beim Training der Netze benötigen, können Sie sich an Ihren HALCON-Vertriebspartner für weitere Informationen wenden.

Nach dem Training kann das Deep 3D Matching-Modell verwendet werden, um die Pose des Objekts zu bestimmen. Bei der Inferenz werden dabei Bilder aus verschiedenen Aufnahmewinkeln als Eingabe verwendet.

Genereller Ablauf der Inferenz

In diesem Abschnitt wird beschrieben, wie eine 3D-Pose mithilfe der Deep 3D Matching-Methode bestimmt wird. Ein Anwendungsszenario ist im HDevelop-Beispiel deep_3d_matching_workflow.hdev zu sehen.

  1. Lesen Sie das trainierte Deep 3D Matching-Modell mithilfe von

    ein.

  2. Optimieren der Deep Learning-Netzwerke für die Verwendung mit AI 2-Interfaces.

    1. Extrahieren des Detektionsnetzwerk aus dem Deep-3D-Matching-Modell mit

    2. Optimieren des Parameters für die Inferenz mit

    3. Setzen des optimierten Detektionsnetzwerk mit

    4. Wiederholen Sie diese Schritte für das Netzwerk zur Schätzung der 3D-Posen.

    5. Speichern des optimierten Modells mit

      Zu beachten ist, dass die Optimierung des Modells einen erheblichen Einfluss auf die Laufzeit hat, wenn sie bei jedem Inferenzlauf durchgeführt wird. Das Schreiben des optimierten Modells spart also Zeit bei der Inferenz.

  3. Setzen der Kameraparameter mit

  4. Ausführen des Modells mit dem Operator

  5. Visualisieren der Ergebnisse mit 3D-Posen.

Erstellung synthetischer Trainingsdaten

Die Erstellung realistischer, synthetischer Datensätze für das Training von Deep 3D Matching-Modellen in HALCON erfolgt durch einen integrierten Workflow mit der Scene Engine. Diese ermöglicht realistische Objektplatzierung, variable Objekt- und Umgebungseigenschaften, flexible Kameraperspektiven und fotorealistisches Rendering.

Eine Physik-Engine simuliert realistische Objektplatzierungen durch das Fallenlassen in die Szene.

Der Asset-Manager definiert Materialeigenschaften wie Textur, Reflexion und Transparenz, um realistische Oberflächen zu erzeugen. Unterschiedliche Hintergründe und Beleuchtungsszenarien sorgen für Variabilität.

Strategische Kamerapositionierung ermöglicht Aufnahmen aus verschiedenen Winkeln und Entfernungen, um reale Beobachtungsbedingungen zu simulieren.

Ein fotorealistisches Rendering stellt Licht, Schatten und Reflexionen detailliert dar und liefert hochwertige Trainingsdaten für Deep 3D Matching-Modelle.

Die damit generierten Datensätzen liefern die umfangreichen und vielfältigen Daten, die für das effektive Training von Deep 3D Matching Modellen in HALCON notwendig sind.

Ein Anwendungsbeispiel mit der Scene Engine kann in der HDevelop Beispielanwendung deep_3d_matching_data_generation.hdev eingesehen werden.

Erstellung des Datensatzes

  1. Lesen des CAD-Objektmodells mit

  2. Erstellen eines Dictionarys zum Sammeln der erzeugten Daten. Hierzu kann die Prozedur

    • create_dataset_deep_3d_matching

    verwendet werden.

  3. Speichern des Dictionarys mittels des Operators

Konfiguration der Scene Engine-Umgebung

  1. Starten der Scene Engine mit dem Operator

  2. Erzeugen der Defaultparameter für die Scene Engine-Umgebung. Dies kann mit der Prozedur

    • create_scene_engine_run_params

    erfolgen.

  3. Setzen der Parameter für Material, Oberflächenbeschaffenheit und Farbe. Dies kann mit der Prozedur

    • set_scene_engine_run_param

    erfolgen.

  4. Konfigurieren der Kameraeinstellungen mit der Prozedur

    • set_scene_engine_run_param.

Erzeugen der Daten

  1. Starten des Renderprozesses mit

  2. Abfragen der Ground-Truth-Daten, hierzu kann die Prozedur

    • get_data_generation_gt

    verwendet werden.

  3. Speichern des Dictionaries mit den erzeugten Daten, mit dem Operator

Training des Modells

Dieser Abschnitt beschreibt das Training eines Deep 3D Matching-Modells unter Verwendung synthetischer Daten. Für ein Anwendungsszenario siehe auch das HDevelop Beispiel deep_3d_matching_training_workflow.hdev.

Erstellen des Deep 3D Matching Modells

  1. Lesen des gerenderten Datensatzes mit

  2. Erhalten des CAD-Objektmodells aus dem eingelesenen Datensatz über den Key 'orig_3d_model'.

  3. Erstellen des Deep 3D Matching-Modells, welches beide Komponenten enthält:

    • dl_model_detection und

    • dl_model_pose_estimation

    mit dem Operator create_deep_matching_3dcreate_deep_matching_3dCreateDeepMatching3dCreateDeepMatching3dcreate_deep_matching_3d.

Vorbereitung für das Training

Bevor mit der Vorverarbeitung begonnen wird, müssen sowohl der Datensatz als auch das Modell angepasst werden, damit sie später verwendet werden können.

  1. Bevor die Komponenten des Deep 3D Matching-Modells separat trainiert werden, müssen sie aus dem Modell extrahiert werden. Dies kann mit

    gemacht werden.

  2. Der Datensatz für die Posenschätzungskomponente muss in ein Format umgewandelt werden, das vom Modell verarbeitet werden kann. Hierzu kann die Prozedur

    • convert_dl_dataset_detection_to_pose_estimation

    verwendet werden. Dabei wird ein Dictionary DLDataset erstellt, welches als Datenbank dient und alle notwendigen Informationen über die Daten speichert. Für mehr Information zu Datensätzen, wird auf das Kapitel Deep Learning / Modell verwiesen.

Vorverarbeitung des Datensatzes

Diese Schritte müssen für die Detektions- und Posenschätzungskomponente des Modells jeweils getrennt durchgeführt werden. Für Information darüber, welche Daten für den Deep 3D Matching-Workflows verwendet werden, wird auf den unteren Absatz „Daten“ verwiesen.

  1. Die Daten von DLDataset sollen in drei getrennte Datensätze aufgeteilt werden. Dazu kann die Prozedur

    • split_dl_dataset

    verwendet werden.

  2. Angeben der Vorverarbeitungsparameter wie z.B. die Bildgröße. Die Parameter und ihre Werte werden im Dictionary DLPreprocessParam gespeichert. Zur Erzeugung dieses Dictionarys kann die Prozedur

    • create_dl_preprocess_param_from_model

    verwendet werden.

  3. Der Datensatz kann nun vorverarbeitet werden. Dazu kann die Prozedur

    • preprocess_dl_dataset

    verwendet werden.

Training des Modells

Dieser Abschnitt erklärt, wie die Posenschätzungs- oder Detektionskomponente eines Deep 3D Matching-Modells trainiert wird.

  1. Setzen der Trainingsparameter und Abspeichern derselben im Dictionary TrainParam mit

    • create_dl_train_param.

  2. Trainiere das Modell. Dies kann mit

    • train_dl_model.

    gemacht werden. Die Prozedur erwartet:

    • das Handel des Modells DLModelHandleDLModelHandleDLModelHandleDLModelHandledlmodel_handle,

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

    • das Dictionary mit den Trainingsparametern, TrainParam.

Nach einem erfolgreichen Training des Detektionsnetzes und des Posenschätzungsnetzes kann das kombinierte Deep 3D Matching-Modell für die Inferenz verwendet werden (siehe Abschnitt „Allgemeiner Workflow für Deep 3D Matching Inferenz“ oben).

Daten

Dieser Abschnitt enthält Informationen zum Kamera-Setup und zu den Daten, welche für die Inferenz oder das Training eines Deep 3D Matching-Modells benötigt werden.

Für weitere Informationen zur Datenhandhabung wird auf das Kapitel Deep Learning / Modell verwiesen.

Mehrbild-Kamera-Setup

Um Deep 3D Matching mit hoher Genauigkeit nutzen zu können, wird ein kalibriertes Stereo- oder Mehrbild-Setup benötigt. Im Vergleich zur Stereo-Rekonstruktion kann Deep 3D Matching mit stärker variierenden Kamerakonstellationen und -entfernungen umgehen. Außerdem ist es nicht erforderlich, 3D-Sensoren zu verwenden. Informationen zur Kalibrierung des verwendeten Aufbaus finden Sie im Kapitel Kalibrierung / Mehrbild.

Die zu erkennenden Objekte müssen aus zwei oder mehreren verschiedenen Perspektiven erfasst werden um daraus die 3D-Posen zu berechnen.

image/svg+xml image/svg+xml
( 1) ( 2)
Beispielsetups für Deep 3D Matching: Szenen werden von mehreren Kameras aufgenommen, die zu erkennenden Objekte müssen dabei nicht von jeder einzelnen Kamera gesehen werden (allerdings von mindestens zwei Kameras).
Daten für Training

Die Trainingsdaten werden verwendet, um die beiden Komponenten eines Deep 3D Matching-Modells speziell für Ihre Anwendung zu trainieren und zu validieren. Die erforderlichen Trainingsdaten werden anhand von CAD-Daten erzeugt. Es werden synthetische Bilder des Objekts aus verschiedenen Blickwinkeln, bei verschiedenen Lichtverhältnissen und vor verschiedenen Hintergründen erstellt. Es ist zu beachten, dass keine realen Bilder erforderlich sind, die benötigten Daten werden nur auf der Grundlage des CAD-Modells generiert.

Die dafür benötigten Daten sind ein CAD-Modell und entsprechende Informationen über Material, Oberflächenbeschaffenheit und Farbe. Informationen über mögliche axiale und radiale Symmetrien können die generierten Trainingsdaten deutlich verbessern.

Anforderungen an DLDataset

Für das Training des Deep 3D Matching- Modells muss der Datensatz Bilder mit Objekten enthalten, die mit rotierten umschließenden Rechtecken markiert sind. Die Informationen werden bei der Erzeugung der synthetischen Daten erstellt. Dies umfasst:

  • 'class_ids': Klassen-IDs

  • 'class_names': Klassennamen

  • 'image_dir': Basispfad zu den Bildern

  • 'orig_3d_model': 3D CAD-Modell

  • 'samples': Tupel von Dictionarys, eines für jedes Sample

    • 'image_id': ID des Bildes

    • 'image_file_name': relativer Pfad und Dateiname des Bildes

    • 'bbox_row1': Zeilenkoordinate der oberen linken Ecke des umschließenden Rechtecks

    • 'bbox_col1': Spaltenkoordinate der oberen linken Ecke des umschließenden Rechtecks

    • 'bbox_row2': Zeilenkoordinate der unteren rechten Ecke des umschließenden Rechtecks

    • 'bbox_col2': Spaltenkoordinate der unteren rechten Ecke Ecke des umschließenden Rechtecks

    • 'bbox_label_id': Klassen-IDs der umschließenden Rechtecke

    • 'camera_parameter': Kameraparameter für das Bild

    • 'mask': Masken der Objektinstanzen

    • 'pose': Pose der Objekte in jedem umschließenden Rechteck (Tupel von HALCON-Posen)

    • 'visibility': Anteil der Sichtbarkeit der umschließenden Rechtecke

Bilder

Das Modell stellt Anforderungen an Bilder, wie z.B. Bilddimensionen, Grauwertbereich und Typ. Für spezifische Werte der trainierbaren Komponenten des Deep 3D Matching-Modells, wird auf create_deep_matching_3dcreate_deep_matching_3dCreateDeepMatching3dCreateDeepMatching3dcreate_deep_matching_3d verwiesen. Für ein eingelesenes Netzwerk können die Werte mit get_dl_model_paramget_dl_model_paramGetDlModelParamGetDlModelParamget_dl_model_param abgefragt werden. Um diese Anforderungen zu erfüllen, müssen die Bilder eventuell vorverarbeitet werden. Die Standard-Vorverarbeitung für das ganze Sample, und damit auch für das Bild, kann mit Hilfe der Prozedur preprocess_dl_samples durchgeführt werden.

Modellausgabe des Trainings

Der Operator gibt ein Dictionary DLTrainResultDLTrainResultDLTrainResultDLTrainResultdltrain_result zurück, das den aktuellen Wert des Trainings-Loss sowie die Werte für alle anderen Losses enthält, die im Modell enthalten sind.


Liste der Operatoren

apply_deep_matching_3dApplyDeepMatching3dapply_deep_matching_3dApplyDeepMatching3dapply_deep_matching_3d
Bestimmen der Objektpose mit Hilfe von Deep 3D Matching.
create_deep_matching_3dCreateDeepMatching3dcreate_deep_matching_3dCreateDeepMatching3dcreate_deep_matching_3d
Erstellen eines Deep 3D Matching-Modells.
get_deep_matching_3d_paramGetDeepMatching3dParamget_deep_matching_3d_paramGetDeepMatching3dParamget_deep_matching_3d_param
Abrufen eines Parameters eines Deep 3D Matching-Modell.
get_scene_engine_paramGetSceneEngineParamget_scene_engine_paramGetSceneEngineParamget_scene_engine_param
Abfragen eines Parameters des Datengenerierungs-Tools Scene Engine.
open_scene_engineOpenSceneEngineopen_scene_engineOpenSceneEngineopen_scene_engine
Startet und verbindet sich zur Scene Engine, dem Tool zur Generierung synthetischer Daten.
read_deep_matching_3dReadDeepMatching3dread_deep_matching_3dReadDeepMatching3dread_deep_matching_3d
Lesen eines Deep 3D Matching-Modells aus einer Datei.
run_scene_engineRunSceneEnginerun_scene_engineRunSceneEnginerun_scene_engine
Generieren synthetischer Daten mittels Scene Engine.
set_deep_matching_3d_paramSetDeepMatching3dParamset_deep_matching_3d_paramSetDeepMatching3dParamset_deep_matching_3d_param
Setzen eines Deep 3D Matching-Modell Parameters.
set_scene_engine_paramSetSceneEngineParamset_scene_engine_paramSetSceneEngineParamset_scene_engine_param
Setzt Parameter für das Datengenerierungs-Tool Scene Engine.
write_deep_matching_3dWriteDeepMatching3dwrite_deep_matching_3dWriteDeepMatching3dwrite_deep_matching_3d
Abspeichern eines Deep 3D Matching-Modells in eine Datei.