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

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

训练时,我可以看到我的生猪描述符,看起来很正确。我使用64X128训练窗口和OPencv的HOGDescriptor使用的其他默认参数。

训练完图像(每个类别50个样本,五个类别)后,我将获得250X3780训练 vector 和1X250标签 vector ,其中包含我提供给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,度的值?

我认为这是一个非常简单的分类问题,因为我所有的对象都很好地限制在一个盒子中,分辨率相当好,并且类别即数字1,2,3,4,5在外观上非常独特。我不明白为什么我的SVM做得这么差。我在这里想念什么?

最佳答案

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

首先,您想对一个多类分类器建模,但是您正在使用回归算法,并不是不能做到这一点,但是如果首先从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

编辑2:

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

10-04 23:43