set_dl_classifier_param — Setzen der Parameter des Deep Learning-basierten Klassifikators.
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 Layers 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. Dieser Parameter 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' und 'batch_size_device' |
| 'pretrained_dl_classifier_compact.hdl' | 160 |
| 'pretrained_dl_classifier_enhanced.hdl' | 96 |
| 'pretrained_dl_classifier_resnet50.hdl' | 23 |
Anzahl der Bilder, die in den Gerätespeicher transferiert werden. Ist dieser Wert kleiner als 'batch_size', so wird der Batch in kleinere Unterbatches der Größe 'batch_size_device' aufgeteilt. Über diese Unterbatches iterierend wird der Gradient berechnet, welcher zur Aktualisierung der Gewichte verwendet wird. Damit kann der Batch eine beliebige Größe 'batch_size' annehmen und dennoch zur Berechnung des Gradienten alle seine Bilder einbringen. Der Wert von 'batch_size_device' kann maximal dem von 'batch_size' entsprechen. Somit ist es nicht erlaubt 'batch_size_device' größer als 'batch_size' zu wählen. Sollte 'batch_size' kleiner als der Wert von 'batch_size_device' gewählt werden, so wird 'batch_size_device' automatisch auf 'batch_size' gesetzt. Die Standardwerte für 'batch_size_device' sind identisch zu denen von 'batch_size'.
Tupel von Labeln 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 Informationen können in der Dokumentation von
train_dl_classifier_batch gefunden werden.
Standardmäßig ist 'learning_rate' auf 0.001 gesetzt.
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.
Die 'cpu' Laufzeit verwendet zur Parallelisierung des
Operators apply_dl_classifier OpenMP.
Standardmäßig werden alle verfügbaren Threads der OpenMP
Laufzeitumgebung verwendet. Mit dem threadspezifischen Parameter
'tsp_thread_num' des Operators set_system kann
die zu verwendende Anzahl von Threads spezifiziert 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_device' 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 größte 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. Standardmäßig
wird keine Regularisierung verwendet, d.h. 'weight_prior' ist
0.0. 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.
Das Konzept der Deep Learning-basierten Klassifikation ist in der Einleitung zu Kapitel Deep Learning / Klassifikation beschrieben.
Zum erfolgreichen Setzen von 'gpu' Parametern werden cuDNN und
cuBLAS benötigt, d.h. sowohl zum Setzen des Parameters
GenParamName 'runtime' auf VarRef('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_device', '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