引自:http://blog.csdn.net/eclipsesy/article/details/78388468?utm_source=debugrun&utm_medium=referral
0 簡介
人臉識別大致分為如下三個部分:
- 人臉檢測 face detection
- 人臉對齊 face alignment
- 人臉識別 face recognition,包括:
- face verification:兩張圖片相似程度。
- face identification: 在圖片庫中檢索與當前圖片相似度最高的圖片。
1 人臉檢測
face detection通常認為是在圖片中找到人臉的過程,這個過程常用的辦法有用openCV調用’haarcascade_frontalface_default.xml’或者其他xml文件構建分類器對象,通過detectMultiScale函數返回人臉框坐標,在圖像中框出人臉。也可以通過深度學習的方法定位人臉。
1.1 openCV-haarcascade檢測
1.2 faster-RCNN 檢測人臉
- github : face-py-faster-rcnn
- 參考http://blog.csdn.net/zengdong_1991/article/details/66475821
-
編譯過程中如果出現問題,參考faster rcnn +cudnn V5方法2,Caffe + CUDNN V5:
- 用最新caffe源碼(https://github.com/BVLC/caffe)的以下文件替換掉faster rcnn 的對應文件
include/caffe/layers/cudnn_relu_layer.hpp,
src/caffe/layers/cudnn_relu_layer.cpp,
src/caffe/layers/cudnn_relu_layer.cu
include/caffe/layers/cudnn_sigmoid_layer.hpp, src/caffe/layers/cudnn_sigmoid_layer.cpp, src/caffe/layers/cudnn_sigmoid_layer.cu
include/caffe/layers/cudnn_tanh_layer.hpp, src/caffe/layers/cudnn_tanh_layer.cpp,
src/caffe/layers/cudnn_tanh_layer.cu - 用caffe源碼中的這個文件替換掉faster rcnn 對應文件
include/caffe/util/cudnn.hpp - 將 faster rcnn 中的 src/caffe/layers/cudnn_conv_layer.cu 文件中的所有v3版本的函數名稱替換為v5版本
cudnnConvolutionBackwardData_v3 函數名替換為 cudnnConvolutionBackwardData
cudnnConvolutionBackwardFilter_v3函數名替換為 cudnnConvolutionBackwardFilter
- 用最新caffe源碼(https://github.com/BVLC/caffe)的以下文件替換掉faster rcnn 的對應文件
-
在根目錄下運行python ./tools/run_face_detection_on_fddb.py,可返回坐標
2 人臉對齊
face alignment指在標定人臉位置后對人臉上的特征進一步定位,可以對人臉檢測的側臉進行校正,旋轉,3d變換等,也可以對特征點進行特定的表情變化。常用的有5點和68點特征。如DCNN,TCDCN,MTCNN等方法。
2.1 DCNN
https://github.com/luoyetx/deep-landmark
下載LFW數據進行訓練和測試
3 人臉識別
人臉識別是由CNN提取人臉的特征,將兩張待測圖片輸入至訓練好的CNN,提取全連接層的特征。模型一般是由預訓練的分類模型演變,如1000個人,每個人50張圖片訓練的CNN模型。
3.1 face verification
兩張待測圖片在訓練好的模型上提取全連接層特征,如vgg的fc7層的4096維特征,進行cosin距離計算。利用vgg-facecaffemodel,如果角度光照相同,可以達到0.93左右的准確率,戴眼鏡的影響很大。經過測試vgg-face在0.71至0.73表現最好。
3.2 face identification
將圖片庫的每張圖片(小規模100人至大規模上百萬)在訓練好的模型上提取全連接特征,將待測圖片同樣提取特征,對所有特征進行相似度計算,排序后得到相似度最大的圖片。vgg-face,GTX970排序一個特征約10−5s。在大規模數據集的排序可使用LSH等方法。
3.3 vgg-face 實現
http://www.cppblog.com/guijie/archive/2015/10/14/212015.html
下載caffe模型,作為model,可以直接進行測試。也可以進行finetune。verification和identification都可以利用vgg-face實現。利用CASIA測試,最佳閾值約0.71至0.73。
4 整合實現
- 測試中,CASIA經過openCV的haarcascade cropface后,丟進vgg-face,30類top1約 96%,top5 97.3%。
- 對vgg-face的finetune效果很差,正在嘗試resnet50
- 利用openCV的haarcascade + vgg-face識別速度很快,但檢測精度不高
- 利用face-faster-rcnn檢測+vgg-face識別速度較慢,約5.5fps,但是測量也可以檢測。
