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:神經網絡人臉驗證學習
做者採用兩種不一樣的方法進行人臉驗證,即基於聯合貝葉斯的人臉驗證方法和基於神經網絡的人臉驗證方法。測試
貝葉斯人臉驗證方法:spa
將每個人臉的160*2*60維特徵用PCA降維到150維長度,而後用用兩個長度爲150維的特徵計算其聯合貝葉斯機率值,並與預約閾值比較斷定是不是同一張人臉。設計
神經網絡人臉驗證方法:blog
用於人臉驗證的神經網絡包括四層,即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%的人臉驗證準確率。