在一张图片中发现并识别目标、文字、数字是一项具有挑战性的任务。本周将讨论处理该问题的途经与分析如何改善该系统性能。
照片光学字符识别,OCR,Photo optical character recognition。
照片识别
问题描述与(机器学习)流水线
开发一个复杂的机器学习系统,我们需要了解如何配置资源。
-
Photo OCR 流水线:(包含多个模块)
-
-
-
-
- 例如 C1eaning → Cleaning; (1 → l)
滑动窗
用滑动窗的高宽比可以用于寻找照片中的行人。
- 行人的高宽比特征明显,通过分类方法很容易方法;
- 两个窗体间的距离为步长,或被称为步幅参数(stride parameter);
- 窗体的大小是可调整的,取较大的窗体并压缩至分类器规格的大小,在进行识别;
- 分类器:
y=1⇒h×lpixels 有行人照片
y=0⇒h×lpixels 无行人照片
文字识别:
- 文字检测:(
y=1⇒
文字区域;
y=0⇒
无文字区域)
- 滑动窗获取有文字的窗体像素
- 像素扩展将相近的文字窗体合并为块
- 筛选不像正常文字区域的窗体(可能会漏去一些文字)
字符分割:( y=1⇒ 字符分割区域; y=0⇒ 非字符分割区域)
- 滑动窗去照片
- 用窗口照片作为识别对象
- 确定分割线
字符分类:( y=1,2,…,A,B,…etc⇒ 对应的文字信息)
获取大量的数据与人工数据
“人工数据合成(Artificial data synthesis)”是一种获取大量数据的方法。
-
人工数据合成:
-
1.“从无到有”(例如从计算机已有的文字库生成文字)
2. 从少量有标签的训练集扩充为一个大的训练集
数据的合成一般是基于一个低偏差(高方差/需要大量训练集)的机器学习系统(分类器)。针对2个典型应用文字识别与语音识别,我们介绍一些人工数据合成的详细内容。
文字识别
- “从无到有”生成字符训练集的方法
- 从已有训练集扩充为一个大的训练集
语音识别
-
训练集的合成方法:
- 原声音 + 噪声(不同)= 新的声音
获取大量数据的讨论
- 以后的分类器是一个低偏差的,通过增加训练集有助于提高分类器性能(降低方差),绘制学习曲线是一种有效的方法。
- 获取多于 10 倍已有数据的工作量(“头脑风暴”来讨论想法),合成的方法有:
- 1 人工数据合成
- 2 手工收集与标记
- 3 众包“Crowd source”(找人帮你做)
上限分析:流程线上的下一步工作是什么
上限分析可以告诉项目团队,流水线的哪一部分最值得花时间。接下来,我们将通过照片识别与人脸识别 2个应用讲解 上限分析。
照片识别
上限分析用于调整系统的整体性能。
值得注意的事,要使某一模块的准确率达到 100%,可以通过人工的方法替代该模块的工作,使之达到 100% 的准确率。
人工智能:人脸识别
我们以简单的人脸识别应用为例,讨论它的上限分析。
总结
总结:主要主题
- 监督学习:线性回归、逻辑回归、神经网络、支持向量机;
- 无监督学习:K 均值、主成分分析、异常检测;
- 特殊的应用:推荐系统、大规模机器学习(并行、映射化简);
- 开发一个机器学习系统的建议:偏差/方差分析、正规化,决定下一步工作的学习算法评估、学习曲线、误差分析、上限分析。
到了这里,机器学习的基础更新到此为止了,接下来将是进入实战阶段,网上有很多关于数据挖掘与机器学习相关的竞赛,例如 kaggle;同时,有一篇博文中提到的学习轨迹感觉挺不错,我想沿着它走走。最后,我的 MATLAB 也许会止步于此,机器学习方向上,我会开始接触 Python,或者 JAVA,当然,MATLAB 永远是一款数值计算强大的软件,I like it so much.