人臉識別之DeepFace模型
之前瞭解過了DeepID和FaceNet網路結構,但根據一些部落格的說法DeepFace是深度學習用在人臉識別領域的奠基之做,所以也看了一下DeepFace的理論,現在主要將自己的理解梳理一下,如理解有誤希望能及時指出。
首先還是給出文章的地址,想看文章的朋友可以點選連結下載文章地址。 該文章介紹了整個方法的流程以及實驗的結果。DeepFace在進行人臉識別的過程中採用的是檢測——對齊——提取——分類的過程。
一、人臉對齊
在對齊方面,DeepFace模型採用了3D對齊的方式,並且使用傳統的LBP直方圖(首先通過設定閥值並以某一畫素點為中心鄰域內的畫素點一起和閥值比較,當大於閥值時就將其變為1小於閥值就變成0,然後在做成直方圖統計各區域畫素出現的次數)進行圖片紋理化並提取對應的特徵。對提取出的特徵使用SVR處理以提取出人臉及對應的六個基本點。根據六個基本點做仿射變化,再根據3D模型得到 對應的67個面部關鍵點,根據這些點做三角劃分最終得出對應的3D人臉。其具體對齊流程如下:
a: 檢測出人臉和對應的6個基本點
b: 二維對齊後的人臉
c: 使用狄羅尼三角劃分在2D人臉上劃分出67個關鍵點,並在邊緣處採用新增三角形的方式避免不連續
d: 轉化為2D平面並和原始2D圖片進行比較時所需的標準3D人臉模型(通過標準3D人臉庫USF生成的對應的平均人臉模型)
e: 3D-2D轉化(標準3D臉轉化為2D和原有的2D做殘差使用)時所需要的變化,黑色部分表示不可見的三角形。對應不可見的三角形處理採用的是對稱方式解決的。
f: 通過3D模型產生的67個基準點進行分段對映使人臉變彎曲,對人臉進行對齊處理。
g: 處理生成的2D人臉
h: 根據處理生成的3D人臉
其中:c和f相比經過了標準3D人臉轉化為 2D人臉時的殘差處理,此時主要是為保證在轉化過程中特徵的保留。e的作用是為了顯示在處理過程中3D-2D轉化為何是通過三角形的仿射變化進行的,由e可以看出處理後的人臉是一個個的三角形塊。
二、人臉表示
該模型採用了CNN的結構對對齊後的人臉進行處理(首次將卷積網路運用於人臉識別的模型並且識別的準確度大於人眼的準確度)。具體網路結構如下:
由網路結構可以看出其使用了2個共享卷積層,3個不共享卷積層,兩個全連線層。該模型引數大概有1.2億,其中95%的引數來自於不共享的卷積層和全連線層,之所以採用不共享的卷積核原因主要是:對齊的人臉圖片中不同的區域存在不同的特徵,人臉的區域性穩定性假設並不存在,因此採用相同的卷積核會導致資訊的丟失。同時由於採用了不共享的卷積核(同一張圖片不同區域存在不同的卷積核)雖然會導致訓練時的引數量增加,但是不會影響提取特徵時的計算速度(變化所需的卷積核確定之後,變化所涉及到的原始圖片大小是不變的)。並不影響我們對模型的使用。由於我們採用的資料量較大,所以也可以保證我們能夠很好的進行不共享的卷積計算而不會影響模型的準確度。
除了不共享的卷積之外,該模型還採用了dropout方式避免模型的過擬合,該方法只是在F7的時候使用。在第一個卷積層後面還使用了對應的max池化層。由於池化雖然可以使模型具有一些不變性,增強模型的魯棒性。但是池化有時候也會導致特徵的缺失。因此該模型僅僅在第一層卷積層之後使用了池化層。
除上述特徵之外,該網路和一般的卷積網路沒有區別,訓練時採用的是交叉熵函式,並通過SGD和反向傳導的方法對模型的進行訓練,訓練過程採用整流線型啟用函式。並且圖片的輸入大小是可以隨著具體輸入變化的。
具體的卷積計算過程為:
c1:32個11X11的卷積核
M2:3X3的池化層,stride=2
c2: 16個9X9的卷積核
L4: 16個9X9的卷積核,引數不共享
L5: 16個7X7的卷積核,引數不共享
L6: 16個5X5的卷積核,引數不共享
F7: 全連線層4096維(提取出的人臉特徵)
F8: softmax分類層。4030是因為訓練採用的LFW資料中包含4030個people。
三、人臉歸一化:
歸一化的主要是將人臉的特徵值都變為(0,1)之間,避免光照等其他因素的影響。其歸一化的方式為:先對每一維進行歸一化,每一維除以該維的最大值,再將整個向量歸一化。具體如下:
四、鑑定度量:
鑑定度量是歸一化後的結果用來進行身份驗證使用的,也是一種其他的可用來分類時的度量,主要在計算相似度方面起作用。可以代替最後一層softmax層對圖片進行處理,也可以對處理後的結果採用度量計算相似度。其分類的度量方式主要有三種:1:內積,2:卡方加權,3:siamese網路
1. 對於內積直接進行計算不做介紹:
2. 卡方加權的方式如下:
其中f表示歸一化後的特徵,w是通過SVM學習到的引數。
3. siamese網路:
使用成對的圖片進行訓練,保證了可以使用特徵之間的絕對不同而不是簡單的邏輯不同。同時由於兩張圖片雖然採用了相同的引數,但是要運算兩次其對應的網路計算量並無差異(原始處理兩張圖片相比)。該距離可以用來比較兩張圖片是不是一個人。其距離的具體計算方式為:
其中alpha是訓練得到的。
五、實驗:
通過實驗可以發現通過3D對齊之後的識別在LFW資料集上可以達到97.35%,不做對齊的話只有87.9%。說明對齊的重要性,同時如果對齊後的資料直接採用SVM或者LBP傳統方法只有91.4%也證明了深度學習的卷積網路在處理人臉識別問題的優勢。
對於計算複雜度,該網路沒有GPU加速的情況下提取的時間為0.18。