Frage

Ein Entwickler, mit dem ich zusammenarbeite, entwickelt ein Programm, das Straßenbilder analysiert, um Risse im Straßenbelag zu finden.Für jeden Riss, den sein Programm findet, erstellt es einen Eintrag in einer Datei, der mir sagt, aus welchen Pixeln dieser bestimmte Riss besteht.Allerdings gibt es zwei Probleme mit seiner Software:

1) Es werden mehrere Fehlalarme erzeugt

2) Wenn er einen Riss findet, findet er nur kleine Abschnitte davon und bezeichnet diese Abschnitte als separate Risse.

Meine Aufgabe ist es, Software zu schreiben, die diese Daten liest, analysiert und den Unterschied zwischen falsch positiven Ergebnissen und tatsächlichen Cracks erkennt.Ich muss auch bestimmen, wie ich alle kleinen Abschnitte eines Risses zu einem Ganzen zusammenfassen kann.

Ich habe verschiedene Möglichkeiten ausprobiert, die Daten zu filtern, um Fehlalarme zu eliminieren, und habe mit begrenztem Erfolg neuronale Netze eingesetzt, um Cracks zusammenzufassen.Ich verstehe, dass es Fehler geben wird, aber im Moment gibt es einfach zu viele Fehler.Hat jemand für einen Nicht-KI-Experten einen Einblick, wie ich meine Aufgabe am besten erfüllen kann, oder kann ich mehr darüber erfahren?Welche Arten von Büchern sollte ich lesen oder welche Art von Kursen sollte ich belegen?

BEARBEITEN Bei meiner Frage geht es eher darum, wie ich Muster in den Daten meiner Kollegen erkennen und diese Muster als tatsächliche Risse identifizieren kann.Mir geht es um die übergeordnete Logik, nicht so sehr um die untergeordnete Logik.

BEARBEITEN Tatsächlich wären MINDESTENS 20 Beispielbilder erforderlich, um eine genaue Darstellung der Daten zu liefern, mit denen ich arbeite.Es ist sehr unterschiedlich.Aber ich habe eine Probe Hier, Hier, Und Hier.Diese Bilder wurden bereits vom Prozess meines Kollegen verarbeitet.Ich muss die roten, blauen und grünen Daten klassifizieren (Rot steht für einen dunklen Riss, Blau steht für einen hellen Riss und Grün steht für einen breiten/versiegelten Riss).

War es hilfreich?

Lösung

Neben den nützlichen Kommentare über die Bildverarbeitung, es klingt auch wie Sie mit einem Clustering zu tun hat Problem .

Clustering-Algorithmen stammen aus dem Maschine Literatur Lernen, insbesondere nicht überwachtes Lernen . Wie der Name schon sagt, ist die Grundidee zu , um zu versuchen zu identifizieren natürliche Cluster von Datenpunkten innerhalb einiger großen Menge von Daten.

Zum Beispiel das Bild unten zeigt, wie eine Cluster-Algorithmus könnte Gruppe eine Reihe von Punkten in 7 Gruppen (durch Kreise und Farbe):


(Quelle: natekohl.net )

In Ihrem Fall ein Cluster-Algorithmus versuchen würde, immer wieder kleine Risse zu verschmelzen größeren Riss zu bilden, bis einige Abbruchkriterien erfüllt sind. Das Endergebnis wäre eine kleinere Gruppe von miteinander verbundenen Rissen sein. Natürlich sind Risse ein wenig anders als zweidimensionale Punkte - ein Teil des Tricks einen Cluster-Algorithmus in immer hier arbeitet eine nützliche Distanzmetrik zwischen zwei Rissen werden die Definition

.

Beliebte Clustering-Algorithmen umfassen k-Means Clustering ( Demo ) und hierarchisches Clustering . Die zweite Verbindung hat auch eine schöne Schritt-für-Schritt-Erklärung, wie k-Means funktioniert.

Bearbeiten : Dieses Papier von einigen Ingenieuren bei Phillips sieht relevant, was Sie zu tun versuchen:

  • Chenn-Jung Huang, Chua-Chin Wang, Chi-Feng Wu, " Bildverarbeitungstechniken für Wafer Defect Cluster Identification " IEEE Entwurf und Test von Computer, vol. 19, Nr. . 2, S. 44-48, März / April 2002.

Sie machen eine Sichtprüfung auf Defekte auf Siliziumwafern und eine Medianfilter Rauschen zu entfernen, bevor sie einen nächster-Nachbar-Clustering-Algorithmus, um die Defekte zu erkennen.

Arbeiten

Hier sind einige relevante Papiere / Bücher, die sie, dass zitieren könnte nützlich sein:

  • M. Taubenlatt und J. Batchelder, „ Patterned Waferinspektion Mit Spatial Filtering für Cluster-Umgebung Applied Optics, Bd. 31, Nr. 17. Juni 1992, S.. 3354-3362.
  • F.-L. Chen und S.-F. Liu, „ Ein Ansatz Neural-Netzwerk Defect räumliches Muster erkennen in der Halbleiterfertigung. IEEE Trans. Semiconductor Manufacturing, Bd. 13, Nr. 3, August 2000, S.. 366-373.
  • G. Earl, R. Johnsonbaugh und S. Jost, Mustererkennung und Bildanalyse , Prentice Hall, Upper Saddle River, N. J., 1996.

Andere Tipps

Ihr Problem fällt in dem sehr weiten Feld der Bildklassifizierung. Diese Art von Problemen kann notorisch schwierig sein, und am Ende des Tages, sie zu lösen, ist eine Kunst. Sie müssen jedes Stück Wissen ausnutzen Sie über das Problem Domain haben, um es gefügig zu machen.

Ein grundsätzliches Problem ist die Normalisierung. Sie wollen ähnlich klassifizierten Objekte haben, wie ähnlich in ihrer Darstellung der Daten wie möglich zu sein. Zum Beispiel, wenn Sie ein Bild von den Rissen haben, hat alle Bilder die gleiche Orientierung haben? Wenn nicht, dann Drehen des Bildes in Ihrer Klassifizierung helfen können. Ähnlich Skalierung und Übersetzung (siehe dieser )

Sie wollen auch so viele irrelevanten Daten wie möglich von Ihrem Trainingssatz zu entfernen. Anstatt direkt auf dem Bild arbeiten, vielleicht könnten Sie Kantenextraktion (zum Beispiel Canny Kantenerkennung ). Dies wird alle ‚Rauschen‘ aus dem Bild entfernen, nur die Kanten zu verlassen. Die Übung wird dann reduziert, um zu identifizieren, welche Kanten sind die Risse und der die natürlichen Pflaster.

Wenn Sie Spur zu einer Lösung fasten wollen, dann empfehle ich Ihnen zuerst versuchen, die Ihr Glück mit einem Faltungs Neural Net , die mit einem Minimum an Vorverarbeitung und noramlization ziemlich gute Bildklassifizierung durchführen kann. Es ist ziemlich gut in der Handschrifterkennung bekannt und könnte genau das Richtige sein für das, was Sie tun.

Ich bin ein bisschen durch die Art und Weise verwirrt, das Problem zu brechen gewählt haben. Wenn Ihr Mitarbeiter nicht vollständig Risse zu identifizieren, und das ist die Spezifikation, dann macht, dass es Ihr Problem. Aber wenn es Ihnen gelingt, alle zusammen, um die Risse zu nähen, und vermeiden Sie seine Fehlalarme haben dann nicht Sie gerade seinen Job getan?

Das beiseite, ich denke, das ist eine Kantenerkennung Problem eher als ein Klassifikationsproblem rel="nofollow. Wenn der Kantendetektor gut ist, dann gehen Sie Ihre Probleme weg.

Wenn Sie noch über die Einstufung festgelegt sind, dann werden Sie einen Trainingssatz mit bekannten Antworten auf benötigen, da Sie brauchen eine Möglichkeit, zu quantifizieren, was von einem echten Risse ein Fehlalarm unterscheidet. Aber ich denke, noch ist es unwahrscheinlich, dass Ihr Klassifikator Lage sein wird, die Risse zu verbinden, da diese für jede einzelne Pflasterplatte spezifisch sind.

Ich habe mit ire_and_curses zustimmen, wenn Sie in den Bereich der Kantenerkennung tauchen Ihre Co-Entwickler Erkennung knacken zu flicken, und entfernen Sie seine Fehlalarme, so scheint es, als ob Sie seinen Job tun würde. Wenn Sie Patch, was seine Software nicht erkannt hat, und entfernen Sie seine Fehlalarme um das, was er dir gegeben hat. Es scheint, wie Sie dies für das gesamte Bild tun würden.

Wenn die Spezifikation ist für ihn die Risse zu erkennen, und man sie klassifiziert, dann ist es seine Aufgabe, die Kantenerkennung zu tun und Fehlalarme zu entfernen. Und Ihre Aufgabe zu übernehmen, was er dir gegeben hat und zu klassifizieren, welche Art von Risse es ist. Wenn Sie Kantenerkennung zu tun haben, das zu tun, dann klingt es wie Sie nicht weit sind von Ihren Co-Entwickler aus der Arbeit setzen.

Es gibt einige sehr gute Antworten hier. Aber wenn Sie nicht in der Lage sind, das Problem zu lösen, können Sie Mechanical Turk betrachten. In einigen Fällen kann es sehr kostengünstig für hartnäckige Probleme. Ich kenne Leute, die es für alle Arten von Dingen wie diese verwenden (Überprüfung, dass ein Mensch leicht tun können, aber erweist sich als schwer zu Code).

https://www.mturk.com/mturk/welcome

Ich bin kein Experte mit allen Mitteln, aber versuchen Sie suchen unter Haar Cascades . Sie können auch mit dem OpenCV-Toolkit experimentieren wollen. Diese beiden Dinge zusammen tun Gesichtserkennung und andere Objektdetektionsaufgaben.

Sie können „Training“ zu tun haben, ein Haar Cascade für Risse im Pflaster zu entwickeln.

  

Was ist der beste Ansatz Muster in Daten zu erkennen, und was ist der beste Weg, um mehr über das Thema erfahren?

Der beste Ansatz ist die Mustererkennung und maschinelles Lernen zu studieren. Ich würde mit Duda Pattern Classification rel="nofollow und verwende Bischof Mustererkennung und Maschinelles Lernen als Referenz. Es wäre eine gute Weile dauern, bis das Material zu sinken, aber grundlegenden Sinn der Mustererkennung und wichtigen Ansätze des Klassifikationsproblems bekommen sollten Ihnen die Richtung geben. Ich kann hier sitzen und einige Annahmen über Ihre Daten machen, aber ehrlich gesagt haben Sie wahrscheinlich die beste Idee über den Datensatz, da Sie haben damit beschäftigt mehr als jeder andere. Einige der nützlichen Technik könnten zum Beispiel Support-Vektor-Maschine und Steigerung .

Bearbeiten : Eine interessante Anwendung der Steigerung ist Echtzeit-Gesichtserkennung. Siehe Viola / Jones schnelle Objekterkennung ein Boosted Cascade von Einfacher Verwendung Features (pdf). Auch bei den Beispielbildern suchen, ich würde sagen, Sie sollten versuchen, die Kantenerkennung ein wenig zu verbessern. Vielleicht das Bild mit Gaussian und Lauf aggressivere Kantenerkennungs Glättung kann Erkennung kleinerer Risse erhöhen.

Ich schlage vor, Sie jede Bildverarbeitung Lehrbuch abholen und zu diesem Thema gelesen. Insbesondere könnte man daran interessiert sein Morphologische Operationen wie Dilation und Erosion , die die Aufgabe eines Flankendetektor . Viele Materialien im Netz ...

Dies ist ein Bildverarbeitungsproblem.Es gibt viele Bücher zu diesem Thema, und ein Großteil des Materials in diesen Büchern geht über ein solches Linienerkennungsproblem hinaus.Hier ist der Überblick über eine Technik, die für das Problem geeignet wäre.

  1. Wenn Sie einen Riss finden, finden Sie einige Pixel, aus denen der Riss besteht.Hierzu können Kantenerkennungsfilter oder andere Kantenerkennungsverfahren eingesetzt werden.

  2. Beginnen Sie mit einem (beliebigen) Pixel in einem Riss und „folgen“ Sie ihm dann, um aus dem Riss eine Mehrpunktlinie zu erstellen – speichern Sie die Punkte, aus denen die Linie besteht.Sie können einige Zwischenpunkte entfernen, wenn diese nahe an einer geraden Linie liegen.Tun Sie dies mit allen Crack-Pixeln.Wenn Sie einen sternförmigen Riss haben, machen Sie sich darüber keine Sorgen.Folgen Sie einfach den Pixeln in eine (oder zwei) Richtungen, um eine Linie zu bilden, und entfernen Sie diese Pixel dann aus dem Satz der Risspixel.Die anderen Schenkel des Sterns werden (vorerst) als separate Linien erkannt.

  3. Sie können die Risspixel vor Schritt 1 etwas verdünnen.Mit anderen Worten: Überprüfen Sie die Nachbarn der Pixel. Wenn es zu viele gibt, ignorieren Sie dieses Pixel.(Dies ist eine Vereinfachung – es gibt mehrere Algorithmen dafür.) Ein weiterer Vorverarbeitungsschritt könnte darin bestehen, alle zu dünnen oder zwei schwachen Linien zu entfernen.Dies könnte bei Fehlalarmen hilfreich sein.

  4. Jetzt haben Sie viele kurze Mehrpunktleitungen.Suchen Sie für die Endpunkte jeder Linie die nächstgelegene Linie.Wenn die Linien innerhalb einer Toleranz liegen, „verbinden“ Sie die Linien – verknüpfen Sie sie oder fügen Sie sie derselben Struktur oder demselben Array hinzu.Auf diese Weise können Sie die nahe beieinander liegenden Risse verbinden, bei denen es sich wahrscheinlich um denselben Riss im Beton handelt.

Es scheint, dass für eine gute Leistung unabhängig vom Algorithmus einige Parameteranpassungen erforderlich sind.Schreiben Sie es so, dass kleinere Änderungen an Dingen wie Intensitätsschwellenwerten, minimaler und maximaler Dicke usw. problemlos vorgenommen werden können.

Abhängig von der Nutzungsumgebung möchten Sie möglicherweise dem Benutzer erlauben, die fraglichen Fälle zu bestimmen, und/oder einem Benutzer erlauben, alle Risse zu überprüfen und erkannte Risse durch Klicken zu kombinieren, aufzuteilen oder zu entfernen.

Sie haben einige sehr gute Antwort, esp. @ Nates und alle Links und Bücher vorgeschlagen sind lohnenswert. Aber ich bin überrascht, niemand vorgeschlagen, das ein Buch, das gewesen wäre, mein Top-Pick - O'Reilly Programmierung Collective Intelligence . Der Titel kann nicht relevant scheinen auf Ihre Frage, aber glauben Sie mir, die Inhalte sind : eines der praktischsten, Programmierer orientierte Berichterstattung über Data Mining und „Maschinelles Lernen“ ich je gesehen habe. Geben Sie ihm einen Spin! -)

Es klingt ein wenig wie ein Problem in Felsmechanik gibt es, wo es Verbindungen in einer Gesteinsmasse sind und diese Gelenke müssen in ‚Sets‘ gruppiert werden durch Orientierung, Länge und andere Eigenschaften. In diesem Fall ein Verfahren, das gut funktioniert, ist Clustering, obwohl klassische K-Mittel ein paar Probleme zu haben scheint, die ich in der Vergangenheit angesprochen haben einen genetischen Algorithmus unter Verwendung der iterativen Lösung ausgeführt werden.

In diesem Fall ich es vermuten könnte nicht funktionieren genau die gleiche Weise. In diesem Fall vermute ich, dass Sie Ihre Gruppen erstellen müssen mit dh Längs-, Quer- usw. zu beginnen und genau zu definieren, was die GERÄTEVERHALTEN jeder Gruppe, dh kann teilweise Riss Zweig entlang ihrer Gesamtlänge einen einzigen Längs ist, und wenn es das tut, was tut das tun, um es Klassifizierung ist.

Sobald Sie, dass dann für jeden Riss, würde ich einen zufälligen Riss oder ein Muster von Rissen erzeugen auf der Basis der Klassifizierung Sie erstellt haben. Sie können dann so etwas wie ein Least-Squares-Ansatz verwenden, um zu sehen, wie eng die Reißt Sie paßt gegen den zufälligen Riss wird Überprüfung / Reißt Sie generiert hat. Sie können diese Analyse beliebig oft wiederholen, in der Art einer Analyse Monte-Carlo zu identifizieren, welche der zufällig erzeugten Riss / Risse am besten, die man passen Sie prüfen.

Um dann mit den falschen Positiven beschäftigen müssen Sie ein Muster für jede der verschiedenen Arten von Fehlalarmen schaffen heißt die Kante einer Bordsteinkante ist eine gerade Linie. Sie werden dann in der Lage sein, die Analyse der Kommissionierung laufen, die die wahrscheinlichste Gruppe ist für jeden Reißen Sie analysieren.

Schließlich werden Sie zu ‚zwicken‘ müssen die Definition der verschiedenen Risstypen, um zu versuchen und ein besseres Ergebnis zu bekommen. Ich denke, das entweder einen automatisierten Ansatz oder einen manuellen Ansatz verwenden könnte, je nachdem, wie Sie Ihre verschiedenen Risstypen definieren.

Eine weitere Modifikation, die manchmal hilft, wenn ich Probleme mache wie dies eine zufällige Gruppe haben. Durch Feinabstimmung der Empfindlichkeit einer zufälligen Gruppe das heißt, wie mehr oder weniger wahrscheinlich ein Riss in der zufälligen Gruppe aufgenommen werden, können Sie manchmal das fühlend des Modells zu komplexen Mustern anpassen, die wirklich nicht überall passen.

Viel Glück, scheint mir, wie Sie eine echte Herausforderung haben.

Sie sollten etwa lesen Data Mining , speziell Muster Bergbau .

  

Data Mining ist der Prozess Muster aus Daten zu extrahieren. Da immer mehr Daten gesammelt werden, mit der Menge der Daten alle drei Jahre verdoppeln, Data Mining ein zunehmend wichtiges Instrument immer diese Daten verwandeln sich in Information. Es wird in einer Vielzahl von Profilierungs Praktiken, wie Marketing, Überwachung, Betrugserkennung und wissenschaftliche Entdeckung verwendet.

Ein gutes Buch zu diesem Thema ist Data Mining: Praktische Maschinelles Lernen Werkzeuge und Techniken


(Quelle: waikato.ac.nz ) ] ( http://www.amazon.com/Data-Mining -Ian-H-Witten / dp / 3446215336 "ISBN 0-12-088407-0")

Im Grunde, was Sie tun müssen, ist die statistischen Werkzeuge und Methoden, um Ihre Datensätze anzuwenden. Die am häufigsten verwendeten Vergleichsmethoden sind Student t-Test und Chi-Quadrat-Test , um zu sehen, wenn zwei unabhängige Variablen mit einem gewissen Zuversicht in Zusammenhang stehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top