python - 获得最先进的手写数字分类器的最简单方法是什么?

标签 python opencv ocr caffe

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

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

相关文章:

python - Amazon MWS - 如何通过 python 使用 AnyOfferChanged 通知

python - 如何在不选择roi的情况下使用opencv Tracker参数

c++ - 在 opencv 中获取 cv::VideoCaputre 的正确分辨率?=

ocr - Tesseract 无法识别单个字符

c++ - 如何从车牌图像中删除所有非字符对象?

python - 如何在 Azure Jupyter Notebook 中指定返回路径

Python:合并列表或数据框并覆盖缺失值

python - 从数据文件中获取带有列标题和数据列的 python 映射

python - 检测人脸然后自动裁剪图片

python - 无法分割手写字符