本文共 1568 字,大约阅读时间需要 5 分钟。
PCA+SVM人脸识别
PCA介绍
主成分分析(Principal Component Analysis, 简称PCA)是常用的一种降维方法.
算法步骤:
- 输入: 样本集 D={ x1,x2,...,xm} D = { x 1 , x 2 , . . . , x m } , 低维空间维数 d′ d ′
- 过程:
- 对所有样本进行中心化: xi←xi−1m∑mi=1xi x i ← x i − 1 m ∑ i = 1 m x i ;
- 计算样本的协方差矩阵: XXT X X T (有时用散布矩阵, 二者只相差一个倍数);
- 对协方差矩阵 XXT X X T 做特征值分解;
- 取最大的 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⏟α12∑i=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
其中 ϕ(x) ϕ ( x ) 为将 x x 映射到高维度的特征向量, K(xi,xj)=ϕ(xi)⋅ϕ(xj) 为核函数(Kernel Function), 用于线性不可分的情况, 常见核函数有:
Name | Expression |
线性核函数 | K(xi,xj)=xTixj K ( x i , x j ) = x i T x j |
高斯(RBF)核函数 | K(xi,xj)=exp(−||xi−xj||2δ2) K ( x i , x j ) = e x p ( − | | x i − x j | | 2 δ 2 ) |
… | … |
本例中利用SVM训练 One-VS-One Multiclass SVM 模型, 对前面PCA降维得到的数据进行分类.
人脸识别步骤
- 将每张人脸图片( m,n m , n )读取并展开成( m×n,1 m × n , 1 ), 假设总有 l l 张图片, 所有排列到一起, 一列为一张图片, 最终形成一个 (m×n,l) 的矩阵作为原始数据;
- 数据中心化: 计算平均脸, 所有列都减去张平均脸;
- 计算矩阵的协方差矩阵/散布矩阵, 求出特征值及特征向量, 并将其从大到小排列取前K个特征; (到这步特征已将至K维)
- 计算中心化后的数据在K维特征的投影;
- 基于上一步的数据进行 One-VS-One Multiclass SVM模型训练;
- 读取用于测试的人脸图片, 同训练图片一样处理;
- 利用训练出的模型对测试图片进行分类;
- 计算准确率.
代码实现
详见 .
- 我的个人主页:
- 我的CSDN博客:
- 我的简书:
- 我的GitHub:
转载地址:http://uiloi.baihongyu.com/