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

Posted

技术标签:

【中文标题】OpenCV HOG+SVM:断言失败 checkDetectorSize()【英文标题】:OpenCV HOG+SVM: assertion failed checkDetectorSize() 【发布时间】:2015-09-03 20:13:37 【问题描述】:

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

我遵循了以下程序SVM classifier based on HOG features for "object detection" in OpenCV,但我被困在第 3 步。

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

训练

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 行终止 'cv::Exception' 什么(): /home/dario/Desktop/opencv-3.0.0-rc1/modules/objdetect/src/hog.cpp:115: 错误:(-215) 函数 setSVMDetector 中的 checkDetectorSize()

知道我做错了什么吗?

【问题讨论】:

可能是您的窗口大小不同,在这种情况下,输入hog.setDetector(model); 的值的数量会不同 我也遇到了类似的问题。我想手动将探测器尺寸设置为没有 0.5 纵横比的东西。我的理由是,我想检测那些并不总是处于适合 0.5 纵横比的完美姿势的人。考虑一个拳击手的例子,他的手臂在拳击中伸展,膝盖弯曲。我想这是不可能的,因为使用了预训练人员检测分类器。有什么建议吗?也许我需要为此手动训练 SVM? 【参考方案1】:

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

解决了这个问题
    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 );

【讨论】:

嗨,你用的是什么版本的opencv?函数get_svm_detector是否在opencv中?

以上是关于OpenCV HOG+SVM:断言失败 checkDetectorSize()的主要内容,如果未能解决你的问题,请参考以下文章

opencv学习笔记SVM+HOG

HOG + SVM(行人检测, opencv实现)

OpenCV - 使用 SVM 和 HOG 进行人员检测

HOG+SVM(OpenCV案例源码train_HOG.cpp解读)

opencv HOG SVM 二

opencv HOG SVM