當前位置:
首頁 > 知識 > 級聯MobileNet-V2實現人臉關鍵點檢測

級聯MobileNet-V2實現人臉關鍵點檢測

為了能在移動端進行實時的人臉關鍵點檢測,本實驗採用最新的輕量化模型——MobileNet-V2 作為基礎模型,在 CelebA 數據上,進行兩級的級聯 MobileNet-V2 實現人臉關鍵點檢測。首先,將 CelebA 數據作為第一級 MobileNet-V2 的輸入,經第一級 MobileNet-V2 得到粗略的關鍵點位置;然後,依據第一級 MobileNet-V2 的輸出,採取一定的裁剪策略,將人臉區域從原始數據上裁剪出來作為第二級 MobileNet-V2 的輸入;最後,經第二級 MobileNet-V2 輸出最終人臉關鍵點定位信息。經初步訓練,最終網路單模型不到 1M,僅 956KB,單張圖片 inference 耗時 6ms(採用 GTX1080 在未優化的 Caffe)。實驗結果表明,MobileNet-V2 是一個性能極佳的輕量化模型,可以採用較少的參數獲得較好的性能;同時,級聯的操作可達到從粗到精的關鍵點定位。

一、引言

人臉關鍵點檢測也稱為人臉關鍵點檢測、定位或者人臉對齊,是指給定人臉圖像,定位出人臉面部的關鍵區域位置,包括眉毛、眼睛、鼻子、嘴巴、臉部輪廓等和人臉檢測類似,由於受到姿態和遮擋等因素的影響,人臉關鍵點檢測是一個富有挑戰性的任務。

人臉關鍵點檢測方法大致分為三種,分別是基 ASM(Active Shape Model)[1] 和 AAM (Active Appearnce Model)[2,3] 的傳統方法;基於級聯形狀回歸的方法 [4];基於深度學習的方法 [5-10]。在深度學習大行其道的環境下,本實驗將借鑒深度學習以及級聯思想進行人臉關鍵點檢測。

隨著手機的智能化及萬物物聯的興起,在移動端上部署深度學習模型的需求日益增大。然而,為獲得更佳的性能,卷積神經網路的設計,從 7 層 AlexNet[11] 到上千層的 ResNet[12] 和 DenseNet[13],網路模型越來越大,嚴重阻礙了深度學習在移動端的使用。因此,一種輕量的,高效率的模型——MobileNet-V1[14] 應運而生。MobileNet-V1 最早由 Google 團隊於 2017 年 4 月公布在 arXiv 上,而本實驗採用的是 MobileNet-V2[15],是在 MobileNet-V1 基礎上結合當下流行的殘差思想而設計的一種面向移動端的卷積神經網路模型。MobileNet-V2 不僅達到滿意的性能(ImageNet2012 上 top-1:74.7%),而且運行速度以及模型大小完全可達到移動端實時的指標。因此,本實驗將 MobileNet-V2 作為基礎模型進行級聯。

二、兩級級聯 MobileNet-V2

2.1 整體框架及思路

本實驗採用兩級級聯 MobileNet-V2,分別稱之為 level_1 和 level_2,由於個人精力有限,level_1 和 level_2 採用完全相同的網路結構。level_1 進行粗略的關鍵點定位;依據 level_1 輸出的關鍵點進行人臉區域裁剪,獲得人臉區域圖像作為 level_2 的輸入,最終關鍵點定位信息由 level_2 進行輸出。流程如下圖所示:

通常進行人臉關鍵點檢測之前,需要進行人臉檢測,即將人臉檢測獲得的人臉圖像區域作為人臉關鍵點檢測模型的輸入。然而進行人臉檢測是相當耗時的,所以,在特定場景下(即確定有且僅有一個人的圖像)可以採用 level_1 代替人臉檢測步驟,通過 level_1 可獲得人臉區域,從而提高整個任務效率和速度。本實驗正是採用 level_1 剔除非人臉區域,從而使得後一級的網路可以更為精準的進行關鍵點定位。

本實驗僅做了兩級級聯,其實還可像 DCNN[5] 那樣繼續級聯,對眼睛,鼻子,嘴巴分別進行預測,或者是學習 Face++[6] 那樣,在 68 點的關鍵點定位中,將 68 點劃分為兩個區域分別預測。這些都是很好的想法,十分值得借鑒,但個人精力有限,在此僅做了兩級級聯作為學習,希望大家可以基於 MobileNet-V2 去改進上述兩種方法。

2.2 基礎模型——MobileNet-V2

MobileNet-V2[15] 由 Google 團隊於 2018 年 1 月公布在 arXiv 上,是一種短小精悍的模型,僅數 M 的模型就在 ImageNet 上獲得 74.7% 的準確率(top-1),具體分類性能如下:

原版 MobileNet-V2 網路結構如下圖所示:

其中:t 表示「擴張」倍數,c 表示輸出通道數,n 表示重複次數,s 表示步長 stride。

解釋一下原文的有誤之處:

1. 第五行,也就是第四個 bottleneck,stride=2,解析度應該從 28 降低到 14;要麼就是 stride=1;

2. 文中提到共計採用 19 個 bottleneck,但是這裡只有 17 個。

結合本實驗任務的需求,設計了一個輸入尺寸為 48*48 的 MobileNet-V2(level_1 和 level_2 均採用此網路結構),網路結構如下圖所示:

三、實驗及結果

3.1 數據集簡介

實驗數據採用 CelebFaces Attributes Dataset (CelebA) 公開數據集 (http://mmlab.ie.cuhk.edu.hk/projects/CelebA.html),CelebA 數據集是香港中文大學的開放的數據集,此數據集包含 10177 個名人,共計 202599 張圖片,每張圖片含 5 個關鍵點標註信息以及 40 個屬性標籤。經過實驗結果分析,此數據集在人臉關鍵點檢測上的困難點在於:

1. 人臉區域面積占圖片面積大小不一,有部分圖片中的人臉佔比相當小。

例如:

2. 人臉角度多樣性強,俯仰角(pitch)、偏航角 (yaw) 和橫滾角 (roll) 均有,但絕大多數數據為正向無偏角,從而導致正向無偏角檢測效果較好,複雜偏角檢測效果較差。

3. 噪音圖片,圖片「不完整」,例如存在大部分黑色區域圖片。

3.2 評價指標

這裡採用相對誤差作為評價指標,相對誤差計算公式為:,其中表示輸出 landmark 與真實 landmark 的歐氏距離,表示圖片對角線的長度。一開始,本實驗採用的是雙眼距離作為歸一化因子,但是 CelebA 數據集並不適合採用雙眼距離作為歸一化因子,因為在計算時會出現 inf!即兩眼在同一位置,導致分母為零,這是 LFW,ALFW 數據集不會出現的情況。兩眼距離為零的圖片示意圖;

3.3 模型訓練

level_1 與 level_2 採用相同網路結構,solver 也一致。solver 為:

level_1 的訓練 loss 曲線如圖所示:

Train loss 大概是在 0.005~0.006,Test loss 是在 0.007~0.008(註:訓練的時候 loss_weighs 設置為 100,因此上圖數量級上不一致)

訓練和測試的平均誤差分別為 1.01% 和 1.17%。5 個點的平均誤差如下圖所示:

訓練集和測試集各點誤差分布如圖:

從誤差分布圖可以看到,誤差分布呈高斯分布狀,訓練與測試的分布形狀基本一致,通過誤差分布圖可知,在訓練集中,絕大部分誤差小於 5%,因此在選取 level_1 的裁剪閾值時,可參照此圖進行調試。

level_1 訓練完畢,需要進行圖片裁剪,以供 level_2 進行訓練。這裡採取的裁剪策略為,以 level_1 預測到的鼻子為中心,裁剪出一個正方形,這個正方形的邊長為四倍鼻子到左眼的距離。以下圖為例,綠色點為 level_1 的預測關鍵點,紅色方框即為裁剪框:

在裁剪時,還需要對部分圖片進行丟棄,以此確保裁剪之後的圖片能包含完整的人臉。本實驗將丟棄閾值設置為 10%,即誤差大於 10% 的圖片進行丟棄,然而實驗結果表明 10% 並不是一個較好的閾值,應該設置為 5% 比較合理。

經過裁剪操作可獲得 level_2 的訓練數據,接著訓練 level_2,level_2 的 loss 曲線如圖:

level_2 與 level_1 的曲線有著明顯的不同,即曲線出現了很大的浮動,有尖點存在。這是為什麼呢?其實是因為 level_1 剪裁出了問題,在裁剪時,將誤差小於 10% 的圖片保留,用以裁剪。其實這個閾值(10%)還是太大了,以至於裁剪出這一些「不合格」圖片。例如:

level_2 訓練完畢,即可進行級聯檢測,forward 耗時如圖所示:

級聯檢測效果如下圖所示,其中,綠色點為真實 landmark,紅色點為 level_1 的預測,藍色點為 level_2 的預測。可以看到藍色點比紅色點更靠近綠色點:

四、總結與展望

本實驗在 CelebA 數據集上,採用最新的輕量化網路——MobileNet-V2 作為基礎模型,進行級聯卷積神經網路人臉關鍵點檢測實驗,初步驗證 MobileNet-V2 是短小精悍的模型,並且從模型大小以及運行速度上可知,此模型可在移動端實現實時檢測。此實驗只是對級聯思想的一個簡單驗證,若要獲得更高精度的人臉關鍵點模型,還有很多可改進的地方。在此總結此實驗已知的不足之處,供大家參考並改進:

1.level_1 的輸入可為 24*24 甚至更小,只要保證能依據輸出的 landmark 來裁剪處人臉區域即可;

2.level_1 的裁剪策略相對「拙劣」,可依據具體應用場景,提出不同的裁剪策略,確保輸入到 level_2 的圖片包含整個人臉;

3.模型訓練不足,未完全收斂,可對 solver 進行修改,獲得更好的模型;

4.可增加第三級模型,分別對眼睛,鼻子,嘴巴進行檢測,從而獲得更精確定位點;

5.對於具體應用場景,應依據困難樣本,需要針對性的做數據增強,例如 CelebA 中,正向無偏角人臉較多,而有俯仰角、偏航角和橫滾角的圖片佔少數,從而導致模型對含偏角的圖片預測效果較差;

6.未進行模型壓縮,若需要部署,則要進行模型壓縮,從而獲得更小的模型;

7.Caffe 對 depth-wise convolution 的支持並不友好,從而在 Caffe 下體現不出 MobileNet-V2 的高效,可嘗試 TensorFlow 下進行;

8.歡迎大家補充

下一步工作:

1. 針對以上不足進行改進;

2. 尋找有興趣的朋友進行 68 點關鍵點檢測實驗,並進行模型壓縮,獲得更小更好的網路。

本實驗所有代碼可在 GitHub 上獲得:https://github.com/tensor-yu/cascaded_mobilenet-v2

詳細訓練步驟可參見博客:http://blog.csdn.net/u011995719/article/details/79435615

歡迎大家提出寶貴的意見和建議。

參考文獻

[1] T.F. Cootes, C.J. Taylor, D.H. Cooper, et al. Active Shape Models-Their Training and Application[J]. Computer Vision and Image Understanding, 1995, 61(1):38-59.

[2] G. J. Edwards, T. F. Cootes, C. J. Taylor. Face recognition using active appearance models[J]. Computer Vision—Eccv』, 1998, 1407(6):581-595.

[3] Cootes T F, Edwards G J, Taylor C J. Active appearance models[C]// European Conference on Computer Vision. Springer Berlin Heidelberg, 1998:484-498.

[4] Dollár P, Welinder P, Perona P. Cascaded pose regression[J]. IEEE, 2010, 238(6):1078-1085.

[5] Sun Y, Wang X, Tang X. Deep Convolutional Network Cascade for Facial Point Detection[C]// Computer Vision and Pattern Recognition. IEEE, 2013:3476-3483.

[6] Zhou E, Fan H, Cao Z, et al. Extensive Facial Landmark Localization with Coarse-to-Fine Convolutional Network Cascade[C]// IEEE International Conference on Computer Vision Workshops. IEEE, 2014:386-391.

[7] Zhang Z, Luo P, Chen C L, et al. Facial Landmark Detection by Deep Multi-task Learning[C]// European Conference on Computer Vision. 2014:94-108.

[8] Wu Y, Hassner T. Facial Landmark Detection with Tweaked Convolutional Neural Networks[J]. Computer Science, 2015.

[9] 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.

[10] Kowalski M, Naruniec J, Trzcinski T. Deep Alignment Network: A Convolutional Neural Network for Robust Face Alignment[J]. 2017:2034-2043.

[11] Krizhevsky A, Sutskever I, Hinton G E. ImageNet classification with deep convolutional neural networks[C]// International Conference on Neural Information Processing Systems. Curran Associates Inc. 2012:1097-1105.

[12] He K, Zhang X, Ren S, et al. Deep Residual Learning for Image Recognition[C]// Computer Vision and Pattern Recognition. IEEE, 2016:770-778.

[13] Huang G, Liu Z, Maaten L V D, et al. Densely Connected Convolutional Networks[C]// CVPR. 2017.

[14] Howard A G, Zhu M, Chen B, et al. MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications[J]. 2017.

[15] Sandler M, Howard A, Zhu M, et al. Inverted Residuals and Linear Bottlenecks: Mobile Networks for Classification,axXiv.

作者簡介:余霆嵩,廣東工業大學研三學生,研究方向:關鍵點定位,模型壓縮,Email:yts3221@126.com


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 機器之心 的精彩文章:

可視化線性修正網路:看Fisher-Rao範數與泛化之間的關係
循環神經網路自動生成程序:谷歌大腦提出「優先順序隊列訓練」

TAG:機器之心 |