【问题标题】:SVM type in openCVopenCV中的SVM类型
【发布时间】:2013-05-22 02:55:47
【问题描述】:

我正在使用 opencv 开发一个非常简单的图像分类器。我想使用 svm 类型的 poly,但它给出了错误,而其他像 sigmoid、RBF 工作正常。我定义的参数如下:

SVMParams params;
params.svm_type = SVM::C_SVC;
params.kernel_type = SVM::POLY;
params.gamma = 20;
params.degree = 0;
params.coef0 = 0;

params.C = 7;
params.nu = 0.0;
params.p = 0.0;

params.class_weights = NULL;
params.term_crit.type = CV_TERMCRIT_ITER +CV_TERMCRIT_EPS;
params.term_crit.max_iter = 1000;
params.term_crit.epsilon = 1e-6;

错误读取 openCV 错误:参数之一在 CvSVM::set_params 中超出范围(内核参数必须为正)。我不确定是什么错误。?

【问题讨论】:

  • 可能是degree。零次多项式内核没有意义,因为它的值是一个常数。
  • 您使用的是哪个版本的 OpenCV?

标签: opencv svm


【解决方案1】:

对于多项式内核,degree 必须大于 1(0 无效,1 为线性)。对于大多数软件包,degree 的默认值为 3。

RBF 和 sigmoid 内核可以在您的设置下正常工作,因为它们不使用 degree。作为参考,有问题的内核函数是:

  • 多项式:k(u,v)=(gamma*u'*v + coef0)^degree,
  • RBF:k(u,v)=exp(-gamma*|u-v|^2),
  • sigmoid:k(u,v)=tanh(gamma*u'*v + coef0).

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-05
    • 2014-02-11
    • 1970-01-01
    • 2019-08-15
    • 2016-01-22
    • 1970-01-01
    • 2015-05-04
    • 2015-07-25
    相关资源
    最近更新 更多