我使用CvSVM仅对两种类型的面部表情进行分类。我使用了基于LBP(局部二进制模式)的直方图从图像中提取特征,并使用cvSVM::train(data_mat,labels_mat,Mat(),Mat(),params)进行了训练,其中,

data_mat的大小为200x3452,包含以行主要形式包含200个样本的归一化(0-1)特征直方图,每个特征均具有3452个特征(取决于邻点的数量)

labels_mat是对应的标签矩阵,仅包含两个值0和1。
参数为:

CvSVMParams参数;

params.svm_type     =CvSVM::C_SVC;
params.kernel_type  =CvSVM::LINEAR;
params.C            =0.01;
params.term_crit=cvTermCriteria(CV_TERMCRIT_ITER,(int)1e7,1e-7);

问题是:
  • 在测试时,即使在应用了不同的kernel和train_auto()函数后,我得到的结果也很差(准确度约为10%-30%)。
  • CvSVM::predict(test_data_mat,true)提供'NaN'输出

  • 我将不胜感激,对此我深表歉意。

    最佳答案

    我想,您的类在使用的特征空间中是线性的/不可分离的。
    在分类器训练步骤之前将PCA应用于数据集可能会更好
    并估算此问题的有效维度。
    另外,我认为与其他分类器一起测试您的数据集会很有用。
    为此,您可以改编标准opencv示例points_classifier.cpp。
    它包括许多具有相似界面的不同分类器。

    08-24 23:20