2016-03-23 7 views
1

Ich studierte vor einigen Jahren sehr kurz das maschinelle Lernen und Klassifizieren, und ich möchte jetzt mit einem echten Anwendungsfall darauf zurückkommen.Machine Learning auf Bildern: wie man die Daten vorverarbeitet

Ich möchte es auf Textur-Klassifizierung anwenden. Zum Beispiel möchte ich bei beschrifteten Bildern von Wänden mit verschiedenen Tapeten lernen, zu klassifizieren, um was für eine Tapete es sich handelt.

Ich weiß, dass das Bild im Allgemeinen in kleine Flecken unterteilt ist, die ein "visuelles Vokabular" bilden, auf dem wir dann den Algorithmus trainieren können.

Aber ich bin auf den ersten Schritt fest: bevor ich überhaupt den Lernalgorithmus anwende, wie sollte ich die Bilder vorbereiten? Zum Beispiel weiß ich, dass die meiste Zeit mit binären Bildern gelehrt wird, aber in meinem Fall könnte die Farbe das Merkmal einer Klasse sein. Die Binärisierung kann jedoch nützlich sein, wenn ein Hintergrundbild durch sein Muster oder seine granulare Struktur identifiziert wird ... In diesem Fall weiß ich nicht, ob generische Operationen auf das Bild anzuwenden sind, um diese Merkmale deutlicher zu machen. Und wenn das der Fall ist, sollte ich für jede Probe mehrere Bilder erstellen?

Zusammenfassend möchte ich wissen, welche Methoden zur Erstellung des Bildes vor dem Erstellen des Features-Vektors häufig verwendet werden, zumal ich mit RGB-Daten arbeite, die den Prozess komplexer machen könnten. Jeder Rat würde sehr geschätzt werden 

Antwort

0

Für jede Klasse schneiden Sie kleine Patches, und Sie können die Farbinformationen behalten. Die meisten DNN-Bibliotheken unterstützen Mehrkanalbilder. Dann können Sie einfach jeden Pixelwert durch 255 teilen (wenn Ihre Bilder 8 Bits sind) und 0,5 subtrahieren, so dass jedes Patch zentriert ist (Durchschnitt 0) und eine Standardabweichung kleiner als 0,5 hat.

Aber seien Sie vorsichtig, dass Sie ein Neuron pro Klasse in Ihrer Ausgabeschicht brauchen, die Sie DNN sehr groß machen wird.

+0

Korrigieren Sie mich, wenn ich falsch liege, aber das scheint der Feature-Extraktions- und Normalisierungsschritt zu sein, das Bild in Patches zu teilen (zum Beispiel 16x16) und es dann als Trainingsdatensatz zu verwenden. Meine Frage war eher, wie man das Bild vorbereitet, um diese Eigenschaften besser zu extrahieren, zum Beispiel wenn ich Filter, Kantenerkennungsoperationen oder ähnliches anwende? Oder schlagen Sie vor, dass ich den Algorithmus direkt auf einem Datensatz aus dem Rohbild trainieren könnte? – adent

+0

Das ist auch Teil der Bildverarbeitung, nicht Merkmalsextraktion. Normalerweise sollte der CNN in der Lage sein, Kanten (z. B.) ohne Vorverarbeitung selbst zu identifizieren. – FiReTiTi

Verwandte Themen