create_dl_model_detection
— Erzeugen eines Deep Learning-Netzwerks zur Objektdetektion.
create_dl_model_detection( : : Backbone, NumClasses, DLModelDetectionParam : DLModelHandle)
Mit dem Operator create_dl_model_detection
wird ein Deep
Learning-Netzwerk zur Objektdetektion erzeugt.
Für weitere Informationen zu Deep Learning-basierter Objektdetektion siehe
das Kapitel Deep Learning / Objektdetektion.
Das Handle dieses Netzwerks wird in DLModelHandle
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 Backbone
übergeben,
welcher im Abschnitt „Mögliche Backbones“ genauer erläutert wird.
Letzteres ist durch den Parameter NumClasses
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' .
Die Werte aller verwendbaren Parameter können über das Dictionary
DLModelDetectionParam
spezifiziert werden.
Ein solcher Parameter ist z.B. 'instance_type' , der die Art der im
Modell verwendeten umschließenden Rechtecke bestimmt.
Die Liste mit den setzbaren Parametern findet sich im Abschnitt
„Setzbare Parameter“.
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_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_param
.
Nach Erzeugung des Objektdetektions-Modells, wird type
automatisch auf 'detection' gesetzt.
Der Parameter Backbone
bestimmt das Backbone,
das vom Netzwerk benutzt wird.
Detailliertere Informationen zum Backbone sind im Kapitel
Deep Learning / Objektdetektion 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 vollverbundenen 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_model
für weitere Informationen.
create_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_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' und '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.
backbone_docking_layers
Für ein gegebenes Backbones hat einen
minimalen Wert (siehe die Liste unten im Falle der Standard-Docking
Layer), welcher über max_level
erhöht werden kann.
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' ). Dies kann für das Extrahieren von Merkmalskarten von Vorteil 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_param
abgerufen werden. Hier sind die Standardwerte, mit denen der
Klassifikator trainiert wurde, aufgelistet:
'image_width': 224
'image_height': 224
'image_num_channels': 3
'image_range_min': -127
'image_range_max': 128
Die Standardmerkmalspyramide geht bei diesem Backbone bis zur 4. Ebene.
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_param
abgerufen werden. Hier sind die Standardwerte, mit denen der
Klassifikator trainiert wurde, aufgelistet:
'image_width': 224
'image_height': 224
'image_num_channels': 3
'image_range_min': -127
'image_range_max': 128
Die Standardmerkmalspyramide geht bei diesem Backbone bis zur 4. Ebene.
Dieses Neuronale Netzwerk hat mehr verborgene Layer als '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.
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_param
abgerufen werden. Hier sind die Standardwerte, mit denen der
Klassifikator trainiert wurde, aufgelistet:
'image_width': 224
'image_height': 224
'image_num_channels': 3
'image_range_min': -127
'image_range_max': 128
Die Standardmerkmalspyramide geht bei diesem Backbone bis zur 5. Ebene.
Wie das Neuronale Netzwerk '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.
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_param
abgerufen werden. Hier sind die Standardwerte, mit denen der
Klassifikator trainiert wurde, aufgelistet:
'image_width': 224
'image_height': 224
'image_num_channels': 3
'image_range_min': -127
'image_range_max': 128
Die Standardmerkmalspyramide geht bei diesem Backbone bis zur 5. Ebene.
Parameter, die bei der Erzeugung eines Modells mit
create_dl_model_detection
gesetzt werden können
(siehe get_dl_classifier_param
für Erklärungen):
'anchor_angles'
'anchor_aspect_ratios' (veraltet: 'aspect_ratios' )
'anchor_num_subscales' (veraltet: 'num_subscales' )
'backbone_docking_layers'
'bbox_heads_weight' , 'class_heads_weight'
'capacity'
'class_ids'
'class_ids_no_orientation'
'class_weights'
'ignore_direction'
'image_height' , 'image_width'
'image_num_channels'
'instance_type'
'max_level' , 'min_level'
'max_num_detections'
'max_overlap'
'max_overlap_class_agnostic'
'min_confidence'
Zum erfolgreichen Setzen von 'gpu' Parametern werden cuDNN und
cuBLAS benötigt, d.h. zum Setzen des Parameters
GenParamName
'runtime' auf 'gpu' .
Für weitere Details wird auf den „Installation Guide“
, Abschnitt
„Requirements for Deep Learning“, verwiesen.
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.
Backbone
(input_control) filename.read →
(string)
Deep Learning Klassifikator, genutzt als Backbone-Netzwerk.
Defaultwert: 'pretrained_dl_classifier_compact.hdl'
Werteliste: 'pretrained_dl_classifier_alexnet.hdl' , 'pretrained_dl_classifier_compact.hdl' , 'pretrained_dl_classifier_enhanced.hdl' , 'pretrained_dl_classifier_resnet50.hdl'
Dateiendung: .hdl
NumClasses
(input_control) integer →
(integer)
Anzahl von Klassen.
Defaultwert: 3
DLModelDetectionParam
(input_control) dict →
(handle)
Parameter für das Objektdetektion-Modell.
Defaultwert: []
DLModelHandle
(output_control) dl_model →
(handle)
Deep Learning-Modell für die Objektdetektion.
Sind die Parameterwerte korrekt, dann liefert
create_dl_model_detection
den Wert 2 (H_MSG_TRUE). Gegebenenfalls wird eine
Fehlerbehandlung durchgeführt.
set_dl_model_param
,
get_dl_model_param
,
apply_dl_model
,
train_dl_model_batch
Deep Learning Training