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%的人臉驗證準确率。
愛上一個人,就像突然有了盔甲,也突然有了軟肋。