Dieses Kapitel beschreibt die Nutzung der 3D Gripping Point Detection.
Mit der 3D Gripping Point Detection findet man geeignete Greifpunkte auf der Oberfläche beliebiger Objekte in einer 3D-Szene. Die Ergebnisse können verwendet werden um die Greifpunkte mit einem Roboterarm anzusteuern und die die Objekte mit einem Vakuumsauger anzuheben.
HALCON liefert ein vortrainiertes Modell, das ohne zusätzlichen Trainingsschritt bereit für die Inferenz ist. Um das Modell auf eine spezifische Aufgabe abzustimmen kann es für einen eigenen Anwendungsbereich nachtrainiert werden. Dabei funktioniert die 3D Gripping Point Detection auch für Objekte, die im Training nicht aufgetreten sind. Außerdem ist es nicht notwendig 3D-Objektmodelle für die Objekte, die angesteuert werden sollen, bereitzustellen. 3D Gripping Point Detection kann außerdem mit Szenen umgehen, die mehrere unterschiedliche Objekte gleichzeitig beinhalten, Szenen, in denen teilweise verdeckte Objekte enthalten sind, sowie Szenen, die Störungen in den 3D-Daten enthalten.
In den folgenden Abschnitten werden sowohl der generelle Ablauf der Inferenz als auch das Nachtrainieren beschrieben.
Dieser Abschnitt beschreibt, wie ein passender Greifpunkt auf beliebigen
Objektoberflächen mit Hilfe eines 3D Gripping Point Detection-Modells
bestimmt werden kann.
Ein Anwendungsszenario findet sich im HDevelop-Beispielprogramm
3d_gripping_point_detection_workflow.hdev.
Einlesen eines vortrainierten 3D Gripping Point Detection-Modells mit
Setzen von Modellparametern, beispielsweise bezüglich der verwendeten Hardware-Einheit oder der Bilddimensionen, mit
Generieren eines Dictionarys DLSample für jede 3D-Szene.
Dazu kann die Prozedur
gen_dl_samples_3d_gripping_point_detection
verwendet werden, welche verschiedene Arten von 3D-Daten verarbeiten kann. Für weitere Informationen zu den Anforderungen an die Daten siehe den Abschnitt „Daten“ weiter unten.
Vorverarbeiten der Daten vor der Inferenz. Dazu wird die Prozedur
preprocess_dl_samples
verwendet. Die notwendigen Vorverarbeitungsparameter können aus dem Modell mittels
create_dl_preprocess_param_from_model
generiert werden, oder manuell mittels
create_dl_preprocess_param
gesetzt werden.
Es ist zu beachten, dass die Vorverarbeitung der Daten einen signifikanten Einfluss auf die Inferenz hat. Für weitere Details, siehe den Abschnitt „3D-Szenen“ weiter unten.
Anwenden des Modells über den Operator
Nachverarbeiten des Ergebnisses in DLResult um
Greifpunkte für die Szene zu erhalten mittels
gen_dl_3d_gripping_points_and_poses.
Visualisieren der 2D- und 3D-Ergebnisse mit den Prozeduren
dev_display_dl_data bzw.
dev_display_dl_3d_data.
Dieser Abschnitt beschreibt wie das Modell der 3D Gripping Point Detection
mit eigenen Daten nachtrainiert und evaluiert werden kann.
Siehe auch das HDevelop-Beispiel
3d_gripping_point_detection_training_workflow.hdev für eine
Beispielanwendung.
Dieser Abschnitt behandelt die notwendigen Anpassungen des Datensatzes.
Die Informationen des Datensatzes müssen eingelesen werden. Dazu kann die Prozedur
read_dl_dataset_3d_gripping_point_detection
verwendet werden.
Dabei wird ein Dictionary DLDataset
erstellt, welches als Datenbank dient und alle notwendigen
Informationen über die Daten abspeichert.
Für mehr Information zu den Daten und wie sie
übergeben werden, wird auf den unteren Absatz „Daten“ und das
Kapitel Deep Learning / Modell verwiesen.
Die Daten von DLDataset sollen in drei
getrennte Datensätze aufgeteilt werden. Dazu kann die Prozedur
split_dl_dataset
verwendet werden.
Das Netzwerk stellt mehrere Anforderungen an die Bilder (wie z.B. die Bilddimensionen und den Grauwertbereich). Diese Werte können mit
abgefragt werden. Dafür muss das Modell erst eingelesen werden mittels
Der Datensatz kann nun vorverarbeitet werden. Dazu kann die Prozedur
preprocess_dl_dataset
verwendet werden.
Um diese Prozedur zu verwenden, müssen die Vorverarbeitungsparameter
wie z.B. die Bildgröße festgelegt werden.
Die Parameter und ihre Werte sind im Dictionary
DLPreprocessParam zu speichern.
Zur Erzeugung dieses Dictionarys kann die Prozedur
create_dl_preprocess_param_from_model
verwendet werden.
Es wird empfohlen, das Dictionary DLPreprocessParam
abzuspeichern, um während der späteren Inferenz-Phase Zugang zu
den Werten zu haben.
Dieser Abschnitt behandelt das Nachtrainieren eines 3D Gripping Point Detection-Modells.
Setzen der Trainingsparameter und Abspeichern derselben im
Dictionary TrainParam.
Für dies kann die Prozedur
create_dl_train_param
verwendet werden.
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.
Dieser Abschnitt behandelt das Evaluieren eines 3D Gripping Point Detection-Modells.
Setzen aller Modellparameter, welche die Evaluierung beeinflussen können.
Die Evaluierung kann bequem mit der Prozedur
evaluate_dl_model
durchgeführt werden.
Diese Prozedur erwartet ein Dictionary GenParam mit den
Evaluierungsparametern.
Das Dictionary EvaluationResults enthält die
angefragten Evaluierungsmaße.
Um einen Eindruck von der Leistung des nachtrainierten Modells
im Verhältnis zum bereits vortrainierten Modell zu erhalten, können
deren Evaluierungsmaße verglichen werden.
Die Evaluierungsmaße werden weiter unten im Abschnitt
„Evaluierungsmaße für die Daten der 3D Gripping Point Detection“
erläutert.
Dieser Abschnitt enthält Informationen bezüglich Daten, die für die Inferenz oder das Trainieren und Evaluieren eines 3D Gripping Point Detection-Modells benötigt werden.
Ein Grundgedanke der Datenhandhabung: Das Modell interagiert mit den Daten
über Dictionaries.
Dies bedeutet, das Modell erhält die Eingabedaten über das Dictionary
DLSample und gibt die Ausgabe über das Dictionary
DLResult zurück.
Für weitere Informationen zur Datenhandhabung wird auf das Kapitel
Deep Learning / Modell verwiesen.
Die 3D Gripping Point Detection verarbeitet 3D-Szenen, welche aus klassischen 2D-Bildern und Tiefeninformationen bestehen.
Um diese 3D-Daten an die Anforderungen für Eingabedaten des Netzwerks anzupassen ist ein Vorverarbeitungsschritt für die Inferenz notwendig. Für Informationen zu bestimmten Vorverarbeitungsparametern, siehe den Abschnitt „Spezifische Vorverarbeitungsparameter“ weiter unten. Es wird empfohlen einen hochauflösenden 3D-Sensor zu verwenden um die notwendige Datenqualität zu sicherzustellen. Folgende Daten werden benötigt:
RGB-Bild, oder
Intensitätsbild (Grauwertbilder)
X-Bild (Werte müssen von links nach rechts aufsteigend)
Y-Bild (Werte müssen von oben nach unten aufsteigend)
Z-Bild (Werte müssen von dem Sensor nahen zu fernen Punkten aufsteigen; das ist z.B. der Fall wenn die Daten bezüglich des Kamerakoordinatensystems angegeben werden)
| ( 1) | ( 2) | ( 3) |
2D-Mappings (3-kanaliges Bild)
Um den Suchbereich einzuschränken kann die Domäne des RGB-/Intensitätsbildes reduziert werden. Es ist zu beachten, dass die Domäne der XYZ-Bilder und der (optionalen) Normalenbilder identisch sein muss. Außerdem dürfen für alle Eingabedaten nur gültige Pixel Teil der genutzten Domäne sein.
Die Trainingsdaten werden dazu genutzt, ein Netzwerk für ein spezifisches Szenario zu trainieren.
Der Datensatz besteht dabei aus 3D-Szenen und dazugehörigen Segmentierungsbildern, in welchen Informationen zu greifbaren Oberflächen enthalten sind. Sie müssen so zur Verfügung gestellt werden, dass das Modell sie verarbeiten kann. Die Anforderungen an die 3D-Szenen werden im Abschnitt „3D scenes“ weiter oben erklärt.
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 als Datenbank
der Informationen, die von den Trainings- und Evaluierungs-Prozeduren
benötigt werden.
DLDataset
Die Daten für können mit
DLDatasetread_dl_dataset_3d_gripping_point_detection eingelesen werde.
Die Prozedurenreferenz von
read_dl_dataset_3d_gripping_point_detection enthält detaillierte
Anforderungen an ein 3D Gripping Point Detection .
DLDataset
Gemeinsam mit den 3D-Szenen müssen Segmentierungsbilder übergeben werden, welche als Ground Truth fungieren. Die Segmentierungsbilder enthalten zwei verschiedene Grauwerte, mit welchen jedes Pixel entweder als zulässiger oder unzulässiger Greifpunkt gekennzeichnet wird. Die Bilder können direkt mit Hilfe des MVTec Deep Learning Tools gelabelt werden (erhältlich auf der MVTec Webseite).
| ( 1) | ( 2) |
Es sollte sichergestellt werden, dass die gelabelten Bereiche nur zuverlässige Greifpunkte für den Roboter kennzeichnen. Folgende Punkte sollten beim Labeln beachtet werden:
Greifpunkte müssen auf einer Oberfläche sein, die für den Roboterarm ohne Blockierung erreichbar ist.
Greifpunkte müssen auf einer Oberfläche sein, die der Roboter mit seinem Vakuumsauger greifen kann. Daher sollten für das zu greifende Objekt auch Material, Form und die Oberflächenneigung bezüglich der Grundebene mitberücksichtigt werden.
Die Größe des Vakuumsaugers sollte mitberücksichtigt werden.
Die Saugkraft des Vakuumsaugers sollte mitberücksichtigt werden.
Greifpunkte sollten tendenziell in der Nähe des Objektschwerpunkts liegen (besonders bei möglicherweise schwereren Objekten).
Greifpunkte sollten nicht am Rand eines Objektes liegen.
Greifpunkte sollten nicht am Rand der sichtbaren Fläche eines Objektes liegen.
Als Ausgabe gibt das Modell ein Dictionary DLResult für jedes
Sample zurück. Dieses Dictionary beinhaltet die folgenden Einträge:
'gripping_map': Binärbild, das für jedes Pixel der Szene
angibt, ob das Modell einen Greifpunkt vorhergesagt hat
(Pixelwert = 1.0) oder nicht (0.0).
'gripping_confidence': Bild, das für jeden Punkt der
Szene unverarbeitete, unkalibrierte Konfidenzwerte
enthält.
Die Modell-Ergebnisse in DLResult können mit
gen_dl_3d_gripping_points_and_poses
nachverarbeitet werden um Greifpunkte zu generieren.
Diese Prozedur kann außerdem parametrisiert werden um kleine Greifflächen
zu unterdrücken (mit min_area_size), oder als Vorlage dienen
um eigene Auswahlkriterien zu definieren.
Folgender Eintrag wird von dieser Prozedur zum Dictionary
DLResult hinzugefügt:
'gripping_points': Tupel von Dictionaries mit Informationen
zu geeigneten Greifpunkten in einer Szene:
'region': Zusammenhängende Region möglicher Greifpunkte.
Der bestimmte Greifpunkt liegt innerhalb dieser
Region.
'row': Zeilenkoordinate des Greifpunktes im
vorverarbeiteten RGB-/Intensitätsbild.
'column': Spaltenkoordinate des Greifpunktes im
vorverarbeiteten RGB-/Intensitätsbild.
'pose': 3D-Pose des Greifpunktes (relativ zum
Koordinatensystem der XYZ-Bilder, also der
Kamera), die vom Roboter
genutzt werden kann.
In HALCON werden für die 3D Gripping Point Detection folgenden Evaluierungsmaße unterstützt:
mean_proMittelwert der Überlappung aller Ground Truth-Flächen, die als Greifpunkte gelabelt wurden, mit den Vorhersagen (Per-Region Overlap). Siehe das unten zitierte Paper für eine detaillierte Beschreibung dieses Evaluierungsmaßes.
mean_precisionMittelwert der Pixel-basierten Precision der Vorhersagen für die Klasse der Greifpunkte. Die Precision ist das Verhältnis von 'True Positives' zu allen 'Positives' ('True Positives' (TP) und 'False Positives' (FP)).
mean_iouIntersection over Union (IoU) der Pixel der Ground Truth und der als Greifpunkte vorhergesagten Pixel. Siehe Deep Learning / Semantische Segmentierung und Kantenextraktion für eine detailliertere Beschreibung dieses Evaluierungsmaßes.
gripping_point_precisionVerhältnis von 'True Positives' zu allen 'Positives'.
Für dieses Evaluierungsmaß gilt ein korrekt vorhergesagter Greifpunkt als 'True Positive'. Dazu muss der vorhergesagte Punkt in einer Ground Truth-Region liegt. Allerdings wird pro Region nur ein Greifpunkt als 'True Positive' zugelassen, alle weiteren Vorhersagen in derselben Region gelten als 'False Positives'.
gripping_point_recallDer Recall ist das Verhältnis der Anzahl korrekt vorhergesagter Greifpunkte und der Anzahl aller Ground Truth-Flächen der Klasse der Greifpunkte.
gripping_point_f_scoreUm Precision und Recall mit einer Zahl darzustellen wird der F-Score als harmonisches Mittel der beiden Werte zur Verfügung gestellt.
Zusammen mit den Daten müssen Vorverarbeitungsparameter an
preprocess_dl_samples übergeben werden.
Zwei Parameterpaare haben einen besonders hohen
Einfluss:
'image_width', 'image_height':
Bestimmen die Bilddimensionen der Bilder, die inferiert werden.
Mit größeren Bilddimensionen und dadurch einer besseren Auflösung können kleinere Greifflächen detektiert werden. Damit steigen allerdings auch die Laufzeit und der Speicherverbrauch der Anwendung.
'min_z', 'max_z':
Bestimmen, basierend auf dem Z-Bild, die minimale und maximale
zulässige Distanz von 3D-Punkten von der Kamera.
Mit Hilfe dieser Parameter können fehlerhafte Ausreißer entfernt werden und damit eine bessere Robustheit für die Anwendung erzielt werden.
Eine Einschränkung des Suchbereichs kann durch Reduzierung der Domäne der
Suchbilder (mittels ) durchgeführt werden. Für
reduce_domainpreprocess_dl_samples muss mit dem Vorverarbeitungsparameter
'domain_handling' festgelegt werden, wie die Domäne gehandhabt
werden soll. Der Parameter 'domain_handling' sollte dabei so
verwendet werden, dass nur essentielle Informationen zur Inferenz an das
Netzwerk weitergegeben werden.
Die folgenden Bilder zeigen, in Abhängigkeit von
'domain_handling', wie ein Eingabebild mit reduzierter Domäne
nach der Vorverarbeitung weitergegeben wird.
| ( 1) | ( 2) | ( 3) | ( 4) |
'full_domain',
(3) Bild mit 'keep_domain',
(4) Bild mit 'crop_domain'.
Bergmann, P., Batzner, K., Fauser, M., Sattlegger, D. and Steger, C., 2021. The MVTec anomaly detection dataset: a comprehensive real-world dataset for unsupervised anomaly detection. International Journal of Computer Vision, 129(4), pp.1038-1059.