1.DeepID1 (Deep Learning Face Representation from Predicting 10,000 Classes)
Step1:構建網絡框架
DeepConvNet主要由卷積層、Pooling層和全連接層構成。其中,Deep hidden indentity features層與Pool3和Conv4部分連接。
Step2:特征提取
每張人臉圖提取5個landmark(兩個眼睛的中心,嘴角的兩個角點,鼻尖):1.以部分landmarks弱對齊方式提取5個臉部patch;2.以每個landmark為中心,提取5個臉部patch。每張臉提取10個patch,選取3種不同分辨率,2種不同色彩(即彩色圖和灰度圖),一張人臉圖可以提取60個pathches,因此需要訓練60個CNN。每個CNN輸出特征長度均為160,為了增加模型訓練數據量,可以對60個patches進行鏡像處理,最終得到的特征長度為160*60*2
Step3:神經網絡人臉驗證
作者采用兩種不同的方法進行人臉驗證,即基於聯合貝葉斯的人臉驗證方法和基於神經網絡的人臉驗證方法。
貝葉斯人臉驗證方法:
將每一個人臉的160*2*60維特征用PCA降維到150維長度,然后用用兩個長度為150維的特征計算其聯合貝葉斯概率值,並與預定閾值比較判定是否是同一張人臉。
神經網絡人臉驗證方法:
用於人臉驗證的神經網絡包括四層,即input layer, locally connected layer, fully connected layer和output layer。
input layer:利用Conv-Net可以從一幅人臉圖像中提取出160*2*60維長度的一維特征(在這里60代表之前訓練得到的60個CNN)。人臉驗證的輸入是兩幅人臉圖像,那么用60個CNN中的其中一個CNN對兩幅人臉圖像及其鏡像圖像進行特征提取,可以得到160*2(mirror)*2(people)=640維長度的一特征。相應地,60個CNN可以生成60組640維長度的一維特征,將這些特征首尾得到640*60維長度的以為特征。將640*60=38,400長度的一維特征作為人臉驗證神經網絡的輸入。為了滿足后續網絡對輸入層的需求,我們在輸入端仍然采用60段獨立的640維長度的特征(每段640維的特征是有兩個人臉圖像及其鏡像圖像通過一個CNN生成的)。
locally connected layer: 之前通過CNN特征提取得到的60組特征。事實上,每一組特征內部都是高度冗余的,因此在輸入層后添加如下圖所示的局部連接層作為第一個隱層,這樣既可以保留局部特征學習特性又能實現特征降維。
fully connected layer:第二個隱層是全連接層,用於學習全局特征。
output layer:輸出層是一個sigmoid函數,用於輸出學習結果。
另外,需要注意的是訓練網絡中每一個隱層(即locally-connected layer和fully-cnnected layer)后都會跟relu層和dropout層,防止梯度彌散和過擬合,使loss收斂效果和網絡泛化性能更好。
Step4:實驗測試
作者比較了聯合貝葉斯人臉驗證和神經網絡人臉驗證方法的性能,實驗結果如下:
1.通過聯合貝葉斯人臉驗證方法實驗可知:采用60個Conv-net得到的特征比只使用1個Conv-net得到的特征效果好。(准確率從95.35%提升到96.05%)。即Convnet數量越多,准確率越高。
2.增加Soft-max layer的輸出數量(即分類數,或識別的個體數)可以提升人臉驗證的准確率。即分類的類別數越多,DeepConv-Net學到的DeepID特征(160維)越有效。此外,作者強調用於人臉驗證的一定是160維長度的DeepID特征,而不是Softmax Layer的輸出。如果用SoftmaxLayer輸出的結果(例如用4348個不同人的數據訓練DeepID,Softmax輸出是4348維)進行人臉驗證特征,采用聯合貝葉斯人臉驗證方法得到的准確率約為66%,而神經網絡人臉驗證方法則完全失效。
3.增加patches數(即Convnet數目,兩者是相等的)會使DeepID特征維度升高,這與我們在前面第1條結果中得到的結論是一致的。此外,將Convnet數目從1提升到60時,分別用聯合貝葉斯和神經網絡兩種方式進行人臉驗證。實驗結果表明:雖然神經網絡人臉驗證方法在Convnet數從1提升到60的過程中准確率相對提升幅度較聯合貝葉斯方法略高,但是當Convnet數目是60個時,聯合貝葉斯方法絕對准確率更高。
4.訓練數據越多,Convnet數目越多(即一幅人臉圖像提取的Patch數目),人臉驗證准確率越高。
2. DeepID2 (Deep Learning Face Representation by Joint Identification-Verification)
繼之前的DeepID1實現了97.45%的人臉驗證准確率后,作者進一步發揚光大設計了DeepID2,將人臉驗證准確率提高至99.15%。我們知道,提高識別網絡性能本質上就是要降低類內差異,提高類間差異。然而,傳統的DeepID1特征更多將特征學習過程集中在如何提高類間差異,而沒有考慮到降低類內差異。特別是對於一些訓練時沒有出現的類別,對於同一個人的兩幅不同圖像,因為得到的DeepID1特征不同,很可能在人臉驗證時錯誤識別為不同類別;又或者是,不同人的DeepID1特征驗證位同一個人。因此,作者在設計DeepID2時,通過修改Loss函數的組成形式,在提高類間差距的基礎上進一步降低類內差距,從而對訓練過程中未出現的新類別在人臉驗證階段發揮積極作用。下面將具體介紹DeepID2:
Step1:DeepID2特征提取模型
DeepID2網絡模型與DeepID1網絡模型基本類似,DeepID2 layer的輸入是有Pool3和Conv4共同組成的。這里需要注意DeepID2與DeepID1的一個重要區別是Loss函數的形式。DeepID1的Loss函數即SoftmaxLoss,DeepID2的Loss包括兩個部分:SoftmaxLoss和L2/L1 Loss,即文中提到的識別Loss和驗證Loss,具體形式如下所示:
第一個公式是識別Loss,其主要目的是增加類間差距,從而區分不同人臉的圖像。第二個公式是驗證Loss,其主要目的是增加類間差距、降低類內差距。可以看出Yij=1時表示i和j屬於同一類,這時fi和fj越接近(類內差距越小)則loss越低;Yij=-1時表示i和j屬於不同類,這是如果fi和fj的差值的平方大於某一個閾值m,則loss=0,因此可知對於不同類別類間差距越大,loss越小。作者認為驗證loss可以從L1/L2/Cos Loss中任選一種形式,另外作者用權重lamda表示識別Loss和驗證Loss的相對權重。
Step2:人臉驗證
在進行人臉驗證時,作者采用SDM算法從一幅人臉圖像中檢測到的21個臉部特征點,然后通過相似性變換進行全局人臉對齊。然后根據人臉中landmark的位置、圖像顏色、圖像尺度及水平鏡像方式生成400個臉部patches.考慮到水平鏡像的因素,對400個臉部patches可以訓練200個CNNs進行識別。200個CNNs處理一幅人臉圖像可以生成400組長度分別為160維的特征,即特征總長為400*160=64,000維。當然,這樣的特征冗余度很高,因此作者采用前向-反向貪婪算法選取出效果最好的25組特征,這樣可以生成25*160=4000維的特征。然后用PCA將4000維的特征降至180維。用聯合貝葉斯人臉驗證方法驗證DeepID2特征。
實驗結果:
1.作者驗證了lamda(即驗證loss的權值)對人臉驗證准確率的影響。當lamda=0(相當於不用驗證loss)或lamda=+無窮大(相當於不用識別loss),人臉驗證效果都不如lamda在倆者之間的取值。作者采用不同的lamda取值測試L2人臉驗證模型和聯合貝葉斯人臉驗證模型,從實驗結果可以看出lamda從0增加到+無窮大時,兩種人臉驗證模型的准確率都是先升高后降低。
2.當用於訓練DeepID2的人臉類別越豐富(即人臉類別數),通過CNN學習的特征在人臉識別階段會越有效,該結論與DeepID1是類似的。
3.作者測試了不同形式的驗證loss函數(L2+ loss, L2- loss, 余弦loss)對於人臉驗證結果的影響,此處不作介紹。
4.作者選取了七組不重復的特CNN特征組合,用聯合貝葉斯方法處理后,進一步采用svm對結果融合,得到最終結果99.15%。(OMG,這種處理方法.......)
總之,作者通過修改CNN網絡模型(卷積層的kernel數)和Loss(最重要的修改)的方式訓練得到新的DeepID2特征,通過進化版本的特征組合方式,實現了99.15%的人臉驗證准確率。