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

时间:2015-02-12 22:13:03

标签: python opencv ocr caffe

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

首先我尝试了Tesseract,但它是really bad。所以我开始研究MNIST的进展情况。由于它的受欢迎程度,我希望很容易得到一个很好的高品质分类器。事实上,最高回答here建议使用HOG+SVM串联,这可以方便地在this OpenCV sample中实施。不幸的是,它并不像我希望的那样好。它让0的{​​{1}}混淆了(我的眼睛显然知道它实际上是8),这对于我的算法犯了很多错误。

以下是0

所犯错误的一些示例

顶行是从图像中提取的原始数字(不存在更高分辨率的图像),中间行是这些数字偏斜,尺寸标准化和居中,底线是{{1}的输出}。

我尝试通过在HOG+SVM之后应用HOG+SVM分类器来解决此0-8错误(如果kNN输出HOG+SVM运行{{1}然后返回它的输出),但结果是一样的。

然后我尝试调整声称达到0.45%HOG+SVM测试错误的this pylearn2 sample。但是,在用8花了一个星期后,我无法使其发挥作用。它keeps crashing randomly all the time,即使在运行this imagekNN MNIST实例中也是无效的环境(我甚至不提我自己的机器)。

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

设置高精度(例如,MNIST测试错误<1%)手写数字分类器最简单的方法是什么?优选地,不需要Amazon EC2卡运行的卡。据我了解,g2.2xlarge(因为它严重依赖于Caffe)。 NVIDIA界面以及在pylearn2上运行的能力将是一个令人愉快的奖励。

注意:我无法创建新的cuda-convnet代码,因为我没有足够的声誉,但肯定应该在那里。

2 个答案:

答案 0 :(得分:1)

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

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

该表的最后一个条目具有最佳结果,误差为0.23%(相当令人印象深刻)。

简短回答:没有easy方式来实现最先进的速率,除非您可以接受2-5%的错误(然后使用sklearn)或者您在线找到代码。

答案 1 :(得分:0)

如果你还没有做过,请继续尝试caffe。 它比cuda-convnet更容易编译,它不依赖于cuda(虽然它可以大大加快速度)并且它有一个使用Lenet算法的mnist的例子。

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