OpenCV中的SVM:使用RBF核的低精度OCR

SVM in OpenCV: low accuracy OCR with RBF kernel

本文关键字:精度 OCR RBF 中的 SVM 使用 OpenCV      更新时间:2023-10-16

我正在使用MS Visual Studio 2008、OpenCV、C++和SVM进行OCR项目。我已经生成了一个包含2000多个机器打印字符样本的数据集。当我用线性核进行测试时,我总是得到96.36%的准确率。

我如何在OpenCV中使用SVM可以在这个线程中参考。

现在我尝试使用RBF内核,遇到了以下两个问题:

(1) 无论我使用什么参数(C和gamma),所有字符都始终分类为0(零)。如果我用MNIST测试,所有的数字都是9。

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

OpenCV的版本为2.3.1。

(2) 我把这个问题转移到另一个问题上,作为etarion的建议。如果您有时间,请查看:Visual Studio在openCV中使用SVM的训练方法报告错误C2664。

理论表明,在正确的参数下,RBF核至少与线性核一样有效。因此,我将列出常见的问题来源:

  • 你可能在数字上有困难。你的数据标准化了吗?每个功能都在0和1之间吗?还是-1和1?实际决策值的数值范围是多少?特征值的范围是多少?

  • 你是否可能高估了线性分类器的性能(即在相同的数据上测试和训练?)

  • 可能是你的多类表示在某种程度上有缺陷吗。同样的性能差异适用于两类问题而不是十类问题吗?

对于第一部分,您的参数很可能是关闭的。有一种用于自动参数估计的train_auto方法,如果使用的参数范围没有产生好的结果,您可以通过将自定义参数网格传递给该方法来扩展这些范围(但先尝试默认参数)。