【问题标题】:Every time getting positive result while predicting from svm每次从 svm 预测时都得到肯定的结果
【发布时间】:2013-09-02 08:29:13
【问题描述】:

我使用 surf 和 bow 训练 svm,现在我预测图像时它总是返回 1,即使我选择负图像时它也会返回 1 作为输出

这里是 svm 的参数:

CvSVMParams Params;
Params.svm_type=CvSVM::C_SVC;
Params.kernel_type=CvSVM::LINEAR;
Params.term_crit = cvTermCriteria(CV_TERMCRIT_ITER, 100, 1e-6);
Params.gamma=3;
CvSVM svm;
svm.train(training_mat,labels,cv::Mat(),cv::Mat(),Params);

这是我的预测代码:

predict_img = cvLoadImage("ss.jpg",0);
detector.detect(predict_img, keypoint2);
RetainBestKeypoints(keypoint2, 20);
dextract.compute( predict_img, keypoint2, descriptors_2);
Mat my_img_3 = descriptors_2.reshape(1,1);
float response = svm.predict(my_img_3);
cout<<response;

这里是初始化:

BOWImgDescriptorExtractor dextract(extractor,matcher);
SurfFeatureDetector detector(500);

【问题讨论】:

    标签: opencv image-processing machine-learning computer-vision svm


    【解决方案1】:

    你应该检查你是否设置了足够大的C(我在你的代码中没有看到它所以应该根据opencv documentation设置为1000)值来强制一个合理的模型,你应该尝试很多值,对于许多实际问题,甚至必须使用 C 数量级为 10^10。如果C 太小,SVM 将简单地寻找具有小范数的超平面,而不真正关注正确的分类。可以通过opencv实现中的Cvalue参数访问。

    Params.gamma=3;
    

    即使它不会导致错误 - 您也不需要设置 gamma 值,因为它不用于线性内核,用于 RBF 内核。

    您还应该确保,您正在训练相似数量的正样本和负样本(或使用一些类加权技术),因为它也可能导致“微不足道”的模型。

    【讨论】:

    • 是的,我使用相同数量的正面和负面图像,但我通过不同的目录训练它们,正面图像的不同目录和负面图像的不同目录,我不明白你关于C的概念
    • SVM 模型最重要的参数之一是C,即错误分类的“惩罚”量。它应该在模型参数中设置:Cvalue – Parameter C of a SVM optimization problem (C_SVC / EPS_SVR / NU_SVR).docs.opencv.org/modules/ml/doc/support_vector_machines.html,默认设置为C=1000,可能是行数到小
    • @lijlot 你问这个问题:CvParamGrid CvSVM = get_default_grid(CvSVM::C); 但它给了我get_default_grid(CvSVM::C) 的错误未定义
    • 我说的是Params对象的Cvalue
    【解决方案2】:

    除了已经提供的答案之外,您将来总会问另一个问题,即如何提高您的 SVM 分类性能,即正确设置模型参数。

    为了实现这个目标,您还应该研究 CvParamGrid 提供的网格搜索。

    最好的

    【讨论】:

    • 在预测数据时是否需要训练数据?或者有没有这样的功能
    • 参数的搜索需要在学习阶段,在预测之前完成。
    • 你能解释一下“获得向量支持”是什么意思吗?你指的是具体的东西吗?
    • 是的,我是从 svm 的 opencv 文档中读到的,int c = SVM.get_support_vector_count(); 这样的
    • 哦,我现在明白了。这用于获取 SVM 的支持向量的数量。您需要它来执行 SVM 计算。希望对您有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2018-12-24
    • 2014-09-16
    • 2013-05-23
    • 1970-01-01
    • 2020-05-17
    • 2014-06-18
    • 1970-01-01
    • 2015-09-15
    相关资源
    最近更新 更多