4
導(dǎo)讀:對不同的人進行區(qū)分是很多智能系統(tǒng)的必備能力。所謂的人臉識別技術(shù)也是為了實現(xiàn)此目的開發(fā)出來的,通過對人臉的光學(xué)成像來感知人、識別人。經(jīng)過幾十年的研發(fā)積累,特別是近年來深度學(xué)習(xí)技術(shù)的涌現(xiàn),人臉識別取得了長足的進步,在安防、金融、教育、社保等領(lǐng)域得到了越來越多的應(yīng)用,也成為計算機視覺領(lǐng)域最為成功的分支領(lǐng)域之一。
然而,人臉識別并非是完全成熟的技術(shù),離公眾期望的全面應(yīng)用尚有距離,仍然需要學(xué)術(shù)界、工業(yè)界的共同努力。為此,整個人臉識別社區(qū)需要有基準(zhǔn)(Baseline)系統(tǒng),而且基準(zhǔn)系統(tǒng)的水平顯然會極大影響著該領(lǐng)域的發(fā)展水平??墒橇钊藢擂蔚氖?,這個領(lǐng)域迄今尚無一套包括所有技術(shù)模塊的、完全開源的基準(zhǔn)人臉識別系統(tǒng)。最新開源的SeetaFace人臉識別引擎也許能改變這個現(xiàn)狀,該引擎代碼由中科院計算所山世光研究員帶領(lǐng)的人臉識別研究組研發(fā)。代碼基于C++實現(xiàn),且不依賴于任何第三方的庫函數(shù),開源協(xié)議為BSD-2,可供學(xué)術(shù)界和工業(yè)界免費使用。
SeetaFace人臉識別引擎包括了搭建一套全自動人臉識別系統(tǒng)所需的三個核心模塊,即:
人臉檢測模塊SeetaFace Detection
面部特征點定位模塊SeetaFace Alignment
人臉特征提取與比對模塊 SeetaFace Identification
其中,人臉檢測模塊SeetaFace Detection采用了一種結(jié)合傳統(tǒng)人造特征與多層感知機(MLP)的級聯(lián)結(jié)構(gòu),在FDDB上達到了84.4%的召回率(100個誤檢時),并可在單個i7 CPU上實時處理VGA分辨率的圖像。
面部特征點定位模塊SeetaFace Alignment通過級聯(lián)多個深度模型(棧式自編碼網(wǎng)絡(luò))來回歸5個關(guān)鍵特征點(兩眼中心、鼻尖和兩個嘴角)的位置,在AFLW數(shù)據(jù)庫上達到state-of-the-art的精度,定位速度在單個i7 CPU上超過200fps。
人臉識別模塊SeetaFace Identification采用一個9層的卷積神經(jīng)網(wǎng)絡(luò)(CNN)來提取人臉特征,在LFW數(shù)據(jù)庫上達到97.1%的精度(注:采用SeetaFace人臉檢測和SeetaFace面部特征點定位作為前端進行全自動識別的情況下),特征提取速度為每圖120ms(在單個i7 CPU上)。
下面來簡要了解下上述三個核心模塊,更多詳細資料可以參考相關(guān)閱讀中的內(nèi)容。
人臉檢測模塊SeetaFace Detection基于一種結(jié)合經(jīng)典級聯(lián)結(jié)構(gòu)和多層神經(jīng)網(wǎng)絡(luò)的人臉檢測方法實現(xiàn),其所采用的漏斗型級聯(lián)結(jié)構(gòu)(Funnel-Structured Cascade,F(xiàn)uSt)專門針對多姿態(tài)人臉檢測而設(shè)計,其中引入了由粗到精的設(shè)計理念,兼顧了速度和精度的平衡。如圖1所示,F(xiàn)uSt級聯(lián)結(jié)構(gòu)在頂部由多個針對不同姿態(tài)的快速LAB級聯(lián)分類器構(gòu)成,緊接著是若干個基于SURF特征的多層感知機(MLP)級聯(lián)結(jié)構(gòu),最后由一個統(tǒng)一的MLP級聯(lián)結(jié)構(gòu)(同樣基于SURF特征)來處理所有姿態(tài)的候選窗口,整體上呈現(xiàn)出上寬下窄的漏斗形狀。從上往下,各個層次上的分類器及其所采用的特征逐步變得復(fù)雜,從而可以保留人臉窗口并排除越來越難與人臉區(qū)分的非人臉候選窗口。
圖1. SeetaFace人臉檢測模塊所采用的FuSt漏斗型級聯(lián)結(jié)構(gòu)
與SeetaFace Detection開源代碼配套開放的是一個準(zhǔn)正面人臉檢測模型(使用了約20萬人臉圖像訓(xùn)練而來),可以實現(xiàn)準(zhǔn)正面人臉的準(zhǔn)確檢測(旋轉(zhuǎn)角度約45度以內(nèi),但對于姿態(tài)偏轉(zhuǎn)較大的人臉也具備一定的檢測能力),圖2給出了一些檢測結(jié)果的示例(注:測試時圖像金字塔下采樣比例設(shè)置為0.8,滑動步長設(shè)置為4和2,最小人臉設(shè)置為20x20)。
在人臉檢測領(lǐng)域最重要的評測集FDDB上對SeetaFace Detector進行評測,在輸出100個誤檢時(FPPI=0.035)召回率達到84.4%,輸出1000個誤檢時召回率達到88.0%。圖3則給出了SeetaFace Detector在FDDB上的離散型得分ROC曲線,并與其它已發(fā)表的學(xué)術(shù)界公開結(jié)果(從FDDB官網(wǎng)獲得)進行了對比。不難看出,盡管SeetaFace人臉檢測器并非目前精度最高的,但在學(xué)術(shù)界公開的結(jié)果中仍然具有很強的競爭力,而且可以完全滿足多數(shù)人臉識別系統(tǒng)的需求。
圖2. SeetaFace Detection人臉檢測結(jié)果的示例
圖3. SeetaFace Detector在FDDB上的ROC曲線
此外,與其他算法相比SeetaFace Detector在速度上有一定優(yōu)勢。對于640x480大小的VGA圖像,檢測速度的對比情況如表1所示。其中,SeetaFace的速度在單個3.40GHz的i7-3770 CPU上測得,Cascade CNN在CPU上的速度在2.0GHz的CPU上測得(引自原文)。而各方法在GPU上的速度在NVIDIA Titan Black GPU上測得。
表1. SeetaFace Detector的檢測速度及其與其他方法的對比情況
注:測試時SeetaFace Detector的滑動窗口步長設(shè)置為4,圖像金字塔下采樣步長設(shè)置為0.8。而Cascade CNN中圖像金字塔下采樣步長為0.7(對應(yīng)的尺度因子為1.414)。
面部特征點定位(人臉對齊)在人臉識別、表情識別、人臉動畫合成等諸多人臉分析任務(wù)中扮演著非常重要的角色。由于姿態(tài)、表情、光照和遮擋等因素的影響,真實場景下的人臉對齊任務(wù)是一個非常困難的問題。形式上,該問題可以看作是從人臉表觀到人臉形狀的復(fù)雜非線性映射。
為此,SeetaFace Alignment采用的是我們提出的一種由粗到精的自編碼器網(wǎng)絡(luò)(Coarse-to-Fine Auto-encoder Networks, CFAN)來求解這個復(fù)雜的非線性映射過程。如圖 4所示,CFAN級聯(lián)了多級棧式自編碼器網(wǎng)絡(luò),其中的每一級都刻畫從人臉表觀到人臉形狀的部分非線性映射。具體來說,輸入一個人臉區(qū)域(由人臉檢測模塊得到),第一級自編碼器網(wǎng)絡(luò)直接從該人臉的低分辨率版本中快速估計大致的人臉形狀S0。
然后,提高輸入人臉圖像的分辨率,并抽取當(dāng)前人臉形狀S0(相應(yīng)提升分辨率)各特征點位置的局部特征,輸入到下一級自編碼器網(wǎng)絡(luò)來進一步優(yōu)化人臉對齊結(jié)果。以此類推,通過級聯(lián)多個棧式自編碼器網(wǎng)絡(luò),在越來越高分辨率的人臉圖像上逐步優(yōu)化人臉對齊結(jié)果。
圖4. 基于由粗到精自編碼器網(wǎng)絡(luò)(CFAN)的實時人臉對齊方法
此次開源的SeetaFace Alignment基于上述CFAN方法實現(xiàn)了5個面部關(guān)鍵特征點(兩眼中心,鼻尖和兩個嘴角)的精確定位,訓(xùn)練集包括23,000余幅人臉圖像(標(biāo)注了5點)。需要注意的是,為加速之目的,在基本不損失精度的情況下,開源實現(xiàn)中將CFAN級聯(lián)的數(shù)目減少到了2級,從而可在單顆Intel i7-3770 (3.4 GHz CPU)上達到每個人臉5ms的處理速度(不包括人臉檢測時間)。
圖5給出了一些用SeetaFace Alignment開源引擎定位面部5點的效果示例,可見其對表情、姿態(tài)、膚色等均具有較好的魯棒性。在AFLW數(shù)據(jù)集上的量化評價和對比情況如圖6所示,其中平均定位誤差根據(jù)兩眼中心距離做了歸一化。不難看出,SeetaFace Alignment取得了state-of-the-art的定位結(jié)果。
圖5. SeetaFace Alignment定位結(jié)果示例
圖6. SeetaFace Alignment在AFLW數(shù)據(jù)集上的定位誤差及對比情況
其中LE:左眼,RE:右眼,N:鼻尖,LM:左嘴角,RM:右嘴角
人臉識別本質(zhì)上是要計算兩幅圖像中人臉的相似程度,大致可以分為:
注冊階段(類比人的相識過程)輸入系統(tǒng)
識別階段(即再見時的辨認(rèn)過程)輸入
為此,如圖7所示,一套全自動的人臉識別系統(tǒng)在完成前述的人臉檢測與人臉對齊兩個步驟之后,即進入第三個核心步驟:人臉特征提取和比對。這個階段也是深度學(xué)習(xí)風(fēng)起云涌之后進步最大的模塊,目前大多數(shù)優(yōu)秀的人臉識別算法均采用卷積神經(jīng)網(wǎng)絡(luò)(CNN)來學(xué)習(xí)特征提取器(即圖7中的函數(shù)F)。
(1) 人臉檢測 (2) 關(guān)鍵點定位與人臉對齊 (3)人臉特征提取、比對與判定
圖7.人臉識別系統(tǒng)的核心流程
SeetaFace開源的人臉特征提取模塊也是基于卷積神經(jīng)網(wǎng)絡(luò)的。具體地說,其實現(xiàn)的是中所描述的深度卷積神經(jīng)網(wǎng)絡(luò)VIPLFaceNet:一個包含7個卷積層與2個全連接層的DCNN。其直接修改自Hinton教授的學(xué)生Alex Krizhevsky等于2012年設(shè)計的AlexNet(即引爆CNN在視覺中廣泛應(yīng)用的網(wǎng)絡(luò))。
如表2對比所示,與AlexNet相比,VIPLFaceNet將5x5的卷積核拆分為兩層3x3的卷積核,從而增加了網(wǎng)絡(luò)深度,而并沒有增加計算量;VIPLFaceNet還減少了每個卷積層的kernel數(shù)目以及FC2層的節(jié)點數(shù)。
同時,通過引入Fast Normalization Layer(FNL),加速了VIPLFaceNet的收斂速度,并在一定程度上提升了模型的泛化能力。測試表明,在相同訓(xùn)練集情況下,VIPLFaceNet在LFW測試集上識別錯誤率比AlexNet降低了40%,而訓(xùn)練和測試時間分別為AlexNet的20%和60%。
表2. SeetaFace Identification所采用的VIPLFaceNet與AlexNet網(wǎng)絡(luò)結(jié)構(gòu)對比
與開源的SeetaFace Identification代碼一起發(fā)布的人臉識別模型是使用140萬人臉圖像訓(xùn)練出來的,這些訓(xùn)練圖像來自于約1.6萬人,其中既有東方人也有西方人。人臉特征直接采用VIPLFaceNet FC2層的2048個結(jié)點的輸出,特征比對可簡單采用Cosine計算相似度,然后進行閾值比較(驗證應(yīng)用)或排序(識別應(yīng)用)即可。
該引擎在多數(shù)人臉識別場景下均具有良好的性能,例如,在LFW standard Image-Restricted測試協(xié)議下,使用SeetaFace Detector與SeetaFace Alignment檢測并對齊人臉,采用SeetaFace Identification進行特征提取和比對,可以達到97.1%的識別正確率(請注意:這是系統(tǒng)全自動運行的結(jié)果,對少量不能檢到人臉的圖像,截取中間區(qū)域輸入人臉對齊模塊即可)。速度方面,在單顆Intel i7-3770 CPU上,開源代碼提取一張人臉之特征的時間約為120ms(不含人臉檢測和特征點定位時間)。
目前,SeetaFace開源人臉識別引擎已全部發(fā)布在Github上供國內(nèi)外同行和工業(yè)界使用,項目網(wǎng)址為:http://github.com/seetaface
題圖來自The Matrix
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。