Anomalieerkennung und Global Context Anomaly Detection

Liste der Operatoren ↓

Dieses Kapitel beschreibt, wie Deep Learning-basierte Anomalieerkennung und Global Context Anomaly Detection genutzt wird.

Mit diesen beiden Methoden will man ermitteln, ob ein Bild eine Anomalie im Vergleich zum Normalen, d.h. etwas Unbekanntes enthält.

Ein Modell zur Anomalieerkennung oder Global Context Anomaly Detection lernt während des Trainings gewöhnliche Bildmerkmale ohne Anomalien. 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.

Es stehen zwei Modelltypen zur Verfügung:

Anomalieerkennung

Mit Anomaliererkennung (Modelltyp 'anomaly_detection'"anomaly_detection""anomaly_detection""anomaly_detection""anomaly_detection""anomaly_detection") wird auf strukturelle Anomalien abgezielt, somit auf alle Merkmale, die nicht während des Trainings gelernt wurden. Dies kann z.B. Kratzer, Brüche oder Verunreinigungen einschließen.

image/svg+xml
Ein mögliches Beispiel der Anomalieerkennung: Jedem Pixel des Eingabebildes wird ein Wert zugewiesen. Dieser gibt an, wie wahrscheinlich das 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.
Global Context Anomaly Detection

Global Context Anomaly Detection (Modelltyp 'gc_anomaly_detection'"gc_anomaly_detection""gc_anomaly_detection""gc_anomaly_detection""gc_anomaly_detection""gc_anomaly_detection") umfasst zwei Aufgaben:

image/svg+xml
Ein mögliches Beispiel der Global Context Anomaly Detection: Jedem Pixel des Eingabebildes wird ein Wert zugewiesen. Dieser gibt an, wie wahrscheinlich das Pixel ein unbekanntes Merkmal, eine Anomalie, zeigt. Dabei können zwei Arten von Anomalien erkannt werden, strukturelle und logische. Strukturelle Anomalie: Ein Apfel enthält einen Wurm, womit er sich von den Äpfeln unterscheidet, die das Modell während des Trainings gesehen hat. Logische Anomalie: Ein Apfel ist auf Seite der Zitronen einsortiert. Obwohl der Apfel selbst intakt ist ist die Logik nicht erfüllt, da das Modell während des Trainings nur Bilder mit korrekt einsortiertem Obst gesehen hat.

Das Modell für die Global Context Anomaly Detection besteht aus zwei Subnetzwerken. Das Modell kann auf eine der beiden Subnetzwerke reduziert werden, um Laufzeit und Speicherbedarf zu verbessern. Dies wird dann empfohlen, wenn ein einzelnes Subnetzwerk gut genug ist. Siehe den Parameter 'gc_anomaly_networks'"gc_anomaly_networks""gc_anomaly_networks""gc_anomaly_networks""gc_anomaly_networks""gc_anomaly_networks" in get_dl_model_paramget_dl_model_paramGetDlModelParamGetDlModelParamGetDlModelParamget_dl_model_param für weitere Details. Da das Entfernen eines Subnetzwerkes signifikante Auswirkungen haben kann, muss das Modell danach erneut evaluiert werden.

image/svg+xml
Trainingsbild für eine Beispielaufgabe. Äpfel und Zitronen sind intakt, richtig einsortiert und mit dem korrekten Sticker beklebt.
image/svg+xml image/svg+xml
(1) (2)
image/svg+xml image/svg+xml
(3) (4)
Einige Anomalien, die mit Global Context Anomaly Detection erkannt werden können: (1) Logische Anomalie, die am wahrscheinlichsten mit dem lokalen Subnetzwerk erkannt wird (falscher Sticker). (2) Strukturelle Anomalie, die am wahrscheinlichsten mit dem lokalen Subnetzwerk erkannt wird (wurmiger Apfel). (3) Logische Anomalie, die am wahrscheinlichsten mit dem globalen Subnetzwerk erkannt wird (falsche Sortierung). (4) Logische Anomalie, die am wahrscheinlichsten mit dem globalen Subnetzwerk erkannt wird (fehlende Äpfel).

Genereller Ablauf

Dieser Abschnitt beschreibt den generellen Ablauf einer Aufgabe zur Anomalieerkennung oder Global Context Anomaly Detection 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 Dictionarys 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 Modells.

  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

    Es ist zu beachten, dass innerhalb von train_dl_model für Modelle vom Typ 'anomaly_detection'"anomaly_detection""anomaly_detection""anomaly_detection""anomaly_detection""anomaly_detection" train_dl_model_anomaly_datasettrain_dl_model_anomaly_datasetTrainDlModelAnomalyDatasetTrainDlModelAnomalyDatasetTrainDlModelAnomalyDatasettrain_dl_model_anomaly_dataset aufgerufen wird, während für Modelle vom Typ 'gc_anomaly_detection'"gc_anomaly_detection""gc_anomaly_detection""gc_anomaly_detection""gc_anomaly_detection""gc_anomaly_detection" train_dl_model_batchtrain_dl_model_batchTrainDlModelBatchTrainDlModelBatchTrainDlModelBatchtrain_dl_model_batch verwendet wird. Für Global Context Anomaly Detection wird vor dem tatsächlichen Training die Prozedur normalize_dl_gc_anomaly_features von train_dl_model aufgerufen, um das Modell an die Bildstatistiken des Datensatzes anzupassen.

    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

  3. Normalisierung des Netzwerks. Dieser Schritt ist nur für Global Context Anomaly Detection Modelle notwendig. Der Anomalie-Score muss mit der Prozedur

    • normalize_dl_gc_anomaly_scores

    normalisiert werden. Dies muss durchgeführt werden um sinnvolle Ergebnisse zu erhalten nachdem später ein Schwellenwert auf die Anomalie-Scores angewandt wird (siehe Abschnitt „Spezifische Parameter“ unten).

Evaluierung des trainierten Modells

Dieser Abschnitt behandelt das Evaluieren eines trainierten Modells.

  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 GenParam mit den Evaluierungsparametern.

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

Inferenz auf neuen Bildern

Dieser Abschnitt behandelt die Inferenz auf neuen Bildern durch ein Modell zur Anomalieerkennung oder Global Context Anomaly Detection. 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 Dictionarys 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 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 und Global Context Anomaly Detection 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 jedes 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

Die Trainings-Ausgabe unterscheidet sich in Abhängigkeit des verwendeten Modells:

Bei der Inferenz und der Evaluierung gibt das Modell ein Dictionary DLResultDLResultDLResultDLResultDLResultdlresult für jedes Sample zurück. Für die Anomalieerkennung und Global Context Anomaly Detection 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 Modell zur Anomalieerkennung oder Global Context Anomaly Detection 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.

Bei einem Modell zur Anomalieerkennung wird während des Trainings 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). Bei der Global Context Anomaly Detection kann die Klasse, je nach verwendetem Subnetzwerk, auch ausschließlich vom lokalen (anomaly_class_local) oder globalen (anomaly_class_global) Subnetzwerk berechnet werden.

anomaly_class_id

ID der vorhergesagten Klasse für das Bild als Ganzes (für den gegebenen Schwellenwert). Bei der Global Context Anomaly Detection kann die Klassen-ID, je nach verwendetem Subnetzwerk, auch ausschließlich vom lokalen (anomaly_class_id_local) oder globalen (anomaly_class_id_global) Subnetzwerk berechnet werden.

anomaly_region
Regionen der Pixel welche als anomal bewertet wurden (für den gegebenen Schwellenwert, siehe die untere Darstellung). Bei der Global Context Anomaly Detection können die Anomalieregionen, je nach verwendetem Subnetzwerk, auch ausschließlich vom lokalen (anomaly_region_local) oder globalen (anomaly_region_global) Subnetzwerk berechnet werden.
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.