OpenCV中的SVM:使用RBF核的低精度OCR
SVM in OpenCV: low accuracy OCR with RBF kernel
我正在使用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方法,如果使用的参数范围没有产生好的结果,您可以通过将自定义参数网格传递给该方法来扩展这些范围(但先尝试默认参数)。
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 正在将csv文件读取为双精度矢量
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- 我可以信任表示整数的浮点或双精度来保持精度吗
- 如何在C++中的同一函数中使用字符串和双精度
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 如何计算具有指定类型的表达式的相对精度和绝对精度
- 如何打印boost多精度128位无符号整数
- 检查是否以特定精度给出双精度
- 转换函数,将 std::数组的双精度作为参数或双精度作为参数单独转换
- C 字符串返回字符串的整数/双精度/长整型值
- 为什么将双精度转换为 int 似乎在第 16 位数字之后将其四舍五入?
- 如何使双精度值的 C++ 和 C# 中的结果相同
- 使用浮点数和双精度数的非常小数字的数学
- 使用 Xcode 将双精度存储在数组C++中
- 为什么输出精度没有正确舍入?
- 在 C++ 中将双精度变量写入二进制文件
- OpenCV中的SVM:使用RBF核的低精度OCR