Andrew NG 机器学习 笔记-week11-应用实例:图片文字识别(Application Example:Photo OCR)

来源:互联网 发布:python pyqt5 安装 编辑:程序博客网 时间:2024/06/05 06:43

1、问题描述和流程图(Problem Description and Pipeline)

photo OCR:photo Optical Character Recognition

图像文字识别,要求从一张给定的图片中识别文字。

这里写图片描述

为了完成这样的工作,需要采取如下步骤:

  1. 文字侦测(Test detection):将图片上的文字与其他环境对象分离开来
  2. 字符切分(Character segmentation):将文字分割成一个个单一的字符
  3. 字符分类(Character classification):确定每一个字符是什么

每一项任务可以由一个单独的小队来负责解决:

这里写图片描述

2、滑动窗口(Sliding Windows)

滑动窗口是一项用来从图像中抽取对象的技术。

假使我们需要在一张图片中识别行人,首先要做的是用许多固定尺寸的图片来训练一个能够准确识别行人的模型。然后我们用之前训练识别行人的模型时所采用的图片尺寸在我们要进行 行人识别的图片上进行剪裁,然后将剪裁得到的切片交给模型,让模型判断是否为行人,然后在图片上滑动剪裁区域重新进行剪裁,将新剪裁的切片也交给模型进行判断,如此循环直至将图片全部检测完。
检测区域可能过小,无法检测到进距离的人像。我们按比例放大剪裁区域,一新的尺寸对图片进行剪裁,将每次剪裁到的图片缩小至模型采纳的尺寸,交给模型进行判断,如此循环。

每次滑动窗口的大小是一个参数,成为步长(step size)或 步幅(stride ) ,每次移动一个像素(步长为1),这样通常表现很好但计算量太多,通常采用步长选择4或8个像素。

这里写图片描述
这里写图片描述

文字侦测

滑动窗口技术也被用于文字识别,先收集一些带标签的训练集,正样本表示图像中有文字的图片,负样本表示没有文字,训练完以后,我们就可以把他运用到新的图像中。

我们用一个较小的固定的比例来运行滑动窗口,如图所示,白色区域表示文字检测系统已经发现了文字。亮度表示模型输出的概率值大小。

运用 展开器(expansion operator),对每一个白色的小点都扩展为一块白色的区域。从数学上说,就是看每个像素点是否在白色像素块的一定范围内,如果在,就将其设为白色。

根据宽高比例,过滤掉瘦高的白块。(认为单词的长度通常比高度要大)。

这里写图片描述

字符分割

训练一个模型来完成字符分割,正样本是可以分割的图片,负样本是不能分割的图片。
模型训练完后,我们仍然使用滑动窗口技术来进行字符的分割。

这里写图片描述

字符分类

利用神经网络、支持向量机或者逻辑回归算法训练一个分类器即可。

3、获取大量数据和人工数据(Getting Lots of Data and Artificial Data)

想要获得一个比较高效的机器学习系统,一种最可靠的方式是 选择一个低偏差的学习算法,然后用一个巨大的训练集来训练它。

如何获得那么多的训练数据呢?
在机器学习中有一个很棒的想法:人工数据合成(artificial data synthesis)
1. 白手起家,创造新的数据。
2. 已经有了一小部分带标签的训练集,扩大它。

以字母识别为例
仿照想要识别的样本,来设计带标签的样本。
采集同一个字符的不同种字体,然后将这些字符应用某种模糊操作(变形、缩放、旋转),并加上不同的随机背景,这样就有了一个关于字母C的样本。

要合成这些看起来可靠的数据 还是要花点功夫的,为了使合成的数据接近真实数据。

通过使用合成的数据,我们实际上已经获得了无限的训练样本。

这里写图片描述

人工合成的第二种方法是对已有的样本进行扩充。字母A来源于一个真实的样本,我们可以取出A,进行人工扭曲或者人工变形,这样就生成了A的16种新的样本。用这种方法,可以把一个很小的 带标签训练集 突然一下扩大 得到更多的训练样本 。

这里写图片描述

另一个语音识别的例子。
给带标签的音频样本添加不同的背景声音,来扩大样本。

关于获取更多的数据,要考虑:

  1. 确保模型是低偏差的(画学习曲线)。增加特征的数量或神经网络隐藏层的数量直到有一个低偏差。
  2. 考虑扩大10倍的训练数据需要多长时间。

有关获得更多数据的几种方法:

  • 人工数据合成(artificial data synthesis)
  • 手工收集、标注数据(collect、label it yourself)
  • 众包(crowd sourcing ,eg. Amozon Mechanical Turk)

4、上限分析:接下来做流程的哪部分( Ceiling Analysis_ What Part of the Pipeline to Work on Next)

在机器学习的应用中,我们通常需要通过几个步骤才能进行最终的预测,我们如何能够知道哪一部分最值得我们花时间和精力去改善呢?可以通过上限分析。

文字识别需要通过以下几个步骤:

这里写图片描述

流程图中每一部分的输出都是下一部分的输入,上限分析中,我们选取一部分,手工提供100%正确的输出结果,看应用的整体效果提升了多少。
假设我们的例子中总体效果为72%的正确率。
如果我们令文字侦测部分输出结果为100%正确,发现系统的总体效果从72%提高到了89%。这意味着我们很可能会希望投入时间精力来提高我们的文字侦测部分。
接着我们手工选择数据,让字符切分输出的结果是100%正确,发现系统的总体效果只提升了1%,这意味着,我们的字符切分部分可能已经足够好了。
最后我们手工选择数据,让字符分类输出的结果100%正确,系统的总体效果又提升了10%,这意味着我们也应该投入更多的时间和精力来提高应用的总体表现。