2016-10-05 5 views
1

Ich versuche gerade einen DNN mit Bildern zu trainieren, die ich in der Datei habe (OCR context ... Eingabebilder pro Klasse sind aggregiert) Bilder von mehreren tausend kleinen Bildern fester Größe).dlib-19.1: Initialisiere dlib :: matrix aus image (zB dlib :: cv_image) für DNN Training

Ich habe etwas Code zu öffnen und die Aggregate Bilder in kleine OpenCV cv :: Mat zu segmentieren. Mein Problem ist, gibt es keine Möglichkeit, zu

  • Zuge der DNN auf DLIB :: cv_image direkt zu sein scheint (die um cv gewickelt werden können :: Mat; ich bin immer mehr als 500 Linien von Compiler-Fehler) oder
  • leicht/Wrap cv konvertieren :: Mat DLIB :: Matrix ohne jedes Element zu Kopieren

ich bin ziemlich sicher, ich bin fehlt hier etwas, würden alle Hinweise sehr geschätzt.

Hinweis: Die einzige Variante, die ich kompilieren musste, war Aufruf dlib :: dnn_trainer :: train() mit einem Vektor von dlib :: matrix (Größe zur Kompilierzeit festgelegt) und einen Vektor mit unsigned langen Etiketten (unsigned Etiketten tat nicht kompilieren), obwohl train() für beide Typen als Vorlage dient. Irgendwelche Zeiger?

Antwort

2

Sie müssen die Größe von dlib :: matrix nicht zur Kompilierzeit korrigieren. Rufen Sie einfach set_size() auf. Siehe auch http://dlib.net/faq.html#HowdoIsetthesizeofamatrixatruntime.

Wenn Sie etwas anderes als eine dlib :: matrix als Eingabe verwenden möchten, können Sie das tun. Sie müssen nur Ihre eigene Eingabeschicht definieren. Die Schnittstelle, die Sie implementieren müssen, ist hier vollständig dokumentiert: . Sie können sich auch die vorhandenen Eingabeschichten als Beispiele ansehen. Aber lesen Sie die Dokumentation, da sie Fragen beantwortet, die Sie wahrscheinlich haben.

+0

Danke, ich habe alles falsch angenommen, basierend auf generic_image würde magisch mit der Eingabeschicht arbeiten. Will Matrix für jetzt verwenden. Noch eine Frage (aber ich möchte SO nicht mit zu vielen Detailfragen belasten): Ich versuche die Trainingsergebnisse zu überprüfen, die ich mit caffe mit dlib erhalten habe. Ich habe es geschafft, dass das Netzwerk mit dem Training beginnt, aber es werden keine vergleichbaren Ergebnisse erzielt. Ich versuche, mein Trainingsregime so originalgetreu wie möglich nachzubilden, aber ich finde keine Erwähnung, wie man Gewichtverlust und Impuls in dlib setzt. Ist das momentan möglich oder sind sie automatisch eingestellt? – Daniel

+0

Sie können diese Werte auf das einstellen, was Sie wollen. All diese Dinge werden in den beiden einführenden Beispielprogrammen besprochen. Darüber hinaus ist die gesamte API dokumentiert. Auf dieser Seite finden Sie einen vertiefenden Lernabschnitt mit Links zu allem: http://dlib.net/ml.html. Http://dlib.net/faq.html#Wheistdocumentationforobjectfunction –

+0

Fand es: es ist eine Eigenschaft des Trainers, die explizit auf Konstruktion gesetzt werden kann: dlib :: dnn_trainer Trainer (net, dlib :: sgd (float weight_decay , Schwungmoment)); – Daniel

1

DLIB hat eine erstaunliche Funktion für diese Aufgabe: http://dlib.net/imaging.html#assign_image, aber es macht das Kopieren jedes Elements

hier ist Beispielcode, wie es verwendet werden kann:

// mat should be greyscale image (8UC1) 
void cv_to_dlib_float_matrix(const cv::Mat& mat, dlib::matrix<float>& res) 
{ 
    cv::Mat tmp(mat.cols, mat.rows, CV_32FC1); 
    cv::normalize(mat, tmp, 0.0, 1.0, cv::NORM_MINMAX, CV_32FC1); 
    dlib::assign_image(res, dlib::cv_image<float>(tmp)); 
}