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:
Mit Anomaliererkennung (Modelltyp '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.
Global Context Anomaly Detection (Modelltyp
'gc_anomaly_detection'
) umfasst zwei Aufgaben:
Erkennung struktureller Anomalien
Wie weiter oben für die Anomalieerkennung beschrieben umfassen strukturelle Anomalien vorwiegend unbekannte Merkmale, wie Kratzer, Brüche oder Verunreinigungen.
Erkennung logischer Anomalien
Logische Anomalien werden dann erkannt, wenn den Bildinhalt betreffende Logiken nicht erfüllt werden. Das kann beispielsweise eine falsche Anzahl oder falsche Position von Objekten in einem Bild sein.
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'
in
für weitere Details. Da das Entfernen
eines Subnetzwerkes signifikante Auswirkungen haben kann,
muss das Modell danach erneut evaluiert werden.
get_dl_model_param
Lokales Subnetzwerk
Dieses Subnetzwerk wird verwendet um Anomalien zu erkennen welche sich
auf einen kleineren, lokal begrenzten Bildbereich auswirken.
Es ist konzipiert um strukturelle Anomalien zu erkennen, kann aber auch
logische Anomalien erkennen. Kann eine Anomalie anhand eines
einzelnen Bildausschnittes erkannt werden, wird es von der lokalen
Komponente des Modells erkannt. Siehe den Parameter
'patch_size'
in
für Informationen
zur Definition des lokalen Maßstabs des Subnetzwerks.
get_dl_model_param
Globales Subnetzwerk
Dieses Subnetzwerk wird verwendet um Anomalien zu erkennen welche sich auf einen großen, globalen Bildbereich auswirken. Es ist konzipiert um logische Anomalien zu erkennen, kann aber auch strukturelle Anomalien erkennen. Muss man einen großen Teil oder das ganze Bild sehen um eine Anomalie zu erkennen, dann wird sie mit der globalen Komponente des Modells erkannt.
(1) | (2) |
(3) | (4) |
Dieser Abschnitt beschreibt den generellen Ablauf einer Aufgabe zur Anomalieerkennung oder Global Context Anomaly Detection mittels Deep Learning.
Dieser Abschnitt behandelt die notwendigen Anpassungen des Datensatzes.
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.
Die Daten von DLDataset
sollen in drei
getrennte Datensätze aufgeteilt werden. Dazu kann die Prozedur
split_dl_dataset
verwendet werden.
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
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.
Dieser Abschnitt behandelt das Trainieren eines Modells.
Setzen der Trainingsparameter und Abspeichern derselben im
Dictionary TrainParam
.
Für dies kann die Prozedur
create_dl_train_param
verwendet werden.
Trainieren des Modells. Dafür kann die Prozedur
train_dl_model
verwendet werden. Diese Prozedur
passt Modelle vom Typ 'gc_anomaly_detection'
an die
Bildstatistiken des Datensatzes durch einen Aufruf der Prozedur
normalize_dl_gc_anomaly_features
an,
ruft den jeweiligen Operator
(train_dl_model_anomaly_dataset
'anomaly_detection'
)
oder
(train_dl_model_batch
'gc_anomaly_detection'
)
für das Training auf.
Es ist zu beachten, dass innerhalb von
train_dl_model
für Modelle vom Typ 'anomaly_detection'
aufgerufen wird, während
für Modelle vom Typ train_dl_model_anomaly_dataset
'gc_anomaly_detection'
verwendet wird. Für
Global Context Anomaly Detection wird vor dem tatsächlichen Training
die Prozedur train_dl_model_batch
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, DLModelHandle
das Dictionary mit den Informationen über den Datensatz,
DLDataset
das Dictionary mit den Trainingsparametern, TrainParam
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).
Dieser Abschnitt behandelt das Evaluieren eines trainierten Modells.
Setzen aller Modellparameter, welche die Evaluieren beeinflussen können.
Die Evaluierung kann bequem mit der Prozedur
evaluate_dl_model
durchgeführt werden.
Diese Prozedur erwartet ein Dictionary GenParam
mit den
Evaluierungsparametern.
Das Dictionary EvaluationResult
enthält die
angefragten Evaluierungsmaße.
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:
Abfragen der Anforderungen des Modells an die Bilder über den Operator
oder die Prozedur
create_dl_preprocess_param_from_model
.
Setzen der Modellparameter, wie im Abschnitt „Modellparameter“ beschrieben, über den Operator
Generieren des Dictionarys DLSample
für jedes
zu inferierende Bild.
Dafür kann die Prozedur
gen_dl_samples_from_images
verwendet werden.
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.
Anwenden des Modells über den Operator
Die Resultate können aus dem Dictionary DLResult
abgerufen werden.
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.
zurück.
Für weitere Informationen zur Datenhandhabung wird auf das Kapitel
Deep Learning / Modell verwiesen.
DLTrainResult
Bei der Anomalieerkennung und Global Context Anomaly Detection werden genau zwei Klassen unterschieden:
'ok'
, ohne Anomalie, Klassen-ID 0.
'nok'
, mit Anomalie, Klassen-ID 1.
(auf Pixelwerten eine ID >0, siehe den unteren Abschnitt
„Daten für die Evaluierung“).
Diese Klassen treffen sowohl für das Bild als ganzes sowie auch für die einzelnen Pixel zu.
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.
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'
) oder nicht ('ok'
).
Die Evaluierung kann visuell auch auf Pixelebene stattfinden, wenn ein
entsprechendes Bild anomaly_file_name
im Dictionary
vorhanden ist.
Auf dem Bild DLSample
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).
(1) | (2) |
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
.
Für ein eingelesenes Modell können die Werte mit
read_dl_model
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 get_dl_model_param
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.
Die Trainings-Ausgabe unterscheidet sich in Abhängigkeit des verwendeten Modells:
Anomalieerkennung:
Als Trainingsausgabe gibt der Operator
ein Dictionary
train_dl_model_anomaly_dataset
.
DLTrainResult
Global Context Anomaly Detection:
Als Trainingsausgabe gibt der Operator
ein Dictionary
train_dl_model_batch
mit dem aktuellen Gesamt-Loss sowie allen
in dem Modell enthaltenen Loss-Werten zurück.
DLTrainResult
Bei der Inferenz und der Evaluierung gibt das Modell ein Dictionary
für jedes Sample zurück.
Für die Anomalieerkennung und Global Context Anomaly Detection
hat es die folgenden Einträge:
DLResult
anomaly_score
:
Ein Score, der angibt, wie wahrscheinlich das Bild als Ganzes eine
Anomalie enthält. Die Berechnung dieses Scores basiert auf den Werten
von anomaly_image
.
Für die Global Context Anomaly Detection, kann der Anomalie-Score,
den verwendeten Subnetzwerken entsprechend, auch ausschließlich
vom lokalen (anomaly_score_local
) oder globalen
(anomaly_score_global
) Subnetzwerk berechnet werden.
anomaly_image
:
Ein Bild, mit Scores als Pixelwerte, die angeben wie wahrscheinlich der
entsprechende Pixel des Eingabebildes zu einer Anomalie gehört
(siehe die untere Darstellung).
Für die Werte bei der Anomalieerkennung gilt
, wohingegen für die
Global Context Anomaly Detection die Werte nicht beschränkt sind.
Je nach verwendetem Subnetzwerk kann bei der
Global Context Anomaly Detection ein Score-Bild vom lokalen
(anomaly_image_local
) oder globalen
(anomaly_image_global
) Subnetzwerk berechnet werden.
(1) | (2) |
Bei einem Modell zur Anomalieerkennung oder Global Context Anomaly Detection
werden sowohl die Modellparameter als
auch die Hyperparameter mit
gesetzt.
Für Informationen zu den Modellparametern wird auf die Dokumentation von
set_dl_model_param
verwiesen.
get_dl_model_param
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'
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
des Samples hinzu:
DLResult
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
anomaly_region_local
) oder globalen
(anomaly_region_global
) Subnetzwerk berechnet werden.
(1) | (2) |
train_dl_model_anomaly_dataset