PCA+SVM人臉識別
PCA介紹
主成分分析(Principal Component Analysis, 簡稱PCA)是常用的一種降維方法.
算法步驟:
- 輸入: 樣本集 , 低維空間維數
- 過程:
- 對所有樣本進行中心化: ;
- 計算樣本的協方差矩陣: (有時用散佈矩陣, 二者只相差一個倍數);
- 對協方差矩陣 做特徵值分解;
- 取最大的 個特徵值所對應的特徵向量 .
- 輸出: 投影矩陣 .
本例中使用PCA算法對人臉圖片進行降維:人臉圖片原始大小爲 , 被拉長爲 維向量, 利用PCA將這樣的數據降維, 供後續匹配.
SVM介紹
支持向量機(Support Vector Machines, 簡稱SVM)是一種二類分類模型.
劃分超平面爲:
其優化目標函數爲: ( 爲拉格朗日乘子)
其中 爲將 映射到高維度的特徵向量, 爲核函數(Kernel Function), 用於線性不可分的情況, 常見核函數有:
Name | Expression |
---|---|
線性核函數 | |
高斯(RBF)核函數 | |
… | … |
本例中利用SVM訓練 One-VS-One Multiclass SVM 模型, 對前面PCA降維得到的數據進行分類.
人臉識別步驟
- 將每張人臉圖片( )讀取並展開成( ), 假設總有 張圖片, 所有排列到一起, 一列爲一張圖片, 最終形成一個 的矩陣作爲原始數據;
- 數據中心化: 計算平均臉, 所有列都減去張平均臉;
- 計算矩陣的協方差矩陣/散佈矩陣, 求出特徵值及特徵向量, 並將其從大到小排列取前K個特徵; (到這步特徵已將至K維)
- 計算中心化後的數據在K維特徵的投影;
- 基於上一步的數據進行 One-VS-One Multiclass SVM模型訓練;
- 讀取用於測試的人臉圖片, 同訓練圖片一樣處理;
- 利用訓練出的模型對測試圖片進行分類;
- 計算準確率.
代碼實現
詳見 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