經典計算機視覺論文筆記——DeepFace\DeepID\DeepID2\DeepID3\FaceNet\VGGFace彙總
阿新 • • 發佈:2019-01-11
1. DeepFace:Closing the Gap to Human-Level Performance in Face Verification
最早將深度學習用於人臉驗證的開創性工作。Facebook AI實驗室出品。動用了百萬級的大規模資料庫。典型的識別訊號提特徵+驗證訊號refine的兩步走,對DeepID等後人的工作影響很大。
技術概括
關注了人臉驗證流程中的人臉對齊步,採用了比較複雜的3D人臉建模技術和逐塊的仿射變換進行人臉對齊。可以解決non-planarity對齊問題。 提出了一個9層(其實是8層)的CNN進行特徵提取。提出了一種針對對齊後人臉的的locally connected layers一些值得反思的細節
CNN的結構:conv-->pooling-->conv-->3 locally connected layers-->2 fc。由於最後5層都沒有權值共享,所以會造成引數膨脹,共有超過1.2億個引數,其中95%都來源於最後5層。但locally connected layers相比原始的conv計算速度是一樣的。因為動用了目前看來也是驚人的4000人的400百萬幅影象,所以沒有出現明顯的過擬合。 單個CNN最後提取的特徵維數是2. Deep LearningFace Representation from Predicting 10,000 Classes
湯曉鷗團隊DeepID系列的開創之作。也是典型的兩步走策略。
技術概括
訓練一個9層CNN對約10000個人(其實是8700個人)做人臉識別,中間有跨層連線和 locally connected layer。倒數第二層的輸出作為特徵。 多個人臉區域的特徵進行連線作為總特徵。 用CNN學習出的特徵再訓練一個joint bayesian進行人臉驗證。一些值得反思的細節
單個CNN訓練出的特徵是160維,維度非常小,具有極強的壓縮性質。 明確提出識別訊號的作用,強於只使用驗證訊號。 CNN的結構:conv1-->pooling1-->conv2-->pooling2-->conv3-->pooling3-->conv4-->fc-->softmax。其中conv3只在每個2*2區域性區域權值共享,conv4是locally connected layer,權值不共享。fc同時與pooling3與conv4全連線,是一種多解析度策略。 CNN輸入會根據patch的不同而改變,後續的feature maps都會跟著改變。 人臉對齊採用3個landmarks。根據5個landmarks取樣patches。一共10 regions*3 scales*1 RGB*1 gray=60 patches。每個patch還要取flip。所以,最後要訓練60*2=120個CNN!最後把每個CNN的160維特徵連線成160*2*60=19200維特徵。工作量有點大。 用CNN學習出的特徵訓練了joint bayesian和一個驗證用的神經網路。驗證用神經網路只是一個三層的淺層網路,輸入是成對的影象patches,19200*2維,輸出層是2分類結果輸出。對比結果顯示這種神經網路沒有joint bayesian效果好。 訓練joint bayesian前用PCA把19200維特徵降維到150。 資料庫包括10177個人,共202599幅影象。3. Deep LearningFace Representation by Joint Identification-Verification
超越人類水平(97.53%)。不過同是曉鷗團隊的gaussian face是第一次超越人類。
技術概括
明確採用兩種監督訊號:識別訊號用於增加類間距離,驗證訊號用於減少類內距離(肯定也是有利於增加類間距離的)。 相比於DeepID,loss層除了用於分類的softmax loss,還加入了contrastive loss。兩種loss同時反向傳播。 相比於DeepID,從眾多patches中挑選出了25個最佳pathes,減少計算負擔和資訊冗餘。 驗證採用joint bayesian或直接用L2距離。一些值得反思的細節
CNN結構除了最後的loss層外與DeepID一樣。輸出是8192個人的分類結果。 從400個patches中挑選了 25個。訓練25個CNN,最後連線成的特徵向量是25*160=4000維。在訓練joint bayesian之前,要通過PCA進一步降維到180維。 因為加入了contrasitive loss,CNN學習出的特徵可以直接用於計算L2距離進行人臉驗證,效果不會比joint bayesian差很多。 最後通過選擇不同的patches,訓練了7個分類器做ensemble。4. Deeply learnedface representations are sparse, selective, and robust
一半內容是理論分析。總體上兩步走策略沒變,只是CNN結構做了較大改變。
技術概括
增加隱含層的寬度,即feature maps個數。 監督資訊跨層連線。 理論分析DeepID2+的特徵是sparsity\selectiveness\robustness。sparsity是指特徵向量中有許多分量為0,因此具有壓縮能力。selectiveness是指某個分量對某個人的影象或某種屬性的影象的啟用響應程度和其他人或屬性的程度不一樣,因此具有判別能力。robustness是指影象特徵在遮擋前後具有一定的不變性。 利用sparsity進行特徵二值化,可用於大規模影象檢索。一些值得反思的細節
訓練集中沒有特意加入遮擋樣本,但學習出的特徵也具有遮擋的魯棒性。 相比於DeepID2,feature maps的個數由20、40、60、80變為128、128、128、128。輸出的特徵維數由160變為512。 相比於DeepID2,25個patches還要再取一次flip,訓練50個CNN,特徵維數共50*512=25600維。 資料庫:12000個人,290000幅影象。 fc和loss層連線到之前的每一個pooling層後面,也就是類似googlenet的策略,讓監督資訊直接作用到每一層。但fc層應該權值不共享。 通過對人臉屬性方面的分析,說明通過人臉識別與驗證訊號學習到某個神經元是對某種屬性有更強的啟用響應。所有這些神經元的組合代表了各種屬性的特徵組合,說明通過這些中層屬性特徵可以對高層的身份特徵進行差別,與kumar的工作有異曲同工之妙。5. DeepID3: FaceRecognition with Very Deep Neural Networks
針對CNN的結構做了較大改進,採用影象識別方面的最新網路結構,且層數加深。其他方面較前作沒有變化。
技術概括
實現了兩種更深層的CNN網路,一種是參考VGG對conv層的不斷堆積,一種是參考googlenet對inception結構的不斷堆積。 繼續採用DeepID2+中的監督訊號跨層連線策略。 繼續採用DeepID2+中的25個patches(加flip)特徵組合策略。其中VGG和googlenet各訓練一半。 繼續採用DeepID2+中的joint bayesian用於驗證的策略。一些值得反思的細節
VGG類CNN結構: conv1\2-->pooling1-->conv3\4-->pooling2-->conv5\6-->pooling3-->conv7\8-->pooling4-->lc9\10,fc和loss連線到之前每一個pooling層後面。 googlenet類CNN結構:conv1\2-->pooling1-->conv3\4-->pooling2-->inception5\6\7-->pooling3-->inception8\9-->pooling4,fc和loss連線到之前每一個pooling層後面。 relu用於除了pooling層之外的所有層。 dropout用於最後的特徵提取層。 特徵總長度大約30000維。 PCA降維到300維。 與DeepID2+比起來,精度幾乎沒有提高。可能還是網路過淺,訓練資料過少,沒有完全發揮VGG和googlenet的效果。6. FaceNet: AUnified Embedding for Face Recognition and Clustering
非兩步式方法,end-to-end方法。在LFW的精度基本上到極限了,雖然後面還有百度等99.77%以上的精度,但從原理上沒有創新,也是用了triplet loss等本文得出的技術。
技術概括
提出了一種end-to-end的網路結構,最後連線的是triplet loss。這樣提取的特徵可以直接用歐氏距離算相似度。 提出了樣本選擇技術,找hard triplets。這一步至關重要,選不好可能會不收斂。一些值得反思的細節
特徵維度:128。可以二值化,效果也不錯。 triplet loss為什麼比contrastive loss好沒有解釋得太清楚。兩者都有margin的概念,而不是像本文所說的是其獨有。 triplets選擇有兩種方法。1.線下選擇。用訓練中途的網路去找一個樣本集中的hard triplets。2.線上選擇。也是本文最終所採用的方式。從當前mini-batch中選擇。每個mini-batch取幾千個(1800個)樣本,其中保證每人至少40個樣本。負樣本隨機取樣即可。所有正樣本對都用,只選擇負樣本對。 實際選擇hard negtives的時候,鬆弛條件,只選擇semi-hard,也就是負樣本對的距離比正樣本對的距離大,但距離小於margin即可。 margin:0.2。 設計了兩種CNN結構。1.VGG類中加入了1*1 kernel。共22層。1.4億個引數。16億FLOPS。2.googlenet類基於Inception模型,其中兩個小模型NNS1:26M引數,220M FLOPS;NNS2:4.3M引數,20M FLOPS。三個大模型NN3與NN4和NN2結構一樣,但輸入變小了。 NN2輸入:224×224,NN3輸入:160×160,NN4輸入:96×96。採用了l2 pooling,沒有用常規的max pooling,不知原委。 資料庫規模超大。800萬人,共2億幅影象。 無需對齊。7. Deep FaceRecognition
精度上並沒有超越前人,但網路結構較易實現,而且提出了一些有很強實踐性的工作流程。