博客已经迁移至Marcovaldo’s blog (http://marcovaldong.github.io/)

刚刚完毕了Cousera上Machine Learning的最后一周课程。这周介绍了machine learning的一个应用:photo OCR(optimal character recognition,光学字符识别),以下将笔记整理在以下。

Photo OCR

Problem Description and Pipeline

最后几小节介绍机器学习的一个应用——photo OCR(optimal character recognition。光学字符识别),这一样例的内容也能够应用于计算机视觉(computor vision)。photo OCR要解决的问题是怎样让计算机识别出图像中的文字。给定一张图像,photo OCR首先要做的是确定当中文字的位置,例如以下图所看到的:

然后将当中的文字正确转录下来。

photo OCR仍是机器学习的难点之中的一个。它能够帮助盲人“看到”面前的事物,能够帮助汽车自己主动识别道路上的物体。促进自己主动驾驶技术的实现。

为了实现photo OCR,我们要做的几个过程例如以下:

- 文本探測(text detection),确定文本在图像中的位置

- 字符分割(character segmentation),将含有文本的图像片段分割出来,并按一个一个字符切分

- 字符识别(character classification),将图像中的字符准确的识别出来

当然实际的操作可能要复杂得多,但整体上就是这几步,这被称为photo OCR pipeline

Sliding Windows

这一小节介绍photo OCR的一个细节——滑动窗体(sliding windows)。我们使用的路人探測(pedestrain detection)的样例来引出滑动窗体,下图中含有多个路人,随着路人与相机距离的大小。代表路人的矩形尺寸不同,但原理一样。

我们在路人探測中使用监督式学习,我们的数据是一个个图像片段,尺寸为82×36(实际尺寸依据须要选择)。下图给出了分类为y=1的positive example和分类为y=0的negative example。

如果有这样的图像片段数千份。那我们就能够从中训练到一个hypothesis,用于推断新的图像片段中是否含有路人。我们拿上面的那张图像做test set,找出当中的路人。我们从图像的最最左上角选择一个尺寸为82×36的图像片段,成为窗体。推断当中是否有路人。

然后向右滑动窗体,假定步长为4(当然,步长为1精确度最高,但速度下降,依据实际情况调整)。每滑动一次推断一次。滑动最左側之后。再从最左側向下滑动一个步长再向右滑动。直至滑动到整个图像的最最右下角,就扫描完了整张图像。

以下回到photo OCR,此问题的positive examples和negative examples例如以下图所看到的。

然后使用上面讲的滑动窗体去扫描整个图像。找到文本所在的图像片段。

上图是整个过程的一个示意图。以下两张图像中的白色部分相应原始图像中的文本位置,当中右面这张是对左面那张的整合处理(大概应该就是将作图中挨着的白色片段整合成一大块)。接下来是字符分割,我们仍然使用滑动窗体。下图给出了positive examples和negative examples。注意,我们要的positive examples是这样的恰优点在两个字符中间的这样的位置,在这样的位置我们才干准确将字符切分开来。

最后一步是进行字符的识别:

Getting Lots of Data and Artificial Data

这一小节介绍人工数据合成(artificial data synthesis)。下图给出了实际遇到的数据,我们应该能够从这些图像(这里我们使用的都是灰度图像,比彩色的更好一些)片段中准确识别出字符。

另外字符可能会使用多种不同的字体,那怎样得到很多其它的训练样本呢?我们能够将不同字体的不同字符随机的粘贴到不同的背景上得到人工合成的训练样本,以下第二张图为示意。

通过这样的方法,我们能够获得大量与原始数据非常类似的合成数据。

第二种方法是通过将原有的图像片段做扭曲处理来得到新的训练样本。详细例如以下图所看到的:

视频还给出了语音识别通过引入扭曲来人工合成数据的样例,通过对原始录音(original audio)处理,得到以下合成数据:夹杂电话信号不好的杂音的录音(audio on bad cellphone connection)、嘈杂环境下的录音(audio on crowd background)、机器运转环境下的录音(audio on machinery background)。

最后,我们说全部的合成数据应该都是基于原始数据(即原始数据中必须包括有效信息)的,不能向数据集中加入没有意义的噪声。

在添加很多其它训练数据之前。我们应该确保模型是low bias的,由于仅仅有这样的模型才干通过增大training set来改善其性能。

比如,对于神经网络,我们能够通过添加特征数量,模型层数来确保模型是low bias的,然后再增大training set。

视频介绍的最后一个问题是获得数据的时间开销,在实际应用中,我们应该将其作为一个成本来考虑。详细就不写了。(我认为吧。没啥可写的。给出一张截图)

Ceiling Analysis: What Part of the Pipeline to Work on Next

这一小节介绍上限分析(ceiling analysis)。上限分析能够帮助我们分析整个pipeline的哪一步更值得我们去优化,以获得更好的性能。如果我们在test set上測试我们的模型,得到72%的accuracy。第一步。我们用人工去做text detection部分的工作(此时,该部分的accuracy达到100%),此时模型的accuracy提升到89%。第二步,我们再用人工去完毕character segmentation部分的工作(此时该部分的accuracy也达到100%)。然后模型的accuracy达到90%。第三步。我们用人工去完毕character recognition的工作。终于模型的accuracy达到100%。我们得到以下这张表:

分析上面这张表,我们发现通过对pipeline中三个步骤的提升,我们能够分别将模型的accuracy添加17%、1%、10%。前面我们对三个步骤的提升已经达到上限(三个步骤的性能均分别优化到了100%,不能更好),由此得到的三组数据也是上限,这就是上限分析。由此,我们知道对text detection和character recognition两个步骤的优化能够更大程度的改善整个pipeline的性能。所以我们要优先考虑优化这两个步骤。

下图给出了面部识别的pipeline,供我们加深理解。

对该pipeline的上限分析见下图,从这张图我们知道最值得优化的步骤是face detection。

Conclusion

Summary and Thank you

最后一小节。总结了这门课程的全部内容,见下图。

认真学完了这门课程,我们就了解了机器学习的一些基本算法和一些技巧,算是勉强入了门。接下来还有很多其它的东西等待着我们去学习。

Machine Learning第十一周笔记:photo OCR的更多相关文章

  1. Machine Learning第十周笔记:大规模机器学习

    博客已经迁移到Marcovaldo's blog (http://marcovaldong.github.io/) 刚刚完毕了Andrew Ng在Cousera上的Machine Learning的第 ...

  2. 《Machine Learning Yearing》读书笔记

    ——深度学习的建模.调参思路整合. 写在前面 最近偶尔从师兄那里获取到了吴恩达教授的新书<Machine Learning Yearing>(手稿),该书主要分享了神经网络建模.训练.调节 ...

  3. Machine Learning - 第6周(Advice for Applying Machine Learning、Machine Learning System Design)

    In Week 6, you will be learning about systematically improving your learning algorithm. The videos f ...

  4. Machine Learning - 第3周(Logistic Regression、Regularization)

    Logistic regression is a method for classifying data into discrete outcomes. For example, we might u ...

  5. Machine Learning – 第2周(Linear Regression with Multiple Variables、Octave/Matlab Tutorial)

    Machine Learning – Coursera Octave for Microsoft Windows GNU Octave官网 GNU Octave帮助文档 (有900页的pdf版本) O ...

  6. 《Structuring Machine Learning Projects》课堂笔记

    Lesson 3 Structuring Machine Learning Projects 这篇文章其实是 Coursera 上吴恩达老师的深度学习专业课程的第三门课程的课程笔记. 参考了其他人的笔 ...

  7. Machine Learning 第一二周

    # ML week 1 2 一.关于machine learning的名词 学习 从无数数据提供的E:experience中找到一个函数使得得到T:task后能够得到P:prediction 监督学习 ...

  8. Coursera 机器学习 第6章(下) Machine Learning System Design 学习笔记

    Machine Learning System Design下面会讨论机器学习系统的设计.分析在设计复杂机器学习系统时将会遇到的主要问题,给出如何巧妙构造一个复杂的机器学习系统的建议.6.4 Buil ...

  9. Machine Learning - 第7周(Support Vector Machines)

    SVMs are considered by many to be the most powerful 'black box' learning algorithm, and by posing构建 ...

随机推荐

  1. [iOS]视图与UIVIew

     1.UIView以及各控件间的关系: 2.视图的层次结构 一般来说一个应用中只有一个UIWindow.

  2. 关于@RestController注解(转发)

    知识点:@RestController注解相当于@ResponseBody + @Controller合在一起的作用. 1) 如果只是使用@RestController注解Controller,则Co ...

  3. [Python]Marshmallow 代码

    schema.dump和schema.load schema.dump()方法返回一个MarshResult的对象,marshmallow官方API说dump和load方法返回的都是dict对象,但查 ...

  4. 潭州课堂25班:Ph201805201 django 项目 第十一课 手机号是否存在,短信验证分析 (课堂笔记)

    判断手机号是否注册功能实现 1.分析 请求方法:GET url定义:/mobiles/(?P<mobile>1[3-9]\d{9})/ 请求参数:url路径参数 参数 类型 前端是否必须传 ...

  5. Stack [NOIP模拟] [组合数学经典]

    Description栈是常用的一种数据结构,有n个元素在栈顶端一侧等待进栈,栈顶端另一侧是出栈序列.你已经知道栈的操作有两种: push 和 pop ,前者是将一个元素进栈,后者是将栈顶元素弹出.现 ...

  6. iOS自动布局的学习

    Autolayout: 最重要的两个概念: 约束:对控件位置和大小的限定条件 参照:对控件设置的约束是相对于哪一个视图而言的 自动布局的核心计算公式: obj1.property1 =(obj2.pr ...

  7. asp.net缓存 (转)

    原文地址 http://www.cnblogs.com/knowledgesea/archive/2012/07/10/2530436.html 谢谢 一.缓存概念,缓存的好处.类型.         ...

  8. windows service卸载

    .使用组合键win+r 调出服务页面 2.查看想要删除的服务的名称:如: 3.执行删除操作

  9. JAVA自学笔记24

    JAVA自学笔记24 1.能使用同步代码块就使用同步代码块,除非锁对象是this,就可以考虑使用同步方法.静态方法的锁是类的字节码对象. 2.JDK5新特性 1)接口Lock void Lock()/ ...

  10. hdu1847 Good Luck in CET-4 Everybody!(巴什博弈)

    http://acm.hdu.edu.cn/showproblem.php?pid=1847 从1开始枚举情况,找规律.1先手胜2先手胜3先手败4先手胜5先手胜... n只要能转移到先手败,就可以实现 ...