3

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

首先我尝试了 Tesseract,但它真的很糟糕。所以我开始调查MNIST. 由于它很受欢迎,我希望很容易获得一个好的高质量分类器。实际上,这里的最佳答案建议使用HOG+SVM串联,这在OpenCV示例中很方便地实现。不幸的是,它没有我希望的那么好。它一直在混淆0's for 8's (我的眼睛很明显它实际上是 a 0),这是迄今为止我的算法所犯错误最多的原因。

以下是一些错误示例HOG+SVM

最上面一行是从图像中提取的原始数字(不存在更高分辨率的图像),中间一行是这些经过去偏斜、尺寸归一化和居中的数字,下面一行是HOG+SVM.

我尝试通过在之后应用分类器来热修复此0-8错误(如果输出运行并返回其输出),但结果是相同的。kNNHOG+SVMHOG+SVM8kNN

然后我尝试调整这个pylearn2声称达到 0.45%MNIST测试误差的样本。然而,在花了一个星期的时间后,pylearn2我无法让它工作。它一直在随机崩溃,即使在像运行此图像Amazon EC2 g2.2xlarge的实例一样无菌的环境中(我什至没有提到我自己的机器)。

我知道 的存在Caffe,但我没有尝试过。

设置高精度(例如,MNIST 测试误差 <1%)手写数字分类器的最简单方法是什么?最好是不需要NVIDIA卡即可运行的。据我了解,pylearn2(因为它严重依赖cuda-convnet)确实如此。Python界面和运行能力将是一个Windows令人愉快的奖励。

注意:我无法创建新pylearn2标签,因为我没有足够的声誉,但它肯定应该在那里。

4

2 回答 2

2

在 MINST 数据库的网页中,您可以在底部找到最先进方法的基准及其论文的链接:

http://yann.lecun.com/exdb/mnist/

表格的最后一项具有 0.23% 的误差(非常令人印象深刻)的最佳结果。

简短的回答:没有easy办法达到最先进的水平,除非你可以接受一些 2-5% 的错误(然后使用 sklearn)或者你在网上找到代码。

于 2015-02-12T22:17:40.380 回答
1

如果您还没有尝试过,请继续尝试 caffe。它比 cuda-convnet 更容易编译,它不依赖 cuda(尽管它大大加快了速度),并且它有一个使用 Lenet 算法的 mnist 示例。

看这里: https ://github.com/BVLC/caffe/tree/dev/examples/mnist

于 2015-02-17T12:15:35.197 回答