基于PCA降维和BP神经网络的人脸识别

1.ORL人脸库

ORL人脸库诞生于英国剑桥Olivetti实验室。

ORL人脸数据库共有40个不同年龄、不同性别和不同种族的对象。每个人10幅图像共计400幅灰度图像组成,图像尺寸是92×112,图像背景为黑色。其中人脸部分表情和细节均有变化,例如笑与不笑、眼睛睁着或闭着,戴或不戴眼镜等。

取每个人前5幅图像,共计200幅用来训练,其余用于测试。

2.PCA(主成分分析法)

Step 01:样本中心化和标准化

Step 02:求其协方差矩阵

Step 03:求协方差矩阵的特征值和特征向量

Step 04:选择k个最大特征值,然后将对应的特征向量分别作为列向量组成特征向量矩阵

Step 05:将样本点投影到选取的特征向量上,投影后的数据FinalData为:

FinalData(m∗k)=DataAdjust(m∗n)×EigrnVectors(n∗k)

其中DataAdjust(m∗n)是中性化后的样本矩阵,EigrnVectors(n∗k)是选择的k个最大特征值所对应的特征向量所构成的特征向量矩阵。

对数据进行中心化预处理,这样做的目的是要增加基向量的正交性,便于高维度向低纬度的投影,即便于更好的描述数据。

(图片来自知乎:https://www.zhihu.com/question/37069477)。

对数据标准化的目的是消除特征之间的差异性,当原始数据不同维度上的特征的尺度不一致时,需要标准化步骤对数据进行预处理,使得在训练神经网络的过程中,能够加速权重参数的收敛。

过中心化和标准化,最后得到均值为0,标准差为1的服从标准正态分布的数据!!!

求协方差矩阵的目的是为了计算各维度之间的相关性,而协方差矩阵的特征值大小就反映了变换后在特征向量方向上变换的幅度,幅度越大,说明这个方向上的元素差异也越大(越有投影的必要,矩阵相乘的过程就是投影),故而选取合适的前k个能以及小的损失来大量的减少元数据的维度。

MATLAB自带的那个确实是有点慢了,用的是Fast_PCA,最后选取了49维特征作为输入。

3.BP神经网络的概念

BP神经网络是一种多层的前馈神经网络,其主要的特点是:信号是前向传播的,而误差是反向传播的,依次调节隐含层到输出层的权重和偏置,输入层到隐含层的权重和偏置。

参数:输入层49,输出层40

输入层到隐含层传递函数:'purelin'。

隐含层到输出层传递函数:'purelin'。

训练函数:'traingdx'(动量及自适应lrBP的梯度训练递减函数)。

最后的识别准确率并不是很理想

仅为89.5%-90.5%

作者:马一十二

数据和代码:https://link.zhihu.com/?target=https%3A//pan.baidu.com/s/1qFCocFsKfJT-9aUIbQvT7A

密码:66e4

- 加入人工智能学院系统学习 -

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180427A074TQ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励