人脸识别经典算法一:特征脸方法(Eigenface)

这篇文章是撸主要介绍人脸识别经典方法的第一篇,后续会有其他方法更新。特征脸方法基本是将人脸识别推向真正可用的第一种方法,了解一下还是很有必要的。特征脸用到的理论基础PCA在另一篇博客里:特征脸(Eigenface)理论基础-PCA(主成分分析法) 。本文的参考资料附在最后了^_^

步骤一:获取包含M张人脸图像的集合S。在我们的例子里有25张人脸图像(虽然是25个不同人的人脸的图像,但是看着怎么不像呢,难道我有脸盲症么),如下图所示哦。每张图像可以转换成一个N维的向量(是的,没错,一个像素一个像素的排成一行就好了,至于是横着还是竖着获取原图像的像素,随你自己,只要前后统一就可以),然后把这M个向量放到一个集合S里,如下式所示。



步骤二:在获取到人脸向量集合S后,计算得到平均图像Ψ ,至于怎么计算平均图像,公式在下面。就是把集合S里面的向量遍历一遍进行累加,然后取平均值。得到的这个Ψ 其实还挺有意思的,Ψ 其实也是一个N维向量,如果再把它还原回图像的形式的话,可以得到如下的“平均脸”,是的没错,还他妈的挺帅啊。那如果你想看一下某计算机学院男生平均下来都长得什么样子,用上面的方法就可以了。



步骤三:计算每张图像和平均图像的差值Φ  ,就是用S集合里的每个元素减去步骤二中的平均值。


步骤四:找到M个正交的单位向量un ,这些单位向量其实是用来描述Φ  (步骤三中的差值)分布的。un 里面的第k(k=1,2,3...M)个向量uk 是通过下式计算的,

当这个λk(原文里取了个名字叫特征值)取最小的值时,uk  基本就确定了。补充一下,刚才也说了,这M个向量是相互正交而且是单位长度的,所以啦,uk  还要满足下式:


上面的等式使得uk 为单位正交向量。计算上面的uk 其实就是计算如下协方差矩阵的特征向量:


其中


对于一个NxN(比如100x100)维的图像来说,上述直接计算其特征向量计算量实在是太大了(协方差矩阵可以达到10000x10000),所以有了如下的简单计算。

步骤四另解:如果训练图像的数量小于图像的维数比如(M<N^2),那么起作用的特征向量只有M-1个而不是N^2个(因为其他的特征向量对应的特征值为0),所以求解特征向量我们只需要求解一个NxN的矩阵。这个矩阵就是步骤四中的AAT ,我们可以设该矩阵为L,那么L的第m行n列的元素可以表示为:


一旦我们找到了L矩阵的M个特征向量vl,那么协方差矩阵的特征向量ul就可以表示为:


这些特征向量如果还原成像素排列的话,其实还蛮像人脸的,所以称之为特征脸(如下图)。图里有二十五个特征脸,数量上和训练图像相等只是巧合。有论文表明一般的应用40个特征脸已经足够了。论文Eigenface for recognition里只用了7个特征脸来表明实验。


步骤五:识别人脸。OK,终于到这步了,别绕晕啦,上面几步是为了对人脸进行降维找到表征人脸的合适向量的。首先考虑一张新的人脸,我们可以用特征脸对其进行标示:


其中k=1,2...M,对于第k个特征脸uk,上式可以计算其对应的权重,M个权重可以构成一个向量:


perfect,这就是求得的特征脸对人脸的表示了!

那如何对人脸进行识别呢,看下式:


其中Ω代表要判别的人脸,Ωk代表训练集内的某个人脸,两者都是通过特征脸的权重来表示的。式子是对两者求欧式距离,当距离小于阈值时说明要判别的脸和训练集内的第k个脸是同一个人的。当遍历所有训练集都大于阈值时,根据距离值的大小又可分为是新的人脸或者不是人脸的两种情况。根据训练集的不同,阈值设定并不是固定的。

后续会有对PCA理论的补充^_^.已补充理论:特征脸(Eigenface)理论基础-PCA(主成分分析法)

参考资料:

1、Eigenface for Recognition:http://www.cs.ucsb.edu/~mturk/Papers/jcn.pdf

2、特征脸维基百科:http://zh.wikipedia.org/wiki/%E7%89%B9%E5%BE%81%E8%84%B8

3、Eigenface_tutorial:http://www.pages.drexel.edu/~sis26/Eigenface%20Tutorial.htm

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

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

相关文章

Xception

The First ColumnThe Second Columnpadding 方式&#xff1a;same and valid The First ColumnThe Second ColumnSame 就是 增加一列相同的数 &#xff08;一般是0&#xff09;valid只保留有效的转载于:https://www.cnblogs.com/hugeng007/p/10477430.html

1.苍穹外卖-day01

苍穹外卖-day01 课程内容 软件开发整体介绍 苍穹外卖项目介绍 开发环境搭建 导入接口文档 Swagger 项目整体效果展示&#xff1a; 管理端-外卖商家使用 用户端-点餐用户使用 当我们完成该项目的学习&#xff0c;可以培养以下能力&#xff1a; 1. 软件开发整体介绍 作为一名…

C#调用Python模块

编程&#xff1a;C#调用Python模块 当下&#xff0c;C#与Python都是比较热门的计算机编程语言&#xff0c;他们各有优缺点&#xff0c;如果能让他们互相配合工作&#xff0c;那是多么美好的事情&#xff0c;今天我来讲解一下如何利用C#来调用Python。 如果让C#支持调用Python模…

面试简单整理之克隆

61.为什么要使用克隆&#xff1f; 克隆获取对象的副本&#xff0c;直接用复制还是一个引用。 62.如何实现对象克隆&#xff1f; 1.被clone的类实现cloneable接口&#xff0c;重写object类的clone&#xff08;&#xff09;方法 2.如果深克隆则克隆对象的引用对象也要实现接口、重…

PyCharm调试错误

JetBrains PyCharm 2017.3.2 这就说明python.exe的环境没有配&#xff0c;点击蓝色的configure Python Interpreter&#xff0c;然后选择对应的路径就可以了

Java06集合

13 集合 实现方法时&#xff0c;不同的数据结构会导致性能有很大差异。 13.1 集合接口 Java集合类库将接口&#xff08;interface&#xff09;与实现&#xff08;implementation&#xff09;分离。 可以使用接口类型存放集合的应用&#xff0c;一旦改变了想法&#xff0c;可…

Tensorflow验证码识别应用

简单的Tensorflow验证码识别应用&#xff0c;供大家参考&#xff0c;具体内容如下 1.Tensorflow的安装方式简单,在此就不赘述了. 2.训练集训练集以及测试及如下(纯手工打造,所以数量不多): 3.实现代码部分(参考了网上的一些实现来完成的) main.py(主要的神经网络代码) ?123456…

Linux 桌面玩家指南:09. X Window 的奥秘

Linux 桌面玩家指南&#xff1a;09. X Window 的奥秘 原文:Linux 桌面玩家指南&#xff1a;09. X Window 的奥秘特别说明&#xff1a;要在我的随笔后写评论的小伙伴们请注意了&#xff0c;我的博客开启了 MathJax 数学公式支持&#xff0c;MathJax 使用$标记数学公式的开始和结…

Storm教程1理论介绍

流式计算的历史: 早在7、8年前诸如UC伯克利、斯坦福等大学就开始了对流式数据处理的研究&#xff0c;但是由于更多的关注于金融行业的业务场景或者互联网流量监控的业务场景&#xff0c;以及当时互联网数据场景的限制&#xff0c;造成了研究多是基于对传统数据库处理的流式化&…

梯度下降原理及Python实现

梯度下降算法是一个很基本的算法&#xff0c;在机器学习和优化中有着非常重要的作用&#xff0c;本文首先介绍了梯度下降的基本概念&#xff0c;然后使用python实现了一个基本的梯度下降算法。梯度下降有很多的变种&#xff0c;本文只介绍最基础的梯度下降&#xff0c;也就是批…

matplotlib一些常用知识点的整理,

本文作为学习过程中对matplotlib一些常用知识点的整理&#xff0c;方便查找。 强烈推荐ipython 无论你工作在什么项目上&#xff0c;IPython都是值得推荐的。利用ipython --pylab&#xff0c;可以进入PyLab模式&#xff0c;已经导入了matplotlib库与相关软件包&#xff08;例如…

Storm教程3编程接口

Spouts Spout是Stream的消息产生源&#xff0c;Spout组件的实现可以通过继承BaseRichSpout类或者其他Spout类来完成&#xff0c;也可以通过实现IRichSpout接口来实现。 需要根据情况实现Spout类中重要的几个方法有&#xff1a; open方法 当一个Task被初始化的时候会调用此…

梳理操作系统概论

1、用一张图总结操作系统的结构、功能特征、采用的技术和提供服务方式等。 2、用一张图描述CPU的工作原理。 3、用一张图描述系统程序与应用程序、特权指令与非特权指令、CPU状态、PSW及中断是如何协同工作的&#xff1f; 转载于:https://www.cnblogs.com/ljgljg/p/10503190.ht…

位置指纹法的实现(KNN)

基本原理 位置指纹法可以看作是分类或回归问题&#xff08;特征是RSS向量&#xff0c;标签是位置&#xff09;&#xff0c;监督式机器学习方法可以从数据中训练出一个从特征到标签的映射关系模型。kNN是一种很简单的监督式机器学习算法&#xff0c;可以用来做分类或回归。 对于…

室内定位系列 ——WiFi位置指纹(译)

摘要 GPS难以解决室内环境下的一些定位问题&#xff0c;大部分室内环境下都存在WiFi&#xff0c;因此利用WiFi进行定位无需额外部署硬件设备&#xff0c;是一个非常节省成本的方法。然而WiFi并不是专门为定位而设计的&#xff0c;传统的基于时间和角度的定位方法并不适用于WiFi…

机器学习02线性回归、多项式回归、正规方程

单变量线性回归&#xff08;Linear Regression with One Variable&#xff09; 预测器表达式&#xff1a; 选择合适的参数&#xff08;parameters&#xff09;θ0 和 θ1&#xff0c;其决定了直线相对于训练集的准确程度。 建模误差&#xff08;modeling error&#xff09;&a…

机器学习03Logistic回归

逻辑回归 &#xff08;Logistic Regression&#xff09; 目前最流行&#xff0c;使用最广泛的一种学习算法。 分类问题&#xff0c;要预测的变量 y 是离散的值。 逻辑回归算法的性质是&#xff1a;它的输出值永远在 0 到 1 之间。 逻辑回归模型的假设是&#xff1a; 其中&a…

CNN理解比较好的文章

什么是卷积神经网络&#xff1f;为什么它们很重要&#xff1f; 卷积神经网络&#xff08;ConvNets 或者 CNNs&#xff09;属于神经网络的范畴&#xff0c;已经在诸如图像识别和分类的领域证明了其高效的能力。卷积神经网络可以成功识别人脸、物体和交通信号&#xff0c;从而为机…

Windows 安装Angular CLI

1、安装nvm npm cnpm nrm&#xff08;onenote笔记上有记录&#xff09; 参考&#xff1a;https://blog.csdn.net/tyro_java/article/details/51232458 提示&#xff1a;如果发现配置完后&#xff0c;出现类似“npm不是内部命令……”等信息。 可采取如下措施进行解决—— 检查环…

机器学习04正则化

正则化&#xff08;Regularization&#xff09; 过拟合问题&#xff08;Overfitting&#xff09;&#xff1a; 如果有非常多的特征&#xff0c;通过学习得到的假设可能能够非常好地适应训练集 &#xff1a;代价函数可能几乎为 0&#xff09;&#xff0c; 但是可能会不能推广到…