模板匹配算法:基于模板相关性匹配的手写数字识别

 1 前言

        得益于硬件技术的发展,基于深度学习的各种识别方法如火如荼,在各种应用场景中都取得很好的效果。本人入行深度学习领域若干年,做过很多项目的工程化评估,对于神经网络是如何工作的也解释不清楚,只是知道这样做是可行的。有的时候,给客户介绍说,做某目标识别算法,如果采用深度学习的方法可以做到多高多高的性能,客户有时候会反问道:那么相比于传统方法,深度学习有多少性能提高?我通常无法直接回答这个问题,虽然我知道深度学习的方法肯定会比传统方法更好,但是我没有做相应的实验,没有对比,没有证据。我只好说,神经网络是黑盒模型,虽然不知道底层逻辑是如何运作的,但是有理论证明神经网络可以拟合任意函数,所以神经网络要比传统方法更强大。客户似懂未懂地点点头,不再说话,我知道他对这个回答并不满意。对于他这种级别的人物,掌握着项目的命运,对具体的技术细节不关心,只关心最终的效果。后来给另一个客户做算法性能评估,我使用神经网络算法进行性能评估,最后性能并不理想,精度只有80%左右,我跟客户说,神经网络模型在这种类型的信号识别精度不是很高,客户说,没关系,只要证明神经网络算法比传统方法好就行了,然后让我做证明去了。经过一些列事情之后,我在终于开始重视起来传统的方法来。

2 理论基础

        在没有神经网络之前,人们是如何实现图片的分类和识别的呢?比如说,一个陌生人,你从来没见过他,但是给你一张他的照片,你能否从茫茫人海中认出他来?我想,只要你不是脸盲的话,你是有很大概率能认出来的。当然,能不能认出来,辨认的难度如何,还跟照片和本人的匹配程度有关。如果给我一张照片,让我从一群人中去找出照片中的人,我会拿出照片一个一个地去比对,然后给匹配程度打分,最后选出得分最高的人,那个人就是照片中的人。这种方法就是模板匹配,匹配程度就是相关性。用作模板的就是那张照片,被用来比对的人就是样本,那么相关性是什么,我们通常用相关系数来评估相关性。下面以手写数字识别为例,介绍模板相关匹配算法。

        手写数字识别是各种人工智能算法教程的入门级别例子。手写数字有一个数据集,叫MNIST数据集,该数据集有60000张训练样本,有10000张测试样本,包含0-9一共10个手写体数字图片,图片的大小为28*28像素,如下图所示。

        这里使用的模板匹配算法,是基于图片的相关性。在概率论中,相关系数是通过无量纲化协方差描述的:

\rho _{XY}=\frac{cov(X,Y)}{\sigma _{X}\sigma _{Y}}

设(X,Y)是二维随机变量,两个分量的方差都存在,则称\rho _{XY}为X与Y的相关系数,其中\sigma _{X}=\sqrt{D(X)}

\sigma _{Y}=\sqrt{D(Y)}

cov(X,Y)=E\left \{ \left [ X-E(X) \right ] \left [ Y-E(Y) \right ]\right \}

D(X),D(Y)为方差,E(X),E(Y)为期望,cov(X,Y)就是协方差。相关系数是一个取值范围在-1到1之间的数,如果两个随机变量正相关,那么相关系数为1,如果两个随机变量负相关,那么相关系数为-1,如果两个随机变量不相关,则相关系数为0。

3 算法实现

        手写数字识别问题,其实就是通过计算模板图片与待识别样本图片的相关系数问题。对于二维的图片,可以看作是二维的矩阵,其相关系数的计算公式如下:

上式子中,w(x,y)为模板图片,f(j,j)为待识别图片,\bar{w},\bar{f}分别是模板图片和待识别图片的均值。计算图片的相关系数的算法并不复杂,那么该如何进行手写数字的识别呢?

        首先,选出一部分手写数字图片作为模板图片,然后用待识别图片跟模板图片逐个进行比对,计算相关系数,然后选出相关系数最大的模板,这个模板所代表的分类,就是待识别图片的分类,算法的流程如下图所示。

        上图所示作为例子,每个数字选出一个标准模板,待识别的手写数字为2,通过计算待识别图片与标准模板的相关系数,得到最大的相关系数为0.54,这是待识别数字和模板数字2的相关系数,所以最终的识别结果是2。有时候,还需要评估一下识别的置信度,这就需要通过softmax函数进行归一化,得到分类的置信度,上图的例子的置信度是0.12,并不算高,不过它最大,因此仍然可以作为分类的依据。

        在每一种数字选用一张模板图片的情况下,实验的结果是,识别的精度只有0.45,这只比胡乱蒙的结果好一点。有时候,相关系数不一定正确地表示图片的相似程度,对于人眼来说很显然的事情,机器的眼中却未必如此。如下图所示,数字0的待识别图片,与各数字模板图片之间的相关系数。我们可以发现,待识别的数字0与模板的数字0的相关系数不是最高的,反倒是与模板的数字6相关系数最高,因此该待识别的数字0被错误地识别为数字6。

        回到上面按图找人的问题,如果只有一张图,我们有较大几率出现识别错误的情况,但是如果多提供几张不同角度拍摄的照片,是否会对我们正确找到人有帮助呢?答案是肯定的。为了避免单个模板提供的信息不足以完成高精度的识别任务,增加一些辅助的模板数据是必要的。我们可以将每种数字的标准模板数量扩展一些,比如10张、100张、200张。比如,每种数字采用10张模板,那么总的模板数量就有100张。先用待识别数字与数字0的10张模板进行相关系数计算,选出相关系数最大的作为代表数字0的相关系数,然后用待识别数字与数字1的10张模板进行相关系数计算,选出相关系数最大的作为代表数字1的相关系数,依次类推分别计算出0-9个数字的相关系数,然后在根据这10个相关系数进行排序和置信度计算,选出置信度最大的模板,就是待识别数字的最终分类。

        经过实验,当每种数字的模板数量逐步增加,识别的精度也逐步增加。具体的实验结果如下表所示,当模板的数量达到500时,手写数字的识别精度达到了0.94,这个精度比起神经网络算法来说,还是要低一些。但是相对于神经网络,模板匹配不需要大量的样本进行训练。在样本数量较少的情况下,模板匹配算法的性能可能会比神经网络算法好。模板匹配算法,算是一种少样本学习的解决办法。这里模板匹配算法的实现代码和测试数据集,代码是使用python语言实现的,有需要学习的可以下载进行参考。

4 结论

        利用图片相关性进行模板匹配,从而实现图片的分类,在某些情况下是可行的。经过实验,得出一些结论如下:

        1. 相关系数受到图片内容的尺度、位置和姿态的影响较大。比如,手写数字的大小、位置和旋转角度,如果模板和待识别样本之间有一定的偏差,那么计算出来的相关系数就会比较小;

        2. 增加标准模板的数量,对于提高识别精度是很有用处的,但是过多的模板会明显增加计算量。

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

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

相关文章

【IVIF】Equivariant Multi-Modality Image Fusion

2024CVPR Zixiang Zhao团队 分析透彻,方法耳目一新 统一融合架构 1、Motivation Our approach is rooted in the prior knowledge that natural imaging responses are equivariant to certain transformations 我们的方法根植于自然成像响应对于某些变换的等变性…

vscode python pip : 无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称

在vscode中控制台运行python文件出现:无法将"pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。 使用vscode开发python,需要安装python开发扩展: 本文已经安装,我们需要找的是python安装所在目录,本文…

大气的wordpress官网主题

海外就医wordpress主题 出国看病、海外就医是越来越多中产家庭的选择,此wordpress主题适合做相关业务的公司官网。 https://www.jianzhanpress.com/?p5220 通用多用途wordpress模板 中国红WordPress模板,适合服务行业企业建站的通用多用途wordpress模…

2024高考-优先选专业还是优先选学校

分数限制下,选好专业还是选好学校? 24年高考帷幕落下,一场新的思考与选择悄然来临。对于每一位高考考生,学校和专业都是开启大学新生活的两个前置必选项。但有时候“鱼与熊掌不可兼得”,在分数受限的条件下&#xff0…

Golang -----channel

Channel channel的作用 channel主要用于goroutine之间通讯和同步 设计思路是:不要通过共享内存来通讯,而是通过通讯来共享内存(前者就是传统的加锁,后者就是channel) channel的底层数据结构 type hchan struct {//channel分为无缓冲和有缓…

选专业,如何分析自己的兴趣爱好?

在学习的过程中,我们对于有兴趣的学科往往精力充足,不知疲倦,从而相应科目的分数较高,而在得到较高的分数之后,个人自信更足,学习更轻松,竞争力更强大。 在专业选择当中,如果我们就…

基于matlab的高斯滤波与图像去噪

1 高斯滤波原理 1.1 原理 高斯滤波是一种线性平滑滤波技术,主要用于消除图像中的高斯噪声。它的工作原理可以理解为对整幅图像进行加权平均的过程,即每个像素点的值都由其本身和邻域内的其他像素值经过加权平均后得到。 高斯滤波实质上是一种信号的滤…

驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接的解决方法

在连接数据库的时候出现了下面图面中的错误,尝试集中方法后终于解决了这个问题。 1.修改驱动程序版本 出现这种错误可能是因为你的驱动程序版本不兼容,我们可以尝试修改版本解决。而我们的驱动程序往往是以依赖的形式导入,因此可以在maven仓…

HTML(16)——边距问题

清楚默认样式 很多标签都有默认的样式,往往我们不需要这些样式,就需要清楚默认样式 写法: 用通配符选择器,选择所有标签,清除所有内外边距选中所有的选择器清楚 *{ margin:0; padding:0; } 盒子模型——元素溢出 作…

MySQL锁、加锁机制(超详细)—— 锁分类、全局锁、共享锁、排他锁;表锁、元数据锁、意向锁;行锁、间隙锁、临键锁;乐观锁、悲观锁

文章目录 一、概述1.1 MySQL锁的由来1.2 锁定义1.3 锁分类 二、共享锁与排他锁2.1 共享锁(S锁)2.2 排他锁(X锁)2.3 MySQL锁的释放 三、全局锁3.1 介绍3.2 语法3.3 特点 四、表级锁4.1 介绍4.2 表锁4.3 元数据锁(Meta D…

雷达标定与解析

融合雷达与解析雷达数据的相关代码。感谢开源社区的贡献。以下代码继承了很多人的工作。 如果是单雷达: 直接进行标定,所以就是接收相关的话题然后发布。 lidar_calibration_params.yaml: calibration:在这个接口里面x_offset: 0.0y_offset:…

u盘sd卡格式化怎么恢复,3种恢复方法教学

u盘sd卡格式化怎么恢复,这是许多人在误操作后最关心的问题。我们会详细介绍五种有效的恢复方法,并且提供恢复原理的教学视频,帮助您轻松找回U盘和SD卡上被格式化的数据。 一. 数据存储与恢复的原理 1. U盘、移动硬盘、硬盘以及固态盘存储数据…

游戏高度可配置化(一)通用数据引擎(data-e)及其在模块化游戏开发中的应用构想图解

游戏高度可配置化(一)通用数据引擎(data-e)及其在模块化游戏开发中的应用构想图解 码客 卢益贵 ygluu 关键词:游戏策划 可配置化 模块化配置 数据引擎 条件系统 红点系统 一、前言 在插件式模块化软件开发当中,既要模块高度独…

解决Windows下移动硬盘无法弹出的问题:\$Extend\$RmMetadata\$TxfLog\$TxfLog.blf

想弹出移动硬盘时,Windows告诉我设备正在使用 然后我使用LockHunter查看到底是哪个应用在使用我的移动硬盘,发现是 System(PID 4) E x t e n d Extend ExtendRmMetadata T x f L o g TxfLog TxfLogTxfLog.blf这个文件正在使用 这是一个索引文件 解决 …

数据清洗!即插即用!异常值、缺失值、离群值处理、残差分析和孤立森林异常检测,确保数据清洗的全面性和准确性,MATLAB程序!

适用平台:Matlab2021版及以上 数据清洗是数据处理和分析中的一个关键步骤,特别是对于像风电场这样的大型、复杂数据集。清洗数据的目的是为了确保数据的准确性、一致性和完整性,从而提高数据分析的质量和可信度,是深度学习训练和…

PTA基础题考点汇总

一:字符串(数组)的逆序,栈的方法 **字符串数组的逆序 : ** 标准容器库的知识:定义stack容器于字符串:stackv; string s; //这里用到了c中stl(标准容器库的知识)stack&…

一二三应用开发平台应用开发示例(4)——视图类型介绍以及新增、修改、查看视图配置

调整上级属性类型 前面为了快速展示平台的低代码配置功能,将实体文件夹的数据模型上级属性的数据类型暂时配置为文本类型,现在我们调整下,将其数据类型调整为实体,如下图所示: 数据类型需要选择实体,并在实…

STM32单片机系统

1.STM32最小系统 微型计算机(面) 单片机最小系统是指能够将单片机芯片运行所必需的最少的硬件电路集成在一起的系统。 它是一种基本的单片机应用系统,通常由主芯片,时钟电路,复位电路,电源电路&#xff0c…

Ubuntu/Linux SSH 端口转发

文章目录 Ubuntu/Linux SSH 端口转发概述本地端口转发场景一场景二 参考资料 Ubuntu/Linux SSH 端口转发 概述 SSH, Secure Shell 是一种在网络上用于安全远程登录到另一台机器的工具。除了远程登录以外,ssh 的端口转发是它的另一项强大功能。通过 ssh 端口转发功…