CVPR2014: DeepID解讀


上周五就要發的,拖........拖.......拖到現在,文中有不准確的地方,歡迎批評指正。
DeepID是一種特征提取的算法,由港中文湯曉鷗團隊於2014年提出,發表於CVPR2014。其應用領域是人臉識別的子領域——人臉驗證,就是判斷兩張圖片是不是同一個人。之前的人臉驗證任務主要的方法是使用過完備的(over-complete)低層次特征,結合淺層的機器學習模型進行的。過去的方法常常是將人臉提取出幾萬乃至幾百萬的特征,然后將特征進行降維,再計算兩個特征的相似度,本文提出一種使用深度學習提取人臉深層次特征(稱之為DeepID)的方法。DeepID特征由人臉分類任務學習得到,此特征可以用於人臉驗證中,最終在LFW數據集上取得了97.45%的成績。
一、網絡架構
DeepFace的架構並不復雜,層數也不深。網絡架構由4個卷積層 + 1個全連接層構成。
二、從實現過程,理解網絡
(一)做patch
1.截區域
按照人臉特征點的分布,在1張輸入圖片上取10個區域,如下圖所示:
2.數據增強
(1)將每個區域,resize成3中不同尺度的pic,如下圖所示:
(2)將圖像進行水平翻轉
(3)提取灰度圖
(4)patches總量
經過前3步的數據增強,此時的1張image,產生了10 * 3 * 2 * 2 = 120個區域,將每1個區域與其水平翻轉的區域,送入網絡,進行特征提取。此步共訓練60個神經網絡。輸出160*2維的DeepID
3.增加patches效果
由下圖可見,增加patches數量后,網絡性能,相對於只用了1整張image的原始結構,提升明顯,感覺就是數據增強的原因。
(二)過ConvNets
以1個區域的輸入為例,如果區域是長方形,則resize成39*31,如果如果區域是正方形,則resize成31*31,假設本次輸入的區域是長方形,喂入網絡,如上圖所示。
圖片經過4層卷積,第3層,和第4層的feature map分別是3*2*60,和2*1*80維。將最后2層的feature map分別過全連接層,concatenate成1個160維的vector
Concatenate方式:在同一維度上疊加
不同hierarchy的Feature map疊加在一起,分類器可以看到多尺度的圖像。想當於聯系了上下文,網絡性能更好。
DeepID自身的分類錯誤率在40%到60%之間震盪,雖然較高,但DeepID是用來學特征的,並不需要要關注自身分類錯誤率
將上文160維的vector送入soft-max進行分類,輸出10000分類的結果。60個網絡,各自對應各自預測的cls結果,如下圖所示:
三、利用DeepID做verification
本來以為做完cls,這個paper就可以結束了,然鵝,看了paper后面密密麻麻的2張,才意識到這個paper是關於verification的,之所以要做cls,主要是多分類的訓練,可以提高ConvNet的提取特征的能力,終其目的,還是為了拿到提取的特征,做其關心的verification
(一)用前面訓練好的網絡,對2張圖片做verification
每張照片,根據是否水平翻轉,分為2組,每組有60個patches(10個區域,每個區域3個size,每個size有RGB和Grey2種模式)
將每1個區域與其水平翻轉對應的部分,聯合要對比的圖片的同一個區域,組着在一起,送入網絡,進行特征提取。此步調用了60個神經網絡。
每張輸入的160維vector,即為那個區域的identity,可視化160維的數據如下,可以看出相同人臉的identity相似度高,不同人臉的identity區別較大。
1張image經過網絡,輸出120(60個patches,每個patch里2張圖)*160=19200維vector,以此vector表征人臉的identity。
將2張face的identity,送入joint Bayesian,判斷是否為同1個人。
下面介紹一下classifier里面的joint Bayesian分類器
(二)Joint Bayesian
(1)經典Bayesian Face
在介紹joint Bayesian之前,先看一下joint Bayesian出現之前,業界廣泛使用的經典Bayesian Face,算法描述如下
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
但是經典bayesian從2維投射到1維時,會喪失一些分區信息,導致在2維平面上可分的目標,在1維平面上變得不可區分。
從上圖中可以看到,2-D的數據通過差分x-y映射到1-D上。O附近的點交錯在一起, 使得在O附近的Class-1 和Class-2 無法區分開來。這就是經典Bayesian Face的缺陷
(2)joint Bayesian
針對經典Bayesian Face出現的問題,中科大,港中文以及亞研院的4位同學,在孫劍的指導下於2012年提出來joint Bayesian方法
(三)神經網絡分類器
14年,當時的verification sota 分類器還是joint Bayesian,神經網絡成績一般,作者試了這2種方法后,選擇了性能更優的joint Bayesian
四、網絡成績
DeepID相對於傳統的PCA方法,表征能力進一步增強
DeepID在LFW數據集上取得了97.45%的准確率,相比於DeepFace的97.35%,獲得了進一步的提高。ROC曲線如下:
五、數據指標
簡單的介紹下ROC,以前看的時候沒有仔細去弄明白這個指標,最近看好多paper上都有這個東西,查閱了資料,總結如下
ROC全名叫receiver operating characteristic curve,中文譯為:接收者操作特征曲線,用以說明二分類器在識別閾值變化時的診斷能力。
ROC將偽陽性率(FPR)定義為 X 軸,真陽性率(TPR)定義為 Y 軸。繪圖方法如下
(一)統計樣本分類score
將一系列樣本,按照positive可能性得分,進行排序
(二)計算真陽率和假陽率
以score作為閾值,依次對排好序的樣本進行判斷,score > threshold, 則判定為Positive, 否則判為Negative,每一個threshold計算1次真陽率和假陽率,做出這個20個樣本的真陽率-假陽率對應圖。
(三)ROC曲線優勢
為什么要使用ROC呢?因為ROC曲線有個很好的特性:當測試集中的正負樣本的分布變換的時候,ROC曲線能夠保持不變。在實際的數據集中經常會出現樣本類不平衡,即正負樣本比例差距較大,而且測試數據中的正負樣本也可能隨着時間變化。下圖是ROC曲線和Presision-Recall曲線的對比。
(a)和(c)為Roc曲線,(b)和(d)為Precision-Recall曲線。(a)和(b)展示的是分類其在原始測試集(正負樣本分布平衡)的結果,(c)(d)是將測試集中負樣本的數量增加到原來的10倍后,分類器的結果,可以明顯的看出,ROC曲線基本保持原貌,而Precision-Recall曲線變化較大。
六、小結
分類數提高,可以學到表征力更強的identity
用更多的分類來訓練網絡,測試的error rate持續降低。一開始還疑惑DeepID初衷是做verification,為什么一開始要用softmax做cls,其實原因到這里就明了了,分類越多,學到的160維的identity表征力越強。


免責聲明!

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



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