In industriellen Fertigungsprozessen ist die Qualitätssicherung ein wichtiges Thema. Deshalb müssen auch kleine Fehler in der Produktion zuverlässig erkannt werden. Genau darauf zielt die Anomalieerkennung ab, bei der anomale und fehlerhafte Muster erkannt werden, die sich von den normalen Mustern unterscheiden. Dieses Problem ist mit einer Reihe von besonderen Herausforderungen verbunden:
Diese Herausforderungen erschweren das Training eines herkömmlichen Klassifikators und erfordern spezielle Methoden, um sie zu lösen.
Unüberwachte Methoden zur Erkennung und Lokalisierung von Anomalien können in diskriminative und generative Methoden unterteilt werden.
Mit diskriminierenden Methoden wird versucht, die Entscheidungsgrenze zwischen anomalen Proben und nominalen Proben zu modellieren. Diese Methoden extrahieren im Allgemeinen die Einbettungen aus einem Bild und vergleichen sie mit den Referenzeinbettungen der "guten" Bilder. Der Abstand wird als Anomalie-Score verwendet. Diese Methoden liefern gute Ergebnisse bei der Erkennung von Anomalien, sind aber oft nicht interpretierbar, da man nicht weiß, welcher Teil des Bildes die Anomalie verursacht hat. Ein Beispiel für eine solche Methode ist SPADE , bei der die K-NN-Clustering-Methode (K-NN = K-nearest neighbor) auf den gesamten Satz von Einbettungsvektoren zur Testzeit angewendet wird. Dies bedeutet, dass die Komplexität der Schlussfolgerungen linear mit der Größe der Trainingsmenge skaliert. Eine hohe Inferenzgeschwindigkeit ist in der Fertigung oft wichtig, was den Nutzen dieser Methode stark einschränkt.
Generative Methoden versuchen, die tatsächliche Verteilung jeder Klasse zu modellieren, aus der dann Stichproben gezogen werden können, um z. B. neue Bilder zu erzeugen. Ansätze zur Erkennung von Anomalien, die diese Modelle verwenden, basieren auf der Idee, dass die Anomalien nicht erzeugt werden können, da sie in der Trainingsmenge nicht existieren. Autoencoder-basierte Ansätze versuchen, Anomalien zu erkennen, indem sie die Ausgabe eines Autoencoders mit seiner Eingabe vergleichen. Ein hoher Rekonstruktionsfehler sollte auf eine anomale Region hinweisen. GAN-basierte Ansätze gehen davon aus, dass nur positive Muster erzeugt werden können. Obwohl diese generativen Methoden sehr intuitiv und interpretierbar sind, wird ihre Leistung durch die Tatsache eingeschränkt, dass sie manchmal auch für anomale Bilder gute Rekonstruktionsergebnisse liefern.
In diesem Abschnitt werden drei moderne Methoden eingehender erörtert. Es werden zwei diskriminative Ansätze und ein generativer Ansatz beschrieben. Diese Methoden wurden ausgewählt, da sie den neuesten Stand der Technik bei der Erkennung von Anomalien repräsentieren und gleichzeitig eine praktische Implementierung verfügbar ist.
Vor PaDiM wurden mehrere diskriminierende Ansätze vorgeschlagen, die entweder ein tiefes neuronales Netztraining erfordern, was mühsam sein kann, oder K-NN auf einem großen Datensatz verwenden, was die Inferenzgeschwindigkeit stark verringert. Diese beiden Herausforderungen könnten den Einsatz der Algorithmen in einer industriellen Umgebung behindern. Patch Distribution Modeling (PaDiM) zielt darauf ab, diese Probleme zu lösen. Sie verwenden ein vortrainiertes CNN (ResNet, Wide-ResNet oder ein EfficientNet) für die Einbettungsextraktion auf der Grundlage der ImageNet-Klassifizierung. Das Bild wird in Patches unterteilt und die Einbettungen werden für jeden Patch extrahiert. PaDiM verwendet alle Schichten des vortrainierten CNN. Dies geschieht, um sowohl globale Zusammenhänge als auch feinkörnige Details zu erfassen. Da es eine Menge redundanter Informationen geben könnte, werden die Einbettungen durch eine zufällige Auswahl unterteilt. Interessanterweise funktioniert dies genauso gut wie Techniken zur Dimensionalitätsreduktion wie PCA, ist aber schneller. Es wird davon ausgegangen, dass alle Einbettungsvektoren einer multivariaten Gauß-Verteilung entnommen werden. Sie schätzen den Stichprobenmittelwert und die Stichprobenkovarianzparameter dieser Verteilung für jeden Fleck. Das Ergebnis ist, dass jedes Feld in der Menge der Trainingsbilder durch eine multivariate Gauß-Verteilung beschrieben wird.
Die Anomaliebewertung während der Inferenz wird nun auf der Grundlage der Mahalanobis-Distanz zwischen der Einbettung eines Testfelds und der gelernten Verteilung für diese Stelle des Feldes zugewiesen. Die endgültige Anomaliebewertung ist das Maximum der Anomaliekarte. Das Ergebnis ist ein Algorithmus, der nicht die Skalierbarkeitsprobleme der KNN-basierten Methoden aufweist, da es nicht notwendig ist, eine große Anzahl von Abstandswerten zu sortieren, um die Anomaliebewertung eines Flecks zu erhalten.
Ähnlich wie bei PaDiM werden bei PatchCore die Bilder in Flecken unterteilt. Die Idee von PatchCore ist, dass, wenn ein einzelnes Feld anomal ist, das gesamte Bild als anomal klassifiziert werden kann. PatchCore versucht, die gleichen Herausforderungen zu lösen, denen PaDiM gegenübersteht. Das Ziel von PatchCore ist ein dreifaches:
Während des Trainings werden die Einbettungen mit Hilfe eines vortrainierten CNN extrahiert, mit Hilfe von Coreset Subsampling unterabgetastet und in einer Speicherbank gespeichert. Während der Inferenz wird eine Suche nach dem nächsten Nachbarn in der Speicherbank durchgeführt. Diese Architektur ist in der folgenden Abbildung dargestellt.
Bislang haben wir über diskriminative Modelle gesprochen. Das letzte Modell in diesem Vergleich ist eine andere Art, nämlich ein generatives Modell. Ein generatives Modell sagt Ihnen, wie wahrscheinlich das Auftreten eines bestimmten Beispiels ist. So sind beispielsweise Modelle, die das nächste Wort in einer Sequenz vorhersagen, typischerweise generative Modelle, da sie einer Sequenz von Wörtern eine Wahrscheinlichkeit zuordnen können. Zu den Arten von generativen Netzwerken, die für die Erkennung von Anomalien verwendet werden, gehören Variational AutoEncoders (VAE), Generative Adversarial Networks (GANs) und normalisierte Flows. CFlow-AD basiert auf der letzten Art von Netzwerken, normalisierten Flüssen.
CFlow-AD basiert auf einem bedingten normalisierenden Flussnetz. Normalisierte Flussnetzwerke können mit VAEs verglichen werden, die einige vorteilhafte mathematische Eigenschaften aufweisen. Eine ausgezeichnete Erklärung normalisierter Flüsse finden Sie in diesem Blog. Ähnlich wie bei den vorherigen Ansätzen wird ein Encoder verwendet, der auf ImageNet vortrainiert ist. Die Einbettungsvektoren werden dann mit einer konventionellen Positionskodierung (PE) in bedingte Vektoren kodiert, daher Conditional Flow. Der Decoder ist ein normalisierter Flow-Decoder, der die Likelihood der kodierten Merkmale schätzt. Die geschätzten Mehrskalenwahrscheinlichkeiten werden auf die Eingangsgröße hochgerechnet und summiert, um die Anomaliekarte zu erstellen. Dieser Prozess wird im Folgenden dargestellt.
Offizielle Implementierungen für alle diese Methoden sind auf GitHub verfügbar. Es gibt jedoch eine neuartige Open-Source-Python-Bibliothek namens Anomalib, die alle oben genannten Algorithmen in einer leicht zugänglichen Weise implementiert. Anomalib enthält eine Reihe von Algorithmen zur Erkennung von Anomalien, von denen eine Teilmenge oben vorgestellt wurde. Die Bibliothek zielt darauf ab, Komponenten für die Entwicklung benutzerdefinierter Algorithmen für spezifische Bedürfnisse, Experiment-Tracker, Visualisierer und Hyperparameter-Optimierer bereitzustellen, die alle auf die Erkennung von Anomalien ausgerichtet sind.
Ein beliebter Datensatz für die Erkennung von Anomalien in Fertigungsprozessen ist der MVTec-Datensatz mit Fabrikdefekten. Er enthält über 5000 hochauflösende Bilder, die in zehn verschiedene Objekt- und fünf Texturkategorien unterteilt sind. Jede Kategorie besteht aus einem Satz fehlerfreier Trainingsbilder und einem Testsatz von Bildern mit verschiedenen Arten von Fehlern sowie Bildern ohne Fehler. Die folgenden Experimente werden mit den Objekt- und Texturkategorien Screw und Carpet durchgeführt.
Die zum Vergleich herangezogene Metrik ist dieArea Under Receiver Operating Characteristic (AUROC), wobei die True-Positive-Rate der Prozentsatz der korrekt als anomal eingestuften Pixel ist.
Um Anomalib verwenden zu können, benötigen Sie mindestens Python 3.8+ und einen Klon des Repositorys. Installieren Sie die Anforderungen, die sich im Anforderungsordner befinden. Es ist auch möglich, die Bibliothek mit pip install anomalib zu installieren, allerdings wird dies aufgrund der aktiven Entwicklung der Bibliothek bis zur Version v0.2.5 nicht empfohlen. Die Modelle befinden sich in anomalib\models\ModelName, wo jedes der Modelle implementiert ist, und es gibt eine zugehörige config.yaml Diese Konfigurationsdatei enthält Informationen über den Datensatz (standardmäßig MVTec), die Modellparameter und die Zug/Test-Parameter. Für die folgenden Experimente wurden die Standardmodell-, Trainings- und Testparameter verwendet. Standardmäßig erwarten alle Modelle den MVTec-Datensatz in datasets\MVTec. Sie können den Datensatz hier herunterladen.
Nach der Installation der Voraussetzungen, dem Einrichten des Datensatzes und dem Ändern der Konfigurationsdatei können Sie ein bestimmtes Modell mit trainieren:
python tools/train.py --model <ModelName>
The resulting weights and test images will be stored in results\<ModelName>. If you already have a trained model you can run inference on a new image using:
python tools/inference.py \ --model_config_path <path/to/model/config.yaml> \ --weight_path <path/to/weight/file> \ --image_path <path/to/image>
In diesem Abschnitt wird die Implementierung der drei zuvor besprochenen Modelle verglichen und mit den Ergebnissen aus den jeweiligen Veröffentlichungen verglichen. Der MVTec-Datensatz enthält 10 Objekt- und 5 Texturklassen. Der Vergleich vergleicht den AUROC der drei Modelle und wird mit der Objektklasse Screw (320 Trainingsbilder) und der Texturklasse Carpet (245 Trainingsbilder) durchgeführt. Alle Tests werden auf einem Google Colab mit einer Nvidia K80, 2 Threads und 13Gb RAM durchgeführt. Die resultierenden Tabellen sind unten dargestellt.
*In der ursprünglichen PaDiM-Veröffentlichung wurden nur durchschnittliche Ergebnisse für alle Klassen auf Bildebene veröffentlicht.
Wie erwartet sind die Ergebnisse der Anomalib-Implementierung den Implementierungen in den Originalarbeiten sehr ähnlich. Zwei Beispielausgaben von PaDiM sind unten dargestellt.
Neben den Leistungsergebnissen ist auch die Geschwindigkeit ein wichtiger Faktor beim Einsatz der Modelle in realen Szenarien. Die folgende Tabelle enthält sowohl die Trainingszeit als auch die Inferenzgeschwindigkeit auf dem Testset (Schrauben). Beachten Sie, dass diese Ergebnisse mit der Standardkonfigurationsdatei von Anomalib erzielt wurden und z. B. durch Änderung des CNN-Backbone, der Batch-Größe oder der Größe der Teilstichprobe verbessert werden könnten.
Ein signifikanter Unterschied ist in der Trainingszeit zu erkennen, der sich anhand der obigen Modellbeschreibungen erklären lässt. Alle Modelle verwenden ein vortrainiertes CNN als Kodierer, woraufhin PaDiM eine Reihe von Merkmalen zufällig auswählt und die multivariaten Gauß-Verteilungen erstellt. PatchCore verfügt über eine ähnliche Funktionalität, verwendet jedoch ein Coreset Subsampling, das mehr Trainingszeit erfordert. CFlow-AD war ein generatives Modell, das auf der Normalisierung von Flüssen basiert. Dies bedeutet, dass die Decoder an die Trainingsmenge angepasst werden müssen, was die Trainingszeit erheblich verlängert.
Beim Vergleich der Inferenzgeschwindigkeit ist PaDiM wiederum am schnellsten, da für jeden Patch nur der Mahalanobis-Abstand zur gelernten Verteilung berechnet werden muss. PatchCore hat mehr Informationen in der Speicherbank zur Verfügung und führt Nearest Neighbors aus, was langsamer ist. Bei CFlow erfordert die Verwendung des generativen Netzes, ähnlich wie beim Training, eine höhere Belastung der GPU und eine geringere Inferenzgeschwindigkeit. Beachten Sie, dass dieser Geschwindigkeitsvergleich mit der Standardkonfigurationsdatei durchgeführt wurde, die möglicherweise nicht für alle Situationen die perfekte Konfiguration ist. Im CFlow-AD-Papier wird beispielsweise erwähnt, dass mit einem leichteren Encoder (MobileNetV3L oder ResNet-18) 12 fps auf einer GTX 1080 erreicht wurden.
In diesem Blogpost haben wir drei moderne Methoden zur Erkennung von Anomalien verglichen: PaDiM, PatchCore und CFlow-AD. Während PaDiM und PatchCore einen diskriminativen Ansatz verfolgen, verwendet CFlow-AD ein generatives normalisierendes Flussnetzwerk, um Anomalien zu erkennen. Beim Vergleich der Ergebnisse ist die Leistung aller drei sehr ähnlich. In der neueren Literatur wird PaDiM als Grundlinie betrachtet, und sowohl PatchCore als auch CFlow-AD versuchen, diese zu verbessern, was ihnen in den meisten Bereichen gelingt, außer bei der Geschwindigkeit. Aufgrund seiner Einfachheit trainiert PaDiM schnell und hat bei Verwendung der Standardkonfigurationen die höchste Inferenzgeschwindigkeit. Aufgrund der Implementierung könnte es empfindlicher auf Orientierung/Drehung reagieren, was PatchCore zum Beispiel zu lösen versucht. Wie immer hängt die Entscheidung für das perfekte Modell von der jeweiligen Situation ab, aber Anomalib bietet einen einfachen Zugang zu diesen Modellen, so dass Sie diese Entscheidung treffen können.
Die derzeit beste Leistung auf dem MVTec-Datensatz ist FastFlow. Zum Zeitpunkt des Verfassens dieses Blogposts war Fastflow noch nicht in Anomalib verfügbar, allerdings gibt es bereits einen Zweig mit einer vorläufigen Implementierung, was darauf hindeutet, dass es bald verfügbar sein wird. Fastflow verwendet Normalizing Flows ähnlich wie CFlow-AD und versucht, diese zu verbessern.
Google Cut-Paste führt einen zweistufigen Rahmen ein. Der Algorithmus trägt den Namen CutPaste aufgrund einer einfachen Strategie zur Datenerweiterung, bei der ein Bildausschnitt ausgeschnitten und an einer zufälligen Stelle eines großen Bildes, das als Anomalie dient, eingefügt wird. Mit dieser Erweiterung wird ein CNN auf selbstüberwachende Weise trainiert. In der zweiten Stufe werden Einklassen-Klassifizierungsalgorithmen wie OneClass SVM unter Verwendung der Einbettungen der ersten Stufe eingesetzt.