DeepFace--Facebook的人臉識別

轉自:http://blog.csdn.net/stdcoutzyx/article/details/46776415

連續看了DeepID和FaceNet後,看了更早期的一篇論文,即FB的DeepFace。這篇論文早於DeepID和FaceNet,但其所使用的方法在後面的論文中都有體現,可謂是早期的奠基之作。因而特寫博文以記之。

DeepFace基本框架

人臉識別的基本流程是:

detect -> align -> represent -> classify

人臉對齊流程

img

分爲如下幾步:

a. 人臉檢測,使用6個基點 
b. 二維剪切,將人臉部分裁剪出來 
c. 67個基點,然後Delaunay三角化,在輪廓處添加三角形來避免不連續 
d. 將三角化後的人臉轉換成3D形狀 
e. 三角化後的人臉變爲有深度的3D三角網 
f. 將三角網做偏轉,使人臉的正面朝前。 
g. 最後放正的人臉 
h. 一個新角度的人臉(在論文中沒有用到)

總體上說,這一步的作用就是使用3D模型來將人臉對齊,從而使CNN發揮最大的效果。

人臉表示

img

經過3D對齊以後,形成的圖像都是152×152的圖像,輸入到上述網絡結構中,該結構的參數如下:

  • Conv:32個11×11×3的卷積核
  • max-pooling: 3×3, stride=2
  • Conv: 16個9×9的卷積核
  • Local-Conv: 16個9×9的卷積核,Local的意思是卷積核的參數不共享
  • Local-Conv: 16個7×7的卷積核,參數不共享
  • Local-Conv: 16個5×5的卷積核,參數不共享
  • Fully-connected: 4096維
  • Softmax: 4030維

前三層的目的在於提取低層次的特徵,比如簡單的邊和紋理。其中Max-pooling層使得卷積的輸出對微小的偏移情況更加魯棒。但沒有用太多的Max-pooling層,因爲太多的Max-pooling層會使得網絡損失圖像信息。

後面三層都是使用參數不共享的卷積核,之所以使用參數不共享,有如下原因:

  • 對齊的人臉圖片中,不同的區域會有不同的統計特徵,卷積的局部穩定性假設並不存在,所以使用相同的卷積核會導致信息的丟失
  • 不共享的卷積核並不增加抽取特徵時的計算量,而會增加訓練時的計算量
  • 使用不共享的卷積核,需要訓練的參數量大大增加,因而需要很大的數據量,然而這個條件本文剛好滿足。

全連接層將上一層的每個單元和本層的所有單元相連,用來捕捉人臉圖像不同位置的特徵之間的相關性。其中,第7層(4096-d)被用來表示人臉。

全連接層的輸出可以用於Softmax的輸入,Softmax層用於分類。

人臉表示歸一化

對於輸出的4096-d向量:

  • 先每一維進行歸一化,即對於結果向量中的每一維,都要除以該維度在整個訓練集上的最大值。
  • 每個向量進行L2歸一化

分類

得到表示後,使用了多種方法進行分類:

  • 直接算內積
  • 加權的卡方距離
  • 使用Siamese網絡結構

加權卡方距離計算公式如下:

img

其中,加權參數由線性SVM計算得到。

Siamese網絡結構是成對進行訓練,得到的特徵表示再使用如下公式進行計算距離:

img

其中,參數alpha是訓練得到。Siamese網絡與FaceNet就很像了。

實驗評估

數據集

  • Social Face Classification Dataset(SFC): 4.4M張人臉/4030人
  • LFW: 13323張人臉/5749人 
    • restricted: 只有是/不是的標記
    • unrestricted:其他的訓練對也可以拿到
    • unsupervised:不在LFW上訓練
  • Youtube Face(YTF): 3425videos/1595人

Training on SFC

  • 訓練使用的人數不同(1.5K/3.3K/4.4K)
  • 訓練使用的照片數目不同(10%/20%/50%)
  • 使用的網絡不同(去掉第三層/去掉第4、5層/去掉第3、4、5層)

img

Results on LFW

img

Results on YTF

img

總結

DeepFace與之後的方法的最大的不同點在於,DeepFace在訓練神經網絡前,使用了對齊方法。論文認爲神經網絡能夠work的原因在於一旦人臉經過對齊後,人臉區域的特徵就固定在某些像素上了,此時,可以用卷積神經網絡來學習特徵。

針對同樣的問題,DeepID和FaceNet並沒有對齊,DeepID的解決方案是將一個人臉切成很多部分,每個部分都訓練一個模型,然後模型聚合。FaceNet則是沒有考慮這一點,直接以數據量大和特殊的目標函數取勝。

在DeepFace論文中,只使用CNN提取到的特徵,這點倒是開後面之先河,後面的DeepID、FaceNet全都是使用CNN提取特徵了,再也不談LBP了。

參考文獻

[1]. Taigman Y, Yang M, Ranzato M A, et al. Deepface: Closing the gap to human-level performance in face verification[C]//Computer Vision and Pattern Recognition (CVPR), 2014 IEEE Conference on. IEEE, 2014: 1701-1708.

發佈了0 篇原創文章 · 獲贊 15 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章