Training custom SVM to use with HOGDescriptor in OpenCV

前端 未结 3 727
盖世英雄少女心
盖世英雄少女心 2020-11-30 07:25

I\'m trying to train my own detector for use with OpenCV::HOGDescriptor but I\'m having trouble making the existing HOGDescriptor work with my newly trained SVM.

I

3条回答
  •  时光取名叫无心
    2020-11-30 07:39

    I wrote a child class of CvSVM to extract primal form after a linear svm is trained. Positive samples are labeled 1 and negative samples are labeled -1. It is strange that I have to put negative sign in front of alphas and leaving the sign of rho unchanged in order to get correct results from HogDescriptor.

    LinearSVM.h

    #ifndef LINEAR_SVM_H_
    #define LINEAR_SVM_H_
    #include 
    #include 
    
    class LinearSVM: public CvSVM {
    public:
      void getSupportVector(std::vector& support_vector) const;
    };  
    
    #endif /* LINEAR_SVM_H_ */
    

    LinearSVM.cc

    #include "linear_svm.h"    
    void LinearSVM::getSupportVector(std::vector& support_vector) const {
    
        int sv_count = get_support_vector_count();
        const CvSVMDecisionFunc* df = decision_func;
        const double* alphas = df[0].alpha;
        double rho = df[0].rho;
        int var_count = get_var_count();
        support_vector.resize(var_count, 0);
        for (unsigned int r = 0; r < (unsigned)sv_count; r++) {
          float myalpha = alphas[r];
          const float* v = get_support_vector(r);
          for (int j = 0; j < var_count; j++,v++) {
            support_vector[j] += (-myalpha) * (*v);
          }
        }
        support_vector.push_back(rho);
    }
    

提交回复
热议问题