read_dl_classifierT_read_dl_classifierReadDlClassifierReadDlClassifier (Operator)

Name

read_dl_classifierT_read_dl_classifierReadDlClassifierReadDlClassifier — Lesen eines Deep Learning-basierten Klassifikators aus einer Datei.

Warnung

read_dl_classifierread_dl_classifierReadDlClassifierReadDlClassifierReadDlClassifier 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 read_dl_modelread_dl_modelReadDlModelReadDlModelReadDlModel verwenden.

Signatur

read_dl_classifier( : : FileName : DLClassifierHandle)

Herror T_read_dl_classifier(const Htuple FileName, Htuple* DLClassifierHandle)

void ReadDlClassifier(const HTuple& FileName, HTuple* DLClassifierHandle)

void HDlClassifier::HDlClassifier(const HString& FileName)

void HDlClassifier::HDlClassifier(const char* FileName)

void HDlClassifier::HDlClassifier(const wchar_t* FileName)   (Nur Windows)

void HDlClassifier::ReadDlClassifier(const HString& FileName)

void HDlClassifier::ReadDlClassifier(const char* FileName)

void HDlClassifier::ReadDlClassifier(const wchar_t* FileName)   (Nur Windows)

static void HOperatorSet.ReadDlClassifier(HTuple fileName, out HTuple DLClassifierHandle)

public HDlClassifier(string fileName)

void HDlClassifier.ReadDlClassifier(string fileName)

Beschreibung

Der Operator read_dl_classifierread_dl_classifierReadDlClassifierReadDlClassifierReadDlClassifier liest ein Neuronales Netzwerk, welches mit write_dl_classifierwrite_dl_classifierWriteDlClassifierWriteDlClassifierWriteDlClassifier geschrieben wurde. Als Ergebnis wird das Handle DLClassifierHandleDLClassifierHandleDLClassifierHandleDLClassifierHandleDLClassifierHandle zurückgegeben.

HALCON stellt Neuronale Netzwerke bereit, welche auf einem großen Datensatz vortrainiert wurden. Diese Neuronalen Netzwerke sind gute Ausgangspunkte, um damit eigene Klassifikatoren für ein individuelles Klassifikationsproblem zu trainieren. Zur Verfügung stehen folgende Netzwerke:

'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":

Dieses Neuronale Netzwerk ist besonders effizient bezüglich des Speicherverbrauchs und der Laufzeit.

Der Klassifikator erwartet Eingabebilder vom Typ 'real'"real""real""real""real". Zusätzlich erfordert das Neuronale Netzwerk spezifische Bildeigenschaften, welche über get_dl_classifier_paramget_dl_classifier_paramGetDlClassifierParamGetDlClassifierParamGetDlClassifierParam abgefragt werden können. Hier werden die Defaultwerte gelistet, mit welchen der Klassifikator trainiert wurde:

'image_width': 224

'image_height': 224

'image_num_channels': 3

'image_range_min': -127

'image_range_max': 128

Dieses Neuronale Netzwerk enthält keinen Fully-connected Layer. Die Netzwerkarchitektur erlaubt Änderungen der Bilddimensionen, verlangt aber eine minimale Bildbreite 'image_width'"image_width""image_width""image_width""image_width" von 15 Pixeln und eine minimale Bildhöhe von 'image_width'"image_width""image_width""image_width""image_width" 15 Pixeln.

'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":

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" und ist daher für komplexere Klassifikationsaufgaben in der Regel besser geeignet. Dafür ist dieses Netzwerk rechen- und speicheraufwändiger. Dies führt zum Beispiel dazu, dass man im Vergleich zum obigen kompakten Netzwerk während des Trainings nur mit einer kleineren Batchgröße trainieren kann, siehe set_dl_classifier_paramset_dl_classifier_paramSetDlClassifierParamSetDlClassifierParamSetDlClassifierParam.

Der Klassifikator erwartet Eingabebilder vom Typ 'real'"real""real""real""real". Zusätzlich erfordert das Neuronale Netzwerk spezifische Bildeigenschaften, welche über get_dl_classifier_paramget_dl_classifier_paramGetDlClassifierParamGetDlClassifierParamGetDlClassifierParam abgefragt werden können. Hier werden die Defaultwerte gelistet, mit welchen der Klassifikator trainiert wurde:

'image_width': 224

'image_height': 224

'image_num_channels': 3

'image_range_min': -127

'image_range_max': 128

Die Netzwerkarchitektur erlaubt Änderungen der Bilddimensionen, verlangt aber eine minimale Bildbreite 'image_width'"image_width""image_width""image_width""image_width" von 47 Pixeln und eine minimale Bildhöhe von 'image_width'"image_width""image_width""image_width""image_width" 47 Pixeln. Von der Netzwerkarchitektur her gibt es keine Beschränkung der Bildgröße nach oben, aber zunehmende Bildgrößen erhöhen den Speicher- und Laufzeitbedarf erheblich. Jede Änderung der Bildgröße führt zu einem Reinitialisieren der Gewichte in den Fully-connected Layern und macht dadurch ein Nachtrainieren notwendig.

'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":

Wie das Neuronale Netwerk 'pretrained_dl_classifier_enhanced'"pretrained_dl_classifier_enhanced""pretrained_dl_classifier_enhanced""pretrained_dl_classifier_enhanced""pretrained_dl_classifier_enhanced" ist dieser Klassifikator für komplexere Aufgaben geeignet. Aber dieser Klassifikator hat aufgrund der verschiedenen Struktur den Vorteil, das Training stabiler zu machen und intern robuster zu sein.

Der Klassifikator erwartet Eingabebilder vom Typ 'real'"real""real""real""real". Zusätzlich erfordert das Neuronale Netzwerk spezifische Bildeigenschaften, welche über get_dl_classifier_paramget_dl_classifier_paramGetDlClassifierParamGetDlClassifierParamGetDlClassifierParam abgefragt werden können. Hier werden die Defaultwerte gelistet, mit welchen der Klassifikator trainiert wurde:

'image_width': 224

'image_height': 224

'image_num_channels': 3

'image_range_min': -127

'image_range_max': 128

Die Netzwerkarchitektur erlaubt Änderungen der Bilddimensionen, aber eine minimale Bildbreite 'image_width'"image_width""image_width""image_width""image_width" von 32 Pixeln und eine minimale Bildhöhe von 'image_width'"image_width""image_width""image_width""image_width" 32 Pixeln wird empfohlen. Von der Netzwerkarchitektur her gibt es keine Beschränkung der Bildgröße nach oben, aber zunehmende Bildgrößen erhöhen den Speicher- und Laufzeitbedarf erheblich. Trotz Fully-connected Layer führt eine Änderung der Bildgröße nicht zu einem Reinitialisieren der Gewichte.

Oben aufgelistet sind die default Bilddimensionen und Grauwertbereiche, mit denen die Klassifikatoren trainiert wurden. Die Netzwerkarchitekturen erlauben jedoch auch verschiedene Bildgrößen, welche über set_dl_classifier_paramset_dl_classifier_paramSetDlClassifierParamSetDlClassifierParamSetDlClassifierParam gesetzt werden können. Für Netzwerke mit Fully-connected Layern wird dadurch ein Nachtrainieren notwendig. Netzwerke ohne Fully-connected Layer sind direkt auf verschiedenen 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.

Die konkreten Bilddimensionen des Netzwerkes können über get_dl_classifier_paramget_dl_classifier_paramGetDlClassifierParamGetDlClassifierParamGetDlClassifierParam abgefragt werden. Jedes Eingabebild muss den Anforderungen des Netzwerkes entsprechend übergeben werden. Für eine solche Vorverarbeitung steht die Prozedur preprocess_dl_classifier_images bereit.

Typischerweise ist es einfacher, schneller und besser, ein vortrainiertes Netzwerk zur Lösung einer Klassifikationsaufgabe zu verwenden, da es bereits generell nützliche Merkmale erlernt hat. Um ein bereits vortrainiertes Netzwerk nachzutrainieren, muss lediglich der Parameter 'classes'"classes""classes""classes""classes" des Klassifikators mittels set_dl_classifier_paramset_dl_classifier_paramSetDlClassifierParamSetDlClassifierParamSetDlClassifierParam verändert werden.

Das Neuronale Netzwerk wird aus der Datei FileNameFileNameFileNameFileNamefileName gelesen. Diese Datei wird sowohl im aktuellen Verzeichnis als auch im Ordner ($HALCONROOT/dl/) gesucht.

Man beachte, dass der laufzeitrelevante Parameter 'gpu'"gpu""gpu""gpu""gpu" des Klassifikators nicht in die Datei geschrieben wird. Stattdessen wird der Parameter beim Lesen mit dem Standardwert 0 initialisiert.

Die Standard-Dateiendung eines Deep Learning-basierten Klassifikators ist '.hdl'".hdl"".hdl"".hdl"".hdl".

Das Konzept der Deep Learning-basierten Klassifikation ist in der Einleitung zu Kapitel Legacy / DL Klassifikation beschrieben.

Ausführungsinformationen

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.

Parameter

FileNameFileNameFileNameFileNamefileName (input_control)  filename.read HTupleHTupleHtuple (string) (string) (HString) (char*)

Dateiname.

Defaultwert: '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"

Werteliste: '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_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_resnet50.hdl'"pretrained_dl_classifier_resnet50.hdl""pretrained_dl_classifier_resnet50.hdl""pretrained_dl_classifier_resnet50.hdl""pretrained_dl_classifier_resnet50.hdl"

Dateiendung: .hdl

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

Handle des Deep Learning-basierten Klassifikators.

Ergebnis

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

Nachfolger

set_dl_classifier_paramset_dl_classifier_paramSetDlClassifierParamSetDlClassifierParamSetDlClassifierParam, get_dl_classifier_paramget_dl_classifier_paramGetDlClassifierParamGetDlClassifierParamGetDlClassifierParam, apply_dl_classifierapply_dl_classifierApplyDlClassifierApplyDlClassifierApplyDlClassifier, train_dl_classifier_batchtrain_dl_classifier_batchTrainDlClassifierBatchTrainDlClassifierBatchTrainDlClassifierBatch

Alternativen

read_dl_modelread_dl_modelReadDlModelReadDlModelReadDlModel, read_class_mlpread_class_mlpReadClassMlpReadClassMlpReadClassMlp, read_class_svmread_class_svmReadClassSvmReadClassSvmReadClassSvm

Modul

Deep Learning Inference