美顏之人臉檢測與關鍵點技術解析

今天主要爲大家介紹美顏中人臉檢測與對齊的相關算法,圖玩智能科技爲企業提供更穩定更優質的美顏產品及服務,歡迎隨時諮詢www.toivan.com.

人臉檢測與關鍵點檢測問題描述:
人臉檢測解決的問題爲給定一張圖片,輸出圖片中人臉的位置,即使用方框框住人臉,輸出方框的左上角座標和右下角座標或者左上角座標和長寬。算法難點包括:人臉大小差異、人臉遮擋、圖片模糊、角度與姿態差異、表情差異等。而關鍵檢測則是輸出人臉關鍵點的座標,如左眼(x1,y1)、右眼(x2,y2)、鼻子(x3,y3)、嘴巴左上角(x4,y4)、嘴巴右上角(x5,y5)等。

深度學習相關算法:
(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算法過濾掉冗餘的框。

該算法結合了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】,是基於多任務級聯卷積神經網絡來解決人臉檢測和對齊問題,同時輸出圖片的人臉矩陣框和關鍵點座標(左眼、右眼、鼻子、嘴巴左上角、嘴巴右上角)。

輸入階段:爲應對目標多尺度問題,將原始圖像resize到不同尺寸,構建圖像金字塔,作爲三階級聯架構的輸入,這樣處理可以更好地檢測大小不一的人臉。

第一階段:通過一個全部由卷積層組成的CNN,取名P-Net,獲取候選人臉框、關鍵點座標和人臉分類(是人臉或不是),之後採用NMS過濾掉高重疊率的候選窗口。如下圖所示:

第二階段:第一階段輸出的候選人臉框作爲更爲複雜的R-Net網絡的輸入,R-Net進一步篩除大量錯誤的候選人臉框,同樣也通過NMS過濾掉高重疊率的候選窗口。

第三階段:與第二階段類似,最終網絡輸出人臉框座標、關鍵點座標和人臉分類(是人臉或不是)。

MTCNN通過三級的級聯卷積神經網絡對任務進行從粗到細的處理,還提出在線困難樣本生成策略(online hard sample mining )可以進一步提升性能。兼併了速度與準確率,速度在GPU上可以達到99FPS,在 FDDB數據集上可以達到95.04準確率。

二、人臉對齊

人臉對齊通過人臉關鍵點檢測得到人臉的關鍵點座標,然後根據人臉的關鍵點座標調整人臉的角度,使人臉對齊,由於輸入圖像的尺寸是大小不一的,人臉區域大小也不相同,角度不一樣,所以要通過座標變換,對人臉圖像進行歸一化操作。人臉關鍵點檢測有很多算法可以使用包括: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至少需要三個點,所以我們需要構選第三個點,構造方法是用第三個點與已有的兩個點構成等邊三角形。

經過上一步的處理之後,所有的圖像都變成一樣大小,並且又三個關鍵點的位置是保持一致的,但因爲除了三個點對齊了之外,其他點並沒有對齊。所以根據得到的變換矩陣對剩下所有的點進行仿射變換:

img爲輸入圖像;

warped爲變換後圖像,類型與src一致;

M爲變換矩陣,需要通過其它函數獲得,當然也可以手動輸入;

Image_size爲輸出圖像的大小;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章