机器学习: 特征脸算法 EigenFaces
2016-05-11 08:44
211 查看
人脸识别是机器学习和机器视觉领域非常重要的一个研究方向,而特征脸算法是人脸识别里非常经典的一个算法,EigenFaces 是基于PCA (principal component analysis) 即主分量分析的。
一张尺寸为 w×h 的人脸图像 Ii可以看成是一个 D×1 的列向量, x∈RD,其中 D=w×h, 那么,给定一个训练集 S, 含有 m 张人脸图像, 即: S={xi},i=1,2,...m, 简单来说,我们希望通过一些线性映射,将原始向量 x 从高维空间 RD 变换到一个低维空间 RK, K≪D.
利用PCA 分析:
1: 先求训练集 S 的均值向量 x¯=1m∑mi=1xi
2: 向量去均值:Φi=xi−x¯
3: 求协方差矩阵 C=1m∑mi=1ΦiΦTi, 如果我们定义 A=[Φ1,Φ2,...,Φm], A∈RD×m, 那么 C=AAT
4: 特征值分解: Cui=γiui
我们知道协方差矩阵是一个高维矩阵 C∈RD×D. 如果直接进行特征分解,无疑是非常消耗资源也很费时的。特征脸算法做了一个非常巧妙的变换,我们先来看 ATA 的特征值分解,因为 ATA∈Rm×m,比起 C 来说,维度要小得多。我们可以得到:
ATAvi=λivi 进一步可以得到:
AATAvi=λiAvi 即:
CAvi=λiAvi 所以我们看到:
Cui=λiuiui=Avi
换句话说,AAT 与 ATA 有相同的特征值,而特征向量满足如下关系:
ui=Avi
严格说来,AAT∈RD×D, 最多可以有 D 个 特征值与特征向量。
而 ATA∈Rm×m, 最多可以有 m 个 特征值与特征向量。
ATA 中的 m 个 特征值与特征向量 对应 AAT 中 前 m 个最大的特征值以及特征值相对应的特征向量。
所以通过这种变换, 可以非常快速地求得 AAT 的特征向量 ui=Avi。
5: 将特征值从大到小排序,截取前面 K 个特征值及对应的特征向量。我们可以用特征向量的线性组合来表示原来的去均值向量,即:
xi−x¯=Φi=∑Kj=1wjuj
wj=ΦTiuj
如果定义, Ω=[w1,w2,...,wK], U=[u1,u2,...,uK], 那么可以得到
Ω=ΦTiU, 我们看到,通过引入 Eigenfaces, 我们将高维向量 Φi 映射到低维向量 Ω 。
做人脸识别的时候,我们可以先将训练集中的每个subject的人脸图像映射到低维空间Ω1,Ω2,...Ωq, q 表示subject 的个数。给定一个测试样本 x,先做去均值,Φ=x−x¯,然后再映射到低维空间,得到低维向量 Ω,我们要求解如下的目标函数:
argminl∥Ω−Ωl∥
进而确定测试样本属于哪个subject。
一张尺寸为 w×h 的人脸图像 Ii可以看成是一个 D×1 的列向量, x∈RD,其中 D=w×h, 那么,给定一个训练集 S, 含有 m 张人脸图像, 即: S={xi},i=1,2,...m, 简单来说,我们希望通过一些线性映射,将原始向量 x 从高维空间 RD 变换到一个低维空间 RK, K≪D.
利用PCA 分析:
1: 先求训练集 S 的均值向量 x¯=1m∑mi=1xi
2: 向量去均值:Φi=xi−x¯
3: 求协方差矩阵 C=1m∑mi=1ΦiΦTi, 如果我们定义 A=[Φ1,Φ2,...,Φm], A∈RD×m, 那么 C=AAT
4: 特征值分解: Cui=γiui
我们知道协方差矩阵是一个高维矩阵 C∈RD×D. 如果直接进行特征分解,无疑是非常消耗资源也很费时的。特征脸算法做了一个非常巧妙的变换,我们先来看 ATA 的特征值分解,因为 ATA∈Rm×m,比起 C 来说,维度要小得多。我们可以得到:
ATAvi=λivi 进一步可以得到:
AATAvi=λiAvi 即:
CAvi=λiAvi 所以我们看到:
Cui=λiuiui=Avi
换句话说,AAT 与 ATA 有相同的特征值,而特征向量满足如下关系:
ui=Avi
严格说来,AAT∈RD×D, 最多可以有 D 个 特征值与特征向量。
而 ATA∈Rm×m, 最多可以有 m 个 特征值与特征向量。
ATA 中的 m 个 特征值与特征向量 对应 AAT 中 前 m 个最大的特征值以及特征值相对应的特征向量。
所以通过这种变换, 可以非常快速地求得 AAT 的特征向量 ui=Avi。
5: 将特征值从大到小排序,截取前面 K 个特征值及对应的特征向量。我们可以用特征向量的线性组合来表示原来的去均值向量,即:
xi−x¯=Φi=∑Kj=1wjuj
wj=ΦTiuj
如果定义, Ω=[w1,w2,...,wK], U=[u1,u2,...,uK], 那么可以得到
Ω=ΦTiU, 我们看到,通过引入 Eigenfaces, 我们将高维向量 Φi 映射到低维向量 Ω 。
做人脸识别的时候,我们可以先将训练集中的每个subject的人脸图像映射到低维空间Ω1,Ω2,...Ωq, q 表示subject 的个数。给定一个测试样本 x,先做去均值,Φ=x−x¯,然后再映射到低维空间,得到低维向量 Ω,我们要求解如下的目标函数:
argminl∥Ω−Ωl∥
进而确定测试样本属于哪个subject。
相关文章推荐
- 《java入门第一季》之Character类小案例
- ecshop二次开发--邮箱、手机号、用户名登陆
- 《java入门第一季》之Character类小案例
- 公司代理上网环境下gem和cocoapods 使用教程
- 机器学习:Principal components analysis (主分量分析)
- 随笔记录 02
- 教你使用ISE/ Viavado查看FPGA的LUT是怎么实现逻辑功能
- List去除重复元素
- 数据归归一化方法(标准化)
- Eclipse的更新和安装插件
- 高德地图——输入经纬度查找
- java中set接口使用方法详解
- ListView.setOnItemClickListener无效
- JavaScript的DOM操作
- 解决ie6 sp2/sp3版本兼容问题
- 心灵鸡汤之20160511物以类聚
- 带有期限的作业排序贪心算法
- HDU 5157 Harry and magic string(回文树)
- HDU 5157 Harry and magic string(回文树)
- fl2440 2.6.35移植触摸屏驱动错误