OpenCV中用于HOG描述符的SVM

3
我正在尝试对足球场地上的码数进行分类。我已经使用不同的方法成功检测到了它们。我已经在十位数码“1,2,3,4,5”周围绘制了最小的边界框,我的目标是对它们进行分类。
我一直在尝试从训练集中提取HOG特征来训练SVM分类器。我的一小部分训练数据如下:http://ssadanand.imgur.com/all/ 在训练期间,我可视化我的HOG描述符,它们看起来是正确的。我使用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分类器表现得非常糟糕!

请问有人能为我提供帮助,对于这个5类分类器,我该如何进行参数化呢? 我不明白我必须使用哪种内核和什么类型的支持向量机来解决这个问题。此外,我该如何找到SVM的c、p、degree值?

我想这应该是一个极其简单的分类问题,因为所有的对象都被很好地限定在一个框中,分辨率也相当不错,而且类别即数字1、2、3、4、5在外观上也十分独特。我不明白为什么我的SVM表现得如此之差。我错过了什么吗?

1个回答

4
先验和没有实验的情况下,很难给您一些好的参数,但我可以给您一些想法。首先,您想建模一个多类分类器,但您正在使用回归算法,这并不是说您不能这样做,但通常如果您先从C-SVM开始会更容易。其次,我建议使用RBF而不是多项式内核。Poly很难正确地处理,并且通常RBF会更好地完成工作。第三,我会尝试使用几个不同的C值,不要害羞,尝试更大的C(如100),这将迫使算法选择更多的SVs。这可能导致过度拟合,但如果您甚至无法让算法学习训练集,那么这不是您当前的问题。我真的建议您阅读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描述符。


感谢Pedrom,非常感激。我曾尝试使用PCA来降低我的训练数据的维度,但问题在于,我有一个包含3780个特征向量和每个类别只有50个实例的数据集。我认为这些数据太少了,无法识别主要成分。即使为了保留数据的10%方差,我也需要使用全部50个特征向量。我可以生成更多的训练数据,但我不确定它是否有帮助。你能给我解释一下SVM参数的直观说明吗? - Sreemanananth Sadanand
就像你刚才提到的,C值越高,选择的支持向量就越多,那么我该如何直观地理解其他参数的作用呢? - Sreemanananth Sadanand
@SreemanananthSadanand 好吧,PCA可以很好地减少输入的维度,但我想到了更简单的方法,比如调整图像大小 :) 至于如何直观地选择参数,这将取决于参数,但让我们谈谈C和gamma(RBF上要求的参数)。C是违反线性可分性的惩罚成本,因此对于较低的C,算法不必为那些未分类的点付出太多代价,因此它可以更加宽容并选择较少的支持向量(我在这里过于简化,但类比有效)。 - Pedrom
@SreemanananthSadanand 所以,如果C值更高,算法将需要为那些未分类的点付出更多代价,因此它会尽可能地减少未分类的点(这并不完全正确,但再次只是一种直观的看法)。简而言之,较高的C值越接近过度拟合,较低的C值则越容易出现误分类。这个问题可能会对你有所帮助:https://dev59.com/aWkx5IYBdhLWcg3wCf8q - Pedrom
@SreemanananthSadanand RBF核函数的gamma参数有另一个类比,可以帮助您更好地理解正在发生的事情。您可以将RBF视为特征空间中的超球体,如果一个点足够接近中心,它将被“激活”。因此,您可以将gamma视为该超球体半径的倒数。因此,对于较大的gamma值,它将是一个小的超球体,而对于较低的gamma值,超球体将更大。这些图像可能有助于更好地看到它 http://goo.gl/S4EZx http://goo.gl/A1jHy 如果需要进一步帮助,请告诉我。 - Pedrom
华丽的视觉效果!非常有帮助。让我深思熟虑一下,我知道HOG描述符在这个问题上表现很好,只是找到合适的SVM参数进行训练的问题。谢谢您先生! - Sreemanananth Sadanand

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接