【问题标题】:SVM for HOG descriptors in opencvopencv中HOG描述符的SVM
【发布时间】:2013-03-10 01:30:15
【问题描述】:

我正在尝试对足球场上的码数进行分类。我能够很好地检测到它们(不同的方法)。我在十位数字'1,2,3,4,5'周围画了一个最小的边界框。我的目标是对它们进行分类。

我一直在尝试根据从训练集中提取的 hog 特征来训练 SVM 分类器。我的训练数字的一小部分在这里:http://ssadanand.imgur.com/all/

在训练时,我可视化了我的猪描述符,它们看起来是正确的。我使用 64X128 的训练窗口和 OPencv 的 HOGDescriptor 使用的其他默认参数。

一旦我训练了我的图像(每类 50 个样本,5 个类),我就有一个 250X3780 的训练向量和 1X250 的标签向量,其中包含我提供给 CvSVM 对象的类标签值。这是我有问题的地方。

我在使用 CvSVM 时尝试使用默认的 CvSVMParams()。在训练集上测试时表现糟糕!

我尝试自定义我的 CvSVPARAMS 这样做:

CvSVMParams params = CvSVMParams();
params.svm_type = CvSVM::EPS_SVR;
params.kernel_type = CvSVM::POLY;
params.C = 1; params.p = 0.5; params.degree = 1;

即使我在训练集上进行测试,这些参数和我的 SVM 分类器的不同变化也非常糟糕!

有人可以帮我为这个 5 类分类器参数化我的 SVM 吗? 我不明白我必须使用哪个内核和什么 svm 类型来解决这个问题。另外,我到底应该如何找出我的 svm 的 c、p、degree 的值?

我会假设这是一个非常简单的分类问题,因为我的所有对象都很好地限制在一个盒子中,分辨率相当好,并且类别,即:数字 1、2、3、4、5 在外观上相当独特。我不明白为什么我的 SVM 表现如此糟糕。我在这里错过了什么?

【问题讨论】:

    标签: opencv classification svm


    【解决方案1】:

    先验且没有实验,很难给你一些好的参数,但我可以给你一些想法。

    首先,您想为多类分类器建模,但您使用的是回归算法,并不是说您不能这样做,但如果您先从 C-SVM 开始,通常会更容易。

    其次,我建议使用 RBF 而不是多项式内核。 Poly 很难做到正确,通常 RBF 开箱即用会做得更好。

    第三,我会使用几个 C 值,不要害羞并尝试更大的 C(例如 100),这将迫使算法选择更多的 SV。它可能会导致过度拟合,但如果您甚至无法让算法学习训练集,那不是您的直接问题。

    第四,我会先减少图像的维度,然后如果需要,当您有更稳定的模型时,您可以再次尝试使用该维度。

    我真的推荐你阅读 LibSVM 指南,它很容易理解http://www.csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdf

    希望对你有帮助!

    编辑:

    我忘了提一下,为 SVM 选择参数的一个好方法是执行交叉验证:http://en.wikipedia.org/wiki/Cross-validation_(statistics)

    http://www.autonlab.org/tutorials/overfit10.pdf

    http://www.youtube.com/watch?v=hihuMBCuSlU

    http://www.youtube.com/watch?v=m5StqDv-YlM

    EDIT2:

    我知道这很愚蠢,因为它在问题的标题上,但是直到您在 cmets 上指出之前,我才意识到您使用的是 HOG 描述符。

    【讨论】:

    • 感谢佩德罗姆,非常感谢。我确实尝试在我的训练数据上使用 PCA 来降低我的维度,但问题是,我有一个 3780 个特征向量,每个类只有 50 个实例。我认为这算作识别主要成分的数据非常少。即使要保留 10% 的数据方差,我也需要使用所有 50 个特征向量。我可以产生更多的训练数据,但我不确定它是否会有所帮助。能不能给我直观的解释一下SVM的参数???
    • 比如你刚才提到的,c值越高,sv的拾取越多,我如何直观地理解其余参数的作用?
    • @SreemanananthSadanand 好吧,PCA 可以很好地减少输入的维度,但我在想一些更简单的方法,比如调整图像大小 :) 至于如何直观地选择参数,这取决于参数但是让我们谈谈 C 和 gamma(RBF 上要求的参数)。 C 是违反线性可分性的惩罚成本,因此对于较低的 C,算法不必为那些未分类的点支付太多费用,因此它可以更加宽容并选择更少的 SV(我在这里过于简化,但类比有效)。
    • @SreemanananthSadanand 因此,对于更高的 C,算法将需要为那些未分类的点支付更多费用,因此它将更加努力地拥有尽可能少的未分类点(不完全正确,但又只是一种直观的方式来查看它)。短篇小说,更高的 C 更接近过度拟合,更低的 C 更接近错误分类。这个问题可能会帮助您进一步了解stackoverflow.com/questions/9480605/…
    • @SreemanananthSadanand RBF 内核的 gamma 参数有另一个类比,可以帮助您可视化正在发生的事情。您可以将 RBF 视为特征空间中的超球体,如果一个点离中心足够近,它将被“激活”。因此,您可以将伽马视为该超球面半径的倒数。因此,对于较大的伽马值,它将是一个小的超球面,而对于较低的伽马值,超球面将更大。这些图片可能有助于更好地看到它goo.gl/S4EZxgoo.gl/A1jHy 如果我能进一步帮助您,请告诉我
    猜你喜欢
    • 2017-03-21
    • 2011-08-25
    • 2017-01-14
    • 2014-01-29
    • 2014-10-11
    • 2016-11-09
    • 2016-02-26
    • 2019-12-03
    • 2013-04-16
    相关资源
    最近更新 更多