Application Example: Photo OCR
Photo OCR = Photo Optical Character Recognition
如上图是提取图片中的文字(或许IPhone相册里面的搜索功能也是这么做的),提取出文字后可以建立文字和图片的关系, 这样我们想找照片的时候就不用每张照片去翻了.
Photo pipeline line
比较复杂的机器学习项目可能会有多个模块(注意这边用的词是pipeline,上一个模块的输出是下一个模块的输入),Photo OCR可以分为3个模块:
1.Text detection
使用Sliding windows算法识别图片中的文字区域
2.Character segmentation
使用Sliding windows算法识别文字区域每个字母的分界线
3.Character classification
识别每个字母(neural network, logistic regression都行)
Sliding windows
Sliding windows算法可以用于文字识别和行人识别.该算法的大致步骤就是定义一个或多个矩形(大小不同),按一定步长扫过整张图片同时识别矩形中的图片是否是文字或者行人.如下图所示:
expansion操作:sliding windows算法可以帮我们识别出图片中所有的文字,但是他们之间是割裂的(如上图左下),我们可以通过expansion操作将每块被识别的区域按某种算法扩大,可以得到上图右,然后在做些排除法,因为英文中竖着写的字几乎没有,所以这里把下方两块文字区域给干掉了.
我们一旦获取到文字之后,需要把文字拆开才能识别,所以我们需要能识别字母与字母之间的空隙,如上图所示,还是使用sliding window算法,将文字区域拆成一个个的字母,这个过程就是Character segmentation.
接下来就简单了,识别每一个字母,在组合即可.
Getting lots of data: Artificial data synthesis
之前提到过,如果你有一个low bias的算法,那么样本越多算法的表现越好.那么怎么去获取这么多样本呢?拿Character classification来说,word中自带多种字体,截图外加自己添加背景就ok了.
另外一种方式是将字体扭曲,如上图.
如果为了引入distortion而王原油样本中加一些完全随机的无意义的干扰那一般来说是没有用的.
1.确认你的算法是low bias的(绘制learning curve),不然怎么添加训练样本都是无用功
2.如何获取大量训练样本
- 刚刚提到的Artificial data synthesis
- 自己收集/归类
- 花钱买外部服务
Ceiling analysis
Ceiling analysis是一种机器学习优化方法,他可以帮你找出整个pipeline中能给整体性能提升最多的模块,工程师的时间很宝贵,我们要做到有的放矢.
要做Ceiling analysis我们需要绘制一个表格,如上图所示:
overall system accuracy = 72% 代表当前整个算法的精确度是72%
Text detection = 89% 代表如果我们将Text detection做到最完美(人为修改Text detection的输出),算法的精确度将提高到89%,17%的提升.
Character segmentation = 90% 代表如果我们将Character segmentation做到最完美,算法的精确度将提高到90%,仅仅提高1%.
Character recognition = 100% 代表如果我们将Character recognition做到最完美,算法的精确度将提高到100%,提高10%.
那么结论很明显了,我们要花最多资源投入在Text detection 和 Character recognition模块的优化过程中,因为性价比最高.
下图是Ceiling analysis作用于人脸识别的例子.
OK! That's it. 吴恩达老师的Machine Learning 课程历经11周的学习终于结束了.🎉🎉🎉🎉🎉🎉🎉🎉🎉
同样的话给读者(如果有的话).Thank you~