我正在使用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);
我遇到的问题:
有人可以帮助我或提供一些建议吗?为什么这么慢?
非常感谢你们,