【发布时间】:2015-04-13 20:38:58
【问题描述】:
我正在从事一个涉及 OCR 手写数字的项目,该项目使用典型的预处理-分割-识别管道。我已经通过调整OpenCV 中的一些标准算法来手动完成前两个阶段,以完成我的特定任务。第三阶段(识别),我想使用现成的分类器。
首先我尝试了 Tesseract,但它是 really bad。所以我开始调查MNIST 的进展。由于它很受欢迎,我希望很容易获得一个好的高质量分类器。事实上,最佳答案here 建议使用HOG+SVM 串联,这在this OpenCV sample 中很方便地实现。不幸的是,它没有我希望的那么好。它总是混淆 0 和 8(我的眼睛很明显它实际上是 0),这是迄今为止我的算法所犯错误最多的原因。
以下是HOG+SVM 所犯错误的一些示例:
顶行是从图像中提取的原始数字(不存在更高分辨率的图像),中间行是这些数字经过去偏斜、尺寸标准化和居中,底行是HOG+SVM 的输出。
我尝试通过在HOG+SVM 之后应用kNN 分类器来热修复此0-8 错误(如果HOG+SVM 输出8 运行kNN 并改为返回其输出),但结果是一样的。
然后我尝试调整this pylearn2 sample,它声称可以达到0.45% MNIST 测试错误。然而,在pylearn2 度过了一周之后,我无法让它发挥作用。它keeps crashing randomly all the time,即使在像运行this image 的Amazon EC2 g2.2xlarge 实例这样无菌的环境中(我什至没有提到我自己的机器)。
知道Caffe的存在,但没试过。
设置高精度(例如,MNIST 测试误差 NVIDIA 卡即可运行。据我了解,pylearn2(因为它严重依赖cuda-convnet)确实如此。 Python 界面和在 Windows 上运行的能力将是一个令人愉快的奖励。
注意:我无法创建新的pylearn2 标签,因为我没有足够的声誉,但它肯定应该在那里。
【问题讨论】: