12. Mai 2021
Anomaliedetektion Teil 2 – Machine Learning
Anomaliedetektion in Bildern
Was wollen wir erreichen
Im ersten Teil der Blogreihe [1] haben wir eine Einführung in Anomaliedetektion gegeben. In diesem Beitrag möchten wir die theoretischen Grundlagen auf einen praktischen Anwendungsfall übertragen. Dazu haben wir einen Prototypen erstellt. Dieser betrachtet ein fischertechnik Fließbandmodell innerhalb eines Produktionsprozesses, bei dem drei farblich unterschiedliche Produkte hergestellt werden. Unser Ziel war es, die Produkte ihrer Klasse zuzuordnen und Abweichungen als Anomalien zu kennzeichnen. Die Anomalien sind Fehlproduktionen, die sich in Form, Farbe und Struktur unterscheiden. Die Erstellung von Trainingsdaten für alle möglichen Anomalien ist zu aufwendig und schlicht nicht möglich, weswegen wir ein semi-supervised Ansatz verwenden. Bei diesem werden nur Daten von „normalen“ und korrekt produzierten Objekte zum Trainieren verwendet. Wir verwenden eine Kamera, um möglichst kostengünstig und effizient Anomalien zu erkennen. Kameras können mehrere Informationen wahrnehmen (Farbe, Form, Größe, …) und erlauben es, unterschiedliche Modelle zu verwenden. Abbildung 1 zeigt den Aufbau unseres Prototypen mit der Kamera.
Warum kein Reconstruction Error oder Future Frame Prediction?
Die semi-supervised Ansätze Reconstruction Error und Future Frame Prediction, die im ersten Teil vorgestellt wurden, eignen sich nicht in unserem Fall. Beide Ansätze unterlaufen einem aufwendigen Training, was den Rahmen für einen Prototypen überschreitet.
Auch ein Convolutional Neural Network ( siehe auch Blogartikel zu Objekterkennung [2]) haben wir in Betracht gezogen. Allerdings ist der Objekterkennungsansatz nicht optimal für die Anomaliedetektion. Dies liegt an den fehlenden Anomalie-Trainingsdaten. Zwar kann angenommen werden, dass es sich um eine Anomalie handelt, wenn kein Objekt erkannt wird. Dies wird allerdings schwer, wenn sich mehrere Produkte auf dem Produktionsband befinden. In Zukunft wollen wir uns diesen Ansatz allerdings genauer anschauen.
Architektur des Prototypen
Vorerst haben wir uns für Support Vector Machines entschieden. Support Vector Machines sind supervised Modelle und benötigen Trainingsdaten von Anomalien, um diese erkennen zu können. Wir haben uns dafür eine Methode ausgedacht, mit welcher wir Anomalien erkennen können, ohne Trainingsdaten von Anomalien zu benötigen. Zuerst möchten wir aber auf die Architektur des Prototypen eingehen und diese erläutern.
In Abbildung 2 ist die Architektur des Prototypen zu sehen. Um die Objekte im Kamerabild zu erkennen, verwenden wir Background Subtraction. Die Bildbereiche, in denen sich die Objekte befinden, werden anschließend ausgeschnitten, in Features umgewandelt und in die Klassifizierer (die Support Vector Machines) gegeben. Das Ergebnis wird am Ende als Video ausgegeben. Wenn ein Produkt erkannt wurde, wird der Klassenname des Produkts im Video angezeigt und im Falle einer Anomalie, wird „Anomalie“ angezeigt. Die blauen Schritte werden vor dem Livegang/Einsatz des Prototyen berechnet, wohingegen die Gelben zur Laufzeit in Echtzeit abgearbeitet werden.
Umsetzung der einzelnen Schritte
Background Subtraction
Eine naive Background Subtraction (BGS) subtrahiert zwei Bilder voneinander, sodass gleiche Pixel sich gegenseitig ausradieren und nur noch die Unterschiede der beiden Bilder zu sehen sind. Bei unserem Ansatz wird zuerst ein Hintergrundbild berechnet, welches von jedem Frame subtrahiert wird, um Änderungen zum „Normalzustand“ zu erkennen und somit Objekte zu lokalisieren. BGS funktioniert am besten, wenn die Bilder schwarz-weiß sind, weswegen wir in diesem Schritt das Bild kurzzeitig umwandeln. Abbildung 3 zeigt dabei das ursprüngliche Kamerabild des Objekts auf dem Laufband und Abbildung 4 dasselbe in schwarz-weiß. Auf Abbildung 5 ist der Hintergrund zu sehen, der mit dem Durchschnitt von 20 zufälligen Bildern berechnet und für die Durchführung der Background Subtraction verwendet wird. Abbildung 6 zeigt das Ergebnis der BGS, wodurch nur das Objekt und Teile des Laufbands zu sehen sind. Um das Rauschen des Laufbands abzuschwächen, wenden wir Gaussian Blur an. Das Ergebnis ist in Abbildung 7 zu sehen. Zuletzt verwenden wir einen Threshold, um weniger stark leuchtende Pixel schwarz und den Rest weiß zu färben (Abbildung 8).
Objekt ausschneiden
Die weiß gefärbten Bildbereiche (Konturen) aus Abbildung 8 schneiden wir anschließend aus dem ursprünglichen Kamerabild (Abbildung 3) aus. Dabei vernachlässigen wir Konturen, die kleiner als eine gewisse Fläche sind. Zum Ausschneiden von Objekten verwenden wir OpenCVs minAreaRect() Methode, um das kleinstmögliche Rechteck zu erhalten. Der ausgeschnittene Bildbereich ist in Abbildung 9 zu sehen.
Features berechnen
Im Gegensatz zum Reconstruction Error oder einem CNN erstellt die Support Vector Machine nicht automatisiert Features für die Eingabedaten, weswegen diese zunächst erzeugt werden müssen. Die aktuell verwendeten Features sind die Länge und Breite des Objekts und die Farbe. Wir haben zudem andere Features in Betracht gezogen wie die Struktur und das Material. Diese erwiesen sich allerdings als zu komplex, um sie mit Kameras zu erkennen.
Zur Berechnung der Länge und Breite haben wir den Zentimeteranteil pro Pixel bestimmt und konnten mithilfe dessen die Größe des Objektes bestimmen. Für die Bestimmung der Farbe verwenden wir den durchschnittlichen Farbwert von fünf Positionen. Die fünf Positionen sind in Abbildung 10 an einem Objekt verdeutlicht. Theoretisch könnten bei der Farbbestimmung alle Punkte innerhalb der Kontur verwendet werden, allerdings war dieser Ansatz ausreichend.
Support Vector Machine Exkurs
Support Vector Machine (SVM) ist ein supervised Ansatz. In diesem wird versucht, eine Klasse von einer anderen Klasse zu trennen. Diese Trennlinie wird als Hyperebene oder Hyperplane bezeichne (dargestellt in Abbildung 11). Als margin wird der Abstand des jeweils nächsten Punkts der beiden Klassen zur Hyperebene bezeichnet. Die Hyperebene wird als optimal bezeichnet, wenn die Margin zu den beiden Klassen gleich und maximal ist. Sollten die Klassen nicht wie in der Darstellung durch eine einfache, gerade Linie getrennt werden können, gibt es den Kerneltrick. Bei diesem werden die Daten mithilfe eines Kernels in einem höherdimensionalen Raum dargestellt, in welchem die Klassen meist einfacher zu trennen sind.
Klassifikation und Support Vector Machines Erstellung
An sich ist eine SVM zunächst nicht für die Erkennung von Anomalien geeignet, wenn keine Daten der Anomalien vorhanden sind. Dies hat damit zutun, dass SVMs zum Erkennen bestimmter Klassen trainiert werden. Da wir allerdings keine Informationen zu den möglichen Anomalien haben, haben wir auch keine Trainingsdaten und dadurch keine Möglichkeit, das Modell zu trainieren. Um dieses Problem zu lösen, haben wir für jede Klasse einen one-vs-all Klassifizierer erstellt. Dieser wird darauf trainiert seine eigene Klasse von allen anderen Klassen zu entscheiden. Im Fall der drei Produktklassen Orange, Rot und Schwarz haben wir drei Klassifizierer:
- Orange vs. Rot und Schwarz
- Rot vs. Orange und Schwarz
- Schwarz vs. Rot und Orange
Jeder Klassifizierer lernt somit, seine eigene Klasse zu erkennen und von den anderen zu unterscheiden. Für die Klassifizierung geben wir anschließend die Features in alle SVMs. Ziel ist es, dass die SVMs entscheiden, ob es ihre Klasse ist oder die Klasse „other“. Dabei gibt es drei mögliche Ergebnisfälle.
In diesem Fall hat genau ein Klassifizierer seine Klasse erkannt und alle anderen die Klasse „other“. Hierbei können wir davon ausgehen, dass es die vorhergesagte Klasse ist.
In zweiten Fall haben alle Klassifizierer die Klasse „other“ vorhergesagt. Da jeder Klassifizierer seine eigene Klasse erkennen kann, handelt es sich um eine Anomalie.
In dem letzten Fall sind sich zwei oder mehr Klassifizierer sicher, dass es sich um ihre Klasse handelt. Hierbei können wir erneut von einer Anomalie ausgehen, da wir angenommen haben, das die SVMs ihre Klasse von den anderen unterscheiden können.
Die endgültige Klassifikation ist allerdings nicht nur abhängig von einem einzigen Bild, sondern von allen Bildern des Videos, in denen das Objekt über das Laufband läuft. Durch die Vielzahl an Bildern, die man durch die durchgehende Kameraübertragung erhält, können kleine Messfehler und falsche Klassifikationen ausgeglichen werden.
Output vom Video
Nachdem jeder Frame alle Verarbeitungsschritte durchlaufen hat, können wir das Ergebnisse als Video darstellen. Das Video beinhaltet die Lokalisierung und Klassifizierung des Objekts. Letzteres ist links oben im Video zusehen.
Ergebnisse
In unserer Beispielproduktion werden drei Objekte (orange, rot und schwarzer Deckel) hergestellt. Diese sind auf der linken Seite in Abbildung 15 zusehen. Als Anomalien haben wir einen roten Deckel mit Aufkleber und einen schwarzen Stein verwendet, welcher um ein Vielfaches höher als der schwarze Deckel ist. Die beiden Objekte sind auf der rechten Seite zusehen. Der rote Deckel mit Aufkleber wurde als Anomalie erkannt. Bei dem schwarzen Stein erwies sich dies als nicht möglich, da sich dieser in keinem aufgezeichneten Feature stark unterscheidet.
In Tabelle 1 ist die Performance der drei Klassifizierer zu sehen. Die Werte für Precision, Recall und F1-Score basieren auf dem Makrodurchschnitt der eigenen Klasse und der Klasse other. Der F1-Score der Klassifzierer Rot und Orange ist mit 0.97 sehr gut. Dahingegen ist der Klassifizierer Schwarz mit 0.71 deutlich schlechter, dies liegt vor allem daran, das der schwarze Stein nicht als Anomalie klassifiziert wurde. Die Ergebnisse sind dennoch durchaus positiv, da bereits mit geringem Aufwand Anomalien erkannt werden können.
Deckel Rot | 0.96 | 0.99 | 0.97 |
Deckel Orange | 0.94 | 0.99 | 0.97 |
Deckel Schwarz | 0.69 | 0.89 | 0.71 |
Fazit
Wir konnten hergestellte Produkte und teilweise Anomalien erkennen. Dies hat uns außerordentlich positiv überrascht, da wir nur eine Kamera verwendet haben, um die Objekte zu klassifizieren. Wir haben festgestellt, dass die Lichtverhältnisse eine große Rolle bei der Klassifizierung spielen. Die Position der Kamera erwies sich als nicht optimal, da die Produkte seitlich erfasst wurden. Eine Repositionierung der Kamera hätte allerdings ein Retraining der Modelle zur Folge gehabt. Unser Ansatz konnte zwar den schwarzen Stein nicht als Anomalie erkennen, wir sind allerdings zuversichtlich, dass dies mit einer zusätzlichen Kamera oder einem Sensor funktionieren wird.
[1] – https://accso.de/magazin/anomaliedetektion-teil-1-eine-einfuehrung/
[2] – https://accso.de/magazin/objekterkennung-mit-hochgeschwindigkeit-on-edge/