3

我正在尝试对足球场上的码数进行分类。我能够很好地检测到它们(不同的方法)。我在十位数字'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 表现如此糟糕。我在这里想念什么?

4

1 回答 1

4

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

首先,您想为多类分类器建模,但您使用的是回归算法,并不是说您不能这样做,但如果您先从 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.autolab.org/tutorials/overfit10.pdf

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

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

编辑2:

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

于 2013-03-20T19:32:51.390 回答