2012-03-21 75 views
3

我会与我的使用MS Visual Studio 2008中,OpenCV的,C++和SVM OCR的项目。我已经生成了> 2000个机器打印字符样本的数据集。当我用线性内核测试时,我总是得到96.36%的准确率。SVM在OpenCV中:低精度的OCR与RBF内核

如何在OpenCV中使用SVM可以this thread被称为。

现在我尝试使用RBF内核和遇到这2个问题:

(1)无论我用什么参数(C和γ),所有的角色都总是被归类为0(零)。如果我用MNIST测试所有的数字是9.

我希望有经验的人在OpenCV & SVM可以向我解释。我知道有一些是其他好的框架,机器学习像ACCORD.NET &图像处理,但我已经使用C++,这将是麻烦的把整个程序到C#(OCR只是它的一部分)。

的OpenCV的版本是2.3.1。

(2)我将此问题作为etarion的建议提出了另一个问题。如果您有时间,请查看:Visual Studio reports error C2664 with train method of SVM in openCV

+0

多部分类似这样的问题不适合的计算器格式 - 这是更好,如果你......嗯,张贴每个问题一个问题。 – etarion 2012-03-21 12:52:30

+0

有些东西肯定是错误的,如果线性内核执行得很好,RBF内核应该执行得相当好。当你说'不管C&gamma的什么值'时,你能说出你使用的是哪个值?您通常会将这些数值按数量级进行变化,因此C = 0.0001 0.001 0.01 0.1 1 5 10与伽玛类似。我见过人们认为他们在改变它,因为他们尝试了5,10,15,20当他们需要尝试0.0001等等。线性内核的C值不一定适用于rbf内核。 – karenu 2012-03-21 13:30:58

+0

@etarion:呃,他们都是关于openCV和SVM的,甚至认为问题的根源是不同的,但是如果我发布了2个连续的分离问题,我觉得我是垃圾邮件:P – Risa 2012-03-21 14:21:17

回答

1

该理论认为,在正确的参数的RBF内核工作至少还有一个线性核。因此,我将列出常见的问题来源:

  • 这可能是你有数值困难。你是否规范化了你的数据?每个功能是否在0和1之间?或-1和1?实际决策值的数值范围是多少?什么是特征值的范围?

  • 难道你高估线性分类器的性能(在相同的数据,即测试和培训?)

  • 难道说你多类表示以某种方式存在缺陷。相同的性能差异是否适用于两类问题而不是十类问题?

+0

1.我训练每一个2类,并将训练结果保存到文件中(您可以在本页右栏的链接问题中看到我是如何做到的,我不确定我是否做得对,但它仍然适用于线性内核)。我的特征向量只包含0&1元素。 2.我使用不同的数据:2000+用于训练,200+用于测试(测试集中没有样本属于训练集)。 3.我也尝试解决2类问题,但仍然出错。由于我制造机器的方式,我认为情况并非如此。 谢谢你的关注。 – Risa 2012-03-21 17:20:03

+0

@Risa所以,既然你接受了你提供的答案,你可以分享哪些是我们其他人遇到的问题? – user601836 2013-03-12 15:13:26

0

至于第一部分,它很可能是你的参数了。有一个用于自动参数估计的train_auto method,如果通过将自定义参数网格传递给方法(但首先尝试使用默认参数),那么可以扩展使用的参数范围。

+0

谢谢你的关注。我已经使用默认参数和train_auto方法进行了测试,但仍然没有运行:(现在由于问题#2,我无法使用其他网格进行测试 – Risa 2012-03-21 14:19:21

+0

@Risa:另一件事可能是由于两个独立的opencv安装,一个旧的和一个新的,与更旧的(它没有cv :: Mat接口)在编译时被挑选出来,并且你从最近的那个获得工具提示 – etarion 2012-03-21 18:02:13

+0

我只安装了一次openCV :(在此之前我在很短的时间内使用ACCORD.NET(我的教授说C#比C++慢,所以我换了)。顺便说一句,为什么每次我在这个评论中添加'@etarion',这个词消失? – Risa 2012-03-21 18:48:04