人臉識別的一般步驟:人臉檢測->人臉對齊->人臉特徵提取->(計算人臉的差值)三元組損失/中心損失->差值小於某一閾值則爲同一個人,差值大於某一閾值則不是同一人。
本文將對每一個步驟的技術現狀,進行分析,並嘗試實現其中最優的幾種技術。
一、現有算法
1.非監督學習算法
2. 監督學習算法
從以上描述可以看出
1) 傳統人臉檢測方法能在CPU上也能達到很高的速度,其中libfasedetection,速度達到367/1533FPS
且在100的誤檢率基礎上,召回率高到0.8236
2) 深度學習算法雖然FasterRCNN的精度很高,但是速度卻非常滿,只有GPU 3FPS,只能用在競賽環境。
SFD的精度高達0.9438,而且在GPU上的速度能達36FPS,速度也能滿足要求。
還有fastMTCN/ICC-CNN/MTCNN性能都不錯,都可以進行嘗試。
二、本文嘗試的算法
1.MTCNN
1.1 MTCNN的網絡結構
MTCNN 由三個神經網絡組成,分別是P-Net,R-Net,O-Net。在使用這些網絡之前,首先要先將原始圖片縮放到不同尺度,形成一個“圖像金字塔”,然後在分別通過P-Net,R-Net,O-Net。如下圖所示:
1.2 MTCNN的損失函數
針對人臉判定部分使用交叉熵損失,針對框迴歸和關鍵點判定使用L2損失
人臉判定部分:
人臉框:
人臉關鍵點:
總損失函數:這三部分損失各自乘以自身的權重再加起來,就形成最後的總損失。
在訓練P-Net和R-Net時,更關心框位置的準確性,而較少關注關鍵點判定的損失,因此關鍵點判定損失的權重很小。對於O-Net,關鍵點判定損失的權重較大。
1.3 使用MTCNN進行人臉檢測
(1) 數據集:
使用LFW 人臉數據庫,在 LFW 數據庫中人臉的光照條件 、姿態多種多樣,有的人臉還存在部分遮擋的情況,因此識別難度較大 。現在 , LFW 數據庫性能測評已經成爲人臉識別算法性能的一個重要指標 。
1) 下載數據集:在網站 http ://vis-www.cs.umass.edu/lfw/lfw. tgz 下載 LFW 數據庫,該數據是完全開源的。
2) 解壓數據集:
cd ~/datasets
mkdir -p lfw/raw
tar xvf ~/Downloads/lfw.tgz -C ./lfw/raw --strip-components=1
3) 查看數據集:每個文件夾代表一個人名
(2)在LFW 數據庫上的人臉檢測和對齊
1) 下開源代碼:git clone https://github.com/davidsandberg/facenet.git
2) 進行人臉檢測和對齊:
python src/align/align_dataset_mtcnn.py \
~/datasets/lfw/raw \
~/datasets/lfw/lfw_mtcnnpy_160 \
--image_size 160 --margin 32 \
--random_order
該命令會創建一個../lfw/lfw_mtcnnpy_160的文件夾,並將所高對齊好的人臉圖像存放到這個文件夾中,數據的結構和原先../lfw/raw 中相同 。 參數 --image_size 160 --margin 32 的含義是在MTCNN 檢測得到的人臉框的基礎上縮小32像素(訓練時使用的數據偏大),並縮放到 160× 160 大小 。 因此最後得到的對齊後的圖像都是 160 x l60 像素的 。這樣的話,就成功地從原始圖像中檢測並對齊了人臉 。
(3)源碼介紹
MTCNN 的實現主要在文件夾facenet/src/align 中。其中, detect_ face.py中定義了 MTCNN 的模型結構,由 P-Net 、R-Net 、O_Net 三部分組成 。這三部分網絡已經提供好了預訓練的模型,模型數據分別對應文件 detl.npy 、det2.npy 、 det3.npy 。 align_ dataset_mtcnn.py 是使用 MTCNN 的模型進行人臉的檢測和對齊的入口代碼 該文件夾中還有兩個文件 align_dataset. py 和align_ dlib.py ,官們都是使用 dlib 中的傳統方法對人臉進行檢測,性能比MTCNN 稍差。
2. SFD
3. fastMTCNN
4. FasterRCNN
5. 非深度學習的libfasedetection.
【參考論文】
1.人臉檢測(十九)--人臉檢測綜述(2018.2): https://blog.csdn.net/App_12062011/article/details/80537518
2.OpenCV學習筆記(11):libfacedetection人臉檢測的配置與使用 :https://blog.csdn.net/cv_jason/article/details/78819088
3.人臉檢測:MTCNN https://blog.csdn.net/tinyzhao/article/details/53236191
4.《21個項目玩轉深度學習:基於TensorFlow的實踐詳解》