openv中HOG描述符的SVM



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

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

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

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

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

我尝试自定义我的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分类器即使在训练集上测试也是非常糟糕的!

有人能帮我参数化我的SVM为这5类分类器吗?我不明白这个问题必须使用哪个内核和svm类型。还有,我怎么才能求出svm的c p度呢?

我认为这是一个非常简单的分类问题,因为我所有的对象都很好地限定在一个盒子里,分辨率相当好,而且类别(即数字1、2、3、4、5)在外观上是相当独特的。我不明白为什么我的支持向量机做得这么差。我遗漏了什么?

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

首先,你想要建模一个多类分类器,但你正在使用回归算法,并不是说你不能这样做,而是如果你先从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:

我知道这很傻,因为它在问题的标题上,但我没有意识到你在使用HOG描述符,直到你在评论中指出。

最新更新