【Caffe实践】基于Caffe的人脸识别实现
from:?http://blog.csdn.net/chenriwei2/article/details/49500687
導言
深度學習深似海、尤其是在圖像人臉識別領域,最近幾年的頂會和頂刊常常會出現沒有太多的理論創新的文章,但是效果擺在那邊。
DeepID是深度學習方法進行人臉識別中的一個簡單,卻高效的一個網絡模型,其結構的特點可以概括為兩句話:1、訓練一個多個人臉的分類器,當訓練好之后,就可以把待測試圖像放入網絡中進行提取特征,2對于提取到的特征,然后就是利用其它的比較方法進行度量。具體的論文可以參照我的一篇論文筆記:【深度學習論文筆記】Deep Learning Face Representation from Predicting 10,000 Classes
首先我們完全參考論文的方法用Caffe設計一個網絡結構:
其拓撲圖如圖1所示:
?
圖1:DeepID的網絡結構,圖像比較大,需要放大才能看的清楚
網絡定義文件:
略2. 數據選擇
訓練一個好的深度模型,一個好的訓練數據是必不可少的。針對人臉識別的數據,目前公開的數據也有很多:比如最近的MegaFace、港大的Celbra A、中科研的WebFace 等等。在這里,我選擇WebFace人臉數據庫作為訓練(人臉庫不是很干凈,噪聲較多),圖像公共50萬張左右,共10575個人,但是數據不平衡。
要評測一個算法的性能,需要找一個公平的比對數據庫來評測,在人臉驗證中,LFW數據庫無疑是最好的選擇。在lfw評測中,給出6000千對人臉圖像對進行人匹配。
3. 數據處理
訓練數據和測試數據都選擇好之后,就需要進行數據處理了,為了提供較好的識別準確度,我采用了訓練數據和測試數據統一的預處理方法(雖然LFW上有提供已經預處理過的人臉圖像,但是預處理的具體參數還是未知的),測試數據和訓練數據都采樣相同的人臉檢測和對齊方法。
主要分為3個步驟:?
1,人臉檢測?
2,人臉特征點檢測?
3、人臉的對齊
這三個步驟可以用我做的一個小工具:FaceTools?來一鍵完成。
具體來說,需要選擇一個標準的人臉圖像作為對齊的基準,我挑選一位帥哥當標準圖像:?
如圖:?
訓練數據通過對齊后是這樣的:?
LFW測試數據通過對齊后是這樣的:?
4.數據轉換
圖像處理好之后,需要將其轉化為Caffe 可以接受的格式。雖然Caffe支持直接讀圖像文件的格式進行訓練,但是這種方式磁盤IO會比較的大,所以我這里不采用圖像列表的方式,而是將訓練和驗證圖片都轉化為LMDB的格式處理。
4.1 劃分訓練集驗證集
劃分訓練集和驗證集(我采樣的是9:1的比例)?
腳本如下:
略
4.2 數據轉換
再調用Caffe 提供的轉化函數:?
腳本如下:
這樣之后,訓練的數據就準備好了。
訓練網絡
上面的這些步驟之后,數據就已經處理好了,現在需要指定網絡的超參數:
具體超參數設置如下:
略 訓練的時候,可以查看學習曲線:?
6.LFW上測試
LFW上,提供了6000對的人臉圖像對來作為評測數據,由于我采用的是自己選的人臉檢測和對齊方法,所以有些人臉在我的預處理里面丟失了(檢測不到),為了簡單的處理這種情況,在提特征的時候,沒有檢測到的圖像就用原來的圖像去替代。
略然后進行人臉的比對
略 結果ROC曲線:?
通過選擇合適的腳本,得到的準確度為:0.826333333333, 有點低。
7.結果分析
實驗的結果沒有理想中的那么好,主要的原因分為幾個:?
1、數據集不夠好:有較多的噪聲數據?
2、數據集合不平衡:每個人的圖片個數從幾十張到幾百張不等。?
3,、網絡結構沒優化:原始的DeepID的大小為:48*48,而我選擇的人臉圖像大小為64*64,網絡結構卻沒有相對應的調整。(主要影響在于全連接層的個數太多了)
總結
以上是生活随笔為你收集整理的【Caffe实践】基于Caffe的人脸识别实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Caffe实践】 添加自己的网络层
- 下一篇: 【Caffe实践】基于Caffe的人脸检