NG说:
我想介绍这部分内容的原因主要有以下三个:
第一,我想向你展示一个复杂的机器学习系统是如何被组合起来的。
第二,我想介绍一下机器学习流水线(machine learning pipeline)的有关概念以及在决定下一步做什么时如何分配资源。
最后,我也想通过介绍照片OCR问题的机会来告诉你机器学习的诸多有意思的想法和理念。其中之一是如何将机器学习应用到计算机视觉问题中,第二是有关人工数据合成(artificial data synthesis)的概念。
照片OCR是指照片光学字符识别(photo optical character recognition)。
1. OCR的大概步骤
- 1.文字识别技术(Text detection)
首先使用文字识别技术(Text detection)将给定的图片扫描一遍,找出这张图片中哪里有文字信息:
- 2.字符切分
接下来就是重点关注这些文字区域,对这些文字区域的矩形轮廓进行字符切分。
其实有很多照片OCR系统会进行更为复杂的处理,比如在最后会进行拼写校正。
2 机器学习流水线(machine learning pipeline)
这幅图表示的就是照片OCR的流水线。
2.1 滑动窗体步骤
- 1.文字检测
滑动窗的第一个步骤是文字检测(text detection)。
为了建立一个行人检测系统,以下是具体步骤:
- 1.指定行人矩形比例
假如说我们把宽高比标准化到82:36这样一个比例。 - 2.搜集样本
接下来我们要做的就是到街上去收集一大堆正负训练样本。 - 3.如果你能得到大规模训练样本的话,然后你要做的事是训练一个神经网络或者别的什么学习算法,输入这些82×36维的图像块,然后对y进行分类,把图像块分成”有行人”和”没有行人”两类。
也就是:训练一个分类器,然后用一个滑动窗分类器来找出图像中出现的行人。
- 1.指定行人矩形比例
- OCR文字检测
跟行人检测类似你也可以先收集一些带标签的训练集:
使用这些训练集来训练识别文字的分类器。
-字符分割
如果你还记得的话,你应该知道流水线的第二步是字符分割。所以给出下面这样的图像我们应该怎样分割出图像中的单个字符呢?
同样地,我们还是使用一种监督学习算法,用一些是否存在字符之间的分割区域的正样本和一些负样本来训练一个分类器。
3 获取大量数据和人工数据
想要获得一个高效的机器学习系统,我们通常需要在低偏差的算法中代入大量的训练数据。但是我们如何获取大量的训练数据呢?
其实在机器学习中有一个很棒的想法,叫做“人工数据合成”(artificial data synthesis)。
第一种,是我们白手起家来创造新的数据。
第二种,是我们通过扩大一个已经存在的带标签的小的训练集,来获得数据。
4 总结
注意:
- 尝试获取更多数据之前,先优化好你的分类器
- 尝试和你的团队沟通,头脑风暴
- “众包” (crowd sourcing)–人工标记样本
另一种很好的办法,我们称之为“众包” (crowd sourcing)的办法。
现在已经有一些网站,或者一些服务机构能让你通过网络雇一些人替你完成标记大量训练数据的工作。通常都很廉价。
“亚马逊土耳其机器人”(Amazon Mechanical Turk)就是当前最流行的一个众包选择。 - 关于上限分析(ceiling analysis)的内容。这种方式通常能提供一种很有价值的信号,告诉你流水线中的哪个部分最值得你花时间。
当我们面对这样一个流水线时,你应该怎样分配资源呢?哪一个方框最值得你投入精力,投入时间去改善效果呢?
我们可以看到,如果我们拥有完美的文字检测模块,那么整个系统的表现将会从准确率72%上升到89%,因此效果的增益是17%。这就意味着,如果你在现有系统的基础上花费时间和精力改善文字检测模块的效果,那么系统的表现可能会提高17%。