Ausbildung benutzerdefinierte SVM zur Verwendung mit HOGDescriptor in OpenCV

Ich versuche zu trainieren, meinen eigenen Detektor für die Verwendung mit OpenCV::HOGDescriptor aber ich habe Schwierigkeiten damit, die vorhandenen HOGDescriptor Arbeit mit meinem neu trainierten SVM.

Habe ich berechnet HOG-Funktionen für positiv-und negativ-training-Bilder, beschriftet Sie und trainiert die SVM mit CvSVM. Die Parameter, die ich verwendet habe sind:

    CvSVMParams params;
    params.svm_type =CvSVM::EPS_SVR;
    params.kernel_type = CvSVM::LINEAR;
    params.C = 0.01;
    params.p = 0.5;

Dann berechne ich Ur-Form der support-Vektoren, so dass ich nur noch einen vector, statt viele und setzen Sie die berechneten support-Vektor mit HOGDescriptor.setSVMDetector(Vektor);

Dies ist die Ur-Form

Wenn ich CvSVM.predict() ich bin in der Lage, richtig zu klassifizieren von Objekten mit dem SVM, aber HOGDescriptor.detect() oder detectMultiScale() gibt immer eine Menge von positiven Treffern und nicht präzise Vorhersagen.

CvSVM.Vorhersagen, ( - ) nutzt die original support-Vektoren für die Einstufung so könnte es etwas falsch mit der Art, wie ich bin, Berechnung einfacher form.

Gibt es jemanden, der trainiert hat, in Ihren eigenen Detektor, der kann mir in die richtige Richtung?

es scheint, als ob das ein bug von libsvm geerbt wurde, in dem die Reihenfolge der Bezeichnungen Durcheinander kommen. Die predict-Funktion bewusst ist, um und sieht nach oben, das label ist das, und so funktioniert einwandfrei. Ich löste das Problem durch die Einstellung meiner +ve-label, um eine Zahl, die kleiner ist als meine -hab ich.e-pos = 1, neg = 2. andernfalls müssen Sie möglicherweise " umkehren Modell durch Multiplikation mit -1. (dies ist, warum akzeptierte Antwort, die seltsamen negativen Vorzeichen). Ich entschied, es nicht zu tun, die Art und Weise, in-Fall Sie den Fehler beheben (es ist nicht wirklich ein Fehler, wenn Sie Vorhersagen, aber Sie ändern könnte)

InformationsquelleAutor Jompa234 | 2013-03-11

Schreibe einen Kommentar