set_dl_classifier_paramT_set_dl_classifier_paramSetDlClassifierParamSetDlClassifierParam (Operator)

Name

set_dl_classifier_paramT_set_dl_classifier_paramSetDlClassifierParamSetDlClassifierParam — Setzen der Parameter des Deep Learning-basierten Klassifikators.

Warnung

set_dl_classifier_paramset_dl_classifier_paramSetDlClassifierParamSetDlClassifierParamSetDlClassifierParam 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_paramset_dl_model_paramSetDlModelParamSetDlModelParamSetDlModelParam verwenden.

Signatur

set_dl_classifier_param( : : DLClassifierHandle, GenParamName, GenParamValue : )

Herror T_set_dl_classifier_param(const Htuple DLClassifierHandle, const Htuple GenParamName, const Htuple GenParamValue)

void SetDlClassifierParam(const HTuple& DLClassifierHandle, const HTuple& GenParamName, const HTuple& GenParamValue)

void HDlClassifier::SetDlClassifierParam(const HTuple& GenParamName, const HTuple& GenParamValue) const

void HDlClassifier::SetDlClassifierParam(const HString& GenParamName, const HString& GenParamValue) const

void HDlClassifier::SetDlClassifierParam(const char* GenParamName, const char* GenParamValue) const

void HDlClassifier::SetDlClassifierParam(const wchar_t* GenParamName, const wchar_t* GenParamValue) const   (Nur Windows)

static void HOperatorSet.SetDlClassifierParam(HTuple DLClassifierHandle, HTuple genParamName, HTuple genParamValue)

void HDlClassifier.SetDlClassifierParam(HTuple genParamName, HTuple genParamValue)

void HDlClassifier.SetDlClassifierParam(string genParamName, string genParamValue)

Beschreibung

set_dl_classifier_paramset_dl_classifier_paramSetDlClassifierParamSetDlClassifierParamSetDlClassifierParam setzt die Parameter und Hyperparameter GenParamNameGenParamNameGenParamNameGenParamNamegenParamName des Neuronalen Netzwerkes DLClassifierHandleDLClassifierHandleDLClassifierHandleDLClassifierHandleDLClassifierHandle auf die Werte in GenParamValueGenParamValueGenParamValueGenParamValuegenParamValue.

GenParamNameGenParamNameGenParamNameGenParamNamegenParamName kann folgende Werte annehmen:

Die vortrainierten Klassifikatoren sind mit ihren default Bilddimensionen trainiert, siehe read_dl_classifierread_dl_classifierReadDlClassifierReadDlClassifierReadDlClassifier.

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.

'batch_size'"batch_size""batch_size""batch_size""batch_size":
Anzahl der Bilder (und ihren entsprechenden Labels) in einem Batch, die in den Gerätespeicher transferiert werden. Die Menge der Bilder, die beim Training in einer Iteration miteinander verarbeitet werden, beinhaltet eine Anzahl 'batch_size'"batch_size""batch_size""batch_size""batch_size" mal 'batch_size_multiplier'"batch_size_multiplier""batch_size_multiplier""batch_size_multiplier""batch_size_multiplier" Bilder. Mehr Informationen können in der Dokumentation von train_dl_classifier_batchtrain_dl_classifier_batchTrainDlClassifierBatchTrainDlClassifierBatchTrainDlClassifierBatch gefunden werden. Der Parameter 'batch_size'"batch_size""batch_size""batch_size""batch_size" ist im vortrainierten Modell gespeichert. Standardmäßig ist 'batch_size'"batch_size""batch_size""batch_size""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'"batch_size""batch_size""batch_size""batch_size"
'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" 160
'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" 96
'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" 23
Bei der Inferenz kann die 'batch_size'"batch_size""batch_size""batch_size""batch_size" im Allgemeinen unabhängig von der Anzahl der gleichzeitig zu inferierenden Bilder gesetzt werden. Siehe apply_dl_classifierapply_dl_classifierApplyDlClassifierApplyDlClassifierApplyDlClassifier für weitere Informationen, wie man diesen Parameter setzt, um eine größere Effizienz zu erzielen.
'batch_size_multiplier'"batch_size_multiplier""batch_size_multiplier""batch_size_multiplier""batch_size_multiplier":

Multiplikationsfaktor für 'batch_size'"batch_size""batch_size""batch_size""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_batchtrain_dl_classifier_batchTrainDlClassifierBatchTrainDlClassifierBatchTrainDlClassifierBatch. Der 'batch_size_multiplier'"batch_size_multiplier""batch_size_multiplier""batch_size_multiplier""batch_size_multiplier" ist standardmäßig auf 1 gesetzt.

'classes'"classes""classes""classes""classes":

Tupel von Labels entsprechend der Objektklassen die erkannt werden sollen. Die Reihenfolge der Objektklassen bleibt nach dem Setzen unverändert.

'gpu'"gpu""gpu""gpu""gpu":

Identifikationsnummer der GPU, auf der die Trainings- und Inferenz-Operatoren (train_dl_classifier_batchtrain_dl_classifier_batchTrainDlClassifierBatchTrainDlClassifierBatchTrainDlClassifierBatch und apply_dl_classifierapply_dl_classifierApplyDlClassifierApplyDlClassifierApplyDlClassifier) ausgeführt werden. Standardmäßig wird die erste verfügbare GPU verwendet. Mit dem get_systemget_systemGetSystemGetSystemGetSystem Parameter 'cuda_devices'"cuda_devices""cuda_devices""cuda_devices""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.

'image_width'"image_width""image_width""image_width""image_width":

Breite der Bilder, die das Netzwerk verarbeitet. Der Defaultwert ist durch das Neuronale Netzwerk bestimmt, siehe read_dl_classifierread_dl_classifierReadDlClassifierReadDlClassifierReadDlClassifier.

'image_height'"image_height""image_height""image_height""image_height":

Höhe der Bilder, die das Netzwerk verarbeitet. Der Defaultwert ist durch das Neuronale Netzwerk bestimmt, siehe read_dl_classifierread_dl_classifierReadDlClassifierReadDlClassifierReadDlClassifier.

'image_num_channels'"image_num_channels""image_num_channels""image_num_channels""image_num_channels":

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_classifierread_dl_classifierReadDlClassifierReadDlClassifierReadDlClassifier. Ein Wechsel auf einen Kanal modifiziert die Netzwerk-Konfiguration. Dieser Prozess entfernt die Farbinformation, die in gewissen Layern enthalten ist, und ist nicht invertierbar.

'image_dimensions'"image_dimensions""image_dimensions""image_dimensions""image_dimensions":

Ein Tupel mit den Bilddimensionen Bildbreite 'image_width'"image_width""image_width""image_width""image_width", Bildhöhe 'image_hight'"image_hight""image_hight""image_hight""image_hight" und Anzahl der Kanäle 'image_num_channels'"image_num_channels""image_num_channels""image_num_channels""image_num_channels". Die Defaultwerte sind durch das Neuronale Netzwerk gegeben, siehe read_dl_classifierread_dl_classifierReadDlClassifierReadDlClassifierReadDlClassifier. 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.

'learning_rate'"learning_rate""learning_rate""learning_rate""learning_rate":

Anfangswert des Faktors, der den Einfluss des Gradienten während des Trainings bestimmt. Mehr Information können in der Dokumentation von train_dl_classifier_batchtrain_dl_classifier_batchTrainDlClassifierBatchTrainDlClassifierBatchTrainDlClassifierBatch gefunden werden. Der Defaultwert ist vom Klassifikator abhängig.

'momentum'"momentum""momentum""momentum""momentum":

Werden die Argumente der Zielfunktionswerte aktualisiert, gibt der Hyperparameter 'momentum'"momentum""momentum""momentum""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_batchtrain_dl_classifier_batchTrainDlClassifierBatchTrainDlClassifierBatchTrainDlClassifierBatch. Standardmäßig ist 'momentum'"momentum""momentum""momentum""momentum" auf 0.9 gesetzt.

'runtime'"runtime""runtime""runtime""runtime":

Definiert die Einheit, auf der die Operatoren ausgeführt werden. Standardmäßig ist 'runtime'"runtime""runtime""runtime""runtime" auf 'gpu'"gpu""gpu""gpu""gpu" gesetzt.

'cpu'"cpu""cpu""cpu""cpu":

Der Operator apply_dl_classifierapply_dl_classifierApplyDlClassifierApplyDlClassifierApplyDlClassifier wird auf der CPU ausgeführt, der Operator train_dl_classifier_batchtrain_dl_classifier_batchTrainDlClassifierBatchTrainDlClassifierBatchTrainDlClassifierBatch 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'"cpu""cpu""cpu""cpu" Laufzeit zur Parallelisierung des Operators apply_dl_classifierapply_dl_classifierApplyDlClassifierApplyDlClassifierApplyDlClassifier OpenMP, wobei standardmäßig alle verfügbaren Threads der OpenMP Laufzeitumgebung verwendet werden. In diesem Fall kann mit dem threadspezifischen Parameter 'tsp_thread_num'"tsp_thread_num""tsp_thread_num""tsp_thread_num""tsp_thread_num" des Operators set_systemset_systemSetSystemSetSystemSetSystem die zu verwendende Anzahl von Threads spezifiziert werden.

Auf Arm Architekturen verwendet die 'cpu'"cpu""cpu""cpu""cpu" Laufzeit zur Parallelisierung einen globalen thread pool. In diesem Fall kann mit dem globalen Parameter 'thread_num'"thread_num""thread_num""thread_num""thread_num" des Operators set_systemset_systemSetSystemSetSystemSetSystem die zu verwendende Anzahl von Threads spezifiziert werden. Auf Arm Architekturen kann keine Thread-spezifische Anzahl von Threads eingestellt werden.

'gpu'"gpu""gpu""gpu""gpu":

Der Speicher wird auf der GPU initialisiert und das entsprechende Handle angelegt. Die Operatoren apply_dl_classifierapply_dl_classifierApplyDlClassifierApplyDlClassifierApplyDlClassifier und train_dl_classifier_batchtrain_dl_classifier_batchTrainDlClassifierBatchTrainDlClassifierBatchTrainDlClassifierBatch werden auf der GPU ausgeführt. Mehr Informationen zu diesen speziellen Voraussetzungen befinden sich im HALCON „Installation Guide“.

'runtime_init'"runtime_init""runtime_init""runtime_init""runtime_init":

Kann mit 'immediately'"immediately""immediately""immediately""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_classifierapply_dl_classifierApplyDlClassifierApplyDlClassifierApplyDlClassifier oder train_dl_classifier_batchtrain_dl_classifier_batchTrainDlClassifierBatchTrainDlClassifierBatchTrainDlClassifierBatch führen kann. Nachfolgende Aufrufe von set_dl_classifier_paramset_dl_classifier_paramSetDlClassifierParamSetDlClassifierParamSetDlClassifierParam mit 'gpu'"gpu""gpu""gpu""gpu" oder 'batch_size'"batch_size""batch_size""batch_size""batch_size" führen dazu, dass der Speicher auf der GPU neu initialisiert wird.

Dieser Parameter hat keinen Einfluss, falls 'runtime'"runtime""runtime""runtime""runtime" auf 'cpu'"cpu""cpu""cpu""cpu" gesetzt ist.

'weight_prior'"weight_prior""weight_prior""weight_prior""weight_prior":

Regularisierungsparameter für die Regularisierung der Zielfunktion. Diese Regularisierung ist hilfreich falls während des Klassifikatortrainings Überanpassung auftritt. Ist der Hyperparameter 'weight_prior'"weight_prior""weight_prior""weight_prior""weight_prior" auf einen Wert ungleich Null gesetzt, so wird der folgende Regularisierungsterm zur Zielfunktion addiert (siehe train_dl_classifier_batchtrain_dl_classifier_batchTrainDlClassifierBatchTrainDlClassifierBatchTrainDlClassifierBatch): 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'"weight_prior""weight_prior""weight_prior""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'"weight_prior""weight_prior""weight_prior""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.

Achtung

Zum erfolgreichen Setzen von 'gpu'"gpu""gpu""gpu""gpu" Parametern werden cuDNN und cuBLAS benötigt, d.h. sowohl zum Setzen des Parameters GenParamNameGenParamNameGenParamNameGenParamNamegenParamName 'runtime'"runtime""runtime""runtime""runtime" auf 'gpu'"gpu""gpu""gpu""gpu" als auch des Parameters GenParamNameGenParamNameGenParamNameGenParamNamegenParamName 'gpu'"gpu""gpu""gpu""gpu". Für weitere Details wird auf den „Installation Guide“, Abschnitt „Requirements for Deep Learning“, verwiesen.

Ausführungsinformationen

Parameter

DLClassifierHandleDLClassifierHandleDLClassifierHandleDLClassifierHandleDLClassifierHandle (input_control)  dl_classifier HDlClassifier, HTupleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle des Deep Learning-basierten Klassifikators.

GenParamNameGenParamNameGenParamNameGenParamNamegenParamName (input_control)  attribute.name(-array) HTupleHTupleHtuple (string) (string) (HString) (char*)

Name des generischen Parameters.

Defaultwert: 'classes' "classes" "classes" "classes" "classes"

Werteliste: 'batch_size'"batch_size""batch_size""batch_size""batch_size", 'batch_size_multiplier'"batch_size_multiplier""batch_size_multiplier""batch_size_multiplier""batch_size_multiplier", 'classes'"classes""classes""classes""classes", 'gpu'"gpu""gpu""gpu""gpu", 'image_dimensions'"image_dimensions""image_dimensions""image_dimensions""image_dimensions", 'image_height'"image_height""image_height""image_height""image_height", 'image_num_channels'"image_num_channels""image_num_channels""image_num_channels""image_num_channels", 'image_width'"image_width""image_width""image_width""image_width", 'learning_rate'"learning_rate""learning_rate""learning_rate""learning_rate", 'momentum'"momentum""momentum""momentum""momentum", 'runtime'"runtime""runtime""runtime""runtime", 'runtime_init'"runtime_init""runtime_init""runtime_init""runtime_init", 'weight_prior'"weight_prior""weight_prior""weight_prior""weight_prior"

GenParamValueGenParamValueGenParamValueGenParamValuegenParamValue (input_control)  attribute.value(-array) HTupleHTupleHtuple (string / real / integer) (string / double / int / long) (HString / double / Hlong) (char* / double / Hlong)

Wert des generischen Parameters.

Defaultwert: ['class_1','class_2','class_3'] ["class_1","class_2","class_3"] ["class_1","class_2","class_3"] ["class_1","class_2","class_3"] ["class_1","class_2","class_3"]

Wertevorschläge: 1, 2, 3, 50, 0.001, 'cpu'"cpu""cpu""cpu""cpu", 'gpu'"gpu""gpu""gpu""gpu", 'immediately'"immediately""immediately""immediately""immediately"

Ergebnis

Sind die Parameterwerte korrekt, dann liefert set_dl_classifier_paramset_dl_classifier_paramSetDlClassifierParamSetDlClassifierParamSetDlClassifierParam den Wert 2 (H_MSG_TRUE). Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

read_dl_classifierread_dl_classifierReadDlClassifierReadDlClassifierReadDlClassifier

Nachfolger

get_dl_classifier_paramget_dl_classifier_paramGetDlClassifierParamGetDlClassifierParamGetDlClassifierParam, apply_dl_classifierapply_dl_classifierApplyDlClassifierApplyDlClassifierApplyDlClassifier, train_dl_classifier_batchtrain_dl_classifier_batchTrainDlClassifierBatchTrainDlClassifierBatchTrainDlClassifierBatch

Alternativen

set_dl_model_paramset_dl_model_paramSetDlModelParamSetDlModelParamSetDlModelParam

Siehe auch

get_dl_classifier_paramget_dl_classifier_paramGetDlClassifierParamGetDlClassifierParamGetDlClassifierParam

Modul

Deep Learning Inference