博客已经迁移至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. 987. Binary Number with Alternating Bits

    Description Given a positive integer, check whether it has alternating bits: namely, if two adjacent ...

  2. VirtWire 向客服发ticket

    1 首先需要登录自己的账户 2 点击网页的Open Ticket 3 选择要发送何种类型的ticket 4 写自己的问题,包括一个合适的主题,选择你发ticket是针对哪个vps(一个账户下可以ord ...

  3. 快速学习MarkDown语法及MarkDown拓展语法

    使用Markdown编辑器写博客 前半部分为效果后半部分为markdown格式,推荐开起两个窗口对比阅读 Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数 ...

  4. Python爱好者社区历史文章列表(每周append更新一次)

    2月22日更新:   0.Python从零开始系列连载: Python从零开始系列连载(1)——安装环境 Python从零开始系列连载(2)——jupyter的常用操作 Python从零开始系列连载( ...

  5. error LNK2001: unresolved external symbol _main

    想运行一个网上下载的opengl离屏渲染(渲染到纹理FBO)的程序,然后一直报错 error LNK2001: unresolved external symbol _main 解决了一下午终于弄明白 ...

  6. sqlserver 为表添加一个自增主键

    alter table person add id int primary key identity(1,1) not null

  7. js 事件冒泡、捕获;call()、apply()

    他们是描述事件触发时序问题的术语.事件捕获指的是从document到触发事件的那个节点,即自上而下的去触发事件.相反的,事件冒泡是自下而上的去触发事件.绑定事件方法的第三个参数,就是控制事件触发顺序是 ...

  8. 【组合&取补集】数三角形 @CQOI2014/BZOJ3505/upcexam3843

    http://exam.upc.edu.cn/problem.php?id=3843&csrf=8oK86t2oHSgi3Q4SX3qOJGeENe6pfXri 时间限制: 1 Sec 内存限 ...

  9. ASP.NET WebApi 基于分布式Session方式实现Token签名认证

    一.课程介绍 明人不说暗话,跟着阿笨一起学玩WebApi!开发提供数据的WebApi服务,最重要的是数据的安全性.那么对于我们来说,如何确保数据的安全将会是需要思考的问题.在ASP.NETWebSer ...

  10. 《2019测试面试题-上海悠悠.pdf》

    前言 面试测试岗位一般会有笔试题,笔试题考SQL和编程基础比较多,小编最近收集了多家公司的测试面试题,整理成一个文档供大家参考. 2018年下半年一直不太平,听到最多的就是"p2p暴雷&qu ...