[机器学习笔记]Note16--应用示例:图像文字识别

继续是机器学习课程的笔记,本节课是最后一节内容了,主要是介绍一个应该–图中文字的识别。

问题描述和流程图

图像文字识别应用就是从给定的图片中识别文字。这比从一份扫描文档中识别文字要复杂得多。一个例子图片如下所示:

这里写图片描述

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

  1. 文字检测(Text detection)——将图片上的文字和其他环境对象分离开来
  2. 字符切分(Character segmentation)——将文字分割成一个个单一的字符
  3. 字符分类(Character classification)——确定每一个字符是什么

可以用一个任务流程图来表达这个问题,每一项任务可以由一个单独的小队来负责解决,如下所示,这也就是一个流水线的概念了。

这里写图片描述

滑动窗口

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

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

一旦完成后,我们按比例放大剪裁的区域,再以新的尺寸对图片进行剪裁,将新剪裁的切片按比例缩小至模型所采纳的尺寸,交给模型进行判断,如此循环。

这里写图片描述

滑动窗口技术也被用于文字识别,首先训练模型能够区分字符与非字符,然后,运用滑动窗口技术识别字符,一旦完成了字符的识别,我们将识别得出的区域进行一些扩展,然后将重叠的区域进行合并。接着我们以宽高比作为过滤条件,过滤掉高度比宽度更大的区域(认为单词的长度通常比高度要大)。下图中绿色的区域是经过这些步骤后被认为是文字的区域,而红色的区域是被忽略的。

这里写图片描述

以上就是文字检测阶段。

下一步就是训练一个模型来完成字符分割的任务,需要的训练集由单个字符的图片和两个相连字符之间的图片来训练模型。如下所示:

这里写图片描述

模型训练完后,我们仍然是使用滑动窗口技术来进行文字识别,如下所示。

这里写图片描述

这就是字符切割的阶段了。

最后就是进行字符分类的步骤。这里可以使用如神经网络、SVM或者逻辑回归算法训练一个分类器即可。

获得大量数据

如果我们的模型是过拟合的,那么获得更多的数据用于训练模型,是能够有更好的效果的。问题是我们怎么获得数据,数据不总是可以直接获得的,有可能还需要人工地创造一些数据。

以我们的文字识别应用为例,我们在字体网站下载各种字体,然后利用这些不同的字体配上各种不同的随机背景图片创造出一些用于训练的实例,这让我们能够获得一个无限大的训练集。这是从零开始创造实例

另一种方法是,利用已有的数据,然后对其进行修改,如将已有的字符图片进行一些扭曲、旋转、模糊处理。只有我们认为实际数据有可能和经过这样处理后的数据类似,我们便可以同这样的方法来创造大量的数据。

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

  1. 人工数据合成
  2. 手动收集、标记数据
  3. 众包

上限分析

在机器学习的应用中,我们通常需要通过几个步骤才能进行最终的预测,我们如何能够知道哪一部分最值得我们花时间和精力去改善呢?这个问题可以通过上限分析来回答。

回到我们的文字识别应用中,我们的流程图如下:

![此处输入图片的描述][2]

流程图中每一部分的输出都是下一部分的输入,上限分析中,我们选取一部分,手工提供100%正确的输出结果,然后看应用的整理效果提升了多少。

假设我们的例子中总体效果是72%的正确率。

如果我们令文字侦测部分输出的结果100%正确,发现系统的总体效果从72%提高到了89%。这意味着我们很可能会希望投入时间精力来提高我们的文字侦测部分。

接着我们手动选择数据,让字符切分输出的结果100%正确,发现系统的总体效果只提升了1%,这意味着,我们的字符切分部分可能已经足够好了。

最后我们手工选择数据,让字符分类输出的结果 100%正确,系统的总体效果又提升了10%,这意味着我们可能也会应该投入更多的时间和精力来提高应用的总体表现。

这里写图片描述

小结

最后一节课内容介绍了一个机器学习的应用示例–图像文字的识别,同时讲了滑动窗口技术以及如何获得数据,最后就是介绍了上限分析来确定需要集中时间和精力解决的步骤是哪一步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/409034.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java中文处理_Java的中文乱码处理

1,设置编译器的编码(Eclipse)、Window >preferences>Workspace> Text file encoding下的Other设置为UTF-8设置jsp页面的编码(Eclipse)Window >preferences>Web> JSPFile>Encoding设置为UTF-82.从前端获取的数据乱码(1)request.setCharacterEnc…

[线性代数]Note2--矩阵消元

第二节介绍矩阵消元的知识. 消元法 首先是给出一个例子来说明消元法的使用,例子如下所示: ⎧⎩⎨x2yz23x8yz124yz2\begin{cases} x+2y+z=2 \\ 3x+8y+z=12 \\4y+z=2 \end{cases}用矩阵表示就是 A⎡⎣⎢130284111⎤⎦⎥b⎡⎣⎢2122⎤⎦⎥A = \left[ \be…

error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup

一、问题描述: error LNK2019: unresolved external symbol _WinMain16 referenced in function ___tmainCRTStartup 二、产生原因: 1. 你用vc建了一个控制台程序,它的入口函数应该是main, 而你使用了WinMain.2. 你用vc打开了一个.c/.cpp 文…

python小老鼠编程_邯郸pythonnot学习费用多少

邯郸pythonnot学习费用多少更新时间:2020-08-02 12:49:04注意:如果出现错误,可能是因为安装时未勾选AddPython3.5toPATH选项,此时卸载Python后重新安装时勾选AddPython3.5toPATH选项即可。1.2Mac中安装Python3Mac系统中自带了Pyth…

[线性代数]Note3--乘法和逆矩阵

继续是线性代数的学习笔记,第三节课乘法和逆矩阵 矩阵乘法 首先是对于矩阵相乘,如矩阵A和B相乘得到C,即A*BC;那么如果要得到矩阵C的一个元素,如c34,其求解如下所示: c34a31∗b14a32∗b24…∑k1na3kbk4c_{34} = a_{3…

数学/sgu 130 Circle

题意 一个圆上有2k点,请输出点于点之间连线使得所分区域块数最小的方案总数以及区域数 分析 2k个点最少能把平面分成k1的区域,易证; 至于方案数,利用递推和乘法原理 令f[i]表示2i个点时的方案数,f[0]f[1]1,则f[i]sigma…

java多线程调用nsq消费_spark-streaming连接消费nsq

spark-streaming连接消费nsq目的使用 NSQ作为消息流使用 spark-streaming 进行消费对数据进行清洗后,保存到hive仓库中连接方案1、编写Spark Streaming Custom Receivers(spark-streaming 自定义接收器),详细见文档2、使用 nsq 官方提供的Java程序连接包…

[线性代数]Note4--A的LU分解转置-置换-向量空间

继续是线性代数的学习笔记,这次的笔记包含第四、五、六节三节课的内容。 第四节课是介绍A的LU分解。A的LU分解是指将矩阵A分解成一个下三角矩阵和一个上三角矩阵的乘积。其主要应用在数值分析中,用来解线性方程、求反矩阵或者计算行列式。 第五节课是介…

java:自定义数据库连接池

http://idata.blog.51cto.com/4581576/1159243转载于:https://www.cnblogs.com/fengjian/archive/2013/03/22/2975366.html

(转)C结构体之位域(位段)

转载自C结构体之位域(位段) 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C…

java为何重复调用方法_通过反射调用Java中的getter:重复调用它的最快方法是什么(在性能和可伸缩性方面)?...

小编典典您可以使用MethodHandle。其Javadoc写道:使用Lookup API中的工厂方法,可以将Core ReflectionAPI对象表示的任何类成员转换为行为等效的方法句柄。例如,可以使用Lookup.unreflect将反射方法转换为方法句柄。生成的方法句柄通常提供对底…

表单提交中get 和post方式的区别

两者的区别需要通过提交表单后才看得出来,主要是在数据发送方式和接收方式上 1.在客户端,Get方式在通过URL提交数据,就是把表单内的元素,转化成url参数提交,比如你有一个页面index.html,这个页面有一个文本…

linux mysql5.7.11_在Linux中以命令行方式安装 MySQL 5.7.11 for Linux Generic 二进制版本

转至: http://www.cnblogs.com/cyberniuniu/p/5273961.htmlMySQL 目前的最新版本是 5.7.11,在 Linux 下提供特定发行版安装包(如 .rpm)以及二进制通用版安装包(.tar.gz)。一般情况下,很多项目都倾向于采用二进制通用安装包形式来进行安装配置&#xff0c…

论文阅读(2)--Picking Deep Filter Responses for Fine-grained Image Recognition

这次阅读的文章是Picking Deep Filter Responses for Fine-grained Image Recognition,这篇文章是来自上海交通大学Xiaopeng Zhang等人的工作,该文章提出了一种对深度网络中的filter进行挑选的方法,基于挑选的filter的结果构建复杂特征表达。…