SeetaFace開源人臉識別引擎介紹

xq123joes 8年前發布 | 53K 次閱讀 人臉識別 開源 機器學習

區分不同的人是很多智能系統的必備能力。為實現此目的,一種可能的技術手段是通過對人臉的光學成像來感知人、識別人,即所謂的人臉識別技術。經過幾十年的研發積累,特別是近年來深度學習技術的涌現,人臉識別取得了長足的進步,在安防、金融、教育、社保等領域得到了越來越多的應用,成為計算機視覺領域最為成功的分支領域之一。

然而,人臉識別并非完全成熟的技術,離公眾期望的全面應用尚有距離,還需要學術界、工業界的共同努力。為此,整個人臉識別社區需要有基準(Baseline)系統,而且基準系統的水平顯然會極大影響著該領域的發展水平。可是令人尷尬的是,這個領域迄今尚無一套包括所有技術模塊的、完全開源的基準人臉識別系統!我們希望改變現狀,因此開源了SeetaFace人臉識別引擎。該引擎由中科院計算所山世光研究員帶領的人臉識別研究組研發。代碼基于C++實現,且不依賴于任何第三方的庫函數,開源協議為BSD-2,可供學術界和工業界免費使用。

SeetaFace人臉識別引擎包括了搭建一套全自動人臉識別系統所需的三個核心模塊,即:人臉檢測模塊SeetaFace Detection、面部特征點定位模塊SeetaFace Alignment以及人臉特征提取與比對模塊 SeetaFace Identification。其中,SeetaFace Detection采用了一種結合傳統人造特征與多層感知機(MLP)的級聯結構,在FDDB上達到了84.4%的召回率(100個誤檢時),并可在單個i7 CPU上實時處理VGA分辨率的圖像。面部特征點定位模塊SeetaFace Alignment通過級聯多個深度模型(棧式自編碼網絡)來回歸5個關鍵特征點(兩眼中心、鼻尖和兩個嘴角)的位置,在AFLW數據庫上達到state-of-the-art的精度,定位速度在單個i7 CPU上超過200fps。人臉識別模塊SeetaFace Identification采用一個9層的卷積神經網絡(CNN)來提取人臉特征,在LFW數據庫上達到97.1%的精度(注:采用SeetaFace人臉檢測和SeetaFace面部特征點定位作為前端進行全自動識別的情況下),特征提取速度為每圖120ms(在單個i7 CPU上)。

下面對上述三個模塊的情況做簡要介紹,更詳細的介紹請參考我們相應的學術論文。

人臉檢測模塊SeetaFace Detection

該模塊基于我們提出的一種結合經典級聯結構和多層神經網絡的人臉檢測方法[1]實現,其所采用的漏斗型級聯結構(Funnel-Structured Cascade,FuSt)專門針對多姿態人臉檢測而設計,其中引入了由粗到精的設計理念,兼顧了速度和精度的平衡。如圖1所示,FuSt級聯結構在頂部由多個針對不同姿態的快速LAB級聯分類器[2]構成,緊接著是若干個基于SURF特征的多層感知機(MLP)級聯結構,最后由一個統一的MLP級聯結構(同樣基于SURF特征)來處理所有姿態的候選窗口,整體上呈現出上寬下窄的漏斗形狀。從上往下,各個層次上的分類器及其所采用的特征逐步變得復雜,從而可以保留人臉窗口并排除越來越難與人臉區分的非人臉候選窗口。

圖1. SeetaFace人臉檢測模塊所采用的FuSt漏斗型級聯結構[1]

與SeetaFace Detection開源代碼配套開放的是一個準正面人臉檢測模型(使用了約20萬人臉圖像訓練而來),可以實現準正面人臉的準確檢測(旋轉角度約45度以內,但對于姿態偏轉較大的人臉也具備一定的檢測能力),圖2給出了一些檢測結果的示例(注:測試時圖像金字塔下采樣比例設置為0.8,滑動步長設置為4和2,最小人臉設置為20x20)。在人臉檢測領域最重要的評測集FDDB上對SeetaFace Detector進行評測,在輸出100個誤檢時(FPPI=0.035)召回率達到84.4%,輸出1000個誤檢時召回率達到88.0%。圖3則給出了SeetaFace Detector在FDDB上的離散型得分ROC曲線,并與其它已發表的學術界公開結果(從FDDB官網獲得)進行了對比。不難看出,盡管SeetaFace人臉檢測器并非目前精度最高的,但在學術界公開的結果中仍然具有很強的競爭力,而且可以完全滿足多數人臉識別系統的需求。

圖2. SeetaFace Detection人臉檢測結果的示例

圖3. SeetaFace Detector在FDDB上的ROC曲線

此外,與其他算法相比,SeetaFace Detector在速度上有一定優勢。對于640x480大小的VGA圖像,檢測速度的對比情況如表1所示。其中,SeetaFace的速度在單個3.40GHz的i7-3770 CPU上測得,Cascade CNN[3]在CPU上的速度在2.0GHz的CPU上測得(引自原文)。而各方法在GPU上的速度在NVIDIA Titan Black GPU上測得。

特征點定位模塊SeetaFace Alignment

面部特征點定位(人臉對齊)在人臉識別、表情識別、人臉動畫合成等諸多人臉分析任務中扮演著非常重要的角色。由于姿態、表情、光照和遮擋等因素的影響,真實場景下的人臉對齊任務是一個非常困難的問題。形式上,該問題可以看作是從人臉表觀到人臉形狀的復雜非線性映射。為此,SeetaFace Alignment采用的是我們提出的一種由粗到精的自編碼器網絡(Coarse-to-Fine Auto-encoder Networks, CFAN [8])來求解這個復雜的非線性映射過程。如圖 4所示,CFAN級聯了多級棧式自編碼器網絡,其中的每一級都刻畫從人臉表觀到人臉形狀的部分非線性映射。具體來說,輸入一個人臉區域(由人臉檢測模塊得到),第一級自編碼器網絡直接從該人臉的低分辨率版本中快速估計大致的人臉形狀S 0 。然后,提高輸入人臉圖像的分辨率,并抽取當前人臉形狀S 0 (相應提升分辨率)各特征點位置的局部特征,輸入到下一級自編碼器網絡來進一步優化人臉對齊結果。以此類推,通過級聯多個棧式自編碼器網絡,在越來越高分辨率的人臉圖像上逐步優化人臉對齊結果。

圖4. 基于由粗到精自編碼器網絡(CFAN)的實時人臉對齊方法[8]

此次開源的SeetaFace Alignment基于上述CFAN方法實現了5個面部關鍵特征點(兩眼中心,鼻尖和兩個嘴角)的精確定位,訓練集包括23,000余幅人臉圖像(標注了5點)。需要注意的是,為加速之目的,在基本不損失精度的情況下,開源實現中將CFAN級聯的數目減少到了2級,從而可在單顆Intel i7-3770 (3.4 GHz CPU)上達到每個人臉5ms的處理速度(不包括人臉檢測時間)。圖5給出了一些用SeetaFace Alignment開源引擎定位面部5點的效果示例,可見其對表情、姿態、膚色等均具有較好的魯棒性。在AFLW數據集上的量化評價和對比情況如圖6所示,其中平均定位誤差根據兩眼中心距離做了歸一化。不難看出,SeetaFace Alignment取得了state-of-the-art的定位結果。

圖5. SeetaFace Alignment定位結果示例

圖6. SeetaFace Alignment在AFLW數據集上的定位誤差及對比情況

其中LE:左眼,RE:右眼,N:鼻尖,LM:左嘴角,RM:右嘴角

人臉特征提取與比對模塊SeetaFace Identification

人臉識別本質上是要計算兩幅圖像中人臉的相似程度,其一為注冊階段(類比人的相識過程)輸入系統的,另一幅為識別階段(即再見時的辨認過程)的輸入。為此,如圖7所示,一套全自動的人臉識別系統在完成前述的人臉檢測與人臉對齊兩個步驟之后,即進入第三個核心步驟:人臉特征提取和比對。這個階段也是深度學習風起云涌之后進步最大的模塊,目前大多數優秀的人臉識別算法均采用卷積神經網絡(CNN)來學習特征提取器(即圖7中的函數F)。

圖7.人臉識別系統的核心流程

SeetaFace開源的人臉特征提取模塊也是基于卷積神經網絡的。具體地說,其實現的是[9]中所描述的深度卷積神經網絡VIPLFaceNet:一個包含7個卷積層與2個全連接層的DCNN。其直接修改自Hinton教授的學生Alex Krizhevsky等于2012年設計的AlexNet(即引爆CNN在視覺中廣泛應用的網絡)。如表2對比所示,與AlexNet相比,VIPLFaceNet將5x5的卷積核拆分為兩層3x3的卷積核,從而增加了網絡深度,而并沒有增加計算量;VIPLFaceNet還減少了每個卷積層的kernel數目以及FC2層的節點數。同時,通過引入Fast Normalization Layer(FNL),加速了VIPLFaceNet的收斂速度,并在一定程度上提升了模型的泛化能力。測試表明,在相同訓練集情況下,VIPLFaceNet在LFW測試集上識別錯誤率比AlexNet降低了40%,而訓練和測試時間分別為AlexNet的20%和60%。

與開源的SeetaFace Identification代碼一起發布的人臉識別模型是使用140萬人臉圖像訓練出來的,這些訓練圖像來自于約1.6萬人,其中既有東方人也有西方人。人臉特征直接采用VIPLFaceNet FC2層的2048個結點的輸出,特征比對可簡單采用Cosine計算相似度,然后進行閾值比較(驗證應用)或排序(識別應用)即可。該引擎在多數人臉識別場景下均具有良好的性能,例如,在LFW standard Image-Restricted測試協議下,使用SeetaFace Detector與SeetaFace Alignment檢測并對齊人臉,采用SeetaFace Identification進行特征提取和比對,可以達到97.1%的識別正確率(請注意:這是系統全自動運行的結果,對少量不能檢到人臉的圖像,截取中間區域輸入人臉對齊模塊即可)。速度方面,在單顆Intel i7-3770 CPU上,開源代碼提取一張人臉之特征的時間約為120ms(不含人臉檢測和特征點定位時間)。

 參考文獻

[1] Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, and Xilin Chen. Funnel-Structured Cascade for Multi-View Face Detection with Alignment-Awareness. Neurocomputing (under review), 2016.

[2] Shengye Yan, Shiguang Shan, Xilin Chen, Wen Gao. Locally Assembled Binary (LAB) Feature for Fast and Accurate Face Detection. IEEE Computer Society International Conference on Computer Vision and Pattern Recognition, CVPR2008, Anchorage, Alaska, U.S.A, Jun. 2008

[3] Haoxiang Li, Zhe Lin, Xiaohui Shen, Jonathan Brandt, and Gang Hua. A convolutional neural network cascade for face detection. CVPR 2015.

[4] Shuo Yang, Ping Luo, Chen Change Loy, and Xiaoou Tang. From Facial Parts Responses to Face Detection: A Deep Learning Approach. ICCV 2015.

[5] Xuehan Xiong, Fernando De la Torre. Supervised descent method and its applications to face alignment. CVPR 2013

[6] Yi Sun, Xiaogang Wang, Xiaoou Tang. Deep Convolutional Network Cascade for Facial Point Detection. CVPR 2013

[7] Zhanpeng Zhang, Ping Luo, Chen Change Loy, Xiaoou Tang. Facial Landmark Detection by Deep Multi-task Learning. ECCV 2014

[8] Jie Zhang, Shiguang Shan, Meina Kan, Xilin Chen. Coarse-to-Fine Auto-Encoder Networks (CFAN) for Real-Time Face Alignment. ECCV 2014

[9] Xin Liu, Meina Kan, Wanglong Wu, Shiguang Shan, Xilin Chen. VIPLFaceNet: An Open Source Deep Face Recognition SDK. Frontier of Computer Science, Accepted

 

 

 

來自:http://mp.weixin.qq.com/s?__biz=MzI1NTE4NTUwOQ==&mid=2650325457&idx=1&sn=5fa67f028980b3f451d1e2b568d49cbf&chksm=f235a6dbc5422fcd7eefff058dfaccaeca2b3b0000ccee0edaf523a3db7740967c018cd25d00&scene=1&srcid=0914vg7OKyrgGSOr8Vv2RzIF#wechat_redirect

 

 本文由用戶 xq123joes 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!