应用实例:图片文字识别

  • 1. 问题描述和流水线
  • 2. 滑动窗口
  • 3. 获取大量数据:人工数据合成
  • 4. 上限分析:流水线的哪个模块最有改进价值

  学习图片文字识别的应用实例要做的事情:

  1. 展示一个复杂的机器学习系统是如何组合起来的;
  2. 介绍机器学习流水线(machine learning pipeline)的有关概念以及如何分配资源来对下一步的计划作决定;
  3. 通过介绍photo OCR(photo Optical Charater Recognition 照片光学字符识别)问题,明白如何将机器学习应用到计算机视觉中及人工数据合成的概念。

1. 问题描述和流水线

  图像文字识别应用所作的事是,从一张给定的图片中识别文字,如下图所示,这比从一份扫描文档中识别文字要复杂的多。

  为了完成这样的工作,需要采取如下步骤:

  • step1:给定某张图像,将图像扫描一遍,找出图像中的文字信息,进行文字检测(Text detection);
  • step2:重点关注这些文字区域,并对区域内文字内容进行识别。对文字区域的矩形轮廓进行字符分割(character segmention),试着将其分割成独立的字符;
  • step3:在成功将字段分割成独立字符后,运行一个分类器,输入这些可识别的字符进行字符识别(character recognition),识别出字母分别是什么。

2. 滑动窗口

  滑动窗口是一项用来从图像中抽取对象的技术。

  假使我们需要在一张图片中识别行人,首先要做的是用许多固定尺寸的图片来训练一个能够准确识别行人的模型。然后我们用之前训练识别行人的模型时所采用的图片尺寸在我们要进行行人识别的图片上进行剪裁,接着将剪裁得到的切片交给模型,让模型判断是否为行人。然后在图片上滑动剪裁区域重新进行剪裁,将新剪裁的切片也交给模型进行判断,如此循环直至将图片全部检测完。一旦完成后,我们按比例放大剪裁的区域,再以新的尺寸对图片进行剪裁,将新剪裁的切片按比例缩小至模型所采纳的尺寸,交给模型进行判断,如此循环。

  行人检测(pedestrian detection)例子的具体实现步骤,如下所示。
  第一步:应用监督学习的方法,来对一个图块进行处理,判断其是否包含有行人。假定我们要在一张图像中识别行人,首先要做的就是用许多固定尺寸的图像来训练一个能够准确识别行人的模型。

  第二步:滑动窗口检测。首先在图像中选取一个矩形块,比如 82 × 36 82\times36 82×36的绿色矩形块,把这个图块传递给我们的分类器来检测图块中是否有行人,依次移动我们的矩形块进行分类判断。

  矩形块移动的距离是一个参数,一般称之为步长(或滑动参数),如果一次移动一个像素,那么步长就为1。一般情况下,1这个步长表现最好,但计算成本较高,将步长设为4像素、8像素比较常见。全部检测完后,按比例放大矩形块,再以新的尺寸对图像进行剪裁,并将其按比例缩小至 82 × 36 82\times36 82×36,传递给模型判断,如此循环。

  经过一系列过程后,我们的算法便能够检测出图中各个地方是否出现行人,如下图所示。

  滑动窗口技术也被用于文字识别(text recognition),文字识别例子的具体实现步骤,如下所示。
  第一步:应用监督学习的方法,用许多固定尺寸的图像来训练模型能够区分字符和非字符。

  第二步:滑动窗口检测。在原始图像上运行算法,使用一个固定比例的滑动窗口分类器识别字符。完成字符识别后,我们将识别得出的区域进行一些扩展,然后将重叠区域进行合并。接着我们以宽高比作为过滤条件来过滤掉高度比宽度更大的区域(认为单词长度比高度大),红色的框是认为的文字区域,绿色的叉是被过滤掉的区域。

  第三步:训练一个模型来完成将文字分割成一个个字符的任务,需要的训练集为单个字符的图片和两个相连字符之间的图片。使用监督学习算法,通过找到的一些正样本和负样本训练分类器以决定图块中的两个字符间是否有一条分界线。

  第四步:模型训练完后,使用滑动窗口技术来进行字符识别,判断是否需要在矩形中间画一条线分开这两个字符。

  第五步:利用神经网络、支持向量机或者逻辑回归算法训练一个分类器进行字符分类,通过输入分割好的单个字母图像,然后将字母分类为26个字母A-Z中的一个。

3. 获取大量数据:人工数据合成

  一个最可靠的得到高性能机器学习系统的方法是使用一个低偏差机器学习算法,并且使用庞大的训练集去训练它,那么这个庞大的训练集怎么获得呢?可以利用人工数据合成技术。
  人工数据合成主要有两种形式:第一种是自己创造数据;第二种是我们已有小的标签数据集,然后以某种方式扩充训练集。
  以我们的文字识别应用为例,假设输入一张图像数据,想识别出是什么字母,怎样去获取一个更大的训练集呢?
  一种方法是我们可以去字体网站下载各种字体,然后利用这些不同的字体配上各种不同的随机背景图片创造出一些用于训练的样本,再利用一点模糊算子或者仿射变换,这让我们能够获得一个无限大的训练集。
  另一种方法是使用现有的样本生成数据,来扩充训练集。利用已有的数据,然后对其进行修改,例如将已有的字符图片进行一些扭曲、旋转、模糊处理。在引扭曲的方法中,有一点需要注意,及所选择要引入的干扰或者变形要能代表我们可能会在测试集中看到的噪声源或干扰项。只要我们认为实际数据有可能和经过这样处理后的数据类似,我们便可以用这样的方法来创造大量的数据。

  有关获得更多数据的几种方法

  1. 人工数据合成;
  2. 自己收集数据或者添加标签;
  3. 众包(在网站上以相对低廉的价格雇佣很多人为自己标记数据)。

4. 上限分析:流水线的哪个模块最有改进价值

  在机器学习的应用中,我们通常需要通过几个步骤才能进行最终的预测,我们如何能够知道哪一部分最值得我们花时间和精力去改善呢?这个问题可以通过上限分析来回答。
  为了决定如何开发这个系统,一个有效的方法是对学习系统使用一个数值评价度量。假如我们用字符准确度作为这个度量,给定一个测试样本图像,那么这个数值就表示我们对测试图像中的文本识别正确的比例。
  在文字识别应用中,流程图如下所示。

  流程图中每一部分的输出都是下一部分的输入。上限分析中,我们选取一部分,手工提供100%正确的输出结果,然后看应用的整体效果提升了多少。
  假使我们的例子中总体效果为72%的正确率,如果我们令文字检测部分输出的结果100%正确,发现系统的总体效果从72%提高到了89%,这意味着我们很可能会希望投入时间精力来提高我们的文字检测部分。
  接着我们手动选择数据,让字符分割输出的结果100%正确,发现系统的总体效果只提升了1%,这意味着我们的字符分割部分可能已经足够好了。
  最后我们手工选择数据,让字符分类输出的结果100%正确,系统的总体效果又提升了10%,这意味着我们可能也会应该投入更多的时间和精力来提高应用的总体表现。
  上限分析的一个好处就是,我们明白了如果对每一个模块进行改善,它们各自的上升空间是多大,我们是否需要投入大量精力去改善此模块。

吴恩达机器学习(十五)—— 应用实例:图片文字识别相关推荐

  1. 吴恩达机器学习与深度学习作业目录 [图片已修复]

    python3.6 (一) 吴恩达机器学习作业目录 1 吴恩达机器学习作业Python实现(一):线性回归 2 吴恩达机器学习作业Python实现(二):logistic回归 3 吴恩达机器学习作业P ...

  2. 吴恩达机器学习(五)正则化(解决过拟合问题)

    目录 0. 前言 1. 正则化(Regularization) 2. 线性回归中的正则化 3. 逻辑回归中的正则化 学习完吴恩达老师机器学习课程的正则化,简单的做个笔记.文中部分描述属于个人消化后的理 ...

  3. 吴恩达机器学习笔记61-应用实例:图片文字识别(Application Example: Photo OCR)【完结】...

    最后一章内容,主要是OCR的实例,很多都是和经验或者实际应用有关:看完了,总之,善始善终,继续加油!! 一.图像识别(店名识别)的步骤: 图像文字识别应用所作的事是,从一张给定的图片中识别文字.这比从 ...

  4. matlab版吴恩达机器学习第五章笔记

    机器学习matlab操作基础 1.基本操作 2.移动数据 3.计算数据 4.绘图数据 5.控制语句:for,while,if语句 6.向量化 1.基本操作 参考视频: 5 - 1 - Basic Op ...

  5. 西瓜书+实战+吴恩达机器学习(五)监督学习之线性判别分析 Linear Discriminant Analysis

    文章目录 0. 前言 1. 线性判别分析参数求解方法 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔,我会非常开心的~ 0. 前言 线性判别分析LDA的思想非常朴素:给定数据集,设法将样例投影 ...

  6. 吴恩达机器学习(五)梯度下降

    文章目录 1.梯度下降 2.只有一个参数的最小化函数 1.梯度下降 梯度下降是很常用的算法,它不仅被用在线性回归上,还被广泛应用于机器学习的众多领域.我们将使用梯度下降法最小化其他函数,而不仅仅是最小 ...

  7. 吴恩达机器学习笔记五之神经网络

    本节目录: 1.非线性假设 2. 神经元和大脑 3. 模型表示 4. 特征的直观理解 5. 样本的直观理解 6. 多类分类 1 非线性假设 假设我们希望训练一个模型来识别视觉对象(例如识别一张图片上是 ...

  8. 吴恩达机器学习第五回——支持向量机

    认识SVM 通过逻辑回归引入SVM 回顾逻辑回归: 在SVM中对代价函数进行改变 : 图像中的红色曲线cost函数代替了原来的log函数,并且将正则化部分的λ变为C,对应的代价函数变为: 对比于逻辑回 ...

  9. 吴恩达机器学习总结五:单变量线性回归实战

    线性回归实战总结: 单变量线性回归: 1.加载和查看数据(准备工作) data = load('ex1data1.txt'); x=data(:,1); y=data(:,2); plot(x,y,' ...

  10. (英文版)吴恩达机器学习第五周笔记

    Neural Network:Learning 这是我在coursera上看Andrew Ng的machine learning做的英文版笔记,可以帮助学英语的小伙伴熟悉熟悉一些专业术语在英文中的表达 ...

最新文章

  1. 在MyEclipse中使用maven创建web项目
  2. 采购订单检查/保存BADI使用
  3. JavaFX控制器:设置按钮点击事件代码示例
  4. 2018年第九届蓝桥杯C/C++ C组国赛 —— 第二题:最大乘积
  5. sublime text3安装
  6. 浅谈Web前端安全策略xss和csrf,及又该如何预防?
  7. junit测试方法_JUnit测试方法订购
  8. PAT乙级 1061 判断题
  9. fortran95 文件读写等操作的字段参数总结
  10. 【Java】日期格式化的三种方式
  11. 针对2020年市面上短信供应商的对比(8家SMS供应商对比)
  12. 1688API item_search_img - 拍立淘搜索淘宝商品
  13. html如何给table加水印,如何在Excel表格中添加水印
  14. 上传图片转为base64码再以url形式传值
  15. [基本功]分类模型评价标准
  16. python EOFError: marshal data too short问题处理
  17. GridView数据库分页+自定义分页导航(二):自定义分页导航。首页、上一页、下一页、尾页和跳转
  18. 这个618买到假货了怎么办?
  19. 2017年全国大学生电子设计竞赛河北省获奖名单
  20. java搭建o2o平台_java版 spring cloud+mybatis 构建 b2b2c o2o 多租户电子商务平台

热门文章

  1. 简约纯色卡通蝴蝶Mac动态壁纸
  2. 信息安全等级测评师考试重点梳理
  3. 学习LSM(Linux security module)之四:一个基于LSM的简单沙箱的设计与实现
  4. VCS仿真遇到【CNST-CIF】constraints inconsistency failure如何解决
  5. UE4C++设置Actor与父Actor的相对位置和相对旋转
  6. itext使用字体问题
  7. 3d slicer matlab,使用3D Slicer进行颅骨去除
  8. 写给20岁读者的一些人生建议
  9. Thinkphp5.1实现发送邮箱验证码
  10. 时间最优轨迹规划(3-5-3次多项式)