吴恩达机器学习Coursera-week11

2018-06-18  本文已影响44人  geekpy

Photo OCR

在此章的课程中,Andrew主要是想通过OCR问题的解决来阐释在实际项目中我们应该如何定义问题,并将一个大问题分解为多个小问题,并通过pipeline的方式将对这些小问题的解决方案串联起来,从而解决这个大问题。我认为这是解决实际问题的一个经典的方法论,有助于我们在实际工作和生活中更好地思考问题,分解问题,并最终解决问题。

Problem Description and Pipeline

此小节主要是通过Photo OCR(Optical Character Recognition)问题来阐释什么是pipeline. OCR简单说就是识别图片中的文字的问题。那么要解决这个问题,实际我们可以分解为三个小一点的问题,即 1,识别出有文字的区域;2,分割字符;3,识别字符。如下图所示:


1.1- Photo OCR pipeline

每一个问题可能都需要一个功能模块去解决,而不同的模块又可以分给不同的工程师去解决,从而可以通过team work的方式来解决一个实际的问题。如下图所示:


1.2- pipleline

Sliding Window

文字区域识别是一个相对较难的问题,因为文字识别区域会有非常多的变化,宽高比都不固定,所以Andrew先以人物识别为例讲述如何进行识别(因为人物,尤其是站立的人物,其宽高比是基本固定的)。那么,我们自己想象一下该如何去识别呢?(我最开始的想法是只要有人出现这个图片就判定为1,没有人就判定为0,但问题是这并没有圈定人物区域,直到看到课程中讲到滑动窗口的概念才恍然大悟)。先看看Andrew在课程中讲述的如何识别人物,如下图所示:


1.3-supervised learning for pedestrian detection

之后,就是我们要说的滑动窗口(sliding window)了


1.4-sliding window detection

针对文字识别,我们可以使用类似的方法进行滑动窗口识别,同样我们需要先训练一个模型,针对有文字的图片标记为1,没有文字的标记为0,这样训练出一个模型。


1.5-training text detection model

之后再利用滑动窗口的方法对要识别的图像进行滑动扫描,如下图:


1.6-sliding window for text detection

下一步,是将有文字的区域送人下一个pipeline,进行文字分割,首先也要有一个模型,来训练其识别字符的分割线,如下图所示:


1.7-1D sliding window for character segmentation

分割好之后,就是利用我们之前课程讲过的文字识别的模型进行文字识别即可。

Getting lots of data and artificial data

此小节主要讲了如何获得大量数据,其中一个技巧就是人造数据,通过合成,distortion等方法我们可以生成一些“假”的数据,但是这些数据却能大幅提升我们模型的性能。

Andrew首先举了一个字符识别的例子,如下图:


1.8-artificial data synthesis for photo OCR

还有不同的方式来人工生成的数据,是通过引入distortion来生成新的样本,如下图:


1.9-introducing distortions

另外,不同的领域合成数据的方式是不同的,比如在语音识别领域,我们是通过引入不同的背景噪音来合成新的样本数据,如下:


2.0-introducing noise background for voice recognition

最后,关于数据作者强调了如下两点:


2.1-about data

Ceiling Analysis

所谓Ceiling Analysis(上限分析)实际是分析Pipeline中每个module队算法的影响度的分析,即哪个模块对算法的改进最有用,然后我们把我们的精力资源投入到那个产出更高的模块。具体做法如下:


2.2-ceiling analysis

之后,Andrew又举了一个更复杂的例子,但是大同小异


2.3-another ceiling analysis example

总的来说,我们在一个项目的pipeline中,要通过ceiling analysis来分析究竟哪个模块的改善对于我们系统的整体性能提升有的大的帮助,然后将我们resource投入到哪些可能带来最大改善的模块中更加有意义。

至此,我们机器学习的课程就全部完结了,非常感谢Andrew,他的课程真的非常棒!

上一篇 下一篇

猜你喜欢

热点阅读