HOG人检测并设置一类SVM分类器

时间:2014-05-23 06:55:55

标签: c++ opencv

我正在使用HOG描述符和SVM,就像OpenCV cpp示例中提供的示例来检测人员一样。如果我使用以下样本:

hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());

我获得了每张图像大约150毫秒的处理速度,这是一个很好的性能。缺点是我也获得了许多误报。我使用了MIT人员数据库(包含一个人的128 * 64像素图像)来训练一个一类SVM分类器,因为我只有正面的例子。我已经为数据库中的924个图像获得了图像的HOG特征向量(3780值)。我已按如下方式训练SVM:

CvSVMParams params;
params.svm_type = CvSVM::ONE_CLASS;
params.kernel_type = CvSVM::LINEAR;
params.nu=0.5;
params.term_crit = cvTermCriteria(CV_TERMCRIT_ITER, 1000, 1e-6);

CvSVM SVM;
Mat ClassOutput = Mat::ones(1,numImagesDB,CV_32F);
SVM.train_auto(trainingSVMData,ClassOutput,Mat(),Mat(),params);
int x=SVM.get_support_vector_count();
const float *v = SVM.get_support_vector(0);
vector<float> descriptorVector;

for(unsigned int i=0;i<trainingSVMData.cols;i++)
    descriptorVector.push_back(v[i]);

获得3780个组件的一个支持向量。将此SVM插入HOG描述符:

hog.setSVMDetector(descriptorVector);

我遇到的问题:

  • 现在处理速度极慢,每帧差不多10秒!
  • alforithm更强大,但检测人的矩形是身高和宽度的两倍。

有人可以帮助我或提供一些建议吗?为什么这么慢?

非常感谢你们,

0 个答案:

没有答案