Studiennotizen zur Anomalieerkennung (für den persönlichen Gebrauch)

Zeichnen Sie den Lernprozess und den Tagesplan zur Erkennung von Lernanomalien auf.

Domänenhintergrundwissen

Bestimmung der Aufgabe der Anomalieerkennung: MVTec AD-Datensatz. Erkennungsaufgaben auf Bild- oder Pixelebene. Der Hintergrund des Datensatzes ist relativ einfach, aber bei den erkannten Fehlern handelt es sich im Allgemeinen um relativ kleine Fehler.

Drei in dieser Phase häufig verwendete Erkennungsmethoden:
1. Anomalie-Anomalieerkennung basierend auf Rekonstruktion: Autoencoder und Generative Adversarial Network (GANS)
Autoencoder Der Schwerpunkt liegt auf der Rekonstruktionsfähigkeit von Proben, während sich GAN auf die Generierungsfähigkeit von Proben konzentriert.
2. Synthesebasierte Methode
3. Einbettungsbasierte Methode. Diese Art von Methode verwendet vorab trainierte Funktionen von ImageNet. Zum Beispiel SimpleNet. Es ordnet ImageNet-Features der Zieldomäne zu und fügt dann der Feature-Map Gaußsches Rauschen hinzu, um Fehler zu simulieren. Die beiden Feature-Maps werden im Diskriminator zusammen verwendet, um Verluste zu beurteilen und zu erzeugen.
4. Null-/Wenig-Schuss-Erkennung
Der größte Vorteil der Null-/Wenig-Schuss-Erkennung ist, dass ich nur passe Ein Modell kann die Erkennung aller Fehler abschließen. Es ist nicht erforderlich, für jede Kategorie einen Klassifikator zu haben. Es ist jedoch zu beachten, dass nicht alle Modelle der oben genannten Definition folgen. Wie PatchCore verfügt es auch über eine Few-Shot-Implementierung, dies bedeutet jedoch, dass die verwendete Datenmenge n (Weg) × k (Shot) Bilder beträgt. Tatsächlich wird für jede Kategorie ein einzelner Klassifikator festgelegt. Unter Berücksichtigung der Projektanforderungen ist es besser, ein Modell auszuwählen, das alle Mängel erkennt.

Spezifischer Algorithmus (Zero/Few-Shot)

RegAD: RegAD ist ein Kaltstart (verwendet nur normale Proben). Basierend auf dem MVTecAD-Datensatz gibt es zwei Trainingseinstellungen. Die erste ist die Leave-One-Einstellung, bei der zunächst auf Normalbildern außerhalb der Zielkategorie trainiert wird, dann eine Normalverteilungsschätzung basierend auf dem Unterstützungsdatensatz des Ziels durchgeführt wird und schließlich eine Inferenz auf dem Testsatz des Ziels durchgeführt wird. Eine andere Einstellung besteht darin, die Unterstützungsdaten jeder Kategorie zu trainieren, wodurch auch ein Klassifikator für eine einzelne Kategorie trainiert wird. Die im Github-Quellcode bereitgestellte Trainingsmethode dient der Einstellung (i), und wir konzentrieren uns auch auf diese Methode. Wenn die Schweißnaht dieses Projekts den gleichen Maßstab wie MVTecAD haben kann, ist es machbar. Dieser Algorithmus ist jedoch kein Einzelklassenklassifikator für jede Kategorie. Es erfordert aber auch einen Normalverteilungsschätzprozess, der bei MVTecAD 4 Sekunden dauert.
Es stellt sich die Frage: Wie kann man es im Ingenieurwesen anwenden? Geben Sie mehrere Bilder ein, erstellen Sie in vier Sekunden ein Fehlermodell und führen Sie dann eine Schlussfolgerung durch. Ist das nicht im Wesentlichen ein Einklassendetektor? Ich hatte gerade noch eine Frage. Für dieses Projekt sind alle Support-Datensätze gleich. So kann es sein! Trainieren Sie nun anhand des aktuell bereitgestellten vertikalen Schweißdatensatzes, verwenden Sie dann die normalen Proben in den horizontalen Schweißnähten als Unterstützung und die abnormalen Proben als Schlussfolgerung. Auf diese Weise ist der Support-Datensatz anders.

WinCLIP: Dies ist ein multimodales Modell, das auf CLIP in unbeaufsichtigter Form basiert. Geben Sie N Bild-Text-Paare ein, von denen N*N-N negative Stichproben sind und nur N Text-Bild-Paare positive Stichproben sind. Meine Vermutung: Es verwendet das vorab trainierte Modell von CLIP und optimiert es dann anhand des MVTec AD-Datensatzes. Die Textanweisungen sind in vier Teile unterteilt. Dies ist jedoch kein Open Source, aber der Erstplatzierte im folgenden Wettbewerb ist auf Basis von WinCLIP modifiziert und verfügt über Quellcode.

Algorithmenbereitstellung (Projekt)

1. Datensatz. Schneiden Sie zunächst das Bild des vertikalen Gasschweißens zu, das der Lehrer letztes Mal gegeben hat (in der tatsächlichen Verwendung sollte es jedoch zur Erkennung horizontaler Schweißnähte verwendet werden). Entfernen Sie das Schweißteil und schneiden Sie kleine Gitter aus. Die kleinen Gitter ohne Anomalien sind positive Proben und die fehlerhaften sind negative Proben. Derzeit gibt es zwei Kategorien: Gut und Blase. Es können jedoch unterschnittene Bilder im Guten vorhanden sein, und die Bilder in der Blase sind nicht unbedingt das, was Partei A als Blasen bezeichnet. Dieser Teil muss mit dem Lehrer noch weiter ausgearbeitet werden.
2. Derzeit liegt nur ein Fehler vor, sodass Sie ihn zunächst mit der Einzelklassenklassifikatormethode testen können. Das Anomalib-Framework unter openvino ist ausgewählt. Warte derzeit auf die Grafikkarte.
3. Wenn der vorherige Schritt der Überprüfung erfolgreich ist, können Sie RegAD erneut versuchen. Dies erfordert möglicherweise die Kennzeichnung eines weiteren Unterschnittdefekt-Datensatzes und das anschließende Training mit der Leave-One-Einstellung.
4. Ich habe den Artikel von April GAN ​​noch nicht gelesen. Es ist der Null-Schuss-Champion dieses Wettbewerbs. Der andere Champion der Wenig-Schuss-Strecke scheint nicht Open Source zu sein, aber Sie können auch auf andere Rankings achten. Algorithmus.

Tagesplan

6.29

  • Nach der Lektüre des Artikels von April GAN
  • Wenn auf Ihrer Grafikkarte freier Speicherplatz vorhanden ist, verwenden Sie anomalib, um den selbst erstellten Datensatz „welded_seam“ auszuführen.
  • Erstellen Sie eine Umgebung für April GAN ​​​​oder RegAD

Zusammenfassung:
Ich habe das GAN-Papier vom April noch nicht fertiggestellt, bin aber zu Li Mu gegangen, um etwas über CLIP (Contrastive Language) zu lernen -Image Pre-Training) Habe es wieder gut gemacht. Ich habe Padim und Patchcore von Anomalib verwendet, um einen selbst erstellten Datensatz auszuführen. Die Erkennungsgenauigkeit auf Bildebene liegt bei beiden über 90 %, aber die Testergebnisse von Patchcore sind besser. Allerdings ist die Fehlerstelle in der Feature-Heatmap nicht besonders genau, und es wird geschätzt, dass die Pixelverarbeitung nicht einfach durchzuführen ist. Durch das Problem auf Github weiß ich, dass seine max_epoch 1 ist (da CNN nur in der Feature-Extraktion erscheint, ist es bei mehreren Epochen dasselbe wie beim ersten Mal). Ich verstehe diesen Satz nicht, ich werde ihn morgen lesen.

6.30 Uhr

  • Verstehen Sie diese Parameter in Anomalib, insbesondere die Aufteilung von Zug- und Val-Datensätzen
  • Schlussfolgerung führt zu Anomalib
  • Nach der Lektüre des Artikels von April GAN
  • Erstellen Sie eine Umgebung für April GAN ​​​​oder RegAD

Zusammenfassung:
Ich habe den Artikel von April GAN ​​zu Ende gelesen. Dies ist ein verbessertes Modell, das auf CLIP oder Win-CLIP basiert. Zero-Shot-Missionen sind verfügbar. Sowohl Bild- als auch Text-Encoder verwenden CLIP und stellen dann einige Bild-Text-Paare bereit, um lineare Ebenen für die Feature-Konvertierung zu trainieren, sodass eine Zero-Shot-Inferenz durchgeführt werden kann. Wenn Sie wenige Aufnahmen verwenden möchten, speichern Sie die unterstützenden Bildmerkmale in der Speicherbank. Die Merkmale der Speicherbank in jeder Phase werden mit den Merkmalskarten in der Nullaufnahme verglichen, um die Vorähnlichkeit zu prüfen, um die Anomaliekarte und schließlich die Anomalie zu erhalten Punktzahl.
In Bezug auf die Aufteilung des Datensatzes werden derzeit im selbst erstellten Datensatz 20 % des Normalwerts und 50 % der Blase als Wert verwendet, und der Inhalt von val und test ist derselbe .
Schließlich gibt es noch eine Begründung. Anomalib führt übrigens in der letzten Trainingsphase Inferenzen durch. Wenn Sie den Modellerkennungsdatensatz im Projekt aufrufen, müssen Sie test.py bestehen. Morgen werden wir sehen, ob es zum Testen oder zum Ableiten verwendet wird, denn wenn es zum Testen verwendet wird, muss die Kategorie der gegebenen Daten sicher sein, und Infer ist die unbekannte Kategorie der zu erkennenden Daten.

7.2

  • Führen Sie eine Inferenzbereitstellung von Anomalib durch
  • Erstellen Sie die GAN-Umgebung für April
  • Führen Sie April GAN ​​aus

Zusammenfassung:
Der Grund für anomalib ist die Verwendung der py-Datei tools/inference/lightning_inference.py. Die Inferenzzeit beträgt 400 ms (3060), die Inferenzzeit auf dem Server beträgt 350 ms. Obwohl Openvino-Inferenzdateien vorhanden sind, muss das Modell konvertiert werden. Derzeit ist keine Inferenzzeit erforderlich, sodass dies vorerst nicht berücksichtigt werden muss.
Die Einrichtung der GAN-Umgebung im April ist nicht schwierig. Sie ist derzeit auf dem Server eingerichtet. Es liegt jedoch ein Problem mit dem Server vor. Befehle, die auf Conda basieren, melden mit Ausnahme der Aktivierung der virtuellen Umgebung einen Fehler ohne Pip, und der Grund kann nicht gefunden werden. Die Umgebung dieses Projekts besteht darin, eine neue virtuelle 3.8-Umgebung zu erstellen und dann die Pakete in require.txt zu installieren. (Okay, es ist zu spät. Obwohl Sie eine virtuelle Umgebung erstellen können, treten beim Packen verschiedene Probleme auf. Sie müssen es also morgen noch einmal versuchen, um zu sehen, ob Sie eine Conda-Umgebung erstellen oder das Pip-Problem lösen können, das bei der Verwendung auftritt conda) < /span>
April GAN ​​​​wird sich den Code morgen genauer ansehen. Erstens: Was macht er mit dem MVTecAD-Datensatz? Kann er für den Datensatz „welded_seam“ mit demselben Verzeichnis verwendet werden? Struktur?

7.4

  • Erstellen Sie die Conda-Umgebung von April GAN ​​​​und installieren Sie das Paket
  • Schauen Sie sich den Datenlesecode von April GAN ​​an
  • Erstellen Sie das geteilte Tag von „welded_seam“ und konvertieren Sie es von JSON in PNG
  • Versuchen Sie, die Ableitung von wenigen Schüssen direkt durchzuführen, leihen Sie sich die Funktionen jeder Stufe von Null-Schüssen aus und vergleichen Sie sie mit den Unterstützungsfunktionen in der Speicherbank.
  • Führen Sie das April GAN-Netzwerk aus

Zusammenfassung:
Die April-GAN-Umgebung ist eingerichtet, aber die Conda-Umgebung funktioniert immer noch nicht. Ich verwende die virtuelle Umgebung kommt mit Python über die Quelle April_GAN/ bin/activate startet die Umgebung. Es besteht jedoch die versteckte Gefahr, dass das Horvod-Paket nicht installiert werden kann. Dies wird für verteiltes Training verwendet. Ich weiß nicht, ob es Auswirkungen auf das nachfolgende Training haben wird. Vorher habe ich dies befolgt horvodFolgen Sie dem Tutorial. Wenn Sie es später wirklich benötigen, ändern Sie das Tutorial, erstellen Sie dann direkt eine neue virtuelle Umgebung, installieren Sie alle Pakete außer Horvod und installieren Sie Horvod schließlich separat.
Das Splitting-Tag im PNG-Format ist fertig. Die Verzeichnisstruktur unterscheidet sich jedoch vom mvtec-Format, das von April GAN ​​gefordert wird. Die Zug- und Testverzeichnisse müssen unter jedem Fehler festgelegt werden. Der Zug muss mehr als 200 normale Proben enthalten, und der Test enthält jeweils 20 normale Proben und 20 fehlerhafte Proben. Es mangelt weiterhin an Normalproben.
Der Datensatz wurde geändert und auf dem Server abgelegt.

7.6

  • Ändern Sie die Idee des Schneidens von Blöcken, führen Sie überlappende Schnitte durch und erstellen Sie Folgerungssätze
  • Erstellen Sie einen ppt-Bericht
  • April GAN ​​​​und anderes Kartentraining

Zusammenfassung:
Sie müssen sich nicht den einklassigen Anomalieerkennungsalgorithmus ansehen, sondern nur den auf Null basierenden Algorithmus /few-shot.
Diesmal wird der Block gemäß Schritt = 100 geschnitten (die durchschnittliche Breite und Höhe der Schweißnaht beträgt 320 * 3200). Wie werden der Infer-Satz und der Testsatz entworfen? Nicht duplizierte Bilder in den Test und datenverstärkte Bilder in die Ableitung einbinden? Oder sollten wir das Originalbild und das verbesserte Bild in den Test einbeziehen und das unsichtbare Bild und sein verbessertes Bild in die Ableitung einbeziehen? Ich denke, es sollte Letzteres sein. Nachdem ich den Bericht am Nachmittag fertiggestellt habe, werde ich das ppt extrahieren.

7.7
Jetzt, da der Bericht fertig ist, führen Sie den Zero-Shot und den Few-Shot basierend auf mvtecAD und VISA für den Datensatz auf April-GAN aus und schauen Sie sich einfach an Wärmekarte. Wenn Partei A den Datensatz zurückgibt, können wir basierend auf mehreren Arten von Schweißfehlern einige Aufnahmen anderer Fehlertypen ausführen.

Führen Sie basierend auf April-GAN null und wenige Schüsse auf „welded_seam“ aus. Die Ergebnisse sind wie folgt:

Zero-Shot
Trainings-Mapping basierend auf dem Visa-Datensatz
Fügen Sie hier eine Bildbeschreibung ein
Trainings-Mapping basierend auf dem MVtec-Datensatz
Fügen Sie hier eine Bildbeschreibung ein
wenige -shot
Trainingskartierung basierend auf dem Visa-Datensatz, mit
5shot
Fügen Sie hier eine Bildbeschreibung ein
10shot
Fügen Sie hier eine Bildbeschreibung ein
20shot < in welded_seam /span> Der Lehrer gab einige neue Daten ein und extrahierte einige Blasen und normale Proben. Was bedeuten diese Indikatoren? Es liegt eine gewisse Fehleinschätzung vor, sonst werden andere Mängel als Blasen erkannt. Jetzt verwenden wir mvtec oder visa, um die Feature-Zuordnung durchzuführen. Wenn wir die normalen Stichproben oder Unterschnitte dieses Projekts verwenden, um die Feature-Zuordnung durchzuführen, und dann Rückschlüsse auf Blasen ziehen, ist der Effekt dann besser? Nun scheint es, dass der Effekt umso besser ist, je höher die Aufnahme ist. Bei 5 Aufnahmen beträgt die Inferenzzeit etwa 1,4 Sekunden für ein Bild, bei 10 Aufnahmen dauert sie 2 Sekunden. und für den Nullschuss dauert es 0,5 Sekunden. Dann sehen wir nun, dass das Problem folgendes ist: 20 Schuss 10 Schuss 5 Schuss
Fügen Sie hier eine Bildbeschreibung ein
Trainingskartierung basierend auf dem MVTEC-Datensatz unter Verwendung von

Fügen Sie hier eine Bildbeschreibung ein

Fügen Sie hier eine Bildbeschreibung ein

Fügen Sie hier eine Bildbeschreibung ein



7.14&7.15
Es ist immer noch ein Projekt. Auch wenn es nicht abgeschlossen werden kann, kann dennoch darüber gesprochen werden. Also gib dein Bestes!

  • Schauen Sie sich den Zugteil des Papiers und des Codes an und überlegen Sie, wie Sie den Datensatz „welded_seam“ zum Ausführen von Zug verwenden können
  • Verbessern Sie die Visualisierung und ordnen Sie die Fehlerkarte wieder dem Originalbild zu
  • Es gibt auch einige neue Bilder und die Blasen- und Normalproben werden erneut extrahiert
  • Verstehen Sie die Bedeutung jedes Indikators

Ich habe den MVTEC-Datensatz ausgeführt. Dieses Modell ist eigentlich ein Zwei-Klassifizierungs-Modell und kann nicht sagen, was der spezifische Fehler ist.
Ich habe den Artikel noch einmal gelesen. Tatsächlich liegt der Schlüssel im Trainingsteil von Zero-Shot. Wenn Sie die Genauigkeit des Modells verbessern möchten, ist die Verwendung meiner Meinung nach der direkteste Weg Führen Sie mithilfe des Unterschnittdatensatzes der Schweißnaht eine Nullschuss-Mapping-Funktion des Schussteils durch und führen Sie dann eine Wenig-Schuss-Inferenz für die Blase durch. Dies stellt eine Gefahr dar. Visualisieren Sie zunächst die Anomaliekarte zu den Segmentierungsergebnissen.
Lassen Sie uns über die Eigenschaften der einzelnen Indikatoren sprechen. Für die Klassifizierung sind AUROC, F1-max und AP alle sehr hoch. Bei einer größeren PRO-Aufteilung (Schnitt- und Vereinigungsverhältnis) sind F1-max und AP dieser Aufgabe sehr niedrig, während AUROC, F1-max und PRO sehr hoch sind. Ich weiß immer noch nicht, welchen konkreten Einfluss die Ebenen dieser Indikatoren auf die Segmentierungsergebnisse haben werden.

7.17

  • Aktivieren Sie die durchscheinende Visualisierung
  • Erstellen Sie einen Unterschnittdatensatz, beschriften Sie ihn und konvertieren Sie dann das Format (json-png).
  • Meta.json generieren
  • Trainieren Sie Feature-Maps und führen Sie dann die Zero-Shot-Inferenz erneut aus

Es wurde ein Kompromiss geschlossen. Der zur Visualisierung verwendete gelbe Kreis kam heraus und der durchscheinende wurde nicht erstellt.
Der Unterschnittdatensatz wurde erstellt und trägt den Namen „welded_1“. Verwenden Sie ihn, um den Zug morgen fahren zu lassen

7.18

  • Verwenden Sie den Undercut-Datensatz, um die Feature-Zuordnung zu trainieren und eine Zero-Shot-Inferenz durchzuführen
  • Führen Sie eine 5-Schuss-Inferenz basierend auf dem Gewicht des mvtec-Datensatzes durch, generieren Sie eine Maske und visualisieren Sie sie dann
  • Versuchen wir, eine halbtransparente Visualisierung zu erreichen

Der erste Schritt des Trainings ist abgeschlossen und der Trainingseffekt ist sehr gering. Wenn ich über den Grund nachdenke, denke ich, dass dies daran liegt, dass die im Zug enthaltenen Arten von Fehlerproben zwar zu einzeln sind, die vom Zug erlernten Merkmale jedoch zu unterschiedlich sind Modell sind nur für Unterschnitte geeignet. Aus der Fehlerkarte lässt sich auch erkennen, dass sich die identifizierten Fehlerbereiche alle an der Stelle der Hinterschneidung befinden. Sofern der Datensatz nicht vergrößert wird, wird die Feature-Map daher nicht mit einem selbst erstellten Datensatz trainiert. Darüber hinaus können Sie den selbst erstellten Unterschnittdatensatz in den „welded_seam“-Test einfügen, um Rückschlüsse auf wenige Schüsse zu ziehen. Es ist zu beachten, dass es sich bei dem Modell um eine einzelne Kategorie handelt und die intelligente Erkennung die Fehlerkategorie nicht zurückgibt.
Im zweiten Schritt wurde zusätzlich zur Blase auch die Unterschnittklasse hinzugefügt, und es wurde festgestellt, dass der Erkennungseffekt sehr schlecht war.
Die dritte halbtransparente Visualisierung wurde implementiert, indem eine rote Maske hinzugefügt und die Transparenz von img und mask über die Funktion cv2.addWeight festgelegt wurde, wodurch eine Kombination aus beiden erreicht wurde.
Senden Sie morgen die Ergebnisse der Blaseninferenz an den Lehrer und teilen Sie ihm mit, dass die Unterschnittergebnisse sehr schlecht sind (habe beide Methoden ausprobiert)

7.20

  • Schauen wir uns zunächst den Segmentierungskopf und die Verlustfunktion von April GAN ​​an.
  • Ist es möglich, den Teilkopf durch einen Detektionskopf zu ersetzen?
  • Oder prüfen Sie, ob andere Algorithmen zur Zielerkennung mit wenigen Schüssen diesen Datensatz verarbeiten können

Einer der Gründe für den Verzicht auf den Segmentierungsalgorithmus ist, dass der endgültige Fehlerbereich zu fein ist und nicht durch einen Begrenzungsrahmen gezeichnet werden kann; der andere ist, dass die Geschwindigkeit des Segmentierungsalgorithmus zu langsam ist. Oh ja, obwohl keine Segmentierung mehr erforderlich ist, empfiehlt der Lehrer aus Sicht der Visualisierung, das Umrissformular ohne transparente Maske zu verwenden, um es unübersichtlich zu machen.

7.23

  • Ist es möglich, den Teilkopf durch einen Detektionskopf zu ersetzen?

Nachdem ich heute Morgen gelesen habe, bleiben mir zwei Fragen:

Warum verbessert das Hinzufügen von Textaufforderungen die Genauigkeit?
Sie können dazu das WinCLIP-Papier lesen. Dieser Teil der Arbeit ist relativ festgelegt. Es besteht darin, die Bildkategorie eines Stapels einzugeben, dann 245 Sätze zu generieren und schließlich die Textmerkmale von (768,2) über den Tokenizer zu erhalten.
Dies liegt daran, dass die Funktionen des Modells von CLIP stammen, einer vergleichenden Lernmethode. Nehmen Sie das Bildmerkmal als x, das Textmerkmal als y und definieren Sie die Agentenaufgabe als diagonales x-y-Paar als positive Stichprobe. Der Rest sind negative Stichproben für das Training. Durch die Einführung von Textinformationen wird hier tatsächlich eine genauere Beschreibungsmethode verwendet, um durch Text zu definieren, was eine fehlerhafte Probe und was eine positive Probe mit einem Fehler innerhalb des zulässigen Bereichs ist.

Wozu dient das image_feature, das schließlich vom Modell ausgegeben wird?
Sehen Sie sich das Prozessdiagramm von April GAN ​​an. Ich vermute, dass es zur Fehlererkennung auf Bildebene verwendet wird. Sie können überprüfen, ob dies in test.py erfolgt.

7.31

  • Bestimmen Sie die Bereiche, die für die semantische Segmentierung und Zielerkennung geändert werden müssen.
  • Werfen wir einen Blick darauf, wie der Erkennungskopf von yolo aufgebaut ist
  • Schauen Sie sich einige Netzwerke an, die sowohl semantische Segmentierung als auch Zielerkennung unterstützen (mask-RCNN? Nein, yolov5 unterstützt es).

Der train.py-Datei nach zu urteilen, ist die semantische Segmentierung basierend auf Fehlerkarten eigentlich nicht kompliziert. Die 4 (8, 1369, 2) Feature-Maps werden in 4 (8, 2, imgsize, imgsize) Feature-Maps umgewandelt , Softmax wird auf dem Merkmalskanal 2 ausgeführt, um den jedem Pixel entsprechenden Ausreißerwert zu erhalten und so die Fehlerkarte zu erhalten. Wenn Sie eine Zielerkennung durchführen möchten, müssen Sie zusätzlich zu den Kategorieinformationen auch Koordinaten zurückgeben. Kann dieses Merkmalsformular in Koordinaten umgewandelt werden? Wenn es dann um das Lesen von Daten geht, kann die Maske nicht gelesen werden und der Erkennungsrahmen muss gelesen werden. Abschließend wird die Verlustfunktion modifiziert.
yolo ist eine Feature-Map in drei Maßstäben, aber die vier von CLIP extrahierten Stufen liegen im gleichen Maßstab. Während des Experiments können nur die Features der letzten Stufe zur Erkennung verwendet werden.
Das Problem besteht darin, dass auf dem Erkennungskopf von yolov5 die Ausgabe-Feature-Map die letzte Faltungsschicht durchlaufen und dann in (bs,nl,x,y,no*na) zerlegt werden muss. . Jetzt müssen wir die Form der Feature-Map vor und nach der Faltungsschicht kennen, sie kompilieren und einen Blick darauf werfen. Die Ausgabe der minimalen Feature-Map ist x(bs,255,20,20). April-GAN ist (bs,1369,2), was theoretisch zu (bs,2+xywh+conf,w,h) werden sollte. Yolo ist auf Probleme mit mehreren Maßstäben ausgerichtet, und April kann die Feature-Map-Ausgabe der vier Stufen in Feature-Maps mit mehreren Maßstäben umwandeln. (Eigentlich wäre es besser, Yolos Rückgrat in CLIP umzuwandeln???)

8.1

  • Führen Sie train.py von yolov5 aus und sehen Sie, wie sich die Größe der Feature-Map ändert.
  • Ersetzen Sie Blase durch Wörter wie Schlaglöcher und prüfen Sie, ob sich die Erkennungsergebnisse verbessern.
  • Kompilieren Sie es und sehen Sie, welche Informationen die erste Dimension in den Codierungsmerkmalen des Textes darstellt.
  • Ein kurzer Blick auf das auf CLIP basierende Zielerkennungspapier

1. Es ist klar, dass der Erkennungskopf in yolov5 x(bs,255,20,20) in x(bs,3,20,20,85) ändert. Der Schlüssel ist der durch 255 dargestellte Anker × (xywh + conf + 80-Kategorie), der durch Reduzieren der Dimensionalität höherdimensionaler Merkmale erhalten wird. Er muss jedoch in CLIP auf 255 erhöht werden. Das ist unvernünftig.
2. Da CLIP Sprachaufforderungswörter für vergleichendes Lernen entlehnt, hat die Richtigkeit der Funktionsbeschreibung auch einen gewissen Einfluss auf die Modellerkennung. Nach der Überprüfung ist die Auswirkung nicht signifikant, was darauf hinweist, dass CLIP ausreicht, um die Schlaglöcher in der Schweißnaht genau zu beschreiben, unabhängig davon, ob es sich um die ursprüngliche Blase oder um Schweißgruben handelt. Die Genauigkeit nimmt zu und ab und die Änderungen in der Fehlerkarte sind nicht signifikant.
3. Die Form von text_feature ist (768,2). In einer Dimension sind die vom Textkodierer erzeugten normalen und abnormalen Merkmalsvektoren nacheinander (768,).
4. Ich habe einen Artikel in ViLD gelesen. Er verwendet RPN zum Generieren von Vorschlägen, verwendet Conv zum Generieren der Bildkodierung und der Text wird über den Textkodierer von CLIP kodiert. Die beiden werden durch vergleichendes Lernen gelernt. Unter anderem wird der Vorschlag mit CLIP als Lehrer für die Führung von Backbone + RPN + RoIAlign generiert. Hey, so gesehen können auch Vorschläge mit Standortinformationen auf Basis von CLIP generiert werden. Wie geht das?

8.2

  • Beobachten Sie die Ausgabe von April-GAN mit wenigen Schüssen
  • Sammeln Sie Algorithmen zur Zielerkennung mit wenigen Schüssen

1. Jetzt ist die Ausgabe von April-GAN in Few-Shot die Summe von Zero-Shot und Few-Shot. Jetzt möchte ich nur die Ausgabe von Few-Shot sehen. Könnte es in der aktuellen Ausgabe sein, dass zu viele Fehlerkennungen in normalen Proben auf die schlechten Zero-Shot-Ergebnisse zurückzuführen sind? Wenn das Ergebnis der wenigen Schüsse gut ist, kann das Gewicht der beiden hinzugefügten Fehlerkarten angepasst werden oder es können nur die wenigen Schüsse ausgegeben werden.
Wenn man sich nur die wenigen Aufnahmen ansieht, ist es tatsächlich leicht, Ausreißer für die fehlerfreien Teile zu generieren. Das Modell weiß immer noch nicht, wie ein normales Bild aussieht, und es mangelt ihm an Verständnis von defekten „Blasen“ und „Lötlöchern“. Die Modellinferenzgeschwindigkeit von CLIP ist immer noch zu langsam, also probieren wir es zunächst einmal aus. Wenn Sie es schließlich aktivieren möchten, verwenden Sie am besten den größeren Datensatz „welding_seam“, um die Mapping-Ebene zu trainieren.

8.9

  • Führen Sie den Blasendatensatz auf Anomalib aus, um die Genauigkeit und Inferenzgeschwindigkeit zu sehen.
  • Versuchen Sie es mit anomalib, indem Sieefficient_ad ausführen

1. Führen Sie es aus und stellen Sie fest, dass die Segmentierungsgenauigkeit immer noch nicht hoch ist, aber die Fehlerkennung viel kleiner ist als im April-GAN. Sie können einen anderen Datensatz erstellen, um den Effekt zu sehen
2. Jetzt bleibt es beim selbst erstellten Datensatz hängen. Aber es gibt ein Problem: Wenn ich mvtec trainieren möchte, habe ich viele Datensätze heruntergeladen. Wie wäre es, wenn ich morgen mit dem Herunterladen dieser Datensätze fertig bin, den mvtec-Code ausführe und dann versuche, zu sehen, ob die selbstgemachte „welded_seam“ ausgeführt werden kann? < /span>

8.13

  • Führen Sieefficient_ad durch
  • Schauen Sie sich den Artikel vonefficient_ad an
  • Erstellen Sie einen Datensatz für die dieses Mal erfassten Daten
  • Versuchen Sie es erneut mit April GAN ​​​​für einen neuen Datensatz

1、跑mvtec时精度很高,自制的welded_seam精度很低。有可能是数据集的组成形式不一样,改成mvtec一样的再试试。要是精度还低,就补充一些正常图像进去。efficient_ad的效果很差,不予采用了就。patchcore的效果还挺不错的,目前F1-score是0.44,AUROC是0.99。F1低的原因我觉得是召回率比较低,这个和阈值也有一定关系,在热度图里可以看到,尽管有些缺陷没有检测出来,但是还是有一定热度的,所以我想把8月数据集里的bubble提出来,做个test看看结果。
2、没用,不看了,去看patchcore
3、制作了一个normal数据集,一共是436张正常的block,补充到welded_seam数据集中了。
4、可试可不试了,因为太慢了。

8.14

  • 用anomalib做pathcore的predict,改变阈值看看效果
  • 把上次采集数据中的bubble,飞溅,焊瘤提取出来,用作predict
  • 看patchcore论文

1、predict跑通了,现在是在热度图上放分割结果。单独跑一下1689的block10和11,因为这个问题是关乎焊瘤的检测效果。因为方案设计的关系,所以截取的焊瘤大多分布在两个block中,在block10中尚且有焊瘤的特征,但在block11中可能就难以观测到了。阈值根据官方手册的说明进行修改。
当前阈值下,bubble的效果还好,其他两种效果就比较差了,是因为没有给这两种数据做test?明天看看论文吧,需要的话就补充上。
2、不做咬边数据集,因为现在采集的图片放大以后,很多看起来都像是有咬边的。如果要加入咬边数据,需要对normal数据进行大规模清洗,可能满足要求的也不会很多,所以就先试试其他四种缺陷的检测效果。
spatter和beading提取好了,bubble中只把“微信图片”的block分好了,其他IMG开头的block没分。
跑predict可以在分好的bubble等四个文件夹中跑,也可以直接在各个图片的文件夹下跑。
3、明天一定要看了,因为这个模型的效果还不错。

8.16

  • 修改阈值跑跑这几个数据集的predict
  • 一定看patchcore的论文。为什么训练一个epoch就够了,还有什么可以优化的参数吗?

1、我认为这个阈值应该是anomaly map里大于这个最近邻距离就判定为异常。但是现在我不知道这个值应该是多少,正常来说应该是0-255之间?0.1,1,100,200都试过没有效果。这个最后再试吧,先调整其他的参数
2、论文看完了看懂了。训练阶段还需要调整的参数是coreset生成时,最近邻的数量以及采样的比例。两个调整方向就是增大num_neighbors和coreset_sampling_ratio。必然会导致推理速度变慢,不过可以试着看看效果如果。最后再看看有没有办法有效地改阈值。后面如果要调试别的缺陷数据集,由于数据很少嘛,memory bank里的东西少,所以这两个值可以适当加大,牺牲训练和推理速度换一点精度。

8.17

  • 增大num_neighbors和coreset_sampling_ratio,看看patchcore的训练结果
  • 这个anomalib能不能调试整个训练过程啊,如果在lighting_net里加点应该可以
  • 最后可以试试怎么改阈值

1、coreset_sampling_ratio修改为0.2和0.3均无法训练,neighbor改了对于模型也没有很大的变化,所以这两个因子有影响但不多,可以在最终确定了patchcore后再进行调参。现在转而去看看改阈值(改验证集)。
2、确实是的
3、在github的issue里找到的:Anomalib目前有一个自适应阈值机制,旨在解决阈值问题。自适应阈值机制为一系列阈值计算验证集上的F1分数。最终的阈值是导致F1得分最高的阈值。这种方法的一个主要缺点是验证集需要包含异常样本,这在现实世界的异常检测问题中可能并不总是可用的。所以这个阈值应该是在val时确定的,修改val集也会修改这个阈值,目前的阈值感觉偏高了,应该把val集变简单(或者和predict相近)会使得阈值降低一点。
现在把8月采集的一部分bubble换成val了,借此来改变阈值,同时扩充了train,明天跑一下看看有没有好一些。

8.18

  • 跑一下拓充后的welded_seam_2数据集
  • 试试reverse distillation网络(有2022和2023CVPR两版)
  • 试试dream网络(分割的F1比较高)

1、在autodl的anomalib服务器上跑了下新数据集,果然在val换成比较简单的数据以后,阈值明显提升了,用这个模型和阈值再在原来welded_seam_1上的val上跑,效果也不错。目前在welded_seam_2的val上F1-score是0.69。后续试试另外两个,如果效果一般,就继续研究该模型的可视化(在原图上标注缺陷区域)和openvino部署。
2、anomalib上的是2022版本的,跑起来效果不好。还有个2023CVPR的reverse distillation++,官方强调得是与patchcore相近的精度和更少的推理速度。现在offical代码也出来了,如果patchcore推理速度不满意可以再试试这个。
3、也不高。除了patchcore都不太好,为啥呢?

8.19

  • 修改可视化
  • openvino推理加速

1、调试的时候找到welded_seam_2对应的pixel_threshold了:51.8008。位置在
src/anomalib/models/components/base/anomaly_module.py的94行
可视化现在已经修改为原图+mask。位置在
src/anomalib/post_processing/visualizer.py的203行
注意:只修改了segmentation的visualization,classification暂时没有修改
2、不用openvino推理加速,2080Ti的infer速度1秒3张。如果要使用openvino的话,查了下官方的github issue,其实说是解决了这个bug。可能需要把整个工程重新替换成最新版的。

April GAN总结

Fügen Sie hier eine Bildbeschreibung einEingabe: 518×518 Bild
Netzwerkstruktur:
1. Das Bild wird vom CLIP-Encoder generiert Feature-Maps (1369,1024) in jeder Phase und dann durch eine lineare Ebene gehen, um die Features in Formen abzubilden, die mit Text-Features (1369,768) gekoppelt werden können
2. Text basiert Auf Vorlage + Kategorie + Status Sätze werden im Formular gebildet und die Textmerkmale von (768,2) werden nach der Codierung generiert. Dies wird durch zwei (768,) Merkmalsvektorstapel gebildet, die durch den normalen Satz und durch den Textkodierer abnormal erzeugt werden.
3. Multiplizieren Sie die Bildmerkmalsmatrix und die Textmerkmalsmatrix, um das Merkmal von (1369,2) zu erhalten. Für die semantische Segmentierungsaufgabe kann die Defektkarte von (2,w,h) verwendet werden direkt ausgegeben werden
Zusammenfassung:
Für die Zielerkennungsaufgabe müssen die Merkmale von (1369,2) in (anchor×(xywh+conf+ 2-Kategorie) durch 1×1-Faltung), w,h), und dann ist die Ansicht (Anker, xywh+conf+2-Kategorie, w,h). Dieser Faltungsschritt ist unvernünftig. Ich halte es nicht für geeignet, den Detektorkopf direkt anzuschließen. Grundsätzlich extrahiert CLIP Merkmale aus dem gesamten Bild und weist keine Bildbereichsmerkmale auf, sodass es nicht für einstufige Zielerkennungsaufgaben geeignet ist.
Ich habe versucht, den Fehlernamen (bubble->welding_pits) zu ändern, aber der Effekt war nicht offensichtlich; es ist nicht möglich, das Segmentierungsproblem in ein Erkennungsproblem umzuwandeln. Erstens ist die Form begrenzt durch Textmerkmale und kann nicht aktualisiert werden. Dimension oder CLIP dient zum Extrahieren von Merkmalen für das gesamte Bild, nicht für einzelne Bereiche des Bildes; zweitens ist die Zielerkennung basierend auf CLIP meist zweistufig, daher ist es besser, direkt zu gehen Algorithmus mit wenigen Schüssen; schließlich ist die Erkennungsgeschwindigkeit sehr langsam. Langsam und entspricht nicht den tatsächlichen technischen Anforderungen. Wenn Sie es aktivieren möchten, ist es besser, den größeren Welding_seam-Datensatz zum Trainieren der Mapping-Ebene zu verwenden.

PatchCoreSummary

Fügen Sie hier eine Bildbeschreibung einTrainingsphase: Senden Sie fehlerfreie, von Xtrain generierte Features und speichern Sie sie in der Speicherbank
Testphase: Nachdem Xtest Features generiert hat, führen Sie eine Suche nach dem nächsten Nachbarn mit den Features in der Speicherbank durch , und geben Sie die nächstgelegene zurück. Die Nachbarentfernungsmatrix kann nach der Umformung in eine Fehlerkarte und einen Fehlerwert umgewandelt werden.
Das Netzwerk verfügt über drei innovative Punkte:
1. Lokal bewusste Patch-Funktionen
Geben Sie die Trainingsbilder in ein auf ImageNet basierendes Backbone ein, erhalten Sie die Mid-Level-Funktionen und speichern Sie sie in der Speicherbank. Um das Empfangsfeld der Features mittlerer Ebene zu verbessern, die Auflösung beizubehalten und die Features nicht zu vertiefen, werden die Features des Patches mit jedem Punkt als Mittelpunkt und p als Radius aggregiert, um die ursprünglichen Features an diesem Punkt zu ersetzen .
2. Coreset-reduzierte Patch-Feature-Speicherbank
Die gesamte Speicherbank kann nicht verwendet werden. Die Methode in diesem Artikel besteht darin, das Coreset zu verwenden, d. h. Die Kernteilmenge. Ausgehend davon kann diese Teilmenge die Informationen der gesamten Bank vollständig darstellen. Die Extraktionsmethode ist der minimale Standort der Anlage, und das Ziel besteht darin, den extrahierten mc so nah wie möglich an den ursprünglichen m zu bringen. Dies ist der sogenannte Trainingsprozess des gesamten Modells, bei dem der Kernsatz und der Originalsatz so nahe wie möglich kommen.
3. Anomalieerkennung mit PatchCore
Das Trainingsbild durchläuft zunächst das Pre-Train-Backbone, um die Zwischenmerkmale zu erhalten und sie in der Speicherbank zu speichern; dies Da das Merkmal zu groß ist, erfolgt die Reduzierung der Dimensionalität über die Kernsatzsammlung. Das Testbild erhält Zwischenmerkmale über das Netzwerk, findet den nächsten Nachbarn in der Speicherbank, gibt den Abstand zum nächsten Nachbarn zurück und formt sich schließlich in (batch_size, h*) um. , w*), die durch kanalweise Addition erhalten werden können. Für den Anomalie-Score kann die Anomaliekarte durch Erweitern der Interpolation auf (batch_size, h, w) erhalten werden.
Zusammenfassung:
Weitere Einzelheiten finden Sie in den Notizen von Little Green Whale. Hier gibt es auch eineQuellcode-Interpretation.
Die Inferenzgeschwindigkeit dieses Modells kann in der Praxis genutzt werden. Hier gibt es zwei Möglichkeiten: Die eine besteht darin, einen Block ohne Fehler in den Zug einzugeben und dann fünf Kategorien von Fehlern in den Wert einzutragen. Dadurch wird eigentlich nur ein Modell generiert. Der Vorteil besteht darin, dass die Inferenzgeschwindigkeit hoch ist, der Nachteil besteht jedoch darin, dass für fünf Fehler ein einheitlicher Fehlerschwellenwert generiert werden muss, was zu einer geringeren Genauigkeit führt. Die andere Methode besteht darin, fünf Modelle zu generieren. Am Beispiel der Blase hat der Block in Zug keinen Block und weist andere Fehler auf, während der Block in Val Bilder nur mit Fehlern wie Blasen aufweist. Der Vorteil besteht darin, dass jeder Fehler einem Modell und einem Schwellenwert entspricht, der Nachteil besteht jedoch darin, dass er langsam ist.

Supongo que te gusta

Origin blog.csdn.net/smallbig12/article/details/131451511
Recomendado
Clasificación