OpenCV HOG + SVM:断言失败checkDetectorSize()

时间:2015-06-18 09:11:28

标签: c++ opencv svm object-detection

当我尝试将自己的SVM检测器设置为openCV中的方法hog :: setSVMDetector(Detector)时,我在c ++中遇到openCV问题。

我按照以下步骤SVM classifier based on HOG features for "object detection" in OpenCV进行了操作,并且我已经陷入了第3步。

我使用的是openCV 3.0,它目前是在SVM中构建的。 这就是我训练和构建探测器的方式:

TRAIN

svm = SVM::create();
svm->setType(type);
svm->setKernel(kernel);
svm->setC(C);

if (kernel == SVM::LINEAR) {
    svm->setDegree(1);
} else if (kernel == SVM::POLY) {
    svm->setDegree(3);
}
svm->train(trainingSamples, ml::ROW_SAMPLE, labels);

建筑探测器

vector<float> alpha;
vector<float> svidx;
vector<float> model;

// Getting Support Vectors
Mat svs = svm->getSupportVectors();

double rho = svm->getDecisionFunction(0, alpha, svidx);

    // Computing w in primal form
for (int i = 0; i < svidx.size(); i++) {
    model.push_back(svs.at<float>(i, 0) * alpha.at(i));
    for (int j = 1; j < svs.cols; j++) {
        model.at(i) += svs.at<float>(i, j) * alpha.at(i);
    }
}

//   Adding rho
    model.push_back(rho);
    return model;

当我尝试将上述模型提供给:

时发生错误
hog.setDetector(model); 
  

OpenCV错误:断言失败   (checkDetectorSize())在setSVMDetector文件中   /home/dario/Desktop/opencv-3.0.0-rc1/modules/objdetect/src/hog.cpp,   第115行在抛​​出一个实例后终止调用   &#39; CV ::异常&#39;什么():   /home/dario/Desktop/opencv-3.0.0-rc1/modules/objdetect/src/hog.cpp:115:   错误:(-215)函数setSVMDetector中的checkDetectorSize()

知道我做错了什么?

1 个答案:

答案 0 :(得分:0)

我通过将上面的代码重写为

解决了这个问题
    Ptr<SVM> svm;
    HOGDescriptor my_hog;
    ...
    // Load the trained SVM.
    svm = StatModel::load<SVM>( "model.yml" );
    // Set the trained svm to my_hog
    vector< float > hog_detector;
    get_svm_detector( svm, hog_detector );
    my_hog.setSVMDetector( hog_detector );