opencv中的HOG描述符的SVM

时间:2013-03-20 18:52:50

标签: opencv classification svm

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

我一直在努力训练我从训练集中提取的猪特征上的SVM分类器。我的训练数字的一小部分位于:http://ssadanand.imgur.com/all/

在训练时,我想象我的猪描述符,看起来是正确的。我使用64X128培训窗口和OPencv的HOGDescriptor使用的其他默认参数。

一旦我训练我的图像(每班50个样本,5个班级),我有一个250X3780训练向量和1X250标签向量,它保存了我给CvSVM对象提供的类标签值。这是我遇到问题的地方。

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

我尝试自定义我的CvSVMPARAMS:

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做得这么糟糕。我在这里缺少什么?

1 个答案:

答案 0 :(得分:4)

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

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

其次,我建议使用RBF而不是Polynomial内核。 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:

我知道这很愚蠢,因为它是问题的标题,但在你指出评论之前我没有意识到你正在使用HOG描述符。