我正在从事一个涉及 OCR 手写数字的项目,该项目使用典型的预处理-分割-识别管道。我通过针对我的特定任务调整 OpenCV
中的一些标准算法,手动完成了前两个阶段。对于第三阶段(识别),我想使用现成的分类器。
首先我尝试了 Tesseract,但它是 really bad .所以我开始研究 MNIST
的进展。由于它的受欢迎程度,我希望很容易获得一个不错的高质量分类器。确实,最佳答案here建议使用 HOG+SVM
串联,这在 this OpenCV
sample 中很方便地实现了.不幸的是,它没有我希望的那么好。它一直将 0
与 8
混淆(在我看来它实际上是一个 0
),这说明我的算法所犯的错误最多。
下面是一些HOG+SVM
错误的例子:
最上面一行是从图像中提取的原始数字(不存在更高分辨率的图像),中间一行是这些数字经过校正、大小归一化和居中处理,最后一行是 HOG 的输出+SVM
.
我试图通过在 HOG+SVM
之后应用 kNN
分类器(如果 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 测试误差 <1%)手写数字分类器的最简单方法是什么?最好是不需要 NVIDIA
卡即可运行的程序。据我所知,pylearn2
(因为它严重依赖于 cuda-convnet
)确实如此。 Python
界面和在 Windows
上运行的能力将是一个令人愉快的奖励。
注意:我无法创建新的 pylearn2
标签,因为我没有足够的声誉,但它肯定应该在那里。
最佳答案
在 MINST 数据库的网页中,您可以在底部找到最先进方法的基准及其论文链接:
http://yann.lecun.com/exdb/mnist/
表格的最后一个条目具有最佳结果,误差为 0.23%(相当可观)。
简短的回答:没有简单
的方法来达到最先进的速度,除非你可以接受大约 2-5% 的错误(然后使用 sklearn)或者你在网上找到代码。
关于python - 获得最先进的手写数字分类器的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28488849/