如何應用MTCNN和FaceNet模型實現人臉檢測及識別

編輯 | Vincent
AI 前線導讀:人臉檢測是對人臉進行識別和處理的第一步,主要用於檢測並定位圖片中的人臉,返回高精度的人臉框座標及人臉特徵點座標。人臉識別會進一步提取每一個人臉中所蘊涵的身份特徵,並將其與已知的人臉進行對比,從而識別每一個人臉的身份。目前人臉檢測 / 識別的應用場景逐漸從室內演變到室外,從單一限定場景發展到廣場、車站、地鐵口等場景,人臉檢測 / 識別面臨的要求也愈來愈高,好比:人臉尺度多變、數量冗大、姿式多樣包括俯拍人臉、戴帽子口罩等的遮擋、表情誇張、化妝假裝、光照條件惡劣、分辨率低甚至連肉眼都較難區分等。隨着深度學習的發展,基於深度學習技術的人臉檢測 / 識別方法取得了巨大的成功,本文主要介紹人臉檢測的深度學習模型 MTCNN 和人臉識別的深度學習模型 FaceNet。

更多幹貨內容請關注微信公衆號「AI 前線」,(ID:ai-front)
人臉檢測與人臉識別

2016 年 Kaipeng Zhang, Zhanpeng Zhang, Zhifeng Li, Yu Qiao 提出了人臉檢測 MTCNN(Multi-task Cascaded Convolutional Networks)模型。該模式是一種 Multi-task 的人臉檢測框架,使用 3 個 CNN 級聯算法結構,將人臉檢測和人臉特徵點檢測同時進行,檢測效果以下圖所示:html

Google 工程師 Florian Schroff,Dmitry Kalenichenko,James Philbin 提出了人臉識別 FaceNet 模型,該模型沒有用傳統的 softmax 的方式去進行分類學習,而是抽取其中某一層做爲特徵,學習一個從圖像到歐式空間的編碼方法,而後基於這個編碼再作人臉識別、人臉驗證和人臉聚類等。人臉識別效果以下圖所示,其中橫線上表示的數字是人臉間的距離,當人臉距離小於 1.06 可看做是同一我的。git

MTCNN 模型

MTCNN 是多任務級聯 CNN 的人臉檢測深度學習模型,該模型中綜合考慮了人臉邊框迴歸和麪部關鍵點檢測。MTCNN 的網絡總體架構以下圖所示:github

首先照片會按照不一樣的縮放比例,縮放成不一樣大小的圖片,造成圖片的特徵金字塔。PNet 主要得到了人臉區域的候選窗口和邊界框的迴歸向量。並用該邊界框作迴歸,對候選窗口進行校準,而後經過非極大值抑制(NMS)來合併高度重疊的候選框。RNet 將通過 PNet 的候選框在 RNet 網絡中訓練,而後利用邊界框的迴歸值微調候選窗體,再利用 NMS 去除重疊窗體。ONet 功能與 RNet 做用相似,只是在去除重疊候選窗口的同時,同時顯示五我的臉關鍵點定位。算法

MTCNN 人臉檢測的訓練數據能夠從 http://mmlab.ie.cuhk.edu.hk/projects/WIDERFace/ 地址下載。該數據集有 32,203 張圖片,共有 93,703 張臉被標記,以下圖所示:express

標記文件的格式以下所示:微信

# 文件名網絡

File name數據結構

# 標記框的數量架構

Number of bounding box框架

# 其中 x1,y1 爲標記框左上角的座標,w,h 爲標記框的寬度,blur, expression, illumination, invalid, occlusion, pose 爲標記框的屬性,好比是否模糊,光照狀況,是否遮擋,是否有效,姿式等。

x1, y1, w, h, blur, expression, illumination, invalid, occlusion, pose

人臉關鍵點檢測的訓練數據可從 http://mmlab.ie.cuhk.edu.hk/archive/CNN_FacePoint.htm 地址下載。該數據集包含 5,590 張 LFW 數據集的圖片和 7,876 張從網站下載的圖片。以下所示:

標記文件的格式爲:

/# 第一個數據爲文件名,第二和第三個數據爲標記框左上角座標,第四和第五個數據爲標記框長寬,第六和第七個數據爲左眼標記點,第八和第九個數據爲右眼標記點,第十和第十一個數據爲左嘴標記點,最後兩個座標爲右嘴標記點。

lfw_5590\Abbas_Kiarostami_0001.jpg 75 165 87 177 106.750000 108.250000 143.750000 108.750000 131.250000 127.250000 106.250000 155.250000 142.750000 155.250000

PNet 的網絡結構是一個全卷積的神經網絡結構,以下圖所:

該訓練網絡的輸入是一個 12×12 大小的圖片,因此訓練前須要生成 PNet 網絡的訓練數據。訓練數據能夠經過和 Guarantee True Box 的 IOU 的計算生成一系列的 bounding box。能夠經過滑動窗口或者隨機採樣的方法獲取訓練數據,訓練數據分爲三種正樣本,負樣本,中間樣本。其中正陽本是生成的滑動窗口和 Guarantee True Box 的 IOU 大於 0.65,負樣本是 IOU 小於 0.3,中間樣本是 IOU 大於 0.4 小於 0.65。

而後把 bounding box resize 成 12×12 大小的圖片,轉換成 12×12×3 的結構,生成 PNet 網絡的訓練數據。訓練數據經過 10 個 3×3×3 的卷積核,2×2 的 Max Pooling(stride=2)操做,生成 10 個 5×5 的特徵圖。接着經過 16 個 3×3×10 的卷積核,生成 16 個 3×3 的特徵圖。接着經過 32 個 3×3×16 的卷積核,生成 32 個 1×1 的特徵圖。最後針對 32 個 1×1 的特徵圖,能夠經過 2 個 1×1×32 的卷積核,生成 2 個 1×1 的特徵圖用於分類;4 個 1×1×32 的卷積核,生成 4 個 1×1 的特徵圖用於迴歸框判斷;10 個 1×1×32 的卷積核,生成 10 個 1×1 的特徵圖用於人臉輪廓點的判斷。

RNet 的模型結構以下所示:

模型輸入爲 24×24 大小的圖片,經過 28 個 3×3×3 的卷積核和 3×3(stride=2)的 max pooling 後生成 28 個 11×11 的特徵圖;經過 48 個 3×3×28 的卷積核和 3×3(stride=2)的 max pooling 後生成 48 個 4×4 的特徵圖;經過 64 個 2×2×48 的卷積核後,生成 64 個 3×3 的特徵圖;把 3×3×64 的特徵圖轉換爲 128 大小的全鏈接層;對迴歸框分類問題轉換爲大小爲 2 的全鏈接層;對 bounding box 的位置迴歸問題,轉換爲大小爲 4 的全鏈接層;對人臉輪廓關鍵點轉換爲大小爲 10 的全鏈接層。

ONet 是 MTCNN 中的最後一個網絡,用於作網絡的最後輸出。ONet 的訓練數據生成相似於 RNet,檢測數據爲圖片通過 PNet 和 RNet 網絡後,檢測出來的 bounding boxes,包括正樣本,負樣本和中間樣本。ONet 的模型結構以下所示:

模型輸入是一個 48×48×3 大小的圖片,經過 32 個 3×3×3 的卷積核和 3×3(stride=2)的 max pooling 後轉換爲 32 個 23×23 的特徵圖;經過 64 個 3×3×32 的卷積核和 3×3(stride=2)的 max pooling 後轉換爲 64 個 10×10 的特徵圖;經過 64 個 3×3×64 的卷積核和 3×3(stride=2)的 max pooling 後轉換爲 64 個 4×4 的特徵圖;經過 128 個 2×2×64 的卷積核轉換爲 128 個 3×3 的特徵圖;經過全連接操做轉換爲 256 大小的全連接層;最好生成大小爲 2 的迴歸框分類特徵;大小爲 4 的迴歸框位置的迴歸特徵;大小爲 10 的人臉輪廓位置迴歸特徵。

MTCNN 模型推理

MTCNN 的 Inference 流程以下圖所示:

由原始圖片和 PNet 生成預測的 bounding boxes。輸入原始圖片和 PNet 生成的 bounding box,經過 RNet,生成校訂後的 bounding box。輸入元素圖片和 RNet 生成的 bounding box,經過 ONet,生成校訂後的 bounding box 和人臉面部輪廓關鍵點。執行過程以下所示:

  1. 首先讀入要檢測的圖片:image = cv2.imread(imagepath)

  2. 加載訓練好的模型參數,構建檢測對象:detector = MtcnnDetector

  3. 執行推理操做:all_boxes,landmarks = detector.detect_face(image)

  4. 繪製目標框:cv2.rectangle(image, box,(0,0,255))

FaceNet 模型

FaceNet 主要用於驗證人臉是否爲同一我的,經過人臉識別這我的是誰。FaceNet 的主要思想是把人臉圖像映射到一個多維空間,經過空間距離表示人臉的類似度。同我的臉圖像的空間距離比較小,不一樣人臉圖像的空間距離比較大。這樣經過人臉圖像的空間映射就能夠實現人臉識別,FaceNet 中採用基於深度神經網絡的圖像映射方法和基於 triplets(三聯子)的 loss 函數訓練神經網絡,網絡直接輸出爲 128 維度的向量空間。

FaceNet 的訓練數據能夠從 http://www.cbsr.ia.ac.cn/english/CASIA-WebFace-Database.html 下載,該訓練數據包括 10575 我的,共 453453 張圖片。驗證數據集能夠從 http://vis-www.cs.umass.edu/lfw/ 地方下載,該數據集包含 13,000 張圖片。訓練數據的組織結構以下所示,其中目錄名是人名,目錄下的文件是對應人的照片。

Aaron_Eckhart
Aaron_Eckhart_0001.jpg

Aaron_Guiel
Aaron_Guiel_0001.jpg

Aaron_Patterson
Aaron_Patterson_0001.jpg

Aaron_Peirsol
Aaron_Peirsol_0001.jpg
Aaron_Peirsol_0002.jpg
Aaron_Peirsol_0003.jpg
Aaron_Peirsol_0004.jpg

······

接着對該訓練數據中每一個圖片進行預處理,經過 MTCNN 模型把人臉檢測出來,生成 FaceNet 的訓練數據,以下圖所示:

造成相應的數據結構以下所示:

Aaron_Eckhart
Aaron_Eckhart_0001_face.jpg

Aaron_Guiel
Aaron_Guiel_0001_face.jpg

······

FaceNet 的網絡結構以下圖所示:

其中 Batch 表示人臉的訓練數據,接下來是深度卷積神經網絡,而後採用 L2 歸一化操做,獲得人臉圖像的特徵表示,最後爲三元組(Triplet Loss)的損失函數。

下圖爲 FaceNet 中採用的 Inception 架構的深度卷積神經網絡:

模型結構的末端使用 triplet loss 來直接分類。triplet loss 的啓發是傳統 loss 函數趨向於將有一類特徵的人臉圖像映射到同一個空間。而 triplet loss 嘗試將一個個體的人臉圖像和其它人臉圖像分開。三元組其實就是三個樣例,如 (anchor, pos, neg),利用距離關係來判斷。即在儘量多的三元組中,使得 anchor 和 pos 正例的距離,小於 anchor 和 neg 負例的距離,以下圖所示:

用數學公式能夠表示爲:

模型在每一個 Mini Batch 的訓練時,爲了計算 triplet Loss 值,須要選定合理的 triplet 三元組。若是採用暴力的方法從全部樣本中找出離他最近的反例和離它最遠的正例,而後進行優化,查找時間太長,而且還會因爲錯誤標籤圖像致使訓練收斂困難。可採用在線生成 triplet 的方式,在每一個 mini-batch 中,生成 triplet 的時候,找出全部的 anchor-pos 對,而後對每一個 anchor-pos 對找出其 hard neg 樣本。

主要流程以下所示:

  1. 在 mini-batch 開始的時候,從訓練數據集中抽樣人臉照片。好比每個 batch 抽樣多少人,每一個人抽樣多少張圖片,這樣會獲得要抽樣的人臉照片。

  2. 計算這些抽樣圖片在網絡模型中獲得的 embedding,這樣經過計算圖片的 embedding 之間的歐式距離獲得三元組了。

  3. 根據獲得的三元組,計算 triplet-loss,進行模型優化,更新 embedding。

FaceNet 模型推理

FaceNet 模型推理流程以下所示:

  1. 經過 MTCNN 人臉檢測模型,從照片中提取人臉圖像。

  2. 把人臉圖像輸入到 FaceNet,計算 Embedding 的特徵向量。

  3. 比較特徵向量間的歐式距離,判斷是否爲同一人,例如當特徵距離小於 1 的時候認爲是同一我的,特徵距離大於 1 的時候認爲是不一樣人。

總結

本文首先介紹了人臉檢測和人臉識別,人臉檢測用於定位圖片中的人臉,人臉識別用於識別人臉的身份。而後講解了 MTCNN 模型的主要思想,並對 MTCNN 的關鍵技術進行分析,主要包括訓練數據,網絡架構,PNet,RNet,ONet 及模型推理。接着講解了 FaceNet 模型的主要思想及關鍵技術包括訓練數據,網絡結構,損失方程及 Triplet 的選擇。用戶可應用 MTCNN 及 FaceNet 模型架構到工業領域中相關人臉檢測及識別場景。

參考文獻

[1] MTCNN: a Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks.

[2] https://github.com/AITTSMD/MTCNN-Tensorflow

[3] FaceNet: A Unified Embedding for Face Recognition and Clustering

[4] https://github.com/davidsandberg/facenet

做者簡介

武維(微信:allawnweiwu):博士,現爲 IBM 架構師。主要從事深度學習平臺及應用研究,大數據領域的研發工做。

相關文章
相關標籤/搜索