set_dl_classifier_param
— Setzen der Parameter des Deep Learning-basierten Klassifikators.
set_dl_classifier_param
ist veraltet und wird nur aus Gründen
der Rückwärtskompatibilität zur Verfügung gestellt. Neue
Applikationen sollten stattdessen den allgemeinen CNN-basierten Operator
set_dl_model_param
verwenden.
set_dl_classifier_param( : : DLClassifierHandle, GenParamName, GenParamValue : )
set_dl_classifier_param
setzt die Parameter und Hyperparameter
GenParamName
des Neuronalen Netzwerkes DLClassifierHandle
auf die Werte in GenParamValue
.
GenParamName
kann folgende Werte annehmen:
Die vortrainierten Klassifikatoren sind mit ihren default
Bilddimensionen trainiert, siehe read_dl_classifier
.
Die Netzwerkarchitekturen erlauben verschiedene Bildgrößen. Aber für Netzwerke mit Fully-connected Layern macht eine Änderung der Bildgröße ein Nachtrainieren notwendig. Netzwerke ohne Fully-connected Layer sind direkt auf verschiedene Bildgrößen anwendbar. Jedoch wird für Bilder, deren Größe von der Bildgröße der Trainingsbilder abweicht, eine geringere Genauigkeit bei der Klassifikation erwartet.
train_dl_classifier_batch
gefunden werden.
Der Parameter 'batch_size' ist im vortrainierten Modell
gespeichert. Standardmäßig ist 'batch_size' so gesetzt, dass ein
Training des vortrainierten Klassifikators mit bis zu 100
Klassen problemlos auf einer GPU mit einem Speicher von 8
Gigabyte durchgeführt werden kann. Für die vortrainierten Klassifikatoren
ergeben sich so folgende Standardwerte für die Batchgröße:
Vortrainierter Klassifikator | Standardwerte für 'batch_size' |
'pretrained_dl_classifier_compact.hdl' | 160 |
'pretrained_dl_classifier_enhanced.hdl' | 96 |
'pretrained_dl_classifier_resnet50.hdl' | 23 |
apply_dl_classifier
für weitere Informationen, wie man
diesen Parameter setzt, um eine größere Effizienz zu erzielen.
Multiplikationsfaktor für
'batch_size' , um das Training mit einer größeren Anzahl an
Bildern in einem Schritt zu ermöglichen, was aufgrund limitierter
GPU-Speichergröße sonst nicht möglich wäre. Auf die
Evaluierung und Inferenz hat dieser Parameter keinen Einfluss.
Für weitere Details, siehe train_dl_classifier_batch
.
Der 'batch_size_multiplier' ist standardmäßig auf 1 gesetzt.
Tupel von Labels entsprechend der Objektklassen die erkannt werden sollen. Die Reihenfolge der Objektklassen bleibt nach dem Setzen unverändert.
Identifikationsnummer der GPU, auf der die
Trainings- und Inferenz-Operatoren (train_dl_classifier_batch
und
apply_dl_classifier
) ausgeführt werden. Standardmäßig wird die
erste verfügbare GPU verwendet. Mit dem get_system
Parameter
'cuda_devices' kann die Liste der verfügbaren GPUs abgefragt
werden. In ValRe('gpu') muss der Index der gewünschten GPU in dieser
Liste übergeben werden.
Breite der Bilder, die das Netzwerk
verarbeitet. Der Defaultwert ist durch das Neuronale Netzwerk bestimmt,
siehe read_dl_classifier
.
Höhe der Bilder, die das Netzwerk
verarbeitet. Der Defaultwert ist durch das Neuronale Netzwerk bestimmt,
siehe read_dl_classifier
.
Anzahl Kanäle, die das Netzwerk
verarbeitet. Möglich sind ein Kanal (Grauwertbild) oder drei Kanäle
(dreikanaliges Bild). Der Defaultwert ist durch das Neuronale Netzwerk
bestimmt, siehe read_dl_classifier
.
Ein Wechsel auf einen Kanal modifiziert die Netzwerk-Konfiguration.
Dieser Prozess entfernt die Farbinformation, die in gewissen Layern
enthalten ist, und ist nicht invertierbar.
Ein Tupel mit den Bilddimensionen
Bildbreite 'image_width' , Bildhöhe 'image_hight' und
Anzahl der Kanäle 'image_num_channels' .
Die Defaultwerte sind durch das Neuronale Netzwerk gegeben, siehe
read_dl_classifier
.
Bezüglich der Anzahl Kanäle sind ein Kanal (Grauwertbild) oder drei Kanäle
(dreikanaliges Bild) möglich.
Ein Wechsel auf einen Kanal modifiziert die Netzwerk-Konfiguration.
Dieser Prozess entfernt die Farbinformation, die in gewissen Layern
enthalten ist, und ist nicht invertierbar.
Anfangswert des Faktors, der den Einfluss
des Gradienten während des Trainings bestimmt.
Mehr Information können in der Dokumentation von
train_dl_classifier_batch
gefunden werden.
Der Defaultwert ist vom Klassifikator abhängig.
Werden die Argumente der Zielfunktionswerte aktualisiert, gibt
der Hyperparameter 'momentum' an, zu welchem Ausmaß vorherige
Aktualisierungsvektoren im aktuellen Aktualisierungsvektor berücksichtigt
werden.
Für weitere Informationen verweisen wir auf die Dokumentation von
train_dl_classifier_batch
.
Standardmäßig ist 'momentum' auf 0.9 gesetzt.
Definiert die Einheit, auf der die Operatoren ausgeführt werden. Standardmäßig ist 'runtime' auf 'gpu' gesetzt.
Der Operator apply_dl_classifier
wird auf der CPU ausgeführt,
der Operator train_dl_classifier_batch
kann hingegen nicht
ausgeführt werden.
Falls zuvor auf der GPU gerechnet wurde, wird Speicher auf der CPU initialisiert und falls notwendig werden auf der GPU gespeicherte Werte auf die CPU verschoben.
Auf Intel oder AMD Architekturen verwendet die 'cpu' Laufzeit
zur Parallelisierung des Operators apply_dl_classifier
OpenMP, wobei standardmäßig alle verfügbaren Threads der OpenMP
Laufzeitumgebung verwendet werden. In diesem Fall kann mit dem
threadspezifischen Parameter 'tsp_thread_num' des Operators
set_system
die zu verwendende Anzahl von Threads spezifiziert
werden.
Auf Arm Architekturen verwendet die 'cpu' Laufzeit zur
Parallelisierung einen globalen thread pool. In diesem Fall kann mit
dem globalen Parameter 'thread_num' des Operators
set_system
die zu verwendende Anzahl von Threads spezifiziert
werden. Auf Arm Architekturen kann keine Thread-spezifische Anzahl von
Threads eingestellt werden.
Der Speicher wird auf der GPU initialisiert und das entsprechende
Handle angelegt. Die Operatoren apply_dl_classifier
und
train_dl_classifier_batch
werden auf der GPU ausgeführt.
Mehr Informationen zu diesen speziellen Voraussetzungen befinden sich
im HALCON „Installation Guide“
.
Kann mit 'immediately' dazu verwendet werden um den Speicher
auf der GPU zu initialisieren und das entsprechende Handle anzulegen.
Andernfalls passiert das sobald es notwendig ist, was zu signifikant
längeren Laufzeiten beim ersten Aufruf von apply_dl_classifier
oder train_dl_classifier_batch
führen kann. Nachfolgende
Aufrufe von set_dl_classifier_param
mit 'gpu' oder
'batch_size' führen dazu, dass der Speicher auf der GPU
neu initialisiert wird.
Dieser Parameter hat keinen Einfluss, falls 'runtime' auf 'cpu' gesetzt ist.
Regularisierungsparameter für die Regularisierung der
Zielfunktion. Diese Regularisierung ist hilfreich falls während des
Klassifikatortrainings Überanpassung auftritt.
Ist der Hyperparameter
'weight_prior' auf einen Wert ungleich Null gesetzt, so wird
der folgende Regularisierungsterm zur Zielfunktion addiert (siehe
train_dl_classifier_batch
):
Der Index k läuft hierbei über alle Gewichte des Netzwerks, mit der
Ausnahme von Bias-Termen. Diese werden nicht regularisiert. Der
Regularisierungsterm schiebt die Gewichte
gegen Null und bestraft damit insbesondere die größten Gewichte, was
effektiv die Komplexität des Modells verringert.
Einfach gesagt, begünstigt die Regularisierung einfachere
Modelle, die weniger anfällig sind, Rauschen in den Daten zu lernen und
dadurch generalisieren diese Modelle in der Regel besser.
Für den Fall einer Überanpassung des Klassifikators empfehlen wir
verschiedene Werte für den Parameter 'weight_prior' zu testen.
Die Wahl des Wertes ist ein Abwägen zwischen der Fähigkeit des
Netzwerkes zu Generalisieren, einer Überanpassung oder einer
Unteranpassung. Ist zu klein, ist eine Überanpassung
möglich, ist es zu groß kann es passieren, dass das Modell seine
Fähigkeit verliert, sich an die Daten anzupassen, da dann alle Gewichte
effektiv Null sind. Um einen idealen Wert für zu finden,
empfehlen wir eine Kreuzvalidierung durchzuführen. Das heißt, das
Training wird für eine Reihe von Werten durchgeführt und man wählt den
Wert, der den besten Validierungsfehler liefert.
Üblich sind zum Testen die Werte für 'weight_prior' auf einer
logarithmischen Skala zwischen .
Falls das Training sehr lange dauert, besteht die Möglichkeit für die
Optimierung der Hyperparameter einen reduzierten Datensatz zu verwenden.
Der Defaultwert ist vom Klassifikator abhängig.
Das Konzept der Deep Learning-basierten Klassifikation ist in der Einleitung zu Kapitel Deep Learning / Klassifikation beschrieben. Der Ablauf mit diesem veralteten Operator ist im Kapitel Legacy / DL Klassifikation beschrieben.
Zum erfolgreichen Setzen von 'gpu' Parametern werden cuDNN und
cuBLAS benötigt, d.h. sowohl zum Setzen des Parameters
GenParamName
'runtime' auf 'gpu' als auch des
Parameters GenParamName
'gpu' .
Für weitere Details wird auf den „Installation Guide“
, Abschnitt
„Requirements for Deep Learning“, verwiesen.
DLClassifierHandle
(input_control) dl_classifier →
(handle)
Handle des Deep Learning-basierten Klassifikators.
GenParamName
(input_control) attribute.name(-array) →
(string)
Name des generischen Parameters.
Defaultwert: 'classes'
Werteliste: 'batch_size' , 'batch_size_multiplier' , 'classes' , 'gpu' , 'image_dimensions' , 'image_height' , 'image_num_channels' , 'image_width' , 'learning_rate' , 'momentum' , 'runtime' , 'runtime_init' , 'weight_prior'
GenParamValue
(input_control) attribute.value(-array) →
(string / real / integer)
Wert des generischen Parameters.
Defaultwert: ['class_1','class_2','class_3']
Wertevorschläge: 1, 2, 3, 50, 0.001, 'cpu' , 'gpu' , 'immediately'
Sind die Parameterwerte korrekt, dann liefert
set_dl_classifier_param
den Wert 2 (H_MSG_TRUE).
Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.
get_dl_classifier_param
,
apply_dl_classifier
,
train_dl_classifier_batch
Deep Learning Inference