create_dl_model_detectionT_create_dl_model_detectionCreateDlModelDetectionCreateDlModelDetectioncreate_dl_model_detection — Erstellen eines Deep Learning-Netzwerks zur Objektdetektion oder
Instanz-Segmentierung.
Mit dem Operator create_dl_model_detectioncreate_dl_model_detectionCreateDlModelDetectionCreateDlModelDetectionCreateDlModelDetectioncreate_dl_model_detection wird ein Deep
Learning-Netzwerk zur Objektdetektion oder Instanz-Segmentierung erzeugt.
Für weitere Informationen zu Deep Learning-basierter Objektdetektion und
Instanz-Segmentierung siehe das Kapitel
Deep Learning / Objektdetektion und Instanz-Segmentierung.
Das Handle dieses Netzwerks wird in DLModelHandleDLModelHandleDLModelHandleDLModelHandleDLModelHandledlmodel_handle zurückgegeben.
Mit den unten aufgelisteten Parametern können das Modell und dessen
Architektur spezifiziert werden.
Um erfolgreich ein Modell zu erzeugen müssen dessen Backbone
und die Anzahl an Klassen, die das Modell unterscheiden können soll,
festgelegt werden.
Ersteres wird durch den Parameter BackboneBackboneBackboneBackbonebackbonebackbone übergeben,
welcher im Abschnitt „Mögliche Backbones“ genauer erläutert wird.
Letzteres ist durch den Parameter NumClassesNumClassesNumClassesNumClassesnumClassesnum_classes gegeben.
Dieser Parameter legt die Anzahl Klassen fest, welche das Netzwerk
unterscheiden können soll und damit auch die Anzahl der Einträge in
'class_ids'"class_ids""class_ids""class_ids""class_ids""class_ids" und 'class_names'"class_names""class_names""class_names""class_names""class_names".
Die Werte aller verwendbaren Parameter können über das Dictionary
DLModelDetectionParamDLModelDetectionParamDLModelDetectionParamDLModelDetectionParamDLModelDetectionParamdlmodel_detection_param spezifiziert werden.
Ein solcher Parameter ist z.B. 'instance_type'"instance_type""instance_type""instance_type""instance_type""instance_type", der die Art der im
Modell verwendeten umschließenden Rechtecke bestimmt.
Um ein Netzwerk für Instanz-Segmentierung zu erzeugen, muss der Parameter
'instance_segmentation'"instance_segmentation""instance_segmentation""instance_segmentation""instance_segmentation""instance_segmentation" auf 'true'"true""true""true""true""true" gesetzt werden.
Die Liste mit den setzbaren Parametern findet sich im Abschnitt
„Setzbare Parameter“. Einige Parameter sind nur für Instanz-Segmentierung
anwendbar.
Für den Fall, dass ein Parameter nicht spezifiziert ist, wird dessen
Standardwert zur Erzeugung des Modells verwendet.
Zu beachten ist, dass Parameter, welche die Netzwerkarchitektur
beeinflussen, nicht mehr änderbar sind sobald das Netzwerk erzeugt wurde.
Alle weiteren Parameter können mit dem Operator set_dl_model_paramset_dl_model_paramSetDlModelParamSetDlModelParamSetDlModelParamset_dl_model_param
weiterhin gesetzt oder geändert werden.
Ein Überblick wie die Parameter gesetzt werden können und ihre Bedeutung
findet sich in get_dl_model_paramget_dl_model_paramGetDlModelParamGetDlModelParamGetDlModelParamget_dl_model_param.
Nach Erzeugung des Objektdetektions-Modells, wird 'type'"type""type""type""type""type"
automatisch auf 'detection'"detection""detection""detection""detection""detection" gesetzt.
Mögliche Backbones
Der Parameter BackboneBackboneBackboneBackbonebackbonebackbone bestimmt das Backbone,
das vom Netzwerk benutzt wird.
Detailliertere Informationen zum Backbone sind im Kapitel
Deep Learning / Objektdetektion und Instanz-Segmentierung zu finden. Kurz
zusammengefasst besteht das Backbone aus einem vortrainierten
Klassifikator, von dem nur die Layer zur Generierung der
Merkmalskarten behalten werden.
Daher gibt es in dem Netzwerk keine Fully Connected Layer.
Daraus ergibt sich, dass ein Klassifikator als Merkmalsextraktor für
das angeschlossene Erkennungsnetzwerk eingelesen wird.
Hierfür kann ein Modell im HALCON Format oder im ONNX Format eingelesen
werden, siehe read_dl_modelread_dl_modelReadDlModelReadDlModelReadDlModelread_dl_model für weitere Informationen.
create_dl_model_detectioncreate_dl_model_detectionCreateDlModelDetectionCreateDlModelDetectionCreateDlModelDetectioncreate_dl_model_detection hängt eine Merkmalspyramide
an verschiedene Ebenen des Backbones an.
Genauer, im Backbone ist für verschiedene Ebenen ein Layer als
Docking Layer spezifiziert.
Wird ein Detektions-Modell erstellt, so wird die Merkmalspyramide an den
entsprechenden Docking Layern angedockt.
Bei vortrainierten Klassifikatoren, die von HALCON zur Verfügung gestellt
werden, sind die Docking Layers bereits spezifiziert.
Wird ein selbsterstellter Klassifikator als Backbone verwendet, müssen
die Docking Layer jedoch spezifiziert werden.
backbone_docking_layers kann als Eigenschaft des Klassifikators
über set_dl_model_paramset_dl_model_paramSetDlModelParamSetDlModelParamSetDlModelParamset_dl_model_param oder als Eigenschaft des Backbones über
diesen Operator gesetzt werden.
Die Docking Layer gehören zu verschiedenen Ebenen und entsprechend
haben ihre Merkmalskarten in der Merkmalspyramide verschiedene Größen.
Genauer, in der Merkmalspyramide werden die Längen der Merkmalskarten
von Ebene zu Ebene halbiert.
Dies bedeutet, dass auch die Längen der Eingabebilder für jede weitere
Ebene halbiert werden.
Die Netzwerkarchitekturen erlauben Änderungen bezüglich der
Bilddimensionen, aber die Dimensionen 'image_width'"image_width""image_width""image_width""image_width""image_width" und
'image_height'"image_height""image_height""image_height""image_height""image_height" müssen ein ganzzahliges Mehrfaches von
sein.
Dabei steht für die höchste Ebene, an welche die
Merkmalspyramide anbaut. Dies hängt sowohl von den zusätzlichen Netzwerken
als auch den Docking Layern ab.
Für die zur Verfügung gestellten Klassifikatoren wird in der unten
stehenden Liste erwähnt, bis zu welcher Ebene die Merkmalspyramide
standardmäßig geht.
Folgende vortrainierte Klassifikatoren werden von HALCON zur
Verfügung gestellt und können als Backbone eingelesen werden:
Dieses Neuronale Netzwerk ist geeignet für einfache Klassifikationsaufgaben.
Es zeichnet sich durch die Faltungskerne der ersten Faltungs-Layer
aus, welche größer sind als bei Netzwerken vergleichbarer
Klassifikationsleistung
(z.B. 'pretrained_dl_classifier_compact.hdl'"pretrained_dl_classifier_compact.hdl""pretrained_dl_classifier_compact.hdl""pretrained_dl_classifier_compact.hdl""pretrained_dl_classifier_compact.hdl""pretrained_dl_classifier_compact.hdl").
Dies kann für das Extrahieren von Merkmalskarten von Vorteil sein.
Dieses Neuronale Netzwerk ist dafür entworfen speicher- und
laufzeiteffizient zu sein.
Dieses Backbone erwartet Bilder des Typs real.
Zusätzlich ist das Backbone auf gewisse Bildeigenschaften ausgelegt.
Die entsprechenden Werte können mit get_dl_model_paramget_dl_model_paramGetDlModelParamGetDlModelParamGetDlModelParamget_dl_model_param
abgerufen werden. Hier sind die Standardwerte, mit denen der
Klassifikator trainiert wurde, aufgelistet:
Dieses Neuronale Netzwerk hat mehr verborgene Layer als
'pretrained_dl_classifier_compact.hdl'"pretrained_dl_classifier_compact.hdl""pretrained_dl_classifier_compact.hdl""pretrained_dl_classifier_compact.hdl""pretrained_dl_classifier_compact.hdl""pretrained_dl_classifier_compact.hdl" und es kann daher
angenommen werden, dass es sich besser für komplexe Aufgaben
eignet. Allerdings werden dadurch mehr Laufzeit und Speicherplatz benötigt.
Wie das Neuronale Netzwerk 'pretrained_dl_classifier_enhanced.hdl'"pretrained_dl_classifier_enhanced.hdl""pretrained_dl_classifier_enhanced.hdl""pretrained_dl_classifier_enhanced.hdl""pretrained_dl_classifier_enhanced.hdl""pretrained_dl_classifier_enhanced.hdl"
ist dieses Neuronale Netzwerk für komplexere Aufgaben ausgelegt.
Da sich die Struktur aber unterscheidet, entsteht hier der Vorteil,
dass das Training stabiler und das Netzwerk intern robuster ist.
Gegenüber dem Neuronalen Netzwerk
'pretrained_dl_classifier_resnet50.hdl'"pretrained_dl_classifier_resnet50.hdl""pretrained_dl_classifier_resnet50.hdl""pretrained_dl_classifier_resnet50.hdl""pretrained_dl_classifier_resnet50.hdl""pretrained_dl_classifier_resnet50.hdl", ist es etwas weniger
komplex dafür in der Ausführung schneller.
Wie das Neuronale Netzwerk 'pretrained_dl_classifier_enhanced.hdl'"pretrained_dl_classifier_enhanced.hdl""pretrained_dl_classifier_enhanced.hdl""pretrained_dl_classifier_enhanced.hdl""pretrained_dl_classifier_enhanced.hdl""pretrained_dl_classifier_enhanced.hdl"
ist dieses Neuronale Netzwerk für komplexere Aufgaben ausgelegt.
Da sich die Struktur aber unterscheidet, entsteht hier der Vorteil,
dass das Training stabiler und das Netzwerk intern robuster ist.
Systemvoraussetzungen:
Zum erfolgreichen Setzen von 'gpu'"gpu""gpu""gpu""gpu""gpu" Parametern werden cuDNN und
cuBLAS benötigt, d.h. zum Setzen des Parameters
GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name'runtime'"runtime""runtime""runtime""runtime""runtime" auf 'gpu'"gpu""gpu""gpu""gpu""gpu".
Für weitere Details wird auf den „Installation Guide“,
Abschnitt „Requirements for Deep Learning and Deep-Learning-Based Methods“,
verwiesen.
Ausführungsinformationen
Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
Wird ohne Parallelisierung verarbeitet.
Dieser Operator liefert ein Handle zurück. Es ist zu beachten, dass der Zustand einer Instanz dieses Handletyps durch bestimmte Operatoren geändert werden kann, obwohl das Handle als Eingabeparameter in diesen Operatoren verwendet wird.
Sind die Parameterwerte korrekt, dann liefert
create_dl_model_detectioncreate_dl_model_detectionCreateDlModelDetectionCreateDlModelDetectionCreateDlModelDetectioncreate_dl_model_detection den Wert 2 (H_MSG_TRUE). Gegebenenfalls wird eine
Fehlerbehandlung durchgeführt.