OpenCV4Android SVM 没有给出正确的预测

Posted

技术标签:

【中文标题】OpenCV4Android SVM 没有给出正确的预测【英文标题】:OpenCV4Android SVM is not giving the correct prediction 【发布时间】:2016-11-18 05:27:55 【问题描述】:

我是机器学习和 openCV 的新手。我从 Cohn-Kanade 面部数据库中为每种情绪(中性和快乐)拍摄了一组 10 张图像。然后我从每张图像中提取面部特征并将它们放入我的训练数据矩阵中,并为各自的情绪分配标签(例如:0 表示中性,1 表示快乐)。

我使用了 gamma = 0.1 和 C = 1 的 RBF 内核。训练后,我将从智能手机摄像头的实时摄像头帧中提取的面部特征传递给预测。预测总是返回 1。

如果我增加中性表情的训练样本数量(例如:15 张中性表情图像和 10 张快乐表情图像),那么预测总是返回 0,并且如果训练样本中每个表情的图像数量相等,那么 SVM 预测总是返回 1。

为什么 SVM 会这样?如何检查我是否使用了正确的 gamma 和 C 值?另外,SVM 是否依赖于训练图像和测试图像的分辨率?

【问题讨论】:

【参考方案1】:

请您上传 SVM 函数,以便我们了解您的代码。其次,我之前使用过 SVM,您需要对训练数据和标签进行归一化处理。您还应该确保使用正确的分类器,因为并非所有分类器都受支持。按照此链接获取一些教程http://docs.opencv.org/3.0-beta/modules/ml/doc/support_vector_machines.html

为了回答您的其他问题,不幸的是,您必须自己找到 gamma 和 C 的最佳组合,这是 SVM 的一种缺点。 https://www.quora.com/What-are-C-and-gamma-with-regards-to-a-support-vector-machine

是的,SVM 确实取决于分辨率,因为您的特征/特征向量会根据分辨率以及输入和标签而变化。 附言理想情况下,这应该在 cmets 中,但不幸的是我没有足够的积分来做到这一点。

【讨论】:

以上是关于OpenCV4Android SVM 没有给出正确的预测的主要内容,如果未能解决你的问题,请参考以下文章

Windows编译OpenCV4Android解决undefined reference to std错误

OneVsRestClassifier(svm.SVC()).predict() 给出连续值

python中的SVM(支持向量机)总是给出相同的预测

Opencv4Android:如何与 C++ 一起使用

R语言做的SVM如何输出正确率?

Qt 和 opencv4android