DeepID人臉識別算法之三代


DeepID人臉識別算法之三代

轉載請注明:http://blog.csdn.net/stdcoutzyx/article/details/42091205

DeepID,眼下最強人臉識別算法。已經三代。

現在,深度學習方興未艾。大數據風起雲涌,各個領域都在處於使用深度學習進行強突破的階段。人臉識別也不例外。香港中文大學的團隊使用卷積神經網絡學習特征,將之用於人臉識別的子領域人臉驗證方面,取得了不錯的效果。盡管是今年7月份才出的成果,但連發三箭。皆中靶心,使用的卷積神經網絡已經改進了三次,破竹之勢節節高。故而在這里將DeepID神經網絡的三代進化史總結一下,以期相互討論,互有增益。

在說明具體的結論之前,我先進行總結式的幾段文字,然后再做具體的技術說明,以防有些過來尋求科普的人看到一坨坨的公式便拂袖遠去,沒看到什么干貨。

1. 問題引入及算法流程

DeepID所應用的領域是人臉識別的子領域——人臉驗證,就是推斷兩張圖片是不是同一個人。人臉驗證問題非常easy就能夠轉成人臉識別問題,人臉識別就是多次人臉驗證。

DeepID達到的效果都是在LFW數據集上,該數據集是wild人臉數據集。即沒有經過對其的人臉,背景變化比較大。

該數據集太小。非常多identities都僅僅有一張人臉。5000個人僅僅有13000張圖片。所以DeepID引入了外部數據集CelebFaces和CelebFaces+,每次模型更新都會使用更大的數據集,這在后面介紹DeepID時再細說。

卷積神經網絡在DeepID中的作用是是學習特征,即將圖片輸入進去,學習到一個160維的向量。然后再這個160維向量上,套用各種現成的分類器,就可以得到結果。

DeepID之所以有效,首先在於卷積神經網絡學習到的特征的區分能力比較強,為了得到比較強的結果,DeepID採取了眼下最經常使用的手法——增大數據集。僅僅有大的數據集才干使得卷積神經網絡訓練的更加的充分。

增大數據集有兩種手法,第一種手法,就是採集好的數據,即CelebFaces數據集的引入。另外一種手法。就是將圖片多尺度多通道多區域的切分。分別進行訓練,再把得到的向量連接起來。得到最后的向量。DeepID的算法流程例如以下:

process

在上述的流程中。DeepID能夠換為Hog。LBP等傳統特征提取算法。

Classifier能夠是SVM,Joint Bayes,LR。NN等隨意的machine learning分類算法。

在引入外部數據集的情況下。訓練流程是這種。首先,外部數據集4:1進行切分,4那份用來訓練DeepID,1那份作為訓練DeepID的驗證集;然后,1那份用來訓練Classifier。這樣划分的原因在於兩層模型不能使用同一種數據進行訓練。easy產生過擬合。

如此。想必大家對DeepID的應用場景已經熟悉了,以下開始講三代DeepID的進化。

2. DeepID

在這里。我假定大家對卷積神經網絡已經有了主要的認識。假設沒有的話,出門左轉看我這篇blog:卷積神經網絡http://blog.csdn.net/stdcoutzyx/article/details/41596663。

2.1 DeepID網絡結構

DeepID是第一代,其結構與普通的卷積神經網絡差點兒相同。結構圖例如以下:

img1

該結構與普通的卷積神經網絡的結構相似。可是在隱含層,也就是倒數第二層,與Convolutional layer 4和Max-pooling layer3相連,鑒於卷積神經網絡層數越高視野域越大的特性,這種連接方式能夠既考慮局部的特征,又考慮全局的特征。

2.2 DeepID實驗設置

實驗中,人臉圖片的預處理方式,也就是切分方式的樣比例如以下:

img1

在DeepID的實驗過程中。使用的外部數據集為CelebFaces+,有10177人,202599張圖片。8700人訓練DeepID,1477人訓練Joint Bayesian分類器。

切分的patch(也就是上圖這種數據)數目為100,使用了五種不同的scale。每張圖片最后形成的向量長度為32000,使用PCA降維到150。

如此,達到97.20的效果。使用某種Transfer Learning的算法后。達到97.45%的終於效果。

2.3 實驗結論

  • 使用multi-scale patches的convnet比僅僅使用一個僅僅有整張人臉的patch的效果要好。
  • DeepID自身的分類錯誤率在40%到60%之間震盪,盡管較高。但DeepID是用來學特征的。並不須要要關注自身分類錯誤率。

  • 使用DeepID神經網絡的最后一層softmax層作為特征表示,效果非常差。

  • 隨着DeepID的訓練集人數的增長,DeepID本身的分類正確率和LFW的驗證正確率都在添加。

這就是DeepID第一代。

3 DeepID2

DeepID2相對於DeepID有了較大的提高。

其主要原因在於在DeepID的基礎上加入了驗證信號。詳細來說。原本的卷積神經網絡最后一層softmax使用的是Logistic Regression作為終於的目標函數,也就是識別信號;但在DeepID2中,目標函數上加入了驗證信號。兩個信號使用加權的方式進行了組合。

3.1 兩種信號及訓練過程

識別信號公式例如以下:

img1

驗證信號公式例如以下:

img1

因為驗證信號的計算須要兩個樣本,所以整個卷積神經網絡的訓練過程也就發生了變化,之前是將所有數據切分為小的batch來進行訓練。

如今則是每次迭代時隨機抽取兩個樣本,然后進行訓練。訓練步驟例如以下:

img1

在訓練過程中,lambda是驗證信號的加權參數。M參數時動態調整的,調整策略是使近期的訓練樣本上的驗證錯誤率最低。

3.2 實驗設置

首先使用SDM算法對每張人臉檢測出21個landmarks,然后依據這些landmarks,再加上位置、尺度、通道、水平翻轉等因素,每張人臉形成了400張patch,使用200個CNN對其進行訓練,水平翻轉形成的patch跟原始圖片放在一起進行訓練。

這樣,就形成了400×160維的向量。

這樣形成的特征維數太高,所以要進行特征選擇,不同於之前的DeepID直接採用PCA的方式,DeepID2先對patch進行選取。使用前向-后向貪心算法選取了25個最有效的patch,這樣就僅僅有25×160維向量,然后使用PCA進行降維。降維后為180維,然后再輸入到聯合貝葉斯模型中進行分類。

DeepID2使用的外部數據集仍然是CelebFaces+。但先把CelebFaces+進行了切分,切分成了CelebFaces+A(8192個人)和CelebFaces+B(1985個人)。首先,訓練DeepID2。CelebFaces+A做訓練集,此時CelebFaces+B做驗證集;其次,CelebFaces+B切分為1485人和500人兩個部分,進行特征選擇,選擇25個patch。最后在CelebFaces+B整個數據集上訓練聯合貝葉斯模型,然后在LFW上進行測試。在上一段描寫敘述的基礎上。進行了組合模型的加強,即在選取特征時進行了七次。第一次選效果最好的25個patch。第二次從剩余的patch中再選25個。以此類推。然后將七個聯合貝葉斯模型使用SVM進行融合。終於達到了99.15%的結果。

當中,選取的25個patch例如以下:

img1

3.3 實驗結論

  • 對lambda進行調整。也即對識別信號和驗證信號進行平衡,發現lambda在0.05的時候最好。使用LDA中計算類間方差和類內方差的方法進行計算。

    得到的結果例如以下:

img1

能夠發現,在lambda=0.05的時候,類間方差差點兒不變,類內方差下降了非常多。

這樣就保證了類間區分性,而降低了類內區分性。

假設lambda為無窮大,即僅僅有驗證信號時。類間方差和類內方差都變得非常小,不利於最后的分類。

  • DeepID的訓練集人數越多,最后的驗證率越高。

  • 對不同的驗證信號,包含L1,L2,cosin等分別進行了實驗,發現L2 Norm最好。

4 DeepID2+

DeepID2+有例如以下貢獻,第一點是繼續更改了網絡結構;第二點是對卷積神經網絡進行了大量的分析,發現了幾大特征。包含:+ 神經單元的適度稀疏性,該性質甚至能夠保證即便經過二值化后,仍然能夠達到較好的識別效果;+ 高層的神經單元對人比較敏感,即對同一個人的頭像來說。總有一些單元處於一直激活或者一直抑制的狀態。+ DeepID2+的輸出對遮擋很魯棒。

4.1 網絡結構變化

相比於DeepID2。DeepID2+做了例如以下三點改動:

  • DeepID層從160維提高到512維。
  • 訓練集將CelebFaces+和WDRef數據集進行了融合。共同擁有12000人,290000張圖片。
  • 將DeepID層不僅和第四層和第三層的max-pooling層連接,還連接了第一層和第二層的max-pooling層。

最后的DeepID2+的網絡結構例如以下:

img1

上圖中,ve表示監督信號(即驗證信號和識別信號的加權和)。FC-n表示第幾層的max-pooling。

4.2 實驗設置

訓練數據共同擁有12000人,290000張圖像。

當中2000人用於在訓練DeepID2+時做驗證集,以及訓練聯合貝葉斯模型。

4.3 實驗結論

分別使用FC-n進行實驗,比較的算法包含DeepID2+、僅僅有從FC-4反向傳播下來進行訓練的模型、使用少量數據的、使用小的特征向量的模型。結果例如以下:

img1

DeepID2選取了25個patch。DeepID2+選取了相同的25個patch,然后抽取的特征分別訓練聯合貝葉斯模型。得到的結果是DeepID2+平均比DeepID2提高2%。

4.4 適度稀疏與二值化

DeepID2+有一個性質,即對每一個人,最后的DeepID層都大概有半數的單元是激活的,半數的單元是抑制的。而不同的人,激活或抑制的單元是不同的。基於此性質。

使用閾值對最后輸出的512維向量進行了二值化處理,發現效果減少有限。

img1

二值化后會有優點。即通過計算漢明距離就能夠進行檢索了。

然后精度保證的情況下,能夠使人臉檢索變得速度更快,更接近有用場景。

4.5 特征區分性

存在某個神經單元,僅僅使用普通的閾值法,就能針對某個人得到97%的正確率。

不同的神經單元針對不同的人或不同的種族或不同的年齡都有非常強的區分性。

在這里,對每一個單元的激活程度進行由高到低排序。能夠得到下圖所看到的:

img1

上圖僅僅是當中一張圖示。還有針對種族、年齡等的激活分析。此處不贅述。

但值得說的是,這樣的分析方法對我們非常有啟示。

卷積神經網絡的輸出的含義是什么,非常難解釋,通過這樣的方法。也許能夠得到一些結論。

4.6 遮擋魯棒性

在訓練數據中沒有遮擋數據的情況下。DeepID2+自己主動就對遮擋有了非常好的魯棒性。

有兩種方式對人臉進行多種尺度的遮擋,第一種是從下往上進行遮擋。從10%-70%。

另外一種是不同大小的黑塊隨機放,黑塊的大小從10×10到70×70。

img1

結論是遮擋在20%以內,塊大小在30×#30下面,DeepID2+的輸出的向量的驗證正確率差點兒不變。

img1

img1

5 總結

至此,DeepID的三代進化史就講完了。簡單的說一下我的感受。

首先是卷積神經網絡的作用。雖說之前聽說過卷積神經網絡既能夠分類,也能夠學習特征,但ImageNet上的卷積神經網絡都是分類的。這次最終見到不關注分類錯誤率而關注特征的卷積神經網絡。

其次,卷積神經網絡的改進方式,無非例如以下幾種:增大網絡深度和寬度,添加數據,將網絡隱含層連接到前面幾層來,加入其它的信號。

再次,也是最重要的,就是DeepID在發展過程中對輸出向量的分析。尤其是DeepID2+,神經網絡的各個單元一直是無法解釋的,但這次作者不僅試圖去發現規律,還基於規律做出了一些修改。比方二值化。

最后,卷積神經網絡的魯棒性真的非常厲害。

6 參考文獻

  • [1] Sun Y, Wang X, Tang X. Deep learning face representation from predicting 10,000 classes[C]//Computer Vision and Pattern Recognition (CVPR), 2014 IEEE Conference on. IEEE, 2014: 1891-1898.
  • [2] Sun Y, Chen Y, Wang X, et al. Deep learning face representation by joint identification-verification[C]//Advances in Neural Information Processing Systems. 2014: 1988-1996.
  • [3] Sun Y, Wang X, Tang X. Deeply learned face representations are sparse, selective, and robust[J]. arXiv preprint arXiv:1412.1265, 2014.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM