標籤:

細數那些改變「歷史」的人臉檢測演算法

人臉檢測,百度百科的定義:「人臉檢測是指對於任意一幅給定的圖像,採用一定的策略對其進行搜索以確定其中是否含有人臉,如果是則返回一臉的位置、大小和姿態。」

首先我們對我們要介紹的人臉檢測演算法做以下約束:

1)我們這裡說的人臉檢測演算法指的是單張圖像的人臉檢測,這有別與基於視頻的帶跟蹤的人臉檢測演算法。

2)人臉檢測演算法不等價於人臉抓拍演算法。

3)人臉檢測演算法並不是人臉識別演算法,許多廠家為了博眼球,經常把人臉檢測演算法故意宣傳為人臉識別演算法。在英文名中,人臉檢測是Face Detection,而人臉識別是Face Recognition,顯然是不同的。

4)這裡說的「歷史」,特指計算機視覺領域的人臉檢測和識別「歷史」,而不是人類發展史。

雖然普遍到我們手機上都自帶基於人臉的對焦模式,但通過我們實際工程的應用發現,人臉檢測是個複雜的極具挑戰性的模式識別問題,主要難點如下:

1)姿態。人臉與攝像機鏡頭的相對位置決定了人臉姿態的多樣性,上下俯仰角、左右偏角、豎直面旋轉角都不一樣。如下圖所示:

2)遮擋。人臉在圖像里可能會被其它人臉遮擋或者被背景等遮擋,這樣只漏出局部的人臉。另外,人臉附屬物也會導致遮擋,如眼鏡、口罩、長發、鬍鬚等。

3)光照。不同光譜、光源位置、光照強度等都會對人臉外觀產生影響,如背光環境下,人臉一般偏暗甚至細節都看不清;而在單一強光源下,人臉則會呈現出「陰陽臉」。

即使有眾多難點,人臉檢測在幾十年的發展過程中,仍取得了顯著的進步,我們按照技術的轉折將人臉檢測劃分為三個顯著的階段:模板匹配紀元、AdaBoost紀元和深度學習紀元。

模板匹配紀元

這個紀元基本上可以追溯到上世紀六七十年代,一直到2001年,在這期間,各種樸素的人臉檢測演算法層出不窮,歸結起來,這類演算法通常假設人臉由以下幾個部件組成:眉毛、眼睛、鼻子和鼻孔、嘴巴等,通過人工來預設模板或者通過訓練的演算法,所以模板匹配是這個紀元的主要特徵。一般通過邊緣檢測演算法提取邊緣,然後提取人臉的部件,再通過各部件的相互關聯,並與模板匹配,如果匹配度高則認為是人臉。但這種模板無法適應人臉姿態的變化和遮擋等情況,所以檢測率並不高。

另外,膚色和紋理也屬於這個紀元的演算法,然而,膚色和紋理很容易受光照的影響,當光源光譜有很大的差別時,人臉膚色則會顯現出不同的情況,所以此時不再有效,這也是基於膚色和紋理的演算法比較脆弱所在。

這個時期也出現了許多基於學習的演算法,如基於神經網路和仲裁模式結合的演算法、基於多項式內核的支持向量機演算法、基於貝葉斯分類的演算法、基於隱馬爾可夫模型HMM的統計類演算法等等。這些演算法也未能擺脫樸素特徵的陰影,而且運算速度很慢,特別是在當時那個時代,計算資源並不像如今這麼發達,有各種加速的手段。因此,這個紀元里,人臉檢測演算法並沒有推向實用化。

AdaBoost紀元

此紀元始於2001年,終止於2012年,這一年,基於深度學習的演算法奪得ImageNet比賽的冠軍。2001年,P.Viola和M.Jones在CVPR上發表了「Rapid object detection using a

boosted cascade of simple features」,標誌著人臉檢測進入了AdaBoost紀元。此紀元人臉檢測標誌性演算法被冠以作者的名字:Viola-Jones人臉檢測演算法。

Viola-Jones演算法有以下三個重要的特性,使得人臉檢測迅速進入實用階段。這三個特性分別是積分圖、AdaBoost學習、分類器級聯。

Viola-Jones演算法中,積分圖用來提取Haar-like特徵。如下圖所示,假設坐標原點是O,我們用矩形對角線字母表示矩形,則矩形ABCD的面積可通過矩形OD面積、矩形OC面積和矩形OA得到,具體為SABCD=SOD+SOA-(SOB+SOC)。而積分圖可以利用前面已經計算過的坐標點通過疊加得到,所以積分圖是種加速演算法。Haar-like特徵通過灰色矩形和白色矩形做加減法實現,如下圖的a-f所示。

AdaBoost學習是一種將「弱」分類器通過組合得到高精度分類器(「強」分類器)的演算法,理論上「弱」分類器只要滿足分類精度大於50%即可。所以AdaBoost將基於簡單的Haar-like特徵的「弱」分類器組合得到滿足要求的「強」分類器。如下圖所示:

分類器級聯則又是Viola-Jones演算法重要的一筆,靠單個「強」分類器無法保證檢測正確率,如下圖所示,分類器級聯類似一個決策樹,第一個分類器在保持正樣本(人臉)基本不漏檢的情況下儘可能排除負樣本(非人臉),越到後面,分類器越精細,這就能保證大量的非人臉在級聯分類器的前幾級就被過濾掉,而保持到後面的則基本是人臉。分類器級聯在一定程度上提高了檢測速度。

在這個紀元里,Viola-Jones演算法的變種也很多,基於AdaBoost的演算法主導了這個時期的人臉檢測演算法。

深度學習紀元

深度學習紀元從2012年開始,一直持續到現在。2006年,深度學習鼻祖Hinton就提出了深度信念網路,而在2012年,Hinton利用深度卷積網路訓練的分類器奪得了ImageNet比賽將軍,這也就開啟了圖像分類和識別的新紀元。而人臉檢測屬於目標分類和檢測的範圍,所以也自然可以利用深度卷積網路來實現。

在目標檢測中,出現了許多經典的基於深度卷積神經網路的演算法,如RCNN, Fast RCNN, Faster RCNN, YOLO, SSD, YOLO2等等,這些演算法框架能直接檢測如人、自行車、汽車、卡車等目標,如果用其訓練完成人臉檢測也是完全可以的。也有專門基於人臉檢測的深度學習網路,下圖所示是Faceness-Net,這個演算法先通過各種卷積神經網路CNN檢測人臉組件:頭髮、眼睛、鼻子、嘴巴、鬍鬚等,然後再用另一個卷積神經網路對檢測到的這些人臉組件進行聯合優化,輸出人臉檢測的結果。

這些基於深度學習的人臉檢測演算法都實現了比傳統Boosting演算法更高的精度。但計算量很大,常常需要顯卡加速,這也限制了它們在實際中的應用。

總結

在實際工程應用中,用得廣泛的人臉檢測演算法還是基於Adaboost的這些演算法,主要是其計算量小,特別適合在嵌入式端實現,或者是基於淺層的神經網路檢測演算法。隨著晶元技術的發展,帶有深度學習網路的晶元將會越來越普遍,這樣基於深度學習的人臉檢測演算法將會成為主流。

目前而言,相對於不同框架導致的人臉檢測演算法檢測率的提高程度(如CNN類的演算法比傳統演算法提高檢測率),工程中更多的需要考慮的是攝像頭的光圈、曝光、寬動態等問題,這些對人臉檢測和識別的結果影響更大。

【本文作者 北京博睿視科技 】


推薦閱讀:

【技術綜述】一文道盡softmax loss及其變種
人臉識別的LOSS(下)
中國團隊奪得 MegaFace 百萬人臉識別冠軍,精度 98% 再創紀錄,論文代碼 + 數據全開源
一見鍾情何須萬元懸賞,教你如何搜尋擦肩而過的菇涼
人臉識別這件「小事」 | 視頻

TAG:人臉識別 |