我正在开发一个涉及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 image的kNN
MNIST
实例中也是无效的环境(我甚至不提我自己的机器)。
我知道pylearn2
的存在,但我还没有尝试过。
设置高精度(例如,MNIST测试错误<1%)手写数字分类器最简单的方法是什么?优选地,不需要Amazon EC2
卡运行的卡。据我了解,g2.2xlarge
(因为它严重依赖于Caffe
)。 NVIDIA
界面以及在pylearn2
上运行的能力将是一个令人愉快的奖励。
注意:我无法创建新的cuda-convnet
代码,因为我没有足够的声誉,但肯定应该在那里。
答案 0 :(得分:1)
在MINST数据库的网页中,您可以在底部找到最先进方法的基准,并附上他们论文的链接:
http://yann.lecun.com/exdb/mnist/
该表的最后一个条目具有最佳结果,误差为0.23%(相当令人印象深刻)。
简短回答:没有easy
方式来实现最先进的速率,除非您可以接受2-5%的错误(然后使用sklearn)或者您在线找到代码。
答案 1 :(得分:0)
如果你还没有做过,请继续尝试caffe。 它比cuda-convnet更容易编译,它不依赖于cuda(虽然它可以大大加快速度)并且它有一个使用Lenet算法的mnist的例子。