2017-01-03 5 views
2

Wie Sie Trainingsbilder mit seiner Position Label randlos beschneiden.

Ich verarbeite Bilddaten und ihre Etiketten für Caffe-Eingabe. Ich möchte meine Trainingsbilder nach dem Zufallsprinzip online zuschneiden (wenn Caffe läuft) und ich weiß, dass caffe einen zufälligen Ernteparameter in der Ebene random crop liefert. Das Problem ist, dass mein Etikett jedes entsprechenden Bildes eine Variante ist, wenn das Bild umgewandelt wird. Auf diese Weise muss ich mein Etikett zusammen mit dem transformierten Bild ändern. Ich versuche mein Problem lange Zeit zu suchen, aber keine Verwendung. Dann stellte ich fest, vielleicht gab es zwei Möglichkeiten, um die Probleme zu lösen:Trainingsdaten Augmentation in Caffe zusammen mit seiner Multilabel

  1. erhalten Sie den Offset von zufälligen Crop-Bild auf Originalbild. Aber ich habe es ohne Antwort gegoogelt.
  2. Ich werde den Random-Offset online angeben, dann beschneiden Bild um den spezifischen Offset crop specific offset. Aber wie kann ich eine Zufallszahl während der Caffe Trainingszeit generieren?
  3. Ich kenne Vorverarbeitung der zufälligen Crop-Image und seine Bezeichnung offline kann eine praktikable Methode sein. Es wird jedoch einen beträchtlichen Speicherplatz belegen, da mein Datensatz für das Training zu groß ist.

meine Position entsprechenden Label: aufgeteilt ich jedes Trainingsbild als 10x10=100 Gitter. Die Bezeichnung ist der Rasterindex für einen bestimmten Schlüsselpunkt im Bild. zum Beispiel wird das Etikett 11 sein, wenn mein Kopf Schlüsselpunkt an der Position <2th row, 1th col> Raster des Bildes ist.

+0

und ich erkannte auch, dass das Problem von Caffe Python Layer gelöst werden konnte. Aber es scheint, dass die Trainingszeit lang sein wird, wenn ich Python Layer im Prototxt verwende (wie erwähnt) (http://stackoverflow.com/questions/39633624/caffe-image-augmentation-by-cropping). Wenn es notwendig ist, diese API zu verwenden, wie wird sie in diesem konkreten Problem verwendet? – farever

Antwort

0

Sie können eine "Python" layer für diese Aufgabe verwenden, wie Sie bereits pointed out (und ich nehme an, dies ist der einfachste Weg).
Wenn Sie sich mit der Laufzeit dieses Layers beschäftigen, können Sie Multi-Thread erstellen: Lassen Sie die Ebene mehrere Threads aufrufen, um Bilder zu beschneiden und ihre Beschriftungen neu zu berechnen. Diese Threads werden im Hintergrund ausgeführt und sollten dem Netzwerk genügend Daten für den nächsten Minibatch bereitstellen können.

Siehe Python threading Modul für die Thread Klasse. Sie finden es möglicherweise auch bequem, die Klasse Queue zu verwenden, um die Threads und die Haupteingabeschicht zu synchronisieren.

+0

ok, ich werde das heute Abend versuchen. Übrigens, wie kann ich überprüfen, ob meine eigene Python-Ebene funktioniert oder nicht? Mit anderen Worten, kann ich meine Datenstruktur nach meiner Python-Ebene ausdrucken? – farever

+0

@farever sollten Sie einen Test für Ihre Schicht schreiben. – Shai

+0

ok, das hilft mir sehr! Vielen Dank. – farever

Verwandte Themen