【问题标题】:Why does my SVM using HOG features always predict the same class?为什么我的使用 HOG 特征的 SVM 总是预测同一个类?
【发布时间】:2016-10-18 18:10:55
【问题描述】:

我正在尝试训练 SVM 来预测交通标志,但对于不同的输入图像,我总是得到相同的预测结果。

谁能为我解释一下为什么?

这是我的代码:

http://pastebin.com/6y2MgTb8

我也打印并比较了测试图像和训练图像的HOG值,它是相同的,但是为什么预测结果总是相同的值。

【问题讨论】:

  • 训练数据中类的分布情况如何?

标签: opencv visual-c++ machine-learning svm


【解决方案1】:

来自您的代码:

hog.compute(img_gray, descriptorsValues, Size(0, 0), Size(0, 0), locations);
//vector to Mat
Mat fm = Mat(descriptorsValues);

//Classification data
Ptr<SVM> svm = Algorithm::load<SVM>(nameSVM);
std::cout << "Model Loaded" << std::endl;

Mat image1d(1, fm.rows, CV_32FC1);
imshow("gradient 1", image1d);

float result = svm->predict(image1d);

您不小心创建了一个空的新图像 (image1d) 并使用此未初始化的矩阵进行分类。请改用以下 svm 预测函数调用:

float result = svm->predict(fm);

【讨论】:

  • 这个我已经试过了。它将输出错误:OpenCV Error: Assertion failed (samples.cols == var_count && samples.type() == CV_32F) in cv::ml::SVMImpl::predict, file C:\builds\master_PackSlave-win64- vc12-shared\opencv\modules\ml\src\svm.cpp,第 1930 行。所以我通过将“fm”转换为 image1d 找到了解决此问题的方法。
  • 你能检查一下你的特征矩阵的大小吗?它有多大?
猜你喜欢
  • 2016-01-30
  • 2021-11-08
  • 2023-03-27
  • 2018-06-04
  • 2012-06-01
  • 2020-09-04
  • 1970-01-01
  • 2018-05-26
  • 1970-01-01
相关资源
最近更新 更多