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