基於機器學習人臉識別face recognition具體的算法和原理


引自:http://blog.csdn.net/eclipsesy/article/details/78388468?utm_source=debugrun&utm_medium=referral

0 簡介

人臉識別大致分為如下三個部分:

  1. 人臉檢測 face detection
  2. 人臉對齊 face alignment
  3. 人臉識別 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:

    1. 用最新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
    2. 用caffe源碼中的這個文件替換掉faster rcnn 對應文件 
      include/caffe/util/cudnn.hpp
    3. 將 faster rcnn 中的 src/caffe/layers/cudnn_conv_layer.cu 文件中的所有v3版本的函數名稱替換為v5版本 
      cudnnConvolutionBackwardData_v3 函數名替換為 cudnnConvolutionBackwardData 
      cudnnConvolutionBackwardFilter_v3函數名替換為 cudnnConvolutionBackwardFilter
  • 在根目錄下運行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排序一個特征約105s。在大規模數據集的排序可使用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,但是測量也可以檢測。
 
 


免責聲明!

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



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