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);
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?
InformationsquelleAutor Jompa234 | 2013-03-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schrieb ich eine Kind-Klasse von CvSVM zu extrahieren ur-form nach eine lineare svm trainiert wird. Positive Proben werden mit der Bezeichnung 1 und negative Proben sind mit -1. Es ist seltsam, dass ich negative Zeichen vor der alphas und verlassen das Vorzeichen von rho unverändert, um korrekte Ergebnisse aus HogDescriptor.
LinearSVM.h
LinearSVM.cc
Ich habe nicht geschaut in den Quellcode mit RBF-kernel in opencv. Aber meine Vermutung ist, sobald du die kernel auf Ihre Funktionen, sollte es die gleiche wie die lineare svm.
Dies kann sehr langsam sein IMHO. Rbf-kernel berechnen der euklidischen Entfernungen zwischen den features und alle svm support-Vektoren. Werfen Sie einen Blick auf Vorhersagen Methode code. Ich bin neugierig, über die Art und Weise Sie wurden unter Berücksichtigung der Umsetzung...
Was ist 'decision_func'? Wo kam es aus?
decision_func ist geerbt von CvSVM.
InformationsquelleAutor DXM
Ich war kämpfen mit dem gleichen problem. Suche Foren, die ich gefunden habe, dass der Detektor nicht geschult mit CvSVM (ich weiß nicht den Grund). Ich LIBSVM verwendet für die Ausbildung, die den Detektor. Hier ist der code zum extrahieren der Detektor für HOGDescriptor.setSVMDetector( w): Daten Für details siehe LIBSVM Dokumentation/header. Ich habe alle Schulungen in C++, füllen Sie die Trainingsdaten im LIBSVM von CV zu LIBSVM; der folgende code extrahiert die Detektor-Vektor benötigt für die cv::HOGDescriptor. Der w-parameter ist
std::vector<float> w
Hoffe, das hilft...
InformationsquelleAutor Igi
Von was ich gelesen habe in Dala ' s Papier über HOG-Detektor, er schlage vor, zu entfernen false positives, wir müssen umschulen unser Modell. Die Umschulung erfolgt durch die Anwendung der vorläufigen Modell (dein Modell, das gibt viele false positives), dann erkennen Sie Objekte in allen negativen Probe Bilder. Alle zurückgegebenen Rechtecke würde auf jeden Fall false-positives.
Dann, fügen Sie alle diese false positives zum negativen Beispiel-Bilder (negative dataset) do wieder training. Das daraus resultierende Modell, wie vorgeschlagen, in der Papier -, werden wieder viel weniger false-positives.
Leider aber habe ich versucht, die (re-training), aber das resultierende Modell einfach nicht erkennen alles, auch auf das positive image samples. Aber ich denke, es ist einen Versuch Wert, weil es das war, was vorgeschlagen wird, in der Erfinder-das Papier über die HOG-Detektor
InformationsquelleAutor bonchenko