我正在从事一个涉及 OCR 手写数字的项目,该项目使用典型的预处理-分割-识别管道。我通过从 OpenCV
为我的特定任务调整一些标准算法来手动完成前两个阶段。对于第三阶段(识别),我想使用现成的分类器。
首先我尝试了 Tesseract,但它是 really bad 。所以我开始研究 MNIST
的进展。由于它的受欢迎程度,我希望很容易获得一个不错的高质量分类器。实际上,最重要的答案 here 建议使用 HOG+SVM
串联,它可以在 this OpenCV
sample 中方便地实现。不幸的是,它没有我希望的那么好。它一直混淆 0
和 8
的(在我看来很明显它实际上是一个 0
),这是迄今为止我的算法所犯的最大错误。
以下是 HOG+SVM
所犯错误的一些示例:
最上面一行是从图像中提取的原始数字(更高分辨率的图像不存在),中间一行是这些数字去歪斜、尺寸归一化和居中,最下面一行是 HOG+SVM
的输出。
我试图通过在 0-8
之后应用 kNN
分类器来热修复这个 HOG+SVM
错误(如果 HOG+SVM
输出一个 8
运行 kNN
并返回其输出),但结果是一样的。
然后我尝试调整 this pylearn2
sample 声称达到 0.45% MNIST
测试错误。但是,在使用 pylearn2
一周后,我无法让它工作。它 keeps crashing randomly all the time ,即使在像运行 this image 的 Amazon EC2
g2.2xlarge
实例一样无菌的环境中(我什至没有提到我自己的机器)。
我知道 Caffe
的存在,但我还没有尝试过。
设置高精度(例如,MNIST 测试错误 NVIDIA 卡即可运行的卡。据我了解, pylearn2
(因为它严重依赖 cuda-convnet
)确实如此。 Python
接口(interface)和在 Windows
上运行的能力将是一个令人愉快的奖励。
注意:我无法创建新的 pylearn2
标签,因为我没有足够的声望,但它肯定应该在那里。
最佳答案
在 MINST 数据库的网页中,您可以在底部找到最先进方法的基准及其论文链接:
http://yann.lecun.com/exdb/mnist/
表格的最后一个条目的结果最好,错误率为 0.23%(非常令人印象深刻)。
简短回答:没有 easy
方法可以达到最先进的速率,除非您可以接受 2-5% 的错误(然后使用 sklearn),或者您可以在网上找到代码。
关于python - 获得最先进的手写数字分类器的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28488849/