Photo OCR
Problem Description and Pipeline
OCR: Optical Character Recognition
步骤:
1.识别包含文字的图片区域
2.将每块图片中的各个文字分隔开
3.对每个文字进行识别
这种算法流程被称为pipeline,前一个模块的输出是下一个模块的输入。
Sliding Windows
本节分别介绍一下上述三个步骤的实现过程:
1.Text Detection:
这里先介绍一个简单的问题:图片中行人的识别。因为现实生活中每个人像的宽高比基本相同,所以这是一个简化版问题。使用机器学习解决,假设所有人像大小都是82*36的,那么训练集为许多张这个大小的图片,一些是人像,一些不是,这是一个监督型问题。
训练得到模型后,给定一张新图片,使用一个82*36大小的窗口依次遍历整张图片,并使用模型判断当前窗口中是否为行人。由于还涉及到近大远小,可以等比例放大窗口再次遍历,之后缩小为82*36来判断。
这个算法也可应用于Test Detection。每个字母的大小基本相同,遍历得到可能是字母的所有区域后,将相邻的区域连接起来视为一块(一个单词),最后把那些仍只有一个字母的区域排除(误判为字母的可能性大)。
2.Character Segmentation:
对于上一步得到的每个单词,使用机器学习做分割。这次的训练集图片不是字母,而是两个字母相邻中间的分割空白(不同字母间的空白基本相同,更适合训练)。
3.使用机器学习对分割完的每个字母做判断。
Getting lots of data: Artificial data synthesis
在寻找更多图像做数据时,我们可以利用已有数据构造,几个简单的方法:
1.给图像中的元素更换背景。
2.扭曲图像
3.旋转图像
想办法使你构造的数据更真实
Ceiling analysis: What part of the pipeline to work on next
单元测试:
假设你的pipeline分为4个部分。测试每个部分提高的潜力的方法:
1.计算当前算法系统整体精确度。
2.手动使该部分精确度为100%(该部分直接按训练集中的label输出),再次计算精确度。
3.计算两精确度之差,这就是该模块的潜力。
应优先优化潜力高的模块。
Summary and Thank You
历时11周,终于跟完了这门课,对ML有了一个入门级的认识,接下来要投入更多的时间进行更深入的学习。
Andrew Ng真是非常nice,一张图:
Thank you!