吴恩达机器学习—应用举例

2019-01-24  本文已影响0人  魏清宇

照片OCR

如何让计算机读出图片中的信息

OCR流水线

在OCR中,算法首先进行图片中的文本识别,然后进行字体分区,在进行文字识别,这一系列流程称为OCR流水线。这种过程称为机器学习流水线,每一个模块都是机器学习模块,完成一个机器学习系统的构建就要实现每一个模块的构建,每一个模块都影响着最终结果。在实际构建机器学习系统的时候,可以每个人分别完成不同模块的构建,然后整合成一个大的系统。

滑动窗口

文本检测比较困难,因为文字对应的文本框大小互不相同。

检测框 监督学习 行人检测 

以行人检测为例,先给定一部分正样例,即包含行人的样本,再给定一部分不是行人的负样例。通常训练集中样本像素大小是相同的,82*36像素。然后采用滑动窗口识别行人。

滑动创空识别行人

行人检测相比文字检测,较容易操作的原因是,行人的划定框长宽比例一般是固定的,尽管距离摄像头远近不同会造成框的大小不同,但是不同人的长宽比例是差不多的。在进行行人检测的时候,从图片左上角开始进行滑动窗口监测,然后以步长4/8像素移动窗口,通过分类算法对比每一个窗口中包含的是不是行人。当检测完整张图片以后,可以扩大窗口的大小再进行第二遍检测。由于训练集中的样本都是82*36像素的,所以在扩大窗口以后,检测出的图片都要压缩到82*36在进行比较。

文本检测

在进行文本检测的时候,也利用滑动窗口进行文字的识别,训练集同样包含正样例和负样例

文本检测

上图所示是识别出的文本,颜色的深浅就代表概率,颜色深表示不太可能是文本,而白色的区域是算法识别出来的文本。在识别出来这些文本以后,会通过扩大算子来扩大文本的范围,即在某一个像素周围5/10的像素范围内有白色的区域,则该像素也被变为白色。同时,我们还会丢弃那些长宽比例不太正常的区域,如太宽或者太高的白色区域。

字符分区

在识别出文本框以后,再使用不同的算法进行字符分区,同样使用滑动窗口算法,给定正样例和负样例,识别窗口内是否存在字符间的间隔,如果存在,说明这是两个字符之间的分区。

获取大量数据和人工数据

想要建立一个高性能的机器学习系统,就要建立一个低偏差的学习算法,并且使庞大的训练集训练。那么数据从哪里获得呢,机器学习中就有人工数据合成,但是其并不符合所有的问题且运用时要根据问题进行改进。其包含两种形式:自己创造数据,有较小的有标签训练集,然后通过某种方式扩充训练集。

人工合成数据集—从零开始

一种方法是从零开始创造样本:从不同的自体库中,用不同的字体生成字符,然后将其粘贴到不同的背景中,用不同的模糊算子或者仿射变换,仿射的意思是进行等分缩放和一些旋转操作,从而得到一个人工数据集。

第二种方法就是扩充样本。从小部分样本出发进行人工扩充。如上图所示,给定一张图片,你可以通过拉伸变形,产生很多有标签的样本。但是在进行拉伸的时候,必须要保证这些变形是合理的。在图像识别的机器学习中,这种拉伸是有效的,但是在其他类型的机器学习中,这种方法可能会造成其他类型的数据的失真。

在语音识别领域,可以通过添加不同的背景噪声,创造不同的样本。

扩充样本的注意事项

在进行样本扩充的时候,要注意分析人工加入的失真是否是合理的,这些样本是不是真的会在测试集中出现。如在语音识别中加入汽车的声音作为背景,这种情况时可能真实发生的,因此这种处理是合理的。另一方面,不要随机加入噪音或加入无意义的噪音,如在图像识别中,改变样本的亮度。

关于数据的思考

通常来说可以通过两种方式来获得更多的样本,一种是从零开始,一种是根据少部分样本进行扩充。还存在其他增加样本的方法,如人工收集数据,人工标记数据,以及众包。在选择不同的方法的时候,要仔细思实现数据扩充所需要的时间,有时仅需要很少的时间就能获得大量的数据,并且获得算法的显著提升。但是,在增加样本之前,首先要保证学习算法是低偏差的,只有低偏差的学习算法才能通过扩充数据来实现算法的提升。因此,在建立一个学习算法之后,要用学习曲线评估算法是否存在低偏差,若存在,在进行数据扩充。

算法是否低偏差——获取大量样本所需的时间

天花板分析—下一步工作的工作流(下一步应该做什么) 上限分析

在建立机器学习系统的时候,最宝贵的资源就是时间。上限分析可以帮助你分析系统中的哪一模块是值得你花时间的。

上限分析

在进行机器学习系统构建的时候,要将模型划分为几个模块,然后进行工作流分析,分析哪一模块才是真正需要花时间的。如上面的OCR图像识别中,上限分析的具体步骤为:采用某一个数值指标作为评价模型效果的指标,如这里的精确度,在计算整体模型的而精确度,这里为72%;从文本检测开始,遍历所有样本,直接给出每个样本的正确标签,然后看在文本检测完全正确的情况下,总体模型的表现如何,如上可知,整个系统的精确度达到了89%,这说明文本检测对于整体模型的提高贡献为17%;然后在进行下一步,遍历样本,人工正确标记每一个字符,然后看在字符完全正确分区的情况下,总体模型的表现如何,这里模型的准确度达到了90%,整体效果提升1%;同理可知,最后一个模块正确识别所有字符,对模型的贡献是10%。通过这种方式的分析,我们可以看出,文本检测效果对总体模型效果的影响最大,因此,在进行系统设计的时候,应该花更多的时间在提升样本检测效果的提升上。下面的图像识别也说明了上限分析的重要性:

图像识别中的上限分析

在进行机器学习系统构建的时候,时间是很重要的资源。上限分析能够帮助设计者更好的规划资源和时间,避免在不必要的模块上浪费过多的时间。

上一篇下一篇

猜你喜欢

热点阅读