對不同的人進行區分是很多智能系統的必備能力。所謂的人臉識別技術也是為了實現此目的開發出來的,通過對人臉的光學成像來感知人、識別人。經過幾十年的研發積累,特別是近年來深度學習技術的涌現,人臉識別取得了長足的進步,在安防、金融、教育、社保等領域得到了越來越多的應用,也成為計算機視覺領域最為成功的分支領域之一。
然而,人臉識別并非是完全成熟的技術,離公眾期望的全面應用尚有距離,仍然需要學術界、工業界的共同努力。為此,整個人臉識別社區需要有基準(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
人臉檢測模塊SeetaFace Detection基于一種結合經典級聯結構和多層神經網絡的人臉檢測方法實現,其所采用的漏斗型級聯結構(Funnel-Structured Cascade,FuSt)專門針對多姿態人臉檢測而設計,其中引入了由粗到精的設計理念,兼顧了速度和精度的平衡。如圖1所示,FuSt級聯結構在頂部由多個針對不同姿態的快速LAB級聯分類器構成,緊接著是若干個基于SURF特征的多層感知機(MLP)級聯結構,最后由一個統一的MLP級聯結構(同樣基于SURF特征)來處理所有姿態的候選窗口,整體上呈現出上寬下窄的漏斗形狀。從上往下,各個層次上的分類器及其所采用的特征逐步變得復雜,從而可以保留人臉窗口并排除越來越難與人臉區分的非人臉候選窗口。
圖1. SeetaFace人臉檢測模塊所采用的FuSt漏斗型級聯結構
與SeetaFace Detection開源代碼配套開放的是一個準正面人臉檢測模型(使用了約20萬人臉圖像訓練而來),可以實現準正面人臉的準確檢測(旋轉角度約45度以內,但對于姿態偏轉較大的人臉也具備一定的檢測能力),圖2給出了一些檢測結果的示例(注:測試時圖像金字塔下采樣比例設置為0.8,滑動步長設置為4和2,最小人臉設置為20×20)。