PCA+SVM人臉識(shí)別
PCA介紹
主成分分析(Principal Component Analysis, 簡(jiǎn)稱PCA)是常用的一種降維方法.
算法步驟:
- 輸入: 樣本集 D=\{x_1, x_2, ..., x_m\}, 低維空間維數(shù) d'
- 過(guò)程:
- 對(duì)所有樣本進(jìn)行中心化: x_i \leftarrow x_i - \frac{1}{m} \sum_{i=1}^{m} x_i;
- 計(jì)算樣本的協(xié)方差矩陣: XX^T(有時(shí)用散布矩陣, 二者只相差一個(gè)倍數(shù));
- 對(duì)協(xié)方差矩陣 XX^T 做特征值分解;
- 取最大的 d' 個(gè)特征值所對(duì)應(yīng)的特征向量 w_1, w_2, ..., w_{d'}.
- 輸出: 投影矩陣 W = (w_1, w_2, ..., w_{d'}) .
本例中使用PCA算法對(duì)人臉圖片進(jìn)行降維:人臉圖片原始大小為 112 \times 92 , 被拉長(zhǎng)為 112 \times 92 = 10304 維向量, 利用PCA將這樣的數(shù)據(jù)降維, 供后續(xù)匹配.
SVM介紹
支持向量機(jī)(Support Vector Machines, 簡(jiǎn)稱SVM)是一種二類分類模型.
劃分超平面為:
f(x) = w^T\phi(x) + b
其優(yōu)化目標(biāo)函數(shù)為: (\alpha_i 為拉格朗日乘子)
\underbrace{ min }_{\alpha} \frac{1}{2}\sum\limits_{i=1,j=1}^{m}\alpha_i\alpha_jy_iy_jK(x_i, x_j) - \sum\limits_{i=1}^{m}\alpha_i
s.t. \; \sum\limits_{i=1}^{m}\alpha_iy_i = 0
0 \leq \alpha_i \leq C
其中 \phi(x) 為將 x 映射到高維度的特征向量, K(x_i, x_j) = \phi(x_i)\cdot\phi(x_j) 為核函數(shù)(Kernel Function), 用于線性不可分的情況, 常見(jiàn)核函數(shù)有:
Name | Expression |
---|---|
線性核函數(shù) | K(x_i, x_j) = x_i^T x_j |
高斯(RBF)核函數(shù) | K(x_i, x_j) = exp(-\frac{||x_i - x_j||^2}{\delta^2}) |
... | ... |
本例中利用SVM訓(xùn)練 One-VS-One Multiclass SVM 模型, 對(duì)前面PCA降維得到的數(shù)據(jù)進(jìn)行分類.
人臉識(shí)別步驟
- 將每張人臉圖片(m, n)讀取并展開(kāi)成(m\times n, 1), 假設(shè)總有l張圖片, 所有排列到一起, 一列為一張圖片, 最終形成一個(gè)(m \times n, l) 的矩陣作為原始數(shù)據(jù);
- 數(shù)據(jù)中心化: 計(jì)算平均臉, 所有列都減去張平均臉;
- 計(jì)算矩陣的協(xié)方差矩陣/散布矩陣, 求出特征值及特征向量, 并將其從大到小排列取前K個(gè)特征; (到這步特征已將至K維)
- 計(jì)算中心化后的數(shù)據(jù)在K維特征的投影;
- 基于上一步的數(shù)據(jù)進(jìn)行 One-VS-One Multiclass SVM模型訓(xùn)練;
- 讀取用于測(cè)試的人臉圖片, 同訓(xùn)練圖片一樣處理;
- 利用訓(xùn)練出的模型對(duì)測(cè)試圖片進(jìn)行分類;
- 計(jì)算準(zhǔn)確率.
代碼實(shí)現(xiàn)
詳見(jiàn) https://github.com/techping/pca-face-recognition .
- 我的個(gè)人主頁(yè):http://www.techping.cn/
- 我的CSDN博客:http://blog.csdn.net/techping
- 我的簡(jiǎn)書:http://www.reibang.com/users/b2a36e431d5e/
- 我的GitHub:https://github.com/techping