Es gibt viele Untersuchungen zur Erkennung von Bildanomalien mithilfe von Deep Learning.
Als Ansatz zur Erkennung abnormaler Produkte unter Verwendung nur normaler Daten für Industrieprodukte Bisher ist @ daisukelabs Lernen mit Selbstlehrern am einflussreichsten. in dieser Studie Als Problem war die Genauigkeit einiger Bilder träge, und ich habe versucht, fehlerhafte Klassendaten zu erstellen **. Es gab einen Kommentar.
Daher möchte ich in diesem Artikel ** verschiedene ** automatische Generierungsmethoden für abnormale Bilder untersuchen.
Frühere Untersuchungen ist es gelungen, viele Fehler mit einer sehr einfachen Methode zu erkennen. Darüber hinaus ist der fasi.ai-Code von @ daisukelab sehr sauber und lesbar. Wenn Sie Anomalien in Bildern erkennen möchten, empfehlen wir Ihnen, diese zu lesen.
In früheren Studien lag die AUC für die vier Daten von Schraube, Transistor, Gitter und Pille von [MVtech AD] unter 0,9 (https://www.mvtec.com/company/research/datasets/mvtec-ad/). Infolgedessen war es ein Inhalt von Versuch und Irrtum.
Dieses Mal möchte ich auf andere Daten als Pille abzielen. Die drei anderen Daten als Pille sind wie folgt.
Wenn man das abnormale Bild betrachtet, gibt es viele Dinge, die eher "verzerren" als Kratzer und Schmutz, und diese Erkennung ist Da es schwierig ist, wird angenommen, dass AUC schwer zu züchten ist.
Daher werden wir nach einer Methode suchen, um automatisch "Verzerrungsdaten" aus normalen Daten zu generieren und die Leistung bei der Erkennung von Anomalien zu steigern.
Es scheint verschiedene Methoden zum Erstellen von Verzerrungsdaten zu geben. In diesem Artikel wird jedoch erläutert, wie ein Teil des Bildes gedreht wird. Ich habe es angenommen.
Dies ist mit dem Datengenerator von Keras einfach zu bewerkstelligen.
from keras.preprocessing.image import ImageDataGenerator
small_fig = fig[begin1:end1,begin2:end2]
datagen = ImageDataGenerator(
rotation_range=30,
width_shift_range=0.2,
height_shift_range=0.2,
horizontal_flip=False,
vertical_flip=False)
for d in datagen.flow(np.expand_dims(small_fig, axis=0), batch_size=1):
# datagen.Da die Flussschleifen unendlich sind, verlässt sie die Schleife
break
fig[begin1:end1,begin2:end2] = d[0]
Es macht jedoch keinen Sinn, einen Teil des ** Hintergrundbilds ** zu drehen.
Daher haben wir einen Algorithmus implementiert, der ein Objekt automatisch erkennt.
Bei Schraube usw. unterscheiden sich Richtung und Position des Prüflings in den Trainingsdaten geringfügig. Wenn andererseits die Trainingsdaten gemittelt werden, kann ein Bild erhalten werden, in dem das Teststück verschwindet. (2.Training data average)。
Danach wird die Differenz zwischen dem gemittelten Bild und dem Zielbild aufgenommen und binärisiert (Binärkarte). Auf diese Weise kann die Reichweite des Prüflings automatisch erkannt werden. Während der automatischen Erkennung Wenn Sie einen Teil des Bildes drehen, erhalten Sie das folgende Bild.
Ich habe ein verzerrtes Bild.
Die Experimente wurden mit MVtech AD durchgeführt. Ich habe den gesamten Code hier eingefügt [https://github.com/shinmura0/AutoEncoder_vs_MetricLearning/blob/master/AnomalyDetection_self_supervised.ipynb]. Es kann in Colab ausgeführt werden.
In den experimentellen Ergebnissen ist Klasse 2 (zwei Klassen, "normal" und "abnormal mit einer Linie") die Basislinie, Klasse3 (Klasse2 Klasse + "verzerrte Anomalie") ist die vorgeschlagene Methode.
In Screw nimmt die AUC ab, wenn die vorgeschlagene Methode (Klasse 3) auf Klasse 2 angewendet wird. Es ist weg. Der Grund für den Rückgang wird später diskutiert.
In Grid ist die vorgeschlagene Methode (Klasse 3) erwartungsgemäß besser als die Basislinie (Klasse 2). AUC ist gestiegen. Ich glaube, ich konnte die Verzerrung erkennen, als ich zielte. Anormaler Teil erkannt Wir werden überprüfen, ob dies durch Visualisierung erfolgt.
In Transistor erhöhte sich die AUC, wenn das vorgeschlagene Verfahren (Klasse 3) wie in Grid angewendet wurde. Eine Verbesserung von 0,1 oder mehr kann für ArcFace bestätigt werden.
Wie in Frühere Untersuchungen gezeigt, habe ich auch versucht, den abnormalen Teil durch Grad-CAM zu visualisieren. Es basiert jedoch auf "AdaCos". Daher gibt es zwei abnormale Klassen: Ich leite Grad-CAM in jeder Klasse.
Erstens sind die Gitterdaten.
Die Visualisierung von "Distortion" passt gut zu allen Daten. Wenn jedoch mehrere Anomalien vorliegen, kann anscheinend nur eine erkannt werden.
Als nächstes kommt der Transistor.
In Transistor passt die Visualisierung von "Slight Line" gut für die meisten Daten. Das Ergebnis ist das Gegenteil von Grid. Welche Klasse von Anomalien sollte hier gesehen werden, abhängig von der Art der Daten Es kann sich ändern.
Zuletzt ändern wir das Basismodell (MobileNetV2 → EfficentNetB0).
Die Bedingungen sind fast die gleichen wie im vorherigen Experiment. Die Unterschiede sind wie folgt.
In Screw beträgt die AUC selbst in Klasse 2 weniger als 0,5.
Bei Grid ähnelt das Ergebnis MobileNet V2. Immerhin ergibt ** class3 eine bessere Punktzahl. ** **.
Bei Transistor ist das Ergebnis ähnlich wie bei MobileNet V2. Immerhin erhalten Sie eine bessere Punktzahl, wenn Sie Klasse 3 verwenden.
Vergleichen wir die bisherigen Ergebnisse mit dem Medianwert.
Ohne Schraube erhöht sich die AUC, wenn ** die vorgeschlagene Methode (Klasse 3) auf die Basislinie (Klasse 2) angewendet wird ** Du kannst nachschauen. Auch bei den Arten des Fernunterrichts scheint es einen solchen Unterschied zu geben. Ich kann es nicht sehen, aber ArcFace zeigt eine relativ gute Punktzahl.
Der Unterschied in der AUC nach dem CNN-Modell scheint für EfficientNet B0 gut zu sein, das eine AUC von 0,9 oder höher erreicht hat. Das Anwenden von EfficientNetB7 oder etwas anderem kann die AUC signifikanter erhöhen (obwohl im Bild) Die Mindestgröße scheint 600 x 600 zu sein. schwer. B0 ist übrigens 224 x 224. )
Berücksichtigen Sie die Ursache für die untere AUC der Schraube.
Einfach ausgedrückt wird durch Hinzufügen der Klasse "Verzerrte Anomalie" ** "Große" Verzerrung als anomal angesehen Erkennbare **, aber ** "kleine" Verzerrungen werden jetzt als nahezu normal erkannt ** Es scheint, dass es geworden ist.
In der Zwei-Klassen-Klassifikation der bisherigen Forschung werden durch Zeichnen einer dünnen Linie nicht nur Kratzer und Verfärbungen, sondern auch die Spitze der Schraube Durch Zeichnen einer Linie konnte ich "kleine" Verzerrungen simulieren. Allerdings die dritte Klasse Mit der Einführung wird die Aufgabe von CNN schwieriger.
Bisher war in der Zwei-Klassen-Klassifikation "kleine" Verzerrung eine ziemlich dünne Linienklasse. Auf der anderen Seite ist aufgrund der Drei-Klassen-Klassifizierung ** die Spezialmengenextraktion von CNN auf die Linienerkennung und Rotationserkennung spezialisiert. ** Die "kleine" Verzerrung scheint nahe an der normalen Klasse zu liegen. Infolgedessen ist der Rückgang der AUC Es wird vermutet, dass er eingeladen wurde.
Die obige Abbildung ist ein Diagramm, in dem Grad-CAM auf AdaCos (Klasse 3) angewendet wird, das von Screw trainiert wurde. Alle Bilder Es ist ein abnormales Bild. Wie Sie sehen, wurde keine kleine Verzerrung an der Schraubenspitze festgestellt.
Wenn Sie von MobileNetV2 zu EfficientNetB0 wechseln, beträgt die AUC auch in Klasse 2 0,5. Das Ergebnis war niedriger. Dies liegt daran, dass EfficientNetB0 Funktionen klarer extrahieren kann. Das Ergebnis ist, dass die Merkmalsextraktion von "dünnen Linien" zu erfolgreich ist und sich die "kleine" Verzerrung der Normalität nähert. Es scheint, dass es getan wurde.
Ist es dann nicht möglich, "kleine" Verzerrungen zu simulieren, indem der Bereich der Teilrotation verringert wird? Wenn der Bereich jedoch zu klein gemacht wird, kann er von CNN nicht erkannt werden und das Lernen wird überhaupt nicht fortgesetzt. Werden.
Um dies zu verbessern, erhöhen Sie die Auflösung des Bildes oder richten Sie die Ausrichtung des Testprodukts aus. Es ist notwendig, ein spezielles Bild zu entwickeln. Wie in Frühere Forschung erwähnt, Wenn anomale Daten verfügbar sind, können Sie das Bild auch genau betrachten und analysieren. Es scheint effektiv zu sein.
Als empfohlenes Verfahren sollten Sie zunächst durch autodidaktisches Lernen in zwei Klassen einteilen. danach, Wenn Sie 3 Klassifizierungen versuchen und die AUC schlechter wird, analysieren Sie das Bild gut. Es wird ein Prozess sein.
Recommended Posts