人臉識別face recognition
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
參考編譯過程中如果出現問題,參考faster rcnn +cudnn v5方法2,caffe + cudnn v5:
用最新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
在根目錄下執行python ./tools/run_face_detection_on_fddb.py,可返回座標
1.3 ssd-face 檢測人臉
github: ssd-face
1.4 mtcnn 檢測人臉
facenet正是利用mtcnn檢測人臉和inception-resnet-v1來識別。
- github: facenet
需要配合識別3.4節一起使用,自己修改後可以利用opencv讀入攝像頭直接識別人臉。
2 人臉對齊
face alignment指在標定人臉位置後對人臉上的特徵進一步定位,可以對人臉檢測的側臉進行校正,旋轉,3d變換等,也可以對特徵點進行特定的表情變化。常用的有5點和68點特徵。如dcnn,tcdcn,mtcnn等方法。
2.1 dcnn
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 實現
3.4 facenet的inception-resnet-v1實現
github: facenet
可以利用triplet loss 或 softmax loss + center loss 訓練,最終的結果呈現為128維特徵。可以自行修改為opencv讀入攝像頭直接識別版本。其lfw驗證率為99.2%。
4 整合實現
測試中,casia經過opencv的haarcascade cropface後,丟進vgg-face,30類top1約 96%,top5 97.3%。
vggface的lfw在98%以上。
對vgg-face的finetune效果很差,正在嘗試resnet50
利用opencv的haarcascade + vgg-face識別速度很快,但檢測精度不高
利用face-faster-rcnn檢測+vgg-face識別速度較慢,約5.5fps,但是測量也可以檢測。
利用facenet,即mtcnn+inception-resnet-v1組合的人臉識別系統,在lfw上可以達到99.2%的準確率。在970下測試跑,可以達到10幀以上。
tips
可以利用import image,imagefont,imagedraw以及drwa.text在輸出**新增中文。
可以新增註冊功能。
可以新增距離轉換百分比功能。
可以預存特徵值。
可新增判斷人臉庫可以根據是直接儲存在乙個大資料夾下,還是儲存在對應人姓名的資料夾下,通過程式的flag(0,1)來判斷如何輸出以及檢測特徵。
可新增連續幀判斷。
人臉識別 人臉庫
1.mit 影象集 美國,麻省理工學院 包括 16 人,每個人有不同光照 不同尺寸 不同角度的 27 張 2.feret 影象集 美 方 此影象集包含大量的人臉影象,並且每幅圖中均只有乙個人臉。該集中,同乙個人的 有不同表情,光照,姿態和年齡的變化。3.umist 影象集 英國,曼切斯特大學 20 ...
人臉識別之人臉檢測
人臉識別分為人臉檢測 人臉預處理 蒐集和學習人臉以及人臉識別四個部分,此部分將人臉檢測。本文基於opencv進行的。在opencv中常用的人臉檢測器有基於lbp的特徵檢測 基於haar的特徵檢測,兩者的區別 前者比後者快好幾倍且不需要許可協議,但很多haar檢測器需要許可協議。基於haar的臉部檢測...
人臉識別API 人臉比對
api協議說明 路徑 輸入引數 字段型別 描述seq可選 string 會話序號 非必填 imga string 資料 base64編碼 原始建議小於3m,格式限定為jpg bmp png三種格式 imgb string 資料 base64編碼 原始建議小於3m,格式限定為jpg bmp png三種...