PCA算法人臉識別小結--原理到實現

  近段時間學習提取圖像特徵的算法,研究了一下PCA(主成分分析)算法,用PCA實現了人臉識別,做個小結。

 以下是關於PCA算法原理理解較有幫助的資料(關於PCA的資料很多,我覺得看以下的足夠了):

1、A tutorial on Principal Components Analysis,Lindsay I Smith,February 26, 2002

2、A Tutorial on Principal Component Analysis,Jonathon Shlens,December 10, 2005; Version 2

3、A Singularly Valuable Decomposition: The SVD of a Matrix,Dan Kalman,February 13, 2002 (求解協方差矩陣的特徵向量時我用SVD算法,這是SVD理論的資料)

4、基於PCA 和FLD 的人臉識別方法,張良,December 2012.(裏面PCA步驟那部分,構造協方差矩陣和測試部分和原理有出入,值得推敲)

5、松子茶博文,很贊,看完就知道PCA每個步驟的目的和意義,思路就很清晰:

  http://blog.csdn.net/songzitea/article/details/18219237

6、斯坦福大學機器學習課程公開課,主成分分析和奇異值分解那兩個講座。


  PCA(主成分分析)算法,就是把數據進行壓縮。找到一個低維空間,將一組高維數據映射到這個低維空間中,用更少數據量表示重要的信息。

  PCA實現人臉識別的原理及步驟:

1、樣本訓練

(1)圖像向量化。把P張大小爲的2D樣本圖像轉化爲1D列向量(或行向量)所有列向量組成矩陣sam(大小爲行,即個維度,P列,即P個樣本)。

(2)均值標準化。求出每個維度的均值,組成矩陣mean,每個樣本每個維度分別減去各個維度的均值,得到矩陣D。這一步的結果是將每個維度變成均值爲0,爲了後續處理方便。

(3)求D的協方差矩陣。這一步非常關鍵,對其理解要很仔細。首先要清楚求協方差矩陣的目的。PCA的目的是把數據壓縮,提取出最主要的信息。不同的正交基可以給同一組數據不同的表示,例如下圖,以左圖(1,1)爲正交基,則紅色的向量座標爲(3,2),右圖(-1,1)爲正交基,紅色向量座標爲(),如果我們找到一組基來表示一組數,基的數量比數據本身的維數小,那就實現了高維數據壓縮。


問題來了,怎麼找到最優的那組正交基呢?進行數據壓縮的時候,最希望壓縮後的數據儘可能大地保留原數據的信息,不希望有信息丟失。例如下圖,要把這五個2維數據壓縮成一維,如果選X軸作爲投影的基,它們投影到X軸,就有兩個數據的投影值重疊(-1,0)(-1,-2)和(0,1)(0,0),投影值不知道反映原數據具體哪個,就造成信息丟失。所以,我們選正交基的時候,要使數據新基上投影后的投影值儘可能分散。


那就把問題轉化到數學上了。二維數據中用方差反映分散程度,那N維數據呢?希望投影后的數據能反映原始數據信息,就是投影值之間沒有相關性,反映數據間相關性的就是協方差。這裏要注意的是,要考慮圖像維度與維度之間的相關性,所以構造的協方差矩陣是。維數是 !!!我看到一些做法是, 最後結果也對,我搞不清楚它理論支撐何在。至於公式爲什麼是,幾何意義可以看松子茶的博客,講得非常清楚。

 (4)求協方差矩陣的特徵向量。爲什麼要求協方差矩陣的特徵向量呢?因爲協方差矩陣反映了維度與維度之間的相關性,找到協方差矩陣特徵值大的前K個特徵向量就是找到最優基。更詳細的解釋可以看松子茶的博客。由上可見協方差矩陣的維數相當高,無法直接計算協方差矩陣,及其特徵向量。我就藉助了SVD分解。它的原理和特徵值分解差不多,這裏就講它在這步的應用吧。將偏離矩陣D進行SVD分解,U的行是的特徵向量,S是特徵值,V的行是的特徵向量,由此我們就可以得到協方差矩陣的特徵向量矩陣了。在matlab中用[U S V]=svd(D)就可以了。SVD的原理在推薦資料中可以瞭解到。

(5)根據上一步求到的特徵值得到貢獻最大的前K個特徵向量(即U的前K行)。這K個特徵向量就是我們要找的低維空間中的基。

(6)把每個樣本向量投影到這個低維空間中。先用D與特徵向量矩陣相乘,得到特徵臉矩陣(),K個特徵臉,再用樣本向量乘以特徵臉矩陣得到最後的投影值。

2、測試

(1)將待測圖像轉化爲一維列向量

(2)與特徵臉矩陣相乘得到投影值

(3)與每個樣本的投影值求歐式距離

(4)判斷最近的那個距離就是識別的結果



用matlab實現的結果:(人臉庫來自yale)

部分特徵臉:


識別結果:




小結:PCA的思想很簡單,但是實際操作編程的時候,很多細節和原理要琢磨得很細,在構造協方差矩陣那停留很久,也慶幸自己敢去質疑,推敲後纔得到合理的答案。


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