您的位置:首页 > 其它

Machine Learning(Andrew)Week10(下)

2014-05-16 12:43 225 查看

应用举例:图像识别

图片文字识别介绍

给定一张图片,从中识别文字



流程:

图片—>文字检测—>字符分割—>字符识别

文字检测:要检测出图片中的文字(如上图,红色框出的字)

字符分割:把检测出的文字按每个字母分割



字符识别:识别每个字母是什么



行人识别

从图片中识别行人

上述中文字检测时,我们用红色框把文字找出来,用的就是滑动窗口技术。滑动窗口是一种利用一个形状(一般矩形)扫描图片,提取特定物体的技术。滑动窗口并不是一下子就圈出文字,而是在图片中滑动,直到扫出文字,才停下来,框出文字,再继续滑动。

同样,行人检测也要用滑动窗口技术



可以看出识别一幅图片中的行人,用的滑动窗口不止一个且大小不一。

用监督的方式进行行人识别

首先需要先学习什么是行人。用像素为82*36的若干行人图片和其他物体图片来训练模型,区分行人和非行人。

 


在图像上提取行人信息时,先用一个较小的窗口,按照一定的步幅扫描图片。

扫描起点:



向右按一个步长滑动



 



滑动完一行,向下一行。



扫描完整张图片后,换一个大一点的窗口重复扫描。



最终把所有行人都扫描出来。这就是监督学习的方式识别行人。

 


文字识别

首先也要用监督的方式训练模型区分什么是字符。


文字检测:

接着也用滑动窗口技术,用不同大小的窗口扫描图片最终把所有的文字都扫描出来:


如上图所示,将扫描结果中的文字用白色表示,非文字用黑色表示。接着需要将重叠的区域合并,根据过滤条件过滤一些区域(过滤条件可以是:文字总是长度值比高度值大)。所以,过滤完成后,认为下图中红色框中的是文字:



字符分割:

文字检测完成后需要将文字分割为单独的字符,然后再识别所有的字符,最后输出识别后的文字。

这里也要训练模型来分割字符。训练集中的正实例是含两个字符的一部分及它们之间的相连部分构成的图片。负实例是由单个字符或者空白图片构成。


训练完成后,用滑动窗口技术进行字符提取


 



如下图蓝色分割线,就将一个一个字符分割开了。

 


字符识别

字符识别在前面作业Programming Exercise 4有涉及,用的是神经网络来训练模型。

Getting lots of data:Artificial data synthesis

在Hsuan-Tien Lin十三讲说到data hinting这里也是这个意思。

如果模型是高bias,就需要大量的数据,但是如果没有办法直接获取更多数据,就要用已有的数据进行“人工创造”

人工数据的合成

(1)方法一

假设我们需要的真实数据是这样的:



数据不够时,可以从一些网站下载一些字体



然后从不同角度截取,比如上图中第二行蓝色框的cd。然后随机添加和真实数据类似的背景,合成数据 


(2)方法二

对已有数据进行变形:扭曲,旋转,平移,模糊,放大缩小等


 如果是音频数据,则可以增加一些嘈杂的人群讲话的声音或者机器的声音;还可以用坏的手机播放,制造出有噪声的声音。

变形的合成数据也要在测试集里出现。数据不要增加随机或无意义的噪声:


如上图,合成的数据和原来的没有明显不一样。

讨论:增加数据

(1)通过学习曲线确定模型高bias,且通过增加特征(如果是神经网络就是增加隐藏单元)获得了一个bias小一点的模型。

(2)如何获取10倍的数据

-人工合成

-自己收集/贴标签

-“Crow source”众包

上限分析

上限分析:数据流中的哪一步值得做的更好

机器学习的过程像流水线一样,一步接一步,每一步都会产生一些误差。如上面的文字识别流程:图片—>文字检测—>字符分割—>字符识别

流程上一步的输出是下一步的输入。模型的整体误差,是由每一步的误差组合构成(不是线性误差和),我们需要分析,哪一步对整体误差影响最大,然后针对这一步多花时间和精力调整好。上限分析,就是人为让某一步的输出没有误差,这样下一步的输入就是完美的,看整体精确度提高了多少。


如上图所示,整体的准确度是72%。如果在文字检测阶段,让输出没有误差,总体准确度提高了17%。接着再人工让字符切割阶段的输出没有误差,总体准确度又提高了1%。让字符识别部分没有误差,准确度又提高了10%。从这里可以看出,文字检测阶段对误差的影响最大,字符识别次之。所以,需要对文字检测进行优化。

再看一个人脸识别的例子


可以从右下角看出,Preprocess remove background需要我们特别注意。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: