Ich hatte eine interessante Diskussion über ein Projekt, an dem wir arbeiteten: Warum ein visuelles CNN-Inspektionssystem über einem Template-Matching-Algorithmus verwenden?
Hintergrund: Ich hatte eine Demo eines einfachen CNN-Bildverarbeitungssystems (Webcam + Laptop) gezeigt, das feststellte, ob ein bestimmter Objekttyp "defekt" / defekt war oder nicht - in diesem Fall eine Leiterplatte. Meinem CNN-Modell wurden Beispiele für die richtigen und defekten Leiterplatten (jeweils etwa 100 Bilder) auf einem statischen Hintergrund gezeigt. Unser Modell verwendete die ersten paar Conv / Maxpool-Schichten von vorab trainiertem VGG16 (auf Imagenet), und dann fügten wir einige weitere trainierbare Convs / Pools mit einigen Dichten hinzu, was zu einer Dim-3-One-Hot-Coded-Vektorausgabe zur Klassifizierung führte : (is_empty, has_good_product, has_defective_product).
Das Modell trainierte ziemlich einfach und erreichte ohne Probleme eine Validierung von 99%. Wir haben auch mit verschiedenen Datenerweiterungen trainiert, da wir wissen, dass unser Datensatz klein war. In der Praxis funktionierte es ungefähr 9 von 10 Mal, aber ein paar zufällige Übersetzungen / Rotationen derselben Leiterplatte brachten es gelegentlich in die entgegengesetzte Klasse. Vielleicht hätte eine aggressivere Datenerweiterung geholfen. Für ein Prototyp-Konzeptprojekt waren wir jedenfalls glücklich.
Jetzt präsentierten wir uns einem anderen Ingenieur und seinem Kollegen, und er brachte das Argument vor, dass NNs dafür übertrieben sind, sollte nur Template Matching verwenden, warum sollte man CNNs machen wollen?
Wir hatten keine gute Antwort darauf, warum unser Ansatz in bestimmten Anwendungen besser sein könnte (z. B. in anderen zu inspizierenden Teilen). Einige Punkte, die wir angesprochen haben:
1) Robuster gegenüber Invarianzen (z. B. durch Datenerweiterung)
2) Kann online lernen, um das System zu verbessern (z. B. kann der Mensch der Software mitteilen, welche Beispiele falsch sind)
3) Keine Notwendigkeit, Schwellenwerte wie bei klassischen Computer-Vision-Algorithmen festzulegen. Was gibt es Ihrer Meinung nach mehr Vorteile für ein CNN-System für diese Art von Inspektionsaufgabe? In welchen Fällen wäre es besser als Template Matching?
Noch ein paar zufällige Ideen, wann tiefe NNs die Technologie für den Job sein könnten: für Systeme, die eine 3D-Tiefenerfassung als Teil der Eingabe erfordern, oder für jede Art von Objekt, das deformiert / gedehnt / gequetscht werden kann, aber dennoch "gut" ist und nicht defekt (zB ein Stofftier, Drähte usw.). Neugierig auf deine Gedanken :)
Antworten:
Der betreffende Ingenieur, der traditionelle CV-Methoden für Ihre Bewerbung vorgeschlagen hat, hat dies einfach aus Gewohnheit getan. Die Verwendung des Vorlagenabgleichs ist extrem veraltet und hat sich als sehr schlecht erwiesen. Ich denke jedoch, dass ein CNN abhängig von der Größe Ihres Datensatzes übertrieben ist.
Wie funktioniert der Vorlagenabgleich?
Beim Vorlagenabgleich wird ein Fenster über Ihr Bild verschoben, das eine prozentuale Übereinstimmung mit der Vorlage bietet. Wenn die prozentuale Übereinstimmung über einem bestimmten vordefinierten Schwellenwert liegt, wird davon ausgegangen, dass es sich um eine Übereinstimmung handelt. Wenn Sie beispielsweise ein Bild eines Hundes haben und feststellen möchten, ob das Bild einen Hund enthält, schieben Sie eine Hundeschablone über den gesamten Bildbereich und prüfen, ob eine ausreichend große prozentuale Übereinstimmung vorliegt. Dies führt wahrscheinlich zu einer sehr schlechten Leistung, da die Vorlage das Bild identisch überlappen muss . Wie hoch ist die Wahrscheinlichkeit dafür in der Praxis? Nicht sehr hoch.
Der einzige Zeitvorlagenabgleich ist eine ausreichende Technik, wenn Sie genau wissen, wonach Sie suchen, und Sie sicher sind, dass er in jedem Beispiel einer bestimmten Klasse fast identisch angezeigt wird.
Warum stattdessen maschinelles Lernen verwenden?
Techniken des maschinellen Lernens sind nicht starr. Im Gegensatz zu stmax können CNNs einen Datensatz sehr gut verallgemeinern . Deshalb sind sie so mächtig. Anhand des Hundebeispiels muss der CNN nicht von jedem existierenden Hund ein Bild sehen, um zu verstehen, was einen Hund ausmacht. Sie können vielleicht 1000 Bilder aus einer Google-Suche anzeigen, und dann kann der Algorithmus erkennen, dass Ihr Hund tatsächlich ein Hund ist. Die Tatsache, dass Algorithmen für maschinelles Lernen sehr gut verallgemeinern, ist der Grund dafür, dass sie alle alten CV-Techniken ersetzt haben. Das Problem ist nun die Datenmenge, die Sie zum Trainieren eines CNN benötigen. Sie sind extrem datenintensiv .
Ich denke nicht, dass 100 Datenpunkte ausreichen, um ein robustes CNN zu trainieren. Aufgrund der großen Komplexität des Modells müssen Sie die Anzahl der Beispiele erhöhen, um die Verzerrung zu begrenzen. Normalerweise schlage ich 100 Beispiele für jedes Feature für tiefe Modelle und 10 Beispiele für jedes Feature für flache Modelle vor. Es hängt wirklich alles von Ihrem Funktionsbereich ab.
Was ich vorschlage.
Was Sie wirklich tun, ist die Erkennung von Anomalien . Sie haben viele Beispiele für Leiterplatten, die ansonsten in gutem Zustand sind. Sie möchten diejenigen erkennen, die defekt sind. Daher würde ich stattdessen einige Anomalieerkennungsmethoden ausprobieren. Sie sind viel einfacher zu implementieren und Sie können mit flachen Modellen gute Ergebnisse erzielen, insbesondere in verzerrten Datensätzen (1 Klasse ist überrepräsentiert).
quelle
Die Antwort hängt von der Aufgabe ab. Der Vorlagenabgleich kann für einige Aufgaben funktionieren, jedoch nicht für alle. CNNs können möglicherweise auf unsichtbare Eingaben verallgemeinern, die keiner Ihrer Vorlagen entsprechen, und können daher möglicherweise besser verallgemeinern.
Ob CNNs den Template-Abgleich schlagen, hängt jedoch von der jeweiligen Aufgabe ab und davon, was Sie konkret erreichen möchten. Dies ist eine empirische Wissenschaft; Letztendlich können Sie herausfinden, was besser funktioniert, indem Sie beide ausprobieren - oder von anderen lernen, die sie ausprobiert haben (z. B. durch Lesen der Literatur). Ich glaube nicht, dass Sie eine Theorie oder Taxonomie finden werden, die die empirische Bewertung realer Daten ersetzen wird.
quelle
Ein Problem, auf das Sie möglicherweise mit einem NN (und anderen Klassifizierungsmethoden) stoßen, besteht darin, dass es, da Sie nur bestimmte Fehler angezeigt haben, möglicherweise nicht weiß, wie es auf völlig neue / noch nicht sichtbare Fehler reagieren soll, die in Zukunft auftreten könnten.
Sie möchten, dass der NN erfährt, dass "alles, was nicht wie eine nicht defekte Leiterplatte aussieht, eine defekte Leiterplatte ist". Aber was ist, wenn es gelernt hat, dass "alles, was nicht wie eine defekte Leiterplatte aussieht, eine nicht defekte Leiterplatte ist"?
Sie können versuchen, einige Bilder von nicht defekten Leiterplatten zu ändern, indem Sie ihnen an zufälligen Stellen einen kleinen weißen Fleck (oder eine andere kleine Störung) hinzufügen und das neuronale Netzwerk diese geänderten Bilder klassifizieren lassen. Es sollte sie definitiv als defekt klassifizieren, oder? Aber es werden wahrscheinlich einige (oder ziemlich viele) fehlen, weil es noch nie solche Mängel gesehen hat.
Um völlig neue Fehler zu erkennen, sind Anomalieerkennungsmethoden / Klassifikatoren für eine Klasse möglicherweise vertrauenswürdiger, da sie alles aufnehmen sollten, was noch nie zuvor gesehen wurde.
Wie DW sagte, müssen Sie nur beide Methoden ausprobieren und herausfinden, welche besser funktioniert. Stellen Sie einfach sicher, dass Sie ein wirklich gutes Test-Set haben, das auch völlig neue Mängel enthält!
quelle