特徵臉

人臉識別問題的一組特徵向量

特徵臉(Eigenface)是指用於機器視覺領域中的人臉識別問題的一組特徵向量。使用特徵臉進行人臉識別的方法首先由Sirovich and Kirby (1987)提出,並由Matthew TurkAlex Pentland用於人臉分類。該方法被認為是第一種有效的人臉識別方法[來源請求]。這些特徵向量是從高維矢量空間的人臉圖像的共變異數矩陣計算而來。

來自 AT&T Laboratories 劍橋

生成特徵臉

一組特徵臉 可以通過在一大組描述不同人臉的圖像上進行主成分分析(PCA)獲得。任意一張人臉圖像都可以被認為是這些標準臉的組合。例如,一張人臉圖像可能是特徵臉1的10%,加上特徵臉2的55%,再減去特徵臉3的3%。值得注意的是,它不需要太多的特徵臉來獲得大多數臉的近似組合。另外,由於人臉是通過一系列向量(每個特徵臉一個比例值)而不是數字圖像進行保存,可以節省很多存儲空間。

實現

以下是特徵臉的實現過程:

  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個特徵向量的絕大多數可以丟棄。

計算特徵向量

直接在圖像的共變異數矩陣上進行PCA計算在計算量上是不可行的。如果圖像比較小,如100 × 100的灰度圖像,則每個圖像是一個10000維空間的一個點,共變異數矩陣 S 則具有10,000 × 10,000 = 108個元素。然而,共變異數矩陣的受到訓練圖像的限制:如果有 N 個訓練樣本,則最多有 N − 1 個對應非零特徵值的特徵向量。如果訓練樣本的數目比圖像的維數低,則可以通過如下方法簡化主成份的計算。

T 是預處理圖像的矩陣,每一列對應一個減去均值圖像之後的圖像。則,共變異數矩陣為 S = TTT ,並且對 S 的特徵值分解為

 

然而, TTT 是一個非常大的矩陣。因此,如果轉而使用如下的特徵值分解

 

此時,我們發現如果在等式兩邊乘以T,可得到

 

這就意味著,如果 uiTTT的一個特徵向量,則 vi = TuiS 的一個特徵向量。假設我們的訓練集有300張100 × 100像素的圖像,則 TTT 是一個300 × 300的矩陣,這就比原先的 10,000 × 10,000 共變異數矩陣要容易處理許多。需要注意的是,上面的特徵向量 vi 沒有進行歸一化,如果需要,應該在後面在進行處理。

在人臉識別中的應用

特徵臉的最直接的應用就是人臉識別。在這個需求下,特徵臉相比其他手段在效率方面比較有優勢,因為特徵臉的計算速度非常快,短時間就可以處理大量人臉。但是,特徵臉在實際使用時有個問題,就是在不同的光照條件和成像角度時,會導致識別率大幅下降。因此,使用特徵臉需限制使用者在統一的光照條件下使用正面圖像進行識別。

相關領域

參考文獻

外部連結