read_dl_modelT_read_dl_modelReadDlModelReadDlModel (Operator)

Name

read_dl_modelT_read_dl_modelReadDlModelReadDlModel — Lesen eines Deep Learning-Modells aus einer Datei.

Signatur

read_dl_model( : : FileName : DLModelHandle)

Herror T_read_dl_model(const Htuple FileName, Htuple* DLModelHandle)

void ReadDlModel(const HTuple& FileName, HTuple* DLModelHandle)

void HDlModel::HDlModel(const HString& FileName)

void HDlModel::HDlModel(const char* FileName)

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

void HDlModel::ReadDlModel(const HString& FileName)

void HDlModel::ReadDlModel(const char* FileName)

void HDlModel::ReadDlModel(const wchar_t* FileName)   (Nur Windows)

static void HOperatorSet.ReadDlModel(HTuple fileName, out HTuple DLModelHandle)

public HDlModel(string fileName)

void HDlModel.ReadDlModel(string fileName)

Beschreibung

Der Operator read_dl_modelread_dl_modelReadDlModelReadDlModelReadDlModel liest ein Deep Learning-Modell. Diese Modelle müssen im HALCON Format oder alternativ im ONNX Format (siehe die Referenz weiter unten) vorliegen. Im zweiten Fall gelten die unten erwähnten Einschränkungen. Als Ergebnis wird das Handle DLModelHandleDLModelHandleDLModelHandleDLModelHandleDLModelHandle zurückgegeben.

Das Modell wird aus der Datei FileNameFileNameFileNameFileNamefileName geladen. Die Datei wird hierbei sowohl im Verzeichnis $HALCONROOT/dl/, als auch im aktuell genutzten Verzeichnis gesucht. Die Standard-Dateiendung eines Deep Learning-basierten Klassifikators ist '.hdl'".hdl"".hdl"".hdl"".hdl".

Zu beachten ist, dass der laufzeitspezifische Parameter 'gpu'"gpu""gpu""gpu""gpu" des Modells nicht aus der Datei gelesen wird. Stattdessen wird er mit seinem Standardwert (siehe get_dl_model_paramget_dl_model_paramGetDlModelParamGetDlModelParamGetDlModelParam) initialisiert.

Für weitere Informationen zu Deep Learning-Modellen in HALCON siehe das Kapitel Deep Learning / Modell.

Einlesen eines von HALCON zur Verfügung gestellten Modells

HALCON stellt Neuronale Netzwerke für die Klassifikation und Semantische Segmentierung bereit, welche auf einem großen Datensatz vortrainiert wurden. Diese Neuronalen Netzwerke sind gute Ausgangspunkte, um damit eigene Neuronale Netze für ein individuelles Problem zu trainieren. Für die Anomalieerkennung stellt HALCON initiale Modelle zur Verfügung.

Modelle für die Anomalieerkennung

Die folgenden Netzwerke stehen für die Anomalieerkennung zur Verfügung:

'initial_dl_anomaly_medium.hdl'"initial_dl_anomaly_medium.hdl""initial_dl_anomaly_medium.hdl""initial_dl_anomaly_medium.hdl""initial_dl_anomaly_medium.hdl"

Dieses Netzwerk hat einen vergleichsweise niedrigeren Speicherverbrauchs und geringere Laufzeit als 'initial_dl_anomaly_large.hdl'"initial_dl_anomaly_large.hdl""initial_dl_anomaly_large.hdl""initial_dl_anomaly_large.hdl""initial_dl_anomaly_large.hdl".

Das Netzwerk erwartet Eingabebilder vom Typ 'real'"real""real""real""real". Zusätzlich erfordert es für spezifische Bildeigenschaften, welche über get_dl_model_paramget_dl_model_paramGetDlModelParamGetDlModelParamGetDlModelParam abgefragt werden können. Hier werden die Defaultwerte gelistet:

'image_width': 480

'image_height': 480

'image_num_channels': 3

'image_range_min': -2

'image_range_max': 2

Die Netzwerkarchitektur erlaubt Änderungen der Bilddimensionen, verlangt aber, dass die Bildbreite 'image_width'"image_width""image_width""image_width""image_width" und Bildhöhe 'image_height'"image_height""image_height""image_height""image_height" Vielfache von 32 Pixel sind, woraus sich ein Minimalwert von 32 Pixeln ergibt.

'initial_dl_anomaly_large.hdl'"initial_dl_anomaly_large.hdl""initial_dl_anomaly_large.hdl""initial_dl_anomaly_large.hdl""initial_dl_anomaly_large.hdl"

Dieses Netzwerk ist für komplexere Aufgaben in der Regel besser geeignet als 'initial_dl_anomaly_medium.hdl'"initial_dl_anomaly_medium.hdl""initial_dl_anomaly_medium.hdl""initial_dl_anomaly_medium.hdl""initial_dl_anomaly_medium.hdl". Dafür ist es rechen- und speicheraufwändiger.

Das Netzwerk erwartet Eingabebilder vom Typ 'real'"real""real""real""real". Zusätzlich erfordert es für spezifische Bildeigenschaften, welche über get_dl_model_paramget_dl_model_paramGetDlModelParamGetDlModelParamGetDlModelParam abgefragt werden können. Hier werden die Defaultwerte gelistet:

'image_width': 480

'image_height': 480

'image_num_channels': 3

'image_range_min': -2

'image_range_max': 2

Die Netzwerkarchitektur erlaubt Änderungen der Bilddimensionen, verlangt aber, dass die Bildbreite 'image_width'"image_width""image_width""image_width""image_width" und Bildhöhe 'image_height'"image_height""image_height""image_height""image_height" Vielfache von 32 Pixel sind, woraus sich ein Minimalwert von 32 Pixeln ergibt.

Modelle für die Klassifikation

Die folgenden vortrainierten Neuronalen Netzwerke stehen für die Klassifikation und als Backbone bei der Objektdetektion zur Verfügung:

'pretrained_dl_classifier_alexnet.hdl'"pretrained_dl_classifier_alexnet.hdl""pretrained_dl_classifier_alexnet.hdl""pretrained_dl_classifier_alexnet.hdl""pretrained_dl_classifier_alexnet.hdl":

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'"pretrained_dl_classifier_compact.hdl""pretrained_dl_classifier_compact.hdl""pretrained_dl_classifier_compact.hdl""pretrained_dl_classifier_compact.hdl"). Dies kann für das Extrahieren von Merkmalskarten von Vorteil sein.

Der Klassifikator erwartet Eingabebilder vom Typ 'real'"real""real""real""real". Zusätzlich erfordert das Neuronale Netzwerk spezifische Bildeigenschaften, welche über get_dl_model_paramget_dl_model_paramGetDlModelParamGetDlModelParamGetDlModelParam 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" und eine minimale Bildhöhe von 'image_width'"image_width""image_width""image_width""image_width" 29 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.

Man kann die Laufzeit dieses Netzwerkes beschleunigen indem man die Faltungs- und ReLU-Layer miteinander verbindet, siehe set_dl_model_paramset_dl_model_paramSetDlModelParamSetDlModelParamSetDlModelParam und den Parameter 'fuse_conv_relu'"fuse_conv_relu""fuse_conv_relu""fuse_conv_relu""fuse_conv_relu".

'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_model_paramget_dl_model_paramGetDlModelParamGetDlModelParamGetDlModelParam 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.

Der Klassifikator erwartet Eingabebilder vom Typ 'real'"real""real""real""real". Zusätzlich erfordert das Neuronale Netzwerk spezifische Bildeigenschaften, welche über get_dl_model_paramget_dl_model_paramGetDlModelParamGetDlModelParamGetDlModelParam 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_model_paramget_dl_model_paramGetDlModelParamGetDlModelParamGetDlModelParam 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.

Modelle für die Semantische Segmentierung

Folgende vortrainierte Netzwerke stehen für die Semantische Segmentierung zur Verfügung:

'pretrained_dl_segmentation_compact.hdl'"pretrained_dl_segmentation_compact.hdl""pretrained_dl_segmentation_compact.hdl""pretrained_dl_segmentation_compact.hdl""pretrained_dl_segmentation_compact.hdl":

Dieses Neuronale Netzwerk ist besonders für feine Strukturen geeignet und ist effizient bezüglich des Speicherverbrauchs und der Laufzeit.

Die Netzwerkarchitektur erlaubt Änderungen der Bilddimensionen, verlangt aber eine minimale Bildbreite 'image_width'"image_width""image_width""image_width""image_width" von 21 Pixeln und eine minimale Bildhöhe von 'image_height'"image_height""image_height""image_height""image_height" 21 Pixeln.

'pretrained_dl_segmentation_enhanced.hdl'"pretrained_dl_segmentation_enhanced.hdl""pretrained_dl_segmentation_enhanced.hdl""pretrained_dl_segmentation_enhanced.hdl""pretrained_dl_segmentation_enhanced.hdl":

Dieses Neuronale Netzwerk hat mehr verborgene Layer als 'pretrained_dl_segmentation_compact.hdl'"pretrained_dl_segmentation_compact.hdl""pretrained_dl_segmentation_compact.hdl""pretrained_dl_segmentation_compact.hdl""pretrained_dl_segmentation_compact.hdl" und ist daher für Segmentierungsaufgaben in komplexeren Szenarien besser geeignet.

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_height'"image_height""image_height""image_height""image_height" 47 Pixeln.

Einlesen eines Modells im ONNX Format

ONNX Modelle können eingelesen werden, aber dabei gibt es gewisse Punkte zu beachten.

Einschränkungen

Wird ein ONNX Modell eingelesen, gelten folgende Einschränkungen:

Automatische Transformationen

Nach dem Einlesen eines ONNX Modells mit read_dl_modelread_dl_modelReadDlModelReadDlModelReadDlModel werden folgende Transformationen automatisch durchgeführt:

Unterstützte Operationen

ONNX Modelle mit den folgenden Operationen können von read_dl_modelread_dl_modelReadDlModelReadDlModelReadDlModel gelesen werden:

'Add'
'AveragePool':

Für das Attribut 'pads'"pads""pads""pads""pads" sind nur Werte erlaubt, die keinem Padding oder einem Padding um die halbe Kernelgröße entsprechen. 'count_include_pad'"count_include_pad""count_include_pad""count_include_pad""count_include_pad" muss 0 sein.

'BatchNormalization'
'Concat':

Der Wert für das Attribut 'axis'"axis""axis""axis""axis" muss 1 sein.

'Conv':

Die Werte für die Attribute 'dilations'"dilations""dilations""dilations""dilations", 'kernel_shape'"kernel_shape""kernel_shape""kernel_shape""kernel_shape" und 'dilations'"dilations""dilations""dilations""dilations" müssen jeweils für die Breite und Höhe gleich sein. Für das Attribut 'pads'"pads""pads""pads""pads" sind nur Werte erlaubt, die keinem Padding oder einem Padding um die halbe Kernelgröße entsprechen.

'Dropout'
'Gemm':

Die Dimension K muss 1 sein.

'GlobalAveragePool'
'GlobalMaxPool'
'LRN'
'MaxPool':

Für das Attribut 'pads'"pads""pads""pads""pads" sind nur Werte erlaubt, die keinem Padding oder einem Padding um die halbe Kernelgröße entsprechen.

'Relu'
'Reshape':

Wird nur dann unterstützt wenn es auf einen 'Initializer' angewandt wird und die Ausgabe direkt als Gewicht in einem Layer verwendet wird.

'Softmax':

Der Wert für das Attribut 'axis'"axis""axis""axis""axis" muss 1 sein.

'Sum'

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: 'initial_dl_anomaly_large.hdl'"initial_dl_anomaly_large.hdl""initial_dl_anomaly_large.hdl""initial_dl_anomaly_large.hdl""initial_dl_anomaly_large.hdl", 'initial_dl_anomaly_medium.hdl'"initial_dl_anomaly_medium.hdl""initial_dl_anomaly_medium.hdl""initial_dl_anomaly_medium.hdl""initial_dl_anomaly_medium.hdl", 'pretrained_dl_classifier_alexnet.hdl'"pretrained_dl_classifier_alexnet.hdl""pretrained_dl_classifier_alexnet.hdl""pretrained_dl_classifier_alexnet.hdl""pretrained_dl_classifier_alexnet.hdl", '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", 'pretrained_dl_segmentation_compact.hdl'"pretrained_dl_segmentation_compact.hdl""pretrained_dl_segmentation_compact.hdl""pretrained_dl_segmentation_compact.hdl""pretrained_dl_segmentation_compact.hdl", 'pretrained_dl_segmentation_enhanced.hdl'"pretrained_dl_segmentation_enhanced.hdl""pretrained_dl_segmentation_enhanced.hdl""pretrained_dl_segmentation_enhanced.hdl""pretrained_dl_segmentation_enhanced.hdl"

Dateiendung: .hdl

DLModelHandleDLModelHandleDLModelHandleDLModelHandleDLModelHandle (output_control)  dl_model HDlModel, HTupleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle des Deep Learning-Modells.

Ergebnis

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

Nachfolger

set_dl_model_paramset_dl_model_paramSetDlModelParamSetDlModelParamSetDlModelParam, get_dl_model_paramget_dl_model_paramGetDlModelParamGetDlModelParamGetDlModelParam, apply_dl_modelapply_dl_modelApplyDlModelApplyDlModelApplyDlModel, train_dl_model_batchtrain_dl_model_batchTrainDlModelBatchTrainDlModelBatchTrainDlModelBatch, train_dl_model_anomaly_datasettrain_dl_model_anomaly_datasetTrainDlModelAnomalyDatasetTrainDlModelAnomalyDatasetTrainDlModelAnomalyDataset

Alternativen

create_dl_model_detectioncreate_dl_model_detectionCreateDlModelDetectionCreateDlModelDetectionCreateDlModelDetection

Literatur

Open Neural Network Exchange (ONNX), https://onnx.ai/

Modul

Deep Learning Inference