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


Posted in Python onMarch 13, 2018

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

其中

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

参考资料:

1、Eigenface for Recognition

2、特征脸维基百科

3、Eigenface_tutorial

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
基于python的汉字转GBK码实现代码
Feb 19 Python
Python实现windows下模拟按键和鼠标点击的方法
Mar 13 Python
python使用Flask框架获取用户IP地址的方法
Mar 21 Python
Python模拟三级菜单效果
Sep 11 Python
python基础之包的导入和__init__.py的介绍
Jan 08 Python
python将文本分每两行一组并保存到文件
Mar 19 Python
python对excel文档去重及求和的实例
Apr 18 Python
浅谈tensorflow1.0 池化层(pooling)和全连接层(dense)
Apr 27 Python
Python高级特性切片(Slice)操作详解
Sep 27 Python
python正则表达式re.match()匹配多个字符方法的实现
Jan 27 Python
Pytorch自定义Dataset和DataLoader去除不存在和空数据的操作
Mar 03 Python
Python&Matlab实现樱花的绘制
Apr 07 Python
Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法
Mar 13 #Python
Python+Django搭建自己的blog网站
Mar 13 #Python
python实现人脸识别经典算法(一) 特征脸法
Mar 13 #Python
tensorflow实现softma识别MNIST
Mar 12 #Python
wxpython实现图书管理系统
Mar 12 #Python
人生苦短我用python python如何快速入门?
Mar 12 #Python
tensorflow实现KNN识别MNIST
Mar 12 #Python
You might like
PHP 5.3 下载时 VC9、VC6、Thread Safe、Non Thread Safe的区别分析
2011/03/28 PHP
标准版Eclipse搭建PHP环境的详细步骤
2015/11/18 PHP
PHP实现伪静态方法汇总
2016/01/13 PHP
php通过header发送自定义数据方法
2018/01/18 PHP
php7 list()、session及其他模块的修改实例分析
2020/05/25 PHP
Jquery为a标签的href赋值实现代码
2013/05/03 Javascript
jquery对ajax的支持介绍
2013/12/10 Javascript
jQuery移除元素自动解绑事件实现思路及代码
2014/05/31 Javascript
javascript中sort() 方法使用详解
2015/08/30 Javascript
javascript的正则匹配方法学习
2016/02/24 Javascript
jquery自定义插件开发之window的实现过程
2016/05/06 Javascript
微信小程序  modal详解及实例代码
2016/11/09 Javascript
nodejs使用express获取get和post传值及session验证的方法
2017/11/09 NodeJs
详解在React.js中使用PureComponent的重要性和使用方式
2018/07/10 Javascript
Angular2实现的秒表及改良版示例
2019/05/10 Javascript
jQuery使用ajax传递json对象到服务端及contentType的用法示例
2020/03/12 jQuery
Django框架中处理URLconf中特定的URL的方法
2015/07/20 Python
Python统计文件中去重后uuid个数的方法
2015/07/30 Python
python3实现ftp服务功能(服务端 For Linux)
2017/03/24 Python
Python实现的中国剩余定理算法示例
2017/08/05 Python
使用apidoc管理RESTful风格Flask项目接口文档方法
2018/02/07 Python
深入解析神经网络从原理到实现
2019/07/26 Python
Python hashlib模块加密过程解析
2019/11/05 Python
pymysql 插入数据 转义处理方式
2020/03/02 Python
Python selenium自动化测试模型图解
2020/04/15 Python
css3的动画特效之动画序列(animation)
2017/12/22 HTML / CSS
Peter Millar官网:美国高档生活服饰品牌
2018/07/02 全球购物
JBL加拿大官方商店:扬声器、耳机等
2020/10/23 全球购物
酒店管理专业学生求职信
2013/09/27 职场文书
经销商培训邀请函
2014/01/21 职场文书
2014年助理工程师工作总结
2014/11/14 职场文书
python3 实现mysql数据库连接池的示例代码
2021/04/17 Python
Pytorch中的学习率衰减及其用法详解
2021/06/05 Python
浅谈spring boot使用thymeleaf版本的问题
2021/08/04 Java/Android
Elasticsearch 配置详解
2022/04/19 Java/Android
一文了解Java动态代理的原理及实现
2022/07/07 Java/Android