PCA+SVM人脸识别

PCA+SVM人脸识别


PCA介绍

主成分分析(Principal Component Analysis, 简称PCA)是常用的一种降维方法.

算法步骤:

  • 输入: 样本集 D={ x1,x2,...,xm} D = { x 1 , x 2 , . . . , x m } , 低维空间维数 d d ′
  • 过程:
    1. 对所有样本进行中心化: xixi1mmi=1xi x i ← x i − 1 m ∑ i = 1 m x i ;
    2. 计算样本的协方差矩阵: XXT X X T (有时用散布矩阵, 二者只相差一个倍数);
    3. 对协方差矩阵 XXT X X T 做特征值分解;
    4. 取最大的 d d ′ 个特征值所对应的特征向量 w1,w2,...,wd w 1 , w 2 , . . . , w d ′ .
  • 输出: 投影矩阵 W=(w1,w2,...,wd) W = ( w 1 , w 2 , . . . , w d ′ ) .

本例中使用PCA算法对人脸图片进行降维:人脸图片原始大小为 112×92 112 × 92 , 被拉长为 112×92=10304 112 × 92 = 10304 维向量, 利用PCA将这样的数据降维, 供后续匹配.


SVM介绍

支持向量机(Support Vector Machines, 简称SVM)是一种二类分类模型.

划分超平面为:

f(x)=wTϕ(x)+b f ( x ) = w T ϕ ( x ) + b

其优化目标函数为: ( αi α i 为拉格朗日乘子)

minα12i=1,j=1mαiαjyiyjK(xi,xj)i=1mαi m i n ⏟ α 1 2 ∑ i = 1 , j = 1 m α i α j y i y j K ( x i , x j ) − ∑ i = 1 m α i

s.t.i=1mαiyi=0 s . t . ∑ i = 1 m α i y i = 0

0αiC 0 ≤ α i ≤ C

其中 ϕ(x) ϕ ( x ) 为将 x x 映射到高维度的特征向量, K(xi,xj)=ϕ(xi)ϕ(xj) K ( x i , x j ) = ϕ ( x i ) ⋅ ϕ ( x j ) 为核函数(Kernel Function), 用于线性不可分的情况, 常见核函数有:

Name Expression
线性核函数 K(xi,xj)=xTixj K ( x i , x j ) = x i T x j
高斯(RBF)核函数 K(xi,xj)=exp(||xixj||2δ2) K ( x i , x j ) = e x p ( − | | x i − x j | | 2 δ 2 )

本例中利用SVM训练 One-VS-One Multiclass SVM 模型, 对前面PCA降维得到的数据进行分类.


人脸识别步骤

  1. 将每张人脸图片( m,n m , n )读取并展开成( m×n,1 m × n , 1 ), 假设总有 l l 张图片, 所有排列到一起, 一列为一张图片, 最终形成一个 (m×n,l) ( m × n , l ) 的矩阵作为原始数据;
  2. 数据中心化: 计算平均脸, 所有列都减去张平均脸;
  3. 计算矩阵的协方差矩阵/散布矩阵, 求出特征值及特征向量, 并将其从大到小排列取前K个特征; (到这步特征已将至K维)
  4. 计算中心化后的数据在K维特征的投影;
  5. 基于上一步的数据进行 One-VS-One Multiclass SVM模型训练;
  6. 读取用于测试的人脸图片, 同训练图片一样处理;
  7. 利用训练出的模型对测试图片进行分类;
  8. 计算准确率.

代码实现

详见 https://github.com/techping/pca-face-recognition .


  • 我的个人主页:http://www.techping.cn/
  • 我的CSDN博客:http://blog.csdn.net/techping
  • 我的简书:http://www.jianshu.com/users/b2a36e431d5e/
  • 我的GitHub:https://github.com/techping

你可能感兴趣的:(算法,机器学习,PCA,SVM,人脸识别,计算机视觉,机器学习)