深度學習之視頻人臉識別系列二:人臉檢測與對齊
來自專欄 TensorFlowNews19 人贊了文章
作者 | 東田應子
編輯 | 磐石
出品 | 磐創AI技術團隊
一、人臉檢測與關鍵點檢測
1. 問題描述:
人臉檢測解決的問題為給定一張圖片,輸出圖片中人臉的位置,即使用方框框住人臉,輸出方框的左上角坐標和右下角坐標或者左上角坐標和長寬。演算法難點包括:人臉大小差異、人臉遮擋、圖片模糊、角度與姿態差異、表情差異等。而關鍵檢測則是輸出人臉關鍵點的坐標,如左眼(x1,y1)、右眼(x2,y2)、鼻子(x3,y3)、嘴巴左上角(x4,y4)、嘴巴右上角(x5,y5)等。
2. 深度學習相關演算法:
(1)Cascade CNN
Cascade CNN源於發表於2015年CVPR上的一篇論文A Convolutional Neural Network Cascade for Face Detection【2】,作者提出了一種級連的CNN網路結構用於人臉檢測。演算法主體框架是基於V-J的瀑布流思想【1】,是傳統技術和深度網路相結合的一個代表,Cascade CNN包含了多個分類器,這些分類器使用級聯結構進行組織,與V-J不同的地方在於Cascade CNN採用卷積網路作為每一級的分類器。整個網路的處理流程如下圖所示:
整個處理流程里包含了六個網路:12-net、12-calibration-net、24-net、24-calibration-net、48-net、48-calibration-net,其中三個二分類網路用於分類其是否為人臉,另外三個calibration網路用於矯正人臉框邊界。其中第二個網路之後、第四個網路之後、第五個網路之後使用NMS演算法過濾掉冗餘的框。
12-net,24-net和48-net的網路結構如下圖所示:
13-12-calibration-net,24-calibration-net,48-calibration-net的結構如下圖所示:
該演算法結合了V-J框架構造了級連的CNN網路結構並設計邊界矯正網路用來專門矯正人臉框邊界,在AFW數據集上準確率達到97.97%。
(2)Faceness-Net
Faceness-Net源於論文A convolutional neural network cascade for face detection【3】,該演算法基於DCNN網路【5】的人臉局部特徵分類器,演算法首先進行人臉局部特徵的檢測,使用多個基於DCNN網路的facial parts分類器對人臉進行評估,然後根據每個部件的得分進行規則分析得到Proposal的人臉區域,然後從局部到整體得到人臉候選區域,再對人臉候選區域進行人臉識別和矩形框坐標回歸,該過程分為兩個步驟。
第一個步驟:每個人臉局部特徵使用attribute-aware網路檢測並生成人臉局部圖,其中一共五個特徵屬性: 頭髮、眼睛、鼻子、嘴巴、鬍子。然後通過人臉局部圖根據評分構建人臉候選區域,具體如下圖所示:
第二個步驟:訓練一個多任務的卷積網路來完成人臉二分類和矩形框坐標回歸,進一步提升其效果,具體如下圖所示:
Faceness從臉部特徵的角度來解決人臉檢測中的遮擋和姿態角度問題,其整體性能在當時是非常好的,在AFW數據集上準確率可以達到98.05%。
(3)MTCNN
MTCNN源於論文Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks【6】,是基於多任務級聯卷積神經網路來解決人臉檢測和對齊問題,同時輸出圖片的人臉矩陣框和關鍵點坐標(左眼、右眼、鼻子、嘴巴左上角、嘴巴右上角)。MTCNN為三階的級聯卷積神經網路,整體框架如下圖所示:
輸入階段:為應對目標多尺度問題,將原始圖像resize到不同尺寸,構建圖像金字塔,作為三階級聯架構的輸入,這樣處理可以更好地檢測大小不一的人臉。
第一階段:通過一個全部由卷積層組成的CNN,取名P-Net,獲取候選人臉框、關鍵點坐標和人臉分類(是人臉或不是),之後採用NMS過濾掉高重疊率的候選窗口。如下圖所示:
第二階段:第一階段輸出的候選人臉框作為更為複雜的R-Net網路的輸入,R-Net進一步篩除大量錯誤的候選人臉框,同樣也通過NMS過濾掉高重疊率的候選窗口。如下圖所示:
第三階段:與第二階段類似,最終網路輸出人臉框坐標、關鍵點坐標和人臉分類(是人臉或不是)。如下圖所示:
MTCNN通過三級的級聯卷積神經網路對任務進行從粗到細的處理,還提出在線困難樣本生成策略(online hard sample mining )可以進一步提升性能。兼并了速度與準確率,速度在GPU上可以達到99FPS,在 FDDB數據集上可以達到95.04準確率,具體如下圖所示:
二、人臉對齊(部分參考於GraceDD的博客文章)
人臉對齊通過人臉關鍵點檢測得到人臉的關鍵點坐標,然後根據人臉的關鍵點坐標調整人臉的角度,使人臉對齊,由於輸入圖像的尺寸是大小不一的,人臉區域大小也不相同,角度不一樣,所以要通過坐標變換,對人臉圖像進行歸一化操作。人臉關鍵點檢測有很多演算法可以使用包括:ASM、AAM、DCNN 、TCDCN 、MTCNN 、TCNN、TCNN等,這裡就不詳細介紹,主要說一下得到人臉關鍵點之後如何進行人臉對齊,是所有人臉達到歸一化效果,該過程如下圖所示:
該過程涉及到圖像的仿射變換,簡單來說,「仿射變換」就是:「線性變換」+「平移」,即坐標的變換。假如我們希望人臉圖片歸一化為尺寸大小600*600,左眼位置在(180,200),右眼位置在(420,200)。 這樣人臉中心在圖像高度的1/3位置,並且兩個眼睛保持水平,所以我們選擇左眼角位置為( 0.3*width, height / 3 ),右眼角位置為(0.7*width , height / 3) 。
利用這兩個點計算圖像的變換矩陣(similarity transform),該矩陣是一個2*3的矩陣,如下:
如果我們想對一個矩形進行變換,其中x、y方向的縮放因為分別為sx,sy,同時旋轉一個角度 ,然後再在x方向平移tx, 在y方向平移ty
利用opencv的estimateRigidTransform方法,可以獲得這樣的變換矩陣,但遺憾的是,estimateRigidTransform至少需要三個點,所以我們需要構選第三個點,構造方法是用第三個點與已有的兩個點構成等邊三角形,這樣第三個點的坐標為:
代碼如下:
經過上一步的處理之後,所有的圖像都變成一樣大小,並且又三個關鍵點的位置是保持一致的,但因為除了三個點對齊了之外,其他點並沒有對齊。所以根據得到的變換矩陣對剩下所有的點進行仿射變換,opencv代碼如下所示:
img為輸入圖像;
warped為變換後圖像,類型與src一致;
M為變換矩陣,需要通過其它函數獲得,當然也可以手動輸入;
Image_size為輸出圖像的大小;
三、 總結
本期文章主要介紹了人臉檢測與對齊的相關演算法,下一期我給大家介紹一下人臉表徵的相關演算法,即通過深度學習提取人臉特徵,通過比較人臉特徵進行人臉識別與驗證。
參考文獻:
【1】 S.Z.Li, L.Zhu, Z.Q.Zhang, A.Blake, H.J.Zhang, H.Y.Shum. Statistical learning of multi-view face detection. In: Proceedings of the 7-th European Conference on Computer Vision. Copenhagen, Denmark: Springer, 2002.67-81.
【2】Li H, Lin Z, Shen X, et al. A convolutional neural network cascade for face detection[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2015: 5325-5334.
【3】Yang S, Luo P, Loy C C, et al. Faceness-Net: Face detection through deep facial part responses[J]. IEEE transactions on pattern analysis and machine intelligence, 2017.
【4】Yang S, Luo P, Loy C C, et al. From facial parts responses to face detection: A deep learning approach[C]//Proceedings of the IEEE International Conference on Computer Vision. 2015: 3676-3684.
【5】Sun Y, Wang X, Tang X. Deep convolutional network cascade for facial point detection[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2013: 3476-3483.
【6】Zhang K, Zhang Z, Li Z, et al. Joint face detection and alignment using multitask cascaded convolutional networks[J]. IEEE Signal Processing Letters, 2016, 23(10): 1499-1503.
最後,對深度學習感興趣,熱愛Tensorflow的小夥伴,歡迎關注我們的網站!http://www.tensorflownews.com。我們的公眾號:磐創AI。
推薦閱讀:
※利用FCN-8s網路訓練自己數據集(NYUD為例)
※GANimation讓圖片變GIF表情包,秒殺StarGAN
※四軸飛行器結合OpenMV和OpenCV實現定點、循線尋線、跟蹤
※Python徒手實現識別手寫數字—圖像識別演算法(K最近鄰)
※印奇:用頂尖人臉識別技術,服務2億中國用戶 | 「35歲以下科技創新35人」中國榜單專欄
TAG:人臉識別 | 圖像識別 | 深度學習DeepLearning |