什么是SeetaFace開源人臉識別引擎

jopen 8年前發布 | 23K 次閱讀 SeetaFace

什么是SeetaFace開源人臉識別引擎

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

然而,人臉識別并非完全成熟的技術,離公眾期望的全面應用尚有距離,還需要學術界、工業界的共同努力。為此,整個人臉識別社區需要有基準(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

該模塊基于我們提出的一種結合經典級聯結構和多層神經網絡的人臉檢測方法實現,其所采用的漏斗型級聯結構(Funnel-Structured Cascade,FuSt)專門針對多姿態人臉檢測而設計,其中引入了由粗到精的設計理念,兼顧了速度和精度的平衡。

如圖 1 所示,FuSt 級聯結構在頂部由多個針對不同姿態的快速 LAB 級聯分類器構成,緊接著是若干個基于 SURF 特征的多層感知機(MLP)級聯結構,最后由一個統一的 MLP 級聯結構(同樣基于 SURF 特征)來處理所有姿態的候選窗口,整體上呈現出上寬下窄的漏斗形狀。從上往下,各個層次上的分類器及其所采用的特征逐步變得復雜,從而可以保留人臉窗口并排除越來越難與人臉區分的非人臉候選窗口。

什么是SeetaFace開源人臉識別引擎

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

與 SeetaFace Detection 開源代碼配套開放的是一個準正面人臉檢測模型(使用了約 20 萬人臉圖像訓練而來),可以實現準正面人臉的準確檢測(旋轉角度約 45 度以內,但對于姿態偏轉較大的人臉也具備一定的檢測能力)。圖 2 給出了一些檢測結果的示例(注:測試時圖像金字塔下采樣比例設置為 0.8,滑動步長設置為 4 和2,最小人臉設置為 20x20)。在人臉檢測領域最重要的評測集 FDDB 上對 SeetaFace Detector 進行評測,在輸出 100 個誤檢時(FPPI=0.035)召回率達到 84.4%,輸出 1000 個誤檢時召回率達到 88.0%。

什么是SeetaFace開源人臉識別引擎

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

圖 3 則給出了 SeetaFace Detector 在 FDDB 上的離散型得分 ROC 曲線,并與其它已發表的學術界公開結果(從 FDDB 官網獲得)進行了對比。不難看出,盡管 SeetaFace 人臉檢測器并非目前精度最高的,但在學術界公開的結果中仍然具有很強的競爭力,而且可以完全滿足多數人臉識別系統的需求。

什么是SeetaFace開源人臉識別引擎

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

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

什么是SeetaFace開源人臉識別引擎

特征點定位模塊 SeetaFace Alignment

面部特征點定位(人臉對齊)在人臉識別、表情識別、人臉動畫合成等諸多人臉分析任務中扮演著非常重要的角色。由于姿態、表情、光照和遮擋等因素的影響,真實場景下的人臉對齊任務是一個非常困難的問題。形式上,該問題可以看作是從人臉表觀到人臉形狀的復雜非線性映射。為此,SeetaFace Alignment 采用的是我們提出的一種由粗到精的自編碼器網絡(Coarse-to-Fine Auto-encoder Networks, CFAN)來求解這個復雜的非線性映射過程。

如圖 4 所示,CFAN 級聯了多級棧式自編碼器網絡,其中的每一級都刻畫從人臉表觀到人臉形狀的部分非線性映射。具體來說,輸入一個人臉區域(由人臉檢測模塊得到),第一級自編碼器網絡直接從該人臉的低分辨率版本中快速估計大致的人臉形狀 S0。然后,提高輸入人臉圖像的分辨率,并抽取當前人臉形狀 S0(相應提升分辨率)各特征點位置的局部特征,輸入到下一級自編碼器網絡來進一步優化人臉對齊結果。以此類推,通過級聯多個棧式自編碼器網絡,在越來越高分辨率的人臉圖像上逐步優化人臉對齊結果。

什么是SeetaFace開源人臉識別引擎

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

此次開源的 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 的定位結果。

什么是SeetaFace開源人臉識別引擎

圖 5. SeetaFace Alignment 定位結果示例

什么是SeetaFace開源人臉識別引擎

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

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

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

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

什么是SeetaFace開源人臉識別引擎

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

SeetaFace 開源的人臉特征提取模塊也是基于卷積神經網絡的。具體地說,其實現的是深度卷積神經網絡 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開源人臉識別引擎

與開源的 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(不含人臉檢測和特征點定位時間)。

開源網址

目前,SeetaFace 開源人臉識別引擎已全部發布在 Github 上供國內外同行和工業界使用,項目網址為:https://github.com/seetaface/SeetaFaceEngine

來自: 雷鋒網

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