Anomalieerkennung

Liste der Operatoren ↓

Dieses Kapitel beschreibt, wie Deep Learning-basierte Anomalieerkennung genutzt wird.

Mit der Anomalieerkennung will man ermitteln, ob ein Bild Abweichung zum Normalen, d.h. etwas Unbekanntes enthält.

image/svg+xml
Ein mögliches Beispiel der Anomalieerkennung: Jedem Pixel des Eingabebildes wird ein Wert zugewiesen. Dieser gibt an, wie wahrscheinlich der Pixel ein unbekanntes Merkmal, eine Anomalie, zeigt. Der Wurm ist nicht Teil der während des Trainings gesehenen Äpfel und so erhalten seine Pixel einen höheren Score.

Während des Trainings lernt ein Anomalieerkennungsmodell die Gemeinsamkeiten von Trainingsbildern. Das trainierte Modell inferiert, wie wahrscheinlich ein Eingabebild nur erlernte Merkmale oder auch etwas davon Abweichendes, also Anomalien, zeigt. Dieses Inferenzergebnis gibt das Modell als Grauwertbild zurück. Die Pixelwerte dieses Grauwertbildes sind Scores, die angeben, wie wahrscheinlich die entsprechenden Pixel im Eingabebild eine Anomalie zeigen.

Genereller Ablauf

Dieser Abschnitt beschreibt den generellen Ablauf einer Anomalieerkennungsaufgabe mittels Deep Learning.

Vorverarbeitung des Datensatzes

Dieser Abschnitt behandelt die notwendigen Anpassungen des Datensatzes.

  1. Die Informationen des Datensatzes müssen eingelesen werden. Dazu kann die Prozedur

    • read_dl_dataset_anomaly

    verwendet werden. Dabei wird ein Dictionary DLDataset erstellt, welches als Datenbank dient und alle notwendigen Informationen über die Daten abspeichert. Für mehr Information zu den Daten und wie sie übergeben werden, wird auf den unteren Absatz „Daten“ und das Kapitel Deep Learning / Modell verwiesen.

  2. Die Daten von DLDataset sollen in drei getrennte Datensätze aufgeteilt werden. Dazu kann die Prozedur

    • split_dl_dataset

    verwendet werden.

  3. Das Netzwerk stellt mehrere Anforderungen an die Bilder (wie z.B. die Bilddimensionen und den Grauwertbereich). Diese Werte können mit

    abgefragt werden. Dafür muss das Modell erst eingelesen werden mittels

  4. Der Datensatz kann nun vorverarbeitet werden. Dazu kann die Prozedur

    • preprocess_dl_dataset

    verwendet werden. Für die Implementierung einer selbst erstellten Vorverarbeitung kann man sich an dieser Prozedur orientieren.

    Um diese Prozedur zu verwenden, müssen die Vorverarbeitungsparameter wie z.B. die Bildgröße festgelegt werden. Die Parameter und ihre Werte sind im Dictionary DLPreprocessParam zu speichern. Zur Erzeugung dieses Dictionaries kann die Prozedur

    • create_dl_preprocess_param

    verwendet werden. Es wird empfohlen, dieses Dictionary DLPreprocessParam abzuspeichern, um während der späteren Inferenz-Phase Zugang zu den Werten zu haben.

Trainieren des Modells

Dieser Abschnitt behandelt das Trainieren eines Anomalieerkennungsmodells.

  1. Setzen der Trainingsparameter und Abspeichern derselben im Dictionary TrainParam. Für dies kann die Prozedur

    • create_dl_train_param

    verwendet werden.

  2. Trainieren des Modells. Dafür kann die Prozedur

    • train_dl_model

    verwendet werden. Diese Prozedur benötigt:

    • das Handle des Modells, DLModelHandleDLModelHandleDLModelHandleDLModelHandleDLModelHandledlmodel_handle

    • das Dictionary mit den Informationen über den Datensatz, DLDataset

    • das Dictionary mit den Trainingsparametern, TrainParam

Evaluierung des trainierten Modells

Dieser Abschnitt behandelt das Evaluieren eines Anomalieerkennungsmodells.

  1. Setzen aller Modellparameter, welche die Evaluieren beeinflussen können.

  2. Die Evaluierung kann bequem mit der Prozedur

    • evaluate_dl_model

    durchgeführt werden. Diese Prozedur erwartet ein Dictionary textt(GenParamEval) mit den Evaluierungsparametern.

  3. Das Dictionary EvaluationResults enthält die angefragten Evaluierungsmaße.

Inferenz auf neuen Bildern

Dieser Abschnitt behandelt die Inferenz auf neuen Bildern durch ein Anomalieerkennungsmodell. Für ein trainiertes Modell sind die folgenden Schritte durchzuführen:

  1. Abfragen der Anforderungen des Modells an die Bilder über den Operator

    oder die Prozedur

    • create_dl_preprocess_param_from_model.

  2. Setzen der Modellparameter, wie im Abschnitt „Modellparameter“ beschrieben, über den Operator

  3. Generieren des Dictionaries DLSample für jedes zu inferierende Bild. Dafür kann die Prozedur

    • gen_dl_samples_from_images

    verwendet werden.

  4. Jedes Bild muss auf dieselbe Art und Weise wie die Trainingsbilder vorverarbeitet werden. Es wird empfohlen, dafür die Prozedur

    • preprocess_dl_samples

    zu verwenden. Wurde während der Vorverarbeitung das Dictionary DLPreprocessParam gespeichert, kann es direkt als Eingabe verwendet werden, um die Parameterwerte festzulegen.

  5. Anwenden des Modells über den Operator

  6. Die Resultate können aus dem Dictionary 'DLResult'"DLResult""DLResult""DLResult""DLResult""DLResult" abgerufen werden.

Daten

Es wird zwischen den Daten für Training, Evaluierung und Inferenz auf neuen Bildern unterschieden.

Ein Grundgedanke der Datenhandhabung: Das Modell interagiert mit den Daten über Dictionaries. Dies bedeutet, das Modell erhält die Eingabedaten über das Dictionary DLSample und gibt die Ausgabe über das Dictionary DLResult, bzw. DLTrainResultDLTrainResultDLTrainResultDLTrainResultDLTrainResultdltrain_result zurück. Für weitere Informationen zur Datenhandhabung wird auf das Kapitel Deep Learning / Modell verwiesen.

Klassen

Bei der Anomalieerkennung werden genau zwei Klassen unterschieden:

Diese Klassen treffen sowohl für das Bild als ganzes sowie auch für die einzelnen Pixel zu.

Daten für das Training

Der Datensatz besteht nur aus Bildern ohne Anomalie und den dazugehörigen Informationen. Damit das Modell die Daten verarbeiten kann, müssen sie bestimmte Anforderungen erfüllen. Informationen zu den Bildanforderungen finden sich im unteren Abschnitt „Bilder“.

Die Trainingsdaten werden dazu benötigt, um das Modell für eine spezifische Aufgabe zu trainieren. Mit Hilfe dieser Daten kann das Modell lernen, welche Merkmale die Anomalie-freien Bilder gemeinsam haben.

Daten für die Evaluierung

Dieser Datensatz muss Bilder ohne Anomalie enthalten, es können zusätzlich aber auch solche mit Anomalie darin sein. Jedes enthaltene Bild braucht ein Ground Truth Label image_label, welches die Klasse des Bildes bestimmt (siehe den obigen Abschnitt). Dadurch wird angegeben, ob auf dem Bild eine Anomalie ersichtlich ist ('nok'"nok""nok""nok""nok""nok") oder nicht ('ok'"ok""ok""ok""ok""ok").

Die Evaluierung kann visuell auch auf Pixelebene stattfinden, wenn ein entsprechendes Bild anomaly_file_name im Dictionary DLSampleDLSampleDLSampleDLSampleDLSampledlsample vorhanden ist. Auf dem Bild anomaly_file_name gibt jeder Pixel die Klassen-ID an und damit ob der entsprechende Pixel des Eingabebildes eine Anomalie zeigt (Pixelwert > 0) oder nicht (Pixelwert 0).

image/svg+xml image/svg+xml
(1) (2)
Schema des Bildes anomaly_file_name. Zur besseren Darstellung werden Grauwerte für die verschiedenen Zahlen verwendet. (1) Eingabebild. (2) Das entsprechende Bild anomaly_file_name, welches die Klassenannotationen zur Verfügung stellt, 0: 'ok'"ok""ok""ok""ok""ok" (weiß und hellgrau), 2: 'nok'"nok""nok""nok""nok""nok" (dunkelgrau).
Bilder

Unabhängig von der Anwendung stellt das Modell Anforderungen an die Bilder, wie z.B. die Bilddimensionen. Die spezifischen Werte hängen vom Modell selbst ab, für die spezifischen Werte der verschiedenen Modelle siehe die Dokumentation von read_dl_modelread_dl_modelReadDlModelReadDlModelReadDlModelread_dl_model. Für ein eingelesenes Modell können die Werte mit get_dl_model_paramget_dl_model_paramGetDlModelParamGetDlModelParamGetDlModelParamget_dl_model_param abgefragt werden. Um diese Anforderungen zu erfüllen, müssen die Bilder eventuell vorverarbeitet werden. Die Standard-Vorverarbeitung für den ganzen Datensatz und damit auch der Bilder kann mit Hilfe der Prozedur preprocess_dl_dataset durchgeführt werden, bzw. preprocess_dl_samples für ein einzelnes Sample. Für eine selbst erstellte Vorverarbeitung liefern diese Prozeduren eine Anleitung für die Implementierung.

Modell-Ausgabe

Als Trainingsausgabe gibt der Operator train_dl_model_anomaly_datasettrain_dl_model_anomaly_datasetTrainDlModelAnomalyDatasetTrainDlModelAnomalyDatasetTrainDlModelAnomalyDatasettrain_dl_model_anomaly_dataset ein Dictionary DLTrainResultDLTrainResultDLTrainResultDLTrainResultDLTrainResultdltrain_result. Für die Anomalieerkennung hat es die folgenden Einträge:

image/svg+xml image/svg+xml
(1) (2)
Schema des Bildes anomaly_image. Zur besseren Darstellung werden Grauwerte für die verschiedenen Zahlen verwendet. (1) Das Bild anomaly_file_name liefert die Klassenannotationen 0: 'ok'"ok""ok""ok""ok""ok" (weiß und hellgrau), 2: 'nok'"nok""nok""nok""nok""nok" (dunkelgrau) (2) Das entsprechende Bild anomaly_image.

Spezifische Parameter

Bei einem Anomalieerkennungsmodell werden sowohl die Modellparameter als auch die Hyperparameter mit set_dl_model_paramset_dl_model_paramSetDlModelParamSetDlModelParamSetDlModelParamset_dl_model_param gesetzt. Für Informationen zu den Modellparametern wird auf die Dokumentation von get_dl_model_paramget_dl_model_paramGetDlModelParamGetDlModelParamGetDlModelParamget_dl_model_param verwiesen.

Während des Trainings wird der gesamte Datensatz auf einmal verwendet und nicht nur jeweils ein Batch. Infolgedessen haben bestimmte Parameter wie z.B. 'batch_size_multiplier'"batch_size_multiplier""batch_size_multiplier""batch_size_multiplier""batch_size_multiplier""batch_size_multiplier" keinen Einfluss.

Das Modell gibt Scores zurück, aber klassifiziert weder das Bild als ganzes noch die Pixel, d.h., es bestimmt nicht, ob diese eine Anomalie zeigen oder nicht. Für diese Klassifizierung müssen Schwellenwerte angegeben werden, welche den minimalen Score festlegen, damit ein Pixel oder Bild als anomal zählt. Mögliche Schwellenwerte können mit der Prozedur compute_dl_anomaly_anomaly_thresholds geschätzt werden. Die Schwellenwerte können mit der Prozedur threshold_dl_anomaly_results angewandt werden. Als Resultat fügt die Prozedur folgende (vom Schwellenwert abhängige) Einträge zum Dictionary DLResultDLResultDLResultDLResultDLResultdlresult des Samples hinzu:

anomaly_class

Vorhergesagte Klasse für das Bild als Ganzes (für den gegebenen Schwellenwert).

anomaly_class_id

ID der vorhergesagten Klasse für das Bild als Ganzes (für den gegebenen Schwellenwert).

anomaly_region
Regionen der Pixel welche als anomal bewertet wurden (für den gegebenen Schwellenwert, siehe die untere Darstellung).
image/svg+xml image/svg+xml
(1) (2)
Schema von anomaly_region. Zur besseren Darstellung werden Grauwerte für die verschiedenen Zahlen verwendet. (1) Das Bild anomaly_image mit den erhaltenen pixelweisen Scores. (2) Die entsprechende Region anomaly_region.

Liste der Operatoren

train_dl_model_anomaly_datasetTrainDlModelAnomalyDatasettrain_dl_model_anomaly_datasetTrainDlModelAnomalyDatasettrain_dl_model_anomaly_dataset
Trainieren eines Deep Learning-Modells zur Anomalieerkennung.