【吴恩达机器学习笔记】十六、应用实例:图片文字识别

news2024/12/23 14:44:34

✍个人博客:https://blog.csdn.net/Newin2020?spm=1011.2415.3001.5343
📣专栏定位:为学习吴恩达机器学习视频的同学提供的随堂笔记。
📚专栏简介:在这个专栏,我将整理吴恩达机器学习视频的所有内容的笔记,方便大家参考学习。
💡专栏地址:https://blog.csdn.net/Newin2020/article/details/128125806
📝视频地址:吴恩达机器学习系列课程
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪

十六、应用实例:图片文字识别

1. 问题描述和流程图

我们希望可以通过扫描图片从提取关键字,这样当我们输入关键字时机器就能帮我们正确找到对应的照片,而不用我们煞费心思去找一些图片,接下来我们就来讲讲**照片OCR流水线(pipeline)**的处理。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1hkKbHLD-1670546701701)(吴恩达机器学习.assets/image-20211121185321954.png)]

我们首先会对图片中含有文字的地方进行检测并提取出来,然后自动将其分割成不同字符并进行分类,正如下面流程图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YHAryDEP-1670546701705)(吴恩达机器学习.assets/image-20211121185841971.png)]

2. 滑动窗口

在讲字符检测的具体方法之前,我们先看看是如何对行人进行检测的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F60Cl9OQ-1670546701706)(吴恩达机器学习.assets/image-20211121190302565.png)]

比如我们会从数据集中收集一些82×36的照片即正负样本,其中有包含行人的即y=1,其中有不包括行人的即y=0,然后给机器学习,接下来我们就可以利用滑动窗口对图片进行检测了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OCf9GBDm-1670546701708)(吴恩达机器学习.assets/image-20211121190801196.png)]

我们会用一个82×36的窗口在图片上滑动,每次滑动的距离就是步长,每次会将窗口中的信息传递给分类器去判断是1还是0,对整张图片检测完后,会换一个更大的窗口再进行滑动检测。这里要注意的是,使用更大的窗口时,要将窗口中的图片转化成82×36的再传入分类器,这样就能找出所有行人了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pDqsrlrZ-1670546701710)(吴恩达机器学习.assets/image-20211121191113504.png)]

所以,我们就可以用检测行人的方法,去检测字符。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HAnAunIM-1670546701711)(吴恩达机器学习.assets/image-20211121191236194.png)]

我们同样从数据集中找一些正负样本,然后让机器进行学习。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vc9kJ17Q-1670546701716)(吴恩达机器学习.assets/image-20211121191659832.png)]

我们在检测文字时同样也用到滑动窗口对图片进行扫描,然后得到上面黑白的图像,区域越白说明这个地方有字符的概率越大。最后在此基础上,使用放大算子,将有白色的地方周围一部分也变为白色,然后舍弃那些白色区域长宽比例与文字不配的地方,将没舍弃的地方框起来即可。接下来,我们再进行字符的分割。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SqsTlFvI-1670546701720)(吴恩达机器学习.assets/image-20211121192323391.png)]

还是同样的方法,从数据集中收集正负样本让机器学习,然后在我们上面框出来的字符中再次进行扫描,将字符分割出来。要注意的是,这里的滑动窗口是一维的。

3. 获取大量数据和人工数据

我们前面知道,一个最可靠去得到高性能机器学习系统的方法是使用一个低偏差高方差的机器学习算法,并且使用庞大的数据集去训练它,但是我们要从哪得到这么多的数据呢,这就要引入人工数据合成概念了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lBUWqWHS-1670546701721)(吴恩达机器学习.assets/image-20211121193228271-16374943488611.png)]

其中一种方法是,网上有庞大的各种各样的字体库,然后可以从这些字体中剪切一小块字体出来,粘贴到不同的背景上,最终得到一个人工合成的数据集。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tgCZPZnG-1670546701723)(吴恩达机器学习.assets/image-20211121193620134.png)]

另一种方法是,可以从真实的样本中演变出更多的样本,例如可以对其进行图像拉伸等失真操作,得到更多的数据。这种操作也可以用于语音识别应用中,我们可以将一段语音通过失真合成数据例如加一些噪音之类的,从而扩充样本。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fI4EExN1-1670546701724)(吴恩达机器学习.assets/image-20211121194315013.png)]

当然,进行失真操作时,也要选取有效的失真,比如扭曲图像,但是像上图下面那个通过增加高斯噪声扩充样本的方法不可取,只是改变了每个像素的亮度,跟原来的样本几乎没什么两样。

学完上述内容,你应该静下心好好想想,如果我要获得我现在数据十倍的数据量,我需要花费多少时间,有时候你自己思考一会或者和你的小组成员讨论一会后都会发现,其实所花费的时间并不多,可能就几天时间,但是这样做却能让你的算法性能提高很多。当然,如果你觉得自己做这些工作浪费时间的话,也可以去网上找一些廉价但质量高的网站去帮你进行一些标签标注工作。

4. 上限分析:哪部分管道的接下去做

在你日后的研究中,不希望出现的是当你花了几周或几月之后,才发现某些模块对你的算法性能提升没什么帮助,所以接下来我将为你介绍上限分析(ceiling analysis),指导你哪些模块是值得去花时间研究的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Df7mj7Fd-1670546701725)(吴恩达机器学习.assets/image-20211121201134611.png)]

我们来看看上面这个例子,如果让我们去决定每个部分该投入的精力是多少,这时候就可以引入一个数值标准,例如图像识别的准确率。

假设正常通过机器完成识别的整个系统准确率为72%,接下来我对每个部分接连进行人工处理,先人为选择文本框,再人为分割字符,最后再人为的判断字符,这样我们就分别得到89%、90%和100%的准确率。

然后,我们就可以进行上限分析,每个部分提升的性能有多少,如果提升的高例如人为处理文本框能提升17%的性能,我可以花更多精力在这部分上面,如果提升的少我就不用花太多精力再这上面了。

接下来,我们再看一个人脸识别的例子。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CsJfedy6-1670546701726)(吴恩达机器学习.assets/image-20211121201847707.png)]

我们首先将图片进行去背景处理,然后利用滑动窗口检测到人脸,再进行眼睛、鼻子和嘴巴的分割,再将这些得到的信息归总于逻辑回归分类器,得到最终的标签。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KOPrjIF4-1670546701728)(吴恩达机器学习.assets/image-20211121202156952.png)]

然后我们同样的对每个模块接连进行人工处理,得到不同的准确率,再通过上限分析,得到哪些模块值得我去花时间,例如上面的人脸处理,提升了5.9%,哪些不值得去花时间,例如去除背景,只提升了0.1%。

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

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

相关文章

【Linux】Zabbix5.0平台的搭建

文章目录项目背景视频展演一、Linux基础配置1、查看当前系统版本2、修改主机名3、修改 IP 地址4、配置防火墙5、关闭 SELINUX6、修改系统时间及时区7、配置 YUM 库方式 1方式 2二、安装apache1、安装 apache2、启动 apache 服务3、设置 httpd 服务开机启动4、查看服务状态5、防…

深度学习——制作自己的VOC图像分割数据集

1、数据集介绍 COCO数据集有80个类别,VOC数据集有20个类别。当这些数据集类别中没有自己需要的时候,就需要自己动手做自己的数据集了。 我自己在做数据集的时候主要使用到了labelme和labelImg两个工具。labelme主要是制作语义分割数据集(ImageSets,JPEGImages,SegmentationC…

kubernetes 1.18 部署 ingress-nginx

文章目录kubernetes 1.18 部署 ingress-nginx1. 下载 yaml 文件2. 安装 ingress-nginx3. 检查安装情况4. 测试验证4.1 查看ingress规则4.2 访问测试5. 其他内容kubernetes 1.18 部署 ingress-nginx 1. 下载 yaml 文件 在 GitHub 下载完成之后可以直接使用,不需要修…

[基因遗传算法]进阶之三:sko.GA的实践TSP

参考资料:《VRP问题分类》 相关文章: 《[基因遗传算法]原理思想和python代码的结合理解之(一) :单变量》 《[基因遗传算法]进阶之二:最优规划问题–多种编码方式多变量》 文章目录一. GA的用法1.1 help(sko.GA)1.2 目标函数的书写A. 单变量的书写B. 多变量的书写C. 变量的范围…

mysql中的B+树、索引跳跃扫描

普通索引 B树的叶子节点上记录的是聚簇索引(主键索引)的值。 联合索引 叶子节点中记录的是name,age两个字段以及主键id的值。 MySQL一定是遵循最左前缀匹配的,这句话在mysql8以前是正确的,没有任何毛病。但是在M…

(文章复现)7.计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度(MATLAB程序)

联系方式:2645521500 复现文章: 计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度——孙惠娟(电网技术—2020) 摘要: 为了促进多能源互补及能源低碳化,本文提出了计及电转气协同的含碳捕集与垃圾焚…

有手就会做,保姆级Jmeter分布式压测操作流程(图文并茂)

分布式压测原理 分布式压测操作 保证本机和执行机的JDK和Jmeter版本一致 配置Jmeter环境变量 配置Jmeter配置文件 上传每个执行机服务jmeter chmod -R 755 apache-jmeter-5.1.1/ 执行机配置写自己的ip 控制机配置所有执行机ip,把server.rmi.ssl.disable改成true 将本机也作…

Java-1208

JVM与Java体系结构 JVM整体结构(上图主要针对hotspot虚拟机) 类加载器: 将字节码文件加载进去,并不一定是java字节码文件,很多语言都会编译成字节码文件使用JVM 运行时数据区: 方法区和堆:使用了…

毕业设计 STM32单片机智能WiFi天气助手 - 物联网 单片机

文章目录0 前言1 设计内容2 软件设计3 关键代码4 最后0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不…

Go设计与实现--数组与切片

数组 初始化 Go语言数组的初始化是在编译期就已经执行好了。这个是初始化的代码&#xff1a; // NewArray returns a new fixed-length array Type. func NewArray(elem *Type, bound int64) *Type {if bound < 0 {base.Fatalf("NewArray: invalid bound %v", …

Security实现前后端分离

Security实现前后端分离 说明 ​ 上一篇和上上一篇我大致介绍了一下security基础使用和oauth2的一些流程&#xff0c;这里在深入了解一些相关的配置项。 ​ 首先我们在梳理一下相关概念&#xff0c;首先基本的security是负责用户认证这这一环节&#xff0c;总而言之就是用户…

PCB入门学习—原理图的绘制1(MCU部分)

目录 2.1 STM32F103VET6 MCU核心电路的绘制 学习目录 2.1 STM32F103VET6 MCU核心电路的绘制 总结&#xff1a;放置元件&#xff0c;连线&#xff0c;放置网络标号&#xff0c;更新序号。 主控放上去之后原理图图纸不太够&#xff1a;双击右边边缘&#xff0c;默认图纸大小是…

【Java小案例】从简到精完美判断年份是闰/平年和该年二月份有几天

目录前言问题描述思路分析解决方案方案一方案二方案三方案四结语前言 1、平年指阳历没有闰日或农历没有闰月的年份&#xff0c;闰年是公历中的名词&#xff0c;是为了弥补因人为历法规定造成的年度天数与地球实际公转周期的时间差而设立的&#xff0c;补上时间差的年份为闰年&a…

QA | SWCF2022 笔记:GNSS模拟赋能汽车HIL测试

2022年度SWCF卫星通信与仿真测试研讨会正在进行中&#xff0c;精彩演讲&#xff1a;GNSS模拟赋能汽车HIL测试&#xff0c;感谢大家的观看与支持&#xff01;收到一些粉丝的技术问题&#xff0c;我们汇总了热点问题并请讲师详细解答&#xff0c;在此整理分享给大家&#xff01; …

高通平台开发系列讲解(UART篇)高速串口代码流程

文章目录 一、初始化1.1、Registration with the SPS driver1.2、UART port registration二、Port open三、Port close沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇章主要介绍高通平台高速串口代码流程。 一、初始化 初始化流程: msm_serial_hs_init() ->

数据传送指令MOV、XCHG

学习过程中要重点掌握对标志寄存器的影响 数据传送类指令&#xff08;不影响标志位&#xff09; 一&#xff1a;MOV指令 先要知道图片中这几个英文表示什么 立即数&#xff08;immediaate operand&#xff09; 寄存器&#xff08;register&#xff09; 内存&#xff08;…

WEB前端大作业HTML静态网页设计旅游景点区主题——三亚旅游网页设计

家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法&#xff0c;如盒子的嵌套、浮动、margin、border、background等属性的使用&#xff0c;外部大盒子设定居中&#xff0c;内部左中右布局&#xff0c;下方横向浮动排列&#xff0c;大学学习的前端知识点和布局方式都有…

基于Java+Swing实现超级玛丽游戏

基于JavaSwing实现超级玛丽游戏一、系统介绍二、功能展示三、其他系统一、系统介绍 超级玛丽小游戏的JAVA程序&#xff0c;进入游戏后首先按空格键开始&#xff0c;利用方向键来控制的马里奥的移动&#xff0c;同时检测马里奥与场景中的障碍物和敌人的碰撞&#xff0c;并判断马…

JVM八股文,面试会被问到什么?都在这里啦 ~

目录 1、JVM内存划分 1.1、程序计数器&#xff08;Program Counter Register&#xff09; 1.2、方法区&#xff08;Method Area&#xff09; 1.3、本地方法栈&#xff08;Native Method Stacks&#xff09; 1.4、虚拟机栈&#xff08;JVM Stacks&#xff09; 1.5、Java堆…

溢出的文字省略号显示

溢出的文字省略号显示 1、单行文本溢出显示省略号 源代码 必须满足三个条件&#xff1a;white-space: nowrap; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; nowrap强制一行内显示文本(默认normal自动换行)&#xff0…