Ich würde gerne Pixel eines Bildes zu "is street" oder "is not street" klassifizieren. Ich habe einige Trainingsdaten aus dem KITTI-Datensatz und ich habe gesehen, dass Caffe eine IMAGE_DATA
Layertyp.
Die Beschriftungen befinden sich in Form von Bildern derselben Größe wie das Eingabebild.
Neben Caffe war meine erste Idee, dieses Problem zu lösen, indem ich Bildflecke um das Pixel herum gab, die klassifiziert werden sollten (zB 20 Pixel nach oben / links / rechts / unten, was zu 41 × 41 = 1681 Features pro Pixel I führt) möchte klassifizieren.
Wenn ich Caffe aber sagen könnte, wie man die Etiketten verwendet, ohne diese Bildkorrekturen manuell erstellen zu müssen (und der Schichttyp IMAGE_DATA
scheint darauf hinzuweisen, dass dies möglich ist), würde ich das bevorzugen.
Kann Can Caffe Pixel eines Bildes direkt klassifizieren? Wie würde eine solche prototypische Netzwerkdefinition aussehen? Wie gebe ich Caffe die Informationen über die Etiketten?
Ich schätze, die Eingabeschicht wäre etwas wie
%Vor% Allerdings bin ich mir nicht sicher, was crop_size
genau bedeutet. Ist es wirklich zentriert? Wie geht Caffe mit den Eckpixeln um? Was ist new_height
und new_width
gut für?
Kann Caffe Pixel klassifizieren? Theoretisch denke ich, die Antwort ist Ja. Ich habe es nicht selbst versucht, aber ich glaube nicht, dass dich irgendetwas davon abhält.
Eingaben:
Sie benötigen zwei IMAGE_DATA
-Schichten: eine, die das RGB-Bild lädt, und eine andere, die das entsprechende Label-Maskenbild lädt. Beachten Sie, dass Sie bei Verwendung des Dienstprogramms convert_imageset
nicht jeden Satz einzeln mischen können. Sie können ein Bild nicht mit seiner Etikettenmaske abgleichen.
Ein IMAGE_DATA
layer hat zwei "Tops" für "data" und eins für "label" Ich schlage vor, dass Sie die "label" s beider Eingabeschichten auf den Index der image / label-mask setzen und a hinzufügen Dienstprogramm-Layer, der überprüft, dass die Indizes immer übereinstimmen, dies verhindert, dass Sie an den falschen Label-Masken trainieren;)
Beispiel:
%Vor% Verlustschicht:
Jetzt können Sie mit den Eingabedaten alles machen, was Sie wollen, aber um schließlich eine pixelweise Beschriftung zu erhalten, benötigen Sie einen pixelweisen Verlust. Daher muss Ihre letzte Ebene (vor dem Verlust) eine Vorhersage mit der selben Breite und Höhe als "label-mask"
erstellen. Nicht alle Verlust-Layer können mit mehreren Labels umgehen, aber "EuclideanLoss"
( zum Beispiel) können, sollten Sie also eine Verlustschicht wie
Ich denke, "SoftmaxWithLoss"
hat eine neuere Version, die in diesem Szenario verwendet werden kann, aber Sie müssen es selbst überprüfen. In diesem Fall sollte "prediction"
die Form 2-mal-für-w haben (da Sie 2 Etiketten haben).
Zusätzliche Hinweise:
Sobald Sie die Eingabegröße in den Parametern von "ImageData"
festgelegt haben, legen Sie die Größe aller Blobs des Netzes fest. Sie müssen die Etikettengröße auf die gleiche Größe einstellen. Sie müssen sorgfältig überlegen, wie Sie mit Bildern unterschiedlicher Form und Größe umgehen.
Tags und Links neural-network computer-vision deep-learning image-segmentation caffe