OpenCV 3.0 svm 总是预测 0 (java)
Posted
技术标签:
【中文标题】OpenCV 3.0 svm 总是预测 0 (java)【英文标题】:OpenCV 3.0 svm always predicts 0 (java) 【发布时间】:2016-04-16 00:15:28 【问题描述】:我是 opencv 的 svm 的新手。我尝试了一个样本分类器,但它只返回 0 作为预测标签。我什至将值 5 用于训练和预测。
我已经更改了大约一百次值,但我就是不明白哪里出了问题。我正在使用带有 Java 的 OpenCV 3.0。这是我的代码:
Mat labels = new Mat(new Size(1,4),CvType.CV_32SC1);
labels.put(0, 0, 1);
labels.put(1, 0, 1);
labels.put(2, 0, 1);
labels.put(3, 0, 0);
Mat data = new Mat(new Size(1,4),CvType.CV_32FC1);
data.put(0, 0, 5);
data.put(1, 0, 2);
data.put(2, 0, 3);
data.put(3, 0, 8);
Mat testSamples = new Mat(new Size(1,1),CvType.CV_32FC1);
testSamples.put(0,0,5);
SVM svm = SVM.create();
TermCriteria criteria = new TermCriteria(TermCriteria.EPS + TermCriteria.MAX_ITER,100,0.1);
svm.setKernel(SVM.LINEAR);
svm.setType(SVM.C_SVC);
svm.setGamma(0.5);
svm.setNu(0.5);
svm.setC(1);
svm.setTermCriteria(criteria);
//data is N x 64 trained data Mat , labels is N x 1 label Mat with integer values;
svm.train(data, Ml.ROW_SAMPLE, labels);
Mat results = new Mat();
int predictedClass = (int) svm.predict(testSamples, results, 0);
即使我将标签更改为 1 和 2,我仍然会得到 0.0 作为响应。所以肯定有什么地方绝对错了……我只是不知道该怎么办。请帮忙! :)
【问题讨论】:
首先,我从未使用过 opencv svm 包。我在 C++ 中使用带有 opencv 的 libsvm。因此,在 libsvm 中,您不能(我不知道我在将近一年半前使用它的最新版本)仅针对模型的一个样本测试结果。您必须将多个样本图像(不记得我放了多少图像,尽可能多地放并通过跟踪和错误检查)放入测试文件夹并使用您创建的模型进行检查。对于培训如何你用了多少样品?您的情况可能有多种原因。 【参考方案1】:我在 C++ 中遇到了类似的问题。我不太确定它在 Java 中是否相同,但在 C++ 中,预测保存在结果矩阵中,而不是作为浮点数返回。
【讨论】:
你能进一步说明你是如何解决你的问题的吗?我也有同样的问题,但找不到解决方案?Mat results = new Mat(); int predictedClass = (int) svm.predict(testSamples, results, 0);
结果 Mat 将具有实际预测,而 predictClass 将始终为零。 @Yirga
@KevinBai 非常感谢。这完全是我想要的。不幸的是,OpenCV 文档没有很好地解释这些问题。以上是关于OpenCV 3.0 svm 总是预测 0 (java)的主要内容,如果未能解决你的问题,请参考以下文章