[PYTHON] [Erkennung von Abnormalitäten] Erkennen Sie Bildverzerrungen durch Fernunterricht

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.

image.png

Aus der Schlussfolgerung

Bildbetrachtung

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.

ダウンロード.png

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.

Automatische Erzeugung von "Verzerrungsdaten"

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.

image.png

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]

Gilt für sinnvolle Orte

Es macht jedoch keinen Sinn, einen Teil des ** Hintergrundbilds ** zu drehen.

image.png

Daher haben wir einen Algorithmus implementiert, der ein Objekt automatisch erkennt.

image.png

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.

image.png

Ich habe ein verzerrtes Bild.

Vorgehensweise dieser Methode

Experiment

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.

Bedingungen

AUC-Ergebnisse

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.

image.png

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.

image.png

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.

image.png

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.

Visualisierungsergebnisse

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.

ダウンロード (1).png

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.

image.png

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.

Experiment (zusätzliche Ausgabe)

Zuletzt ändern wir das Basismodell (MobileNetV2 → EfficentNetB0).

Bedingungen

Die Bedingungen sind fast die gleichen wie im vorherigen Experiment. Die Unterschiede sind wie folgt.

AUC-Ergebnisse

image.png

In Screw beträgt die AUC selbst in Klasse 2 weniger als 0,5.

image.png

Bei Grid ähnelt das Ergebnis MobileNet V2. Immerhin ergibt ** class3 eine bessere Punktzahl. ** **.

image.png

Bei Transistor ist das Ergebnis ähnlich wie bei MobileNet V2. Immerhin erhalten Sie eine bessere Punktzahl, wenn Sie Klasse 3 verwenden.

Zusammenfassung der experimentellen Ergebnisse

Vergleichen wir die bisherigen Ergebnisse mit dem Medianwert.

image.png

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. )

Überlegung (Warum hat sich die AUC von Screw verringert?)

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.

image.png

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.

Zusammenfassung

Recommended Posts

[Erkennung von Abnormalitäten] Erkennen Sie Bildverzerrungen durch Fernunterricht
Tiefes Lernen durch Implementierung gelernt ~ Erkennung von Abnormalitäten (Lernen ohne Lehrer) ~
Objekterkennung durch tiefes Lernen, Keras tief zu verstehen
[Erkennung von Anomalien] Versuchen Sie es mit der neuesten Methode des Fernunterrichts
Erkennung abnormaler Werte durch unbeaufsichtigtes Lernen: Maharanobis-Distanz (Implementierung)
Erkennung abnormaler Werte durch unbeaufsichtigtes Lernen: Maharanobis-Distanz (Theorie)
Deep Learning Bilderkennung 1 Theorie
Ich habe versucht, die Erkennung von Anomalien durch spärliches Strukturlernen zu implementieren
Deep Learning durch Implementierung 1 gelernt (Return Edition)
Deep Learning Bilderkennung 2 Modellimplementierung
[AI] Deep Learning für das Entrauschen von Bildern
Bilderkennungsmodell mit Deep Learning im Jahr 2016
Produzieren Sie wunderschöne Seekühe durch tiefes Lernen
Abnormalitätserkennung mit MNIST durch Autoencoder (PyTorch)
Erkennung von EKG-Datenanomalien durch Matrix Profile
Bildausrichtung: von SIFT bis Deep Learning
[Deep Learning] Nogisaka Gesichtserkennung ~ Für Anfänger ~
Deep Learning Bilderkennung 3 nach der Modellerstellung
Tiefes Lernen
Chainer und Deep Learning durch Funktionsnäherung gelernt
Lesen und implementieren Sie Deep Residual Learning für die Bilderkennung
99,78% Genauigkeit bei tiefem Lernen durch Erkennen von handgeschriebenem Hiragana
Videorahmeninterpolation durch tiefes Lernen Teil 1 [Python]
Paralleles Lernen von Deep Learning durch Keras und Kubernetes
Implementierung eines Deep Learning-Modells zur Bilderkennung
Tiefes Lernen durch Implementierung (Segmentierung) ~ Implementierung von SegNet ~