我正在从事一个涉及 OCR 手写数字的项目,该项目使用典型的预处理-分割-识别管道。我通过从 OpenCV 为我的特定任务调整一些标准算法来手动完成前两个阶段。对于第三阶段(识别),我想使用现成的分类器。

首先我尝试了 Tesseract,但它是 really bad 。所以我开始研究 MNIST 的进展。由于它的受欢迎程度,我希望很容易获得一个不错的高质量分类器。实际上,最重要的答案 here 建议使用 HOG+SVM 串联,它可以在 this OpenCV sample 中方便地实现。不幸的是,它没有我希望的那么好。它一直混淆 08 的(在我看来很明显它实际上是一个 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 imageAmazon 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/

10-14 17:35