第 18 章 应用实例:图片文字识别
这一章用 Photo OCR 作为完整机器学习系统案例,说明如何拆分系统流程、获取数据,并用上限分析决定优化方向。
18.1 问题描述和流程图
Photo OCR 的目标是从图片中识别文字。
一个完整流程可以拆成:
- 文本检测:找出图片中哪些区域包含文字。
- 字符切分:把文字区域切成单个字符。
- 字符识别:识别每个字符。
这种流程图有助于把复杂系统拆成多个可评估模块。
18.2 滑动窗口
滑动窗口用于在图像中寻找目标区域。
基本做法:
- 固定一个窗口大小。
- 在图像上从左到右、从上到下滑动。
- 对每个窗口运行分类器。
- 判断该窗口是否包含目标。
如果目标尺寸变化较大,需要使用多个窗口大小。
滑动窗口也可以用于行人检测、文本检测等任务。
18.3 获取大量数据和人工数据
机器学习系统常常受益于更多数据,但前提是模型和特征有能力利用这些数据。
获取数据的方式:
- 收集真实数据。
- 人工标注数据。
- 通过已有样本生成合成数据。
例如字符识别中,可以用不同字体生成大量字符图像,也可以对已有图像做旋转、缩放、扭曲等变换。
生成人工数据时要注意:合成数据应该接近真实测试场景,否则帮助有限。
18.4 上限分析
上限分析用于决定系统中哪个模块最值得优化。
做法:
- 记录当前完整系统表现。
- 人工把某个模块的输出替换成完美结果。
- 观察整体性能提升多少。
- 提升最大的模块,优先优化。
例如 Photo OCR 中,可以分别把文本检测、字符切分、字符识别替换成完美输出,比较系统准确率提升。
上限分析可以避免把时间花在对整体效果帮助很小的模块上。