2016-07-15 38 views
0

我是机器学习和openCV的新手。我从Cohn-Kanade人脸数据库中为每种情绪拍摄了10张图像(中性和快乐)。然后,我从每幅图像中提取面部特征,并将它们放入我的训练数据矩阵中,并为相应的情感分配标签(例如:0表示中性,1表示高兴)。OpenCV4Android SVM没有给出正确的预测

我已经使用了gamma = 0.1和C = 1的RBF内核。一旦训练完毕,我将通过智能手机相机中的实时相机帧提取的面部特征进行预测。预测总是返回1.

如果我增加中性表达式的训练样本的数量(例如:15个中性表达图像和10个快乐表情图像),则预测总是返回0,并且如果有相同数量的图像训练样本中的每个表达式,则SVM预测总是返回1.

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

回答

0

我会要求您上传SVM功能,以便我们了解您的代码。其次,我之前使用过SVM,需要对训练数据和标签进行规范化。你也应该确保你使用了正确的分类器,因为并不是所有的分类器都被支持。按照这个链接的一些教程http://docs.opencv.org/3.0-beta/modules/ml/doc/support_vector_machines.html

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

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