Photo OCR pipeline
将机器学习问题分解成多个模块、流程。
以下是例子:文字识别(Optical Character Recognition,OCR)
Photo OCR问题流程:
- 文本区域识别
- 字符分段
- 字符分类
可以将该问题分成多个模块:
遇到一个问题,要思考如何将问题分解成几个流程和步骤,以便团队协作。
滑动窗口
用一个人形窗口检查是否是一个人。根据步长移动窗口。
步长为1像素时最精确,相当于遍历所有位置:
然后用更大的方框扫描:
最终能检查出行人:
回到OCR问题,第一步是文本区域检测,就可以用类似的方法训练,然后用滑动窗口扫描:
左下:越白,表示是文本的可能性越大。
右下:扩展左下的白色区域(将白色像素一定距离范围内的像素点包含进去),然后就可以把又高又瘦的区域排除掉
课间习题:
每次移动4个像素,(200 / 4) * (200 / 4) = 2500
接下来是字符分隔。也是用一个滑动窗口,找能从中间划分开两个字符的位置(蓝线):
最后一步,就可以用神经网络之类的有监督学习来分类了:
人工数据合成
用于OCR
将各种各样的字符,放到各种各样的背景之上,就能得到右边的人工合成数据集:
另一种方法是以已有样本为基础,加入一些扭曲生成多个样本:
用于语音识别
将原始语音加入到不同的背景噪声中。
要保证加入的扭曲是有意义的,确实能产生出新的训练样本:
比如车的图片样本,可以通过水平、垂直翻转,来作为新样本。
不能将两个车的图片揉到一起(那就不是车了),或给像素增加一些噪声点(没意义)。
什么时候需要造更多的数据?
- 确保当前的模型已经是低误差的(已有的数据已经学透了,需要新的),可以通过增加特征或神经网络的隐藏节点达到。
- 可以评估一下,获取10x的数据需要多少代价?比如可以自己造,可以自己收集,或雇人帮你干。有时候可能代价很小。
ceiling analysis 上限分析
在机器学习工作的哪个步骤中值得投入最大时间?
基本思路是木桶效应,找出最影响性能的短板。
先看第一步,文本检测,可以人为标记出所有文本,也就是说,人为把它的准确率提升到100%,看对整个系统性能的提升程度。比如右下角的列表,看到准确率提升到了89%。
再将剩余步骤的输出结果置为100%,最终得出以下表格,可以看出把Text detection的上升空间最大。
吴恩达的建议:不要靠直觉(gut feelings)投入某一个步骤,而是要靠上限分析。
总结
终于学完了!
他又开始吹捧你了!
总之,感谢大佬。