用基於center loss的人臉識別模型對LFW人臉數據集進行評測(c++)


接上一篇博文,這篇博文主要是進行人臉識別中的第③和第四個步驟:特征提取以及相似度計算。

             center loss是2016的一篇ECCV論文中提出來的,A Discriminative Feature Learning Approach for Deep Face Recognition,個人理解,center loss的思想有點類似於SVM,對於線性可分的數據,SVM不僅僅是求得的超平面線性划分訓練數據,還要求划分后的最小間隔最大化,而加入了center loss的卷積神經網絡,不僅要求划分出各個類別,還要求類與類之間的距離盡可能大,而類之間的元素之間距離盡可能小,這樣當一副新的未出現過的人臉送入網絡進行測試時,能更好的泛化其特征,而減少了因為類類間“太近”而導致的誤判。就如論文中的圖: 

                     

這里顯示的是賦予center loss不同權重的效果圖,左上角的權重比較小,類類間間距相對小,而右下角的權重比較大,得到的結果是類與類之間的距離相對很大。更詳細的博文,大家可以看       https://sanwen8.cn/p/5c76qMZ.html

        基於center loss的caffe實現,GitHub是 https://github.com/ydwen/caffe-face ,大家可以按照其教程來配置好環境

       簡而言之,為了實現center loss,作者在caffe里自定義了一個center loss層,添加了頭文件以及源文件后,重新編譯caffe即可。

環境配置好后,我們下載WebFace 數據集,該數據集一共有10575個人的圖片,總共50W左右張圖片,此時,我們應該先將這些人臉圖片進行對齊(上篇博客主要介紹了對齊方法),然后我們將對齊好的圖片分為訓練集、驗證集,開始訓練我們的神經網絡了。

       訓練完后,我們得到了一個caffemodel,我們想在LFW上驗證我們的模型,看看性能到底怎么樣,我們將LFW的數據下載回來,一共有5749個人的人臉圖片,每個人一個文件夾,  而LFW的評價指標是 給出了6000對人臉圖片,其中3000對人臉圖片是同一個人,另外3000對圖片不是同一個人,現在我們需要拿出自己的模型,對這6000對人臉圖片,分別回答是同一個人與否,並且畫出ROC曲線來評價我們的模型。

     具體的方法是,假設前3000對是同一個人,后3000對不是同一個人,我們設同一個人的標簽是1,不是同一個人的標簽是0,則6000個標簽中,前3000是1,后三千是0,現在,我們用我們模型進行預測,對於每一個圖片對,我們會根據計算兩張圖片的相似度,得到一個相似度(0~1),然后根據其是否大於一個給定的閾值,會得到6000個結果,這個結果不是0就是1,比如閾值是0.7,現在模型對一個圖片對算出來的相似度是0.6,則我們認為這對圖片不是同一個人,因為其相似度0.6沒有達到閾值0.7,這樣,對於每一個閾值,我們能得到該閾值下的查准率P、查全率R、真正例率TPR、假正例率FPR。我們現在設置6000個閾值(因為有6000個測試圖片對),就可以畫出ROC曲線和PR曲線了, 我用一個迭代了10W次模型,進行測試,ROC曲線和PR曲線如下圖:

                                               

圖很丑,,大家別笑~~ 這是用opencv畫出來的,左邊的是ROC曲線,右邊的是PR曲線,對於ROC曲線,有一個評價指標,是畫一條從左上角到右下角的直線與ROC曲線的交點的縱坐標,也就是對應的真正例率TPR,算出來是0.947, 同時,我也試了所有的分類閾值,在最好的分類閾值的情況下,准確率為0.953,也就是6000對圖片中,我正確識別了6000*0.953=5718對 ,至於在LFW數據集上的實際評價標准,我暫時也搞不清楚是用哪個,或者算AUC? 這個還請知道的同學告知~~


具體的怎么用C++提取一張人臉經過caffe網絡產生的特征,會再寫一篇博客供大家參考~



注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com