Week11:Photo OCR & Conclusion

OCR问题

通俗一点讲就是图像识别中的文字识别。比方说给一张图,请识别图中的文字。

滑动窗口探测法

该方法用于识别出图中哪些区域还有所指定的目标物体。

它选一个特定的尺寸的图片进行二分训练,判断这个尺寸的图片中是否含有要找的目标。

例如行人探测 问题,需要找出图片中哪有人,那么可以先选取一个 $82 \times 36$ 大小的小图片作为训练集进行训练。

得到训练模型后,使用一个滑动窗口 在原图上进行搜寻,每次移动的距离叫做stepstep 越小,效果越好。

第一步:文字检测

要识别图像中的字,得先知道哪些地方可能是字,所以文字检测是用来探测图像中的哪一部分是含有字的。

行人检测一样,我们需要先建立起训练集

在原图上我们运行滑动窗口算法,得到左下方的图。白点 越亮则表示该处有文字的概率越大。根据文字的特征,一般文字都是横着的,而且是连着的,所以我们可以通过白点扩散得到右下方的结果,这样就更加接近真实的结果了。

第二步:断字

例如现在已经截取到了含有字的那一块图片,那么就要对其进行断句(分词)例如:

这个问题用滑动窗口法也可,对于每一小块,我们取图片的对称轴即可以找到字母的间隔,就可以把文字断开了。

第三步:识字

这一步需要识别每一个独立的语言符号,对英语来说,就是识别出每一个字母:

这是一个典型的多分类问题。

合成数据

获得真实数据是一件很麻烦的事情,需要消耗人力物力,而文字识别这件事儿其实人工合成的数据也能达到训练效果,例如下面两幅图,人也很难区分哪一个是合成的。

获取大量数据:扭曲、加噪

扭曲是模拟真实数据的一个好方法,例如现在有一个很标准的数字A。

同时在语音数据上,你或许已经有一个比较标准的数据,声音很清晰,那你可以试着对这断语音加入一些白噪声,看机器学习模型是否还能正确的识别它。

流水线学习

从上述OCR问题的解决方案来看,解决OCR问题可以分成三个步骤,而这三个步骤都分别对应一个机器学习问题

优化分析

那么有什么指标可以衡量一个OCR系统的好坏呢?答案是准确率,那么要是准确率很低,又该怎么优化呢。

因为OCR可以被拆成三个机器学习问题,所以我们可以把它们看出三个组件,通过调整每一个组件的准确率,我们可以提升系统整体的准确率。那么我们应该调整三个组件中的哪一个组件呢?

我们可以画出以下表格,第一行表示当前系统整体的准确率是72%,假设现在我们要来优化这个系统。

我们可以人工的把第一个组件文字检测的准确率提高到100%,我的意思就是人工纠正那些被模型错误分类的数据,之后我们再次运行系统,得到的系统准确率是89%。

接着我们把断字 组件的准确率也提高到100%,得到的系统准确率是90%。

再把识字 组件准确率也提高到100%,那么最后的系统准确率肯定就是100%了。

好了,现在可以看到,通过提升文字检测组件,我们可以把系统的整体准确率提高17%,,断字识字 可以提高1%10%,可以知道,文字检测的贡献率是三个组件中最大的,所以我们可以把大多数优化的精力用在文字检测这个组件上。

总结

很感谢Coursera提供的这样一个平台,让百万莘莘学子可以接触到这么多优质的资源,同时也很感谢Ng的这套机器学习课程,帮助大家很快速地踏入了机器学习的大门,教育无疆。

课程虽然结束,而我的言机器学习之旅也才刚刚开始,接下来的两个月我将花费大量时间研究NLP领域,同时也希望自己能够坚持自己的选择,能够披荆斩棘走向梦想的彼岸。

坚持原创文章分享,您的支持将鼓励我继续创作!