Formation personnalisée SVM à utiliser avec HOGDescriptor dans OpenCV
J'essaie de former mon propre détecteur pour une utilisation avec OpenCV::HOGDescriptor mais je vais avoir du mal à faire l'existant HOGDescriptor travailler avec mes nouvellement formés SVM.
J'ai calculé PORC caractéristiques positives et négatives de la formation des images, étiquetés et formé les SVM en utilisant CvSVM. Les paramètres que j'ai utilisé sont:
CvSVMParams params;
params.svm_type =CvSVM::EPS_SVR;
params.kernel_type = CvSVM::LINEAR;
params.C = 0.01;
params.p = 0.5;
Puis-je calculer la Forme Primitive de l'vecteurs de soutien de sorte que je ne reçois un vecteur lieu de nombreux et de définir le calcul de vecteurs de support à l'aide de HOGDescriptor.setSVMDetector(vecteur);
Lorsque j'utilise CvSVM.predict() je suis capable de classer correctement les objets avec la SVM, mais HOGDescriptor.détecter() ou detectMultiScale() renvoie toujours beaucoup de positif correspond et ne pas donner des prévisions précises.
CvSVM.predict() utilise le support d'origine des vecteurs de la classification, alors il pourrait y avoir quelque chose de mal avec la façon dont je suis calcul de la forme primitive.
Est-il quelqu'un qui a formé leur propre détecteur qui peut me pointer dans la bonne direction?
OriginalL'auteur Jompa234 | 2013-03-11
Vous devez vous connecter pour publier un commentaire.
J'ai écrit une classe enfant de CvSVM pour extraire la forme primitive après un svm linéaire est formé. Les échantillons positifs sont marqués 1 et négatifs des échantillons sont étiquetés -1. Il est étrange que je dois mettre un signe négatif devant alphas et en laissant le signe de la rho modifiées afin d'obtenir des résultats corrects à partir de HogDescriptor.
LinearSVM.h
LinearSVM.cc
Je n'ai pas regardé dans le code source de l'aide noyau RBF dans opencv. Mais ma conjecture est que une fois que vous avez appliqué le noyau de vos fonctions, il doit être le même que svm linéaire.
Cela peut être très lent à mon humble avis. Noyau Rbf calculer les distances euclidiennes entre les fonctions et tous les svm vecteurs de soutien. Jetez un oeil à prédire le code de la méthode. Je suis curieux de connaître la façon dont vous avez été envisagent de la mettre en œuvre...
Qu'est-ce que 'decision_func'? D'où vient-elle?
decision_func est héritée de CvSVM.
OriginalL'auteur DXM
J'ai été aux prises avec le même problème. Recherche forums j'ai trouvé, que le détecteur ne peut pas être formé à l'aide de CvSVM (je ne sais pas la raison). J'ai utilisé LIBSVM pour la formation du détecteur. Voici le code pour extraire le détecteur de HOGDescriptor.setSVMDetector( w): Pour les données de détails, voir LIBSVM documentation/en-tête. J'ai fait la formation en C++, en remplissant le LIBSVM de formation de données de CV de LIBSVM; le code ci-dessous des extraits du détecteur vecteur nécessaire pour le cv::HOGDescriptor. Le paramètre w est
std::vector<float> w
Espère que cela aide...
OriginalL'auteur Igi
De ce que j'ai lu dans Dalal du papier de PORC détecteur, il suggèrent que, pour éliminer les faux positifs, nous avons besoin de recycler notre modèle. Le recyclage se fait par l'application provisoire (modèle de votre modèle qui donne beaucoup de faux positifs), alors détecter des objets dans tous les négatifs des exemples d'images. Tous les retours de rectangles serait certainement faux positifs.
Ensuite, ajouter tous ces faux positifs pour des exemples d'images (négatif dataset), faire de la formation une fois de plus. Le modèle qui en résulte, comme suggéré dans le document, sera de retour beaucoup moins de faux positifs.
Malheureusement, j'ai essayé ça (re-formation), mais le modèle qui en résulte ne vient pas reconnaître quoi que ce soit, même sur image positive des échantillons. Mais je pense que ça vaut le coup d'essayer, car c'était ce qui était suggéré dans l'inventeur du papier de PORC détecteur de
OriginalL'auteur bonchenko