人臉驗證:DeepID

《Deep Learning Face Representation from Predicting 10000 Classes》論文解讀


這篇論文來自香港中文大學湯曉鷗課題組,發表於CVPR2014,論文原文見:

http://www.ee.cuhk.edu.hk/~xgwang/papers/sunWTcvpr14.pdf

人臉驗證(Face Verification)就是判斷兩個人臉是不是同一個人,一個常用的場景是判斷身份證是不是本人。

概述

文章使用深度學習的方法來提取人臉高級特徵(high-level features),這種特徵被稱爲DeepID。DeepID特徵是通過人臉分類任務學習得到的,這樣的特徵可以使用在人臉驗證中,最終在LFW數據集上取得了97.45%的結果。

相關研究

之前的人臉驗證任務主要的方法是使用過完備的(over-complete)低層次特徵,結合淺層的機器學習模型進行的。過去的方法常常是將人臉提取出幾萬乃至幾百萬的特徵,然後將特徵進行降維,再計算兩個特徵的相似度。

人臉特徵提取

本文使用卷積神經網絡來提取人臉特徵,特徵提取框架如下圖所示:

特徵提取

首先將每個人臉分成多個小塊(patch),每個patch分別輸入到卷積神經網絡中。圖中CNN裏每層旁邊的數字代表神經元的數量,最後一個隱層的輸出叫做Deep hidden identity features(DeepID),DeepID特徵爲160維。特徵提取的最後,把每個patch的DeepID特徵連起來就構成了這張臉的特徵。

DeepID

DeepID特徵是在人臉識別(face identification,人臉身份認定)任務中訓練得到的。人臉識別就是給定一張人臉,然後判斷這張人臉屬於誰,這個任務可以看成是分類模型,也就是給定一張臉,將它分類到n個身份中的一個。這個任務比人臉驗證任務更有挑戰性,因此人臉識別任務中學習到的特徵可以更好地泛化到別的任務中。
文章使用CNN進行DeepID特徵學習。CNN的結構如下圖所示:

CNN

CNN的訓練輸入是人臉的某個patch,任務目標是將這個輸入圖片分類到某個具體的身份類別中。

CNN從左向右使用了4個卷積層,3個池化層。當patch是長方形時,輸入尺寸爲39*31*k,當patch是正方形時,輸入尺寸爲31*31*k。這裏的k代表顏色通道,k=3代表彩色,k=1代表黑白。值得注意的是CNN最後一層DeepID層不僅和Convolutional layer 4直接相連,也和Max-pooling layer 3相連,作者將之稱爲Multi-scale ConvNets。這樣做的原因是第四層神經元數量少,攜帶的信息比較少,使用第三層可以減少信息損失。這一步的具體做法是:先將Convolutional layer 4和Max-pooling layer 3這兩層拉平(flatten),然後再將其和DeepID層全連接,經過ReLU激活函數後的輸出就是DeepID特徵。DeepID層後面接着Softmax層,將不同的DeepID特徵分類到不同的身份類別中。至此,DeepID特徵學習完畢。

Face patch

首先對人臉圖片檢測5個特徵點(兩個眼睛,鼻尖,兩個嘴角),然後將人臉進行變換對齊。

patch

在對齊的臉上生成10個區域,分別是5個全局區域和以5個特徵點爲中心的區域。對每個區域還要生成3種尺度,每種尺度有RGB和gray兩種顏色,最終10個區域形成60個patch。

文章先使用60個patch訓練60個CNN,每個CNN使用patch本身和patch的翻轉生成兩個160維的DeepID特徵,每個人臉最終提取爲160*2*60=19200維特徵。

人臉驗證

上一部分已經提取出了人臉的特徵,現在需要做的是判斷兩張臉是不是同一個人。這篇文章使用了Joint Bayesian和Neural Network兩種方法進行區分。

Joint Bayesian

聯合貝葉斯在之前的人臉驗證任務中取得了良好的效果。x1x2 代表兩張圖片的特徵,Joint Bayesian就是計算似然比:

r(x1,x2)=logP(x1,x2|HI)P(x1,x2|HE)

更多Joint Bayesian可以參考論文《Bayesian Face Revisited: A Joint Formulation》,也可以參考我的另一篇博客《人臉驗證:Joint Bayesian》。

Neural Network

文章還使用了NN進行人臉驗證,將人臉驗證任務變爲一個分類問題。NN結構如圖:

NN

輸入層是兩張圖片的DeepID特徵,共640*60個輸入,隨後是一個局部連接層和全連接層,最後只有一個輸出。這個輸出使用了sigmoid激活函數,輸出兩張人臉的相似度。局部連接層只和第一層輸入特徵中的一個組相連接,用來學習局部關係並降低特徵維度。後面的全鏈接層用來學習全局關係。輸入的特徵被分成60個組,每個組對應兩張圖片的同一個patch。每個patch要經過一次翻轉,則每張圖片每個patch生成160*2個特徵,兩張圖片則爲640個特徵。所有的隱層在訓練時需要使用dropout,而輸入層不能使用dropout。高維特徵的學習不使用dropout會導致梯度擴散(gradient diffusion)的問題。爲解決這一問題,文章先將原始大網絡拆成小網絡進行訓練。圖中深色部分就代表一個這樣的子網絡,子網絡的輸入爲原始輸入的一個組。然後使用訓練好的子網絡的第一層權重初始化原來的網絡,並在訓練中這部分權重保持不變,通過訓練調節第二層和第三層權重。

結果

爲了訓練這一模型,文章使用了CelebFaces庫。CelebFaces庫包含5436個人的87628張照片,平均每個人有16張圖片。先隨機選取80%的圖片訓練DeepID再使用剩下的20%訓練人臉驗證模型。在使用Joint Bayesian時,使用PCA將特徵維數降低到150維。

Multi-scale ConvNets

CNN最後一層DeepID層不僅和Convolutional layer 4直接相連,也和Max-pooling layer 3相連,這一結構被稱爲Multi-scale ConvNets。

multiscale

從上圖看出,這一結構對結果有一定的提升。

Learning effective features

classes

使用不同身份類別數量訓練出來的模型結果如上圖所示,可以看出分類類別越多,提取出來的DeepID特徵越好。

Over-complete representation

visualization

將DeepID特徵進行可視化。從圖中可以看到相同人臉的DeepID相似度比較高,而不同人臉的差別比較大。

文章的後面作者還進行了一些其他的實驗,不再一一道來。

總結

人臉驗證任務的主要難點在於尋找到一種人臉特徵提取方法,這種提取方法在同一個人的臉上相似而不同的人之間差別儘可能的大。在特徵提取的基礎上,人臉驗證的任務可以看成一個分類模型。

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