基於PCA的人臉降維


  一、PCA原理

      PCA的原理就是將原來的樣本數據投影到一個新的空間中,相當於我們在矩陣分析里面學習的將一組矩陣映射到另外的坐標系下。通過一個轉換坐標,也可以理解成把一組坐標轉換到另外一組坐標系下,但是在新的坐標系下,表示原來的原本不需要那么多的變量,只需要原來樣本的最大的一個線性無關組的特征值對應的空間的坐標即可。

      比如,原來的樣本是30*1000000的維數,就是說我們有30個樣本,每個樣本有1000000個特征點,這個特征點太多了,我們需要對這些樣本的特征點進行降維。那么在降維的時候會計算一個原來樣本矩陣的協方差矩陣,這里就是1000000*1000000,當然,這個矩陣太大了,計算的時候有其他的方式進行處理,這里只是講解基本的原理,然后通過這個1000000*1000000的協方差矩陣計算它的特征值和特征向量,最后獲得具有最大特征值的特征向量構成轉換矩陣。比如我們的前29個特征值已經能夠占到所有特征值的99%以上,那么我們只需要提取前29個特征值對應的特征向量即可。這樣就構成了一個1000000*29的轉換矩陣,然后用原來的樣本乘以這個轉換矩陣,就可以得到原來的樣本數據在新的特征空間的對應的坐標。30*1000000 * 1000000*29 = 30 *29, 這樣原來的訓練樣本每個樣本的特征值的個數就降到了29個。

    二、基於PCA的人臉識別

  1)讀取訓練集圖像數據

  讀取測試集目錄下指定個數的圖像,然后將其保存在一個二維數組中。如果圖像個數為m,圖像長寬為i、j,則我們創建一個二維數組A[m][i*j=n]用來保存圖像數據。數組的每一行表示一個圖像的所有像素信息,每一列表示一個隨機變量,也即不同圖像同一位置的像素信息,降維也即用更少的列來代表圖像。

    2)計算協方差矩陣

      協方差矩陣表示不同隨機變量之間的相互關系,圖像中也即求任意兩個像素之間的關系。如果兩個隨機變量的協方差為正或為負,表明兩個變量之間具有相關性,如果為零表示兩個變量不相關。通過計算協方差矩陣,我們就可以獲得不同像素之間的關系。針對人臉識別,計算的協方差矩陣大小為n*n,其中n表示圖像的像素點個數。

    3)求取特征值和特征向量

      由於協方差矩陣是實對稱陣,所以可以求得其所有的特征值和特征向量,其共有n個特征值和特征向量。

4)選擇主成分

      所謂主成分即是具有最大特征值的特征向量,所以我們需要將特征向量按照特征值由大到小排序,然后根據精度要求選擇不同數量的特征向量,例如我們選擇了前p個特征向量,通常p遠小於n(在我們的人臉識別實驗中,為了達到95%的精度,p只有72,而n為120*140=17040)。

5)訓練集降維

      此步驟將原始的訓練集進行降維變換,原始的圖像數據是m*n的矩陣,只包含主成分的特征向量構成一個n*p的矩陣(每一列都是一個特征向量)。將兩個矩陣相乘,我們即可獲得降維之后的圖像矩陣m*p,這個矩陣遠小於原始的圖像數據。

6)測試集降維

     同步驟5相似,讀取所有的測試集圖像,然后對其也進行降維操作。如果測試集有M幅圖像,則降維后的矩陣為M*p。

7)人臉識別

       該步驟為人臉識別的最后一步,用來對測試集進行識別,並計算識別准確率。該步驟有一個限制,測試集中的頭像必須包含在訓練集中,否則得出的結果將沒有意義(這也就是代碼一開始要求訓練集大於測試集的目的)。識別的方法和最初的圖像匹配方法類似:將測試集中的每一幅降維圖像與降維的訓練集進行匹配,然后將其分類到距離最小的訓練集頭像中,如果兩個頭像表示一個人,表示識別成功,否則表示識別失敗。與原始的匹配相比,由於對圖像進行了降維,所以匹配速度大大提升,在我們的實驗中速度提升了200以上(120*142/72)。

 

這里只是對幾個博客的內容作了一個總結,留個備份方便查看,參考鏈接如下:

http://blog.csdn.net/yutianzuijin/article/details/10823985

http://blog.csdn.net/watkinsong/article/details/8234766

 

下面是特征臉的實現過程:

  1. 准備一個訓練集的人臉圖像。構成訓練集的圖片需要在相同的照明條件下拍攝的,並將所有圖像的眼睛和嘴對齊。他們還必須在預處理階段就重采樣到一個共同的像素分辨率(R×C)。現在,簡單地將原始圖像的每一行的像素串聯在一起,產生一個具有R×C個元素的行向量,每個圖像被視為一個向量。現在,假定所有的訓練集的圖像被存儲在一個單一的矩陣T中,矩陣的每一行是一個圖像。
  2. 減去均值向量. 均值向量a要首先計算,並且T中的每一個圖像都要減掉均值向量。
  3. 計算協方差矩陣S的特征值和特征向量。每一個特征向量的維數與原始圖像的一致,因此可以被看作是一個圖像。因此這些向量被稱作特征臉。他們代表了圖像與均值圖像差別的不同方向。通常來說,這個過程的計算代價很高(如果可以計算的話)。
  4. 選擇主成分。一個D x D的協方差矩陣會產生D個特征向量,每一個對應R × c圖像空間中的一個方向。具有較大特征值的特征向量會被保留下來,一般選擇最大的N個,或者按照特征值的比例進行保存,如保留前95%。

這些特征臉現在可以用於標識已有的和新的人臉:我們可以將一個新的人臉圖像(先要減去均值圖像)投影到特征臉上,以此來記錄這個圖像與平均圖像的偏差。每一個特征向量的特征值代表了訓練集合的圖像與均值圖像在該方向上的偏差有多大。將圖像投影到特征向量的子集上可能丟失信息,但是通過保留那些具有較大特征值的特征向量的方法可以減少這個損失。例如,如果當前處理一個100 x 100的圖像,就會得到10000個特征向量。在實際使用中,大多數的圖像可以投影到100到150個特征向量上進行識別,因此,10000個特征向量的絕大多數可以丟棄。

參考:http://zh.wikipedia.org/wiki/特征臉


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM