PCA+SVM人臉識別

PCA+SVM人臉識別


PCA介紹

主成分分析(Principal Component Analysis, 簡稱PCA)是常用的一種降維方法.

算法步驟:

  • 輸入: 樣本集 D={x1,x2,...,xm} , 低維空間維數 d
  • 過程:
    1. 對所有樣本進行中心化: xixi1mi=1mxi ;
    2. 計算樣本的協方差矩陣: XXT (有時用散佈矩陣, 二者只相差一個倍數);
    3. 對協方差矩陣 XXT 做特徵值分解;
    4. 取最大的 d 個特徵值所對應的特徵向量 w1,w2,...,wd .
  • 輸出: 投影矩陣 W=(w1,w2,...,wd) .

本例中使用PCA算法對人臉圖片進行降維:人臉圖片原始大小爲 112×92 , 被拉長爲 112×92=10304 維向量, 利用PCA將這樣的數據降維, 供後續匹配.


SVM介紹

支持向量機(Support Vector Machines, 簡稱SVM)是一種二類分類模型.

劃分超平面爲:

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

其優化目標函數爲: (αi 爲拉格朗日乘子)

minα12i=1,j=1mαiαjyiyjK(xi,xj)i=1mαi

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

0αiC

其中 ϕ(x) 爲將 x 映射到高維度的特徵向量, K(xi,xj)=ϕ(xi)ϕ(xj) 爲核函數(Kernel Function), 用於線性不可分的情況, 常見核函數有:

Name Expression
線性核函數 K(xi,xj)=xiTxj
高斯(RBF)核函數 K(xi,xj)=exp(||xixj||2δ2)

本例中利用SVM訓練 One-VS-One Multiclass SVM 模型, 對前面PCA降維得到的數據進行分類.


人臉識別步驟

  1. 將每張人臉圖片(m,n )讀取並展開成(m×n,1 ), 假設總有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 .


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章