我正在从事一个涉及 OCR 手写数字的项目,该项目使用典型的预处理-分割-识别管道。我通过OpenCV
针对我的特定任务调整一些标准算法手动完成了前两个阶段。对于第三阶段(识别),我想使用现成的分类器。
首先我尝试了 Tesseract,但它真的很糟糕。所以我开始调查MNIST
. 由于它很受欢迎,我希望很容易获得一个好的高质量分类器。实际上,这里的最佳答案建议使用HOG+SVM
串联,这在此OpenCV
示例中很方便地实现。不幸的是,它没有我希望的那么好。它一直在混淆0
's for 8
's (我的眼睛很明显它实际上是 a 0
),这是迄今为止我的算法所犯错误最多的原因。
以下是一些错误示例HOG+SVM
:
最上面一行是从图像中提取的原始数字(不存在更高分辨率的图像),中间一行是这些经过去偏斜、尺寸归一化和居中的数字,下面一行是HOG+SVM
.
我尝试通过在之后应用分类器来热修复此0-8
错误(如果输出运行并返回其输出),但结果是相同的。kNN
HOG+SVM
HOG+SVM
8
kNN
然后我尝试调整这个pylearn2
声称达到 0.45%MNIST
测试误差的样本。然而,在花了一个星期的时间后,pylearn2
我无法让它工作。它一直在随机崩溃,即使在像运行此图像Amazon EC2
g2.2xlarge
的实例一样无菌的环境中(我什至没有提到我自己的机器)。
我知道 的存在Caffe
,但我没有尝试过。
设置高精度(例如,MNIST 测试误差 <1%)手写数字分类器的最简单方法是什么?最好是不需要NVIDIA
卡即可运行的。据我了解,pylearn2
(因为它严重依赖cuda-convnet
)确实如此。Python
界面和运行能力将是一个Windows
令人愉快的奖励。
注意:我无法创建新pylearn2
标签,因为我没有足够的声誉,但它肯定应该在那里。