2019年8月26日 星期一

.人臉辨識技術全面總結:從傳統方法到深度學習

Python Face Recognition Tutorial 
w/ Code Download




机器之心 

英國赫特福德大學與 GBG Plc 的研究者,近日發佈了一篇綜述論文,對人臉辨識方法,進行了全面的梳理和總結,其中涵蓋各種傳統方法,和如今風頭正盛的深度學習方法。機器之心重點編譯介紹了其中的深度學習方法部分,更多有關傳統人臉辨識方法的內容,請參閱原論文。
自七十年代以來,人臉辨識已經成為了電腦視覺和生物辨識領域,被研究最多的主題之一。基於人工設計的特徵,和傳統機器學習技術的傳統方法,近來已被使用非常大型的數據集訓練的深度神經網路取代。

在這篇論文中,我們對流行的人臉辨識方法,進行了全面且最新的文獻總結,其中既包括傳統方法(基於幾何的方法、整體方法、基於特徵的方法和混合方法),也有深度學習方法

引言
人臉辨識是指能夠辨識或驗證圖像,或影像中的主體的身份的技術。首個人臉辨識算法誕生於七十年代初 [1,2]。自那以後,它們的準確度已經大幅提升,現在相比於指紋或虹膜辨識 [3] 等傳統上被認為更加穩健的生物辨識方法,人們往往更偏愛人臉辨識。

讓人臉辨識比其它生物辨識方法,更受歡迎的一大不同之處,是人臉辨識本質上是非侵入性的。比如,指紋辨識需要使用者將手指按在感測器上,虹膜辨識需要使用者與攝影機靠得很近,語音辨識則需要使用者大聲說話。

相對而言,現代人臉辨識系統僅需要使用者,處於攝影機的視野內(假設他們與攝影機的距離也合理)。這使得人臉辨識成為了,對使用者最友好的生物辨識方法。這也意味著人臉辨識的潛在應用範圍更廣,因為它也可被部署在,使用者不期望與系統合作的環境中,比如監控系統中。

人臉辨識的其它常見應用,還包括門禁管理、詐欺檢測、身份認證和社交媒體

當被部署在無約束條件的環境中時,由於人臉圖像在現實世界中的呈現,具有高度的可變性(這類人臉圖像通常被稱為自然人臉(faces in-the-wild)),所以人臉辨識也是最有挑戰性的生物辨識方法之一。

人臉圖像可變的地方包括頭部姿勢、年齡、遮擋、光照條件和人臉表情。圖 1 給出了這些情況的示例。



1:在自然人臉圖像中找到的典型變化。(a)頭部姿勢,(b)年齡,(c)光照,(d)臉部表情,(e)遮擋。

人臉辨識技術,這些年已經發生了重大的變化。傳統方法依賴於人工設計的特徵(比如邊和紋理描述量)與機器學習技術(比如主成分分析、線性判別分析或支持向量機)的組合。

人工設計在無約束環境中,對不同變化情況穩健的特徵是很困難的,這使得過去的研究者,側重研究針對每種變化類型的專用方法,比如能應對不同年齡的方法 [4,5]、能應對不同姿勢的方法 [6]、能應對不同光照條件的方法 [7,8] 等。

近段時間,傳統的人臉識別方法已經被基於卷積神經網絡(CNN)的深度學習方法接替。深度學習方法的主要優勢是它們可用非常大型的數據集進行訓練,從而學習到表徵這些數據的最佳特徵。

網路上可用的大量自然人臉圖像,已讓研究者可收集到大規模的人臉數據集 [9-15],這些圖像包含了真實世界中的各種變化情況。使用這些數據集訓練,基於 CNN 的人臉辨識方法,已經實現了非常高的準確度,因為它們能夠學到人臉圖像中穩健的特徵,從而能夠應對在訓練過程中,使用的人臉圖像所呈現出的真實世界變化情況。

此外,深度學習方法在電腦視覺方面的不斷普及,也在加速人臉識別研究的發展,因為 CNN 也正被用於解決許多其它電腦視覺任務,比如目標檢測和辨識、分割、光學字符辨識、臉部表情分析、年齡估計等。

人臉辨識系統,通常由以下建構模組組成:
  • 人臉檢測。人臉檢測器用於尋找圖像中人臉的位置,如果有人臉,就返回包含每張人臉的邊界框的座標。如圖 3a 所示。
  • 人臉對齊。人臉對齊的目標,是使用一組位於圖像中,固定位置的參考點,來縮放和裁剪人臉圖像。這個過程通常需要使用一個特徵點檢測器,來尋找一組人臉特徵點,在簡單的 2D 對齊情況中,即為尋找最適合參考點的最佳仿射變換。圖 3b 和 3c 展示了兩張使用了同一組參考點對齊後的人臉圖像。更複雜的 3D 對齊算法(如 [16])還能實現人臉正面化,即將人臉的姿勢調整到正面向前。
  • 人臉表徵。在人臉表徵階段,人臉圖像的像素值,會被轉換成緊湊且可判別的特徵向量,這也被稱為模板(template)。理想情況下,同一個主體的所有人臉都應該映射到相似的特徵向量。
  • 人臉匹配。在人臉匹配建構模組中,兩個模板會進行比較,從而得到一個相似度分數,該分數給出了兩者屬於同一個主體的可能性。


2:人臉辨識的構建模塊。

很多人認為人臉表徵,是人臉辨識系統中最重要的組件,這也是本論文第二節所關注的重點。


3:(a)人臉檢測器找到的邊界框。(b)和(c):對齊後的人臉和參考點。

深度學習方法
卷積神經網路(CNN),是人臉辨識方面最常用的一類深度學習方法。深度學習方法的主要優勢,是可用大量數據來訓練,從而學到對訓練數據中,出現的變化情況,穩健的人臉表徵。這種方法不需要設計對不同類型的類內差異(比如光照、姿勢、臉部表情、年齡等)穩健的特定特徵,而是可以從訓練數據中學到它們。

深度學習方法的主要缺點,是它們需要使用非常大的數據集來訓練,而且這些數據集中,需要包含足夠的變化,從而可以泛化到未曾見過的樣本上。

幸運的是,一些包含自然人臉圖像的大規模人臉數據集已被公開 [9-15],可被用來訓練 CNN 模型。除了學習判別特徵,神經網路還可以降維,並可被訓練成分類器,或使用度量學習方法。CNN 被認為是端到端可訓練的系統,無需與任何其它特定方法結合。

用於人臉辨識的 CNN 模型,可以使用不同的方法來訓練。其中之一是,將該問題當作是一個分類問題,訓練集中的每個主體都對應一個類別。訓練完之後,可以透過去除分類層,並將之前層的特徵用作人臉表徵,而將該模型用於辨識不存在於訓練集中的主體 [99]。

在深度學習文獻中,這些特徵通常被稱為瓶頸特徵(bottleneck features)。在這第一個訓練階段之後,該模型可以使用其它技術來進一步訓練,以為目標應用優化瓶頸特徵(比如使用聯合貝葉斯 [9] ,或使用一個不同的損失函數,來微調該 CNN 模型 [10])。

另一種學習人臉表徵的常用方法,是透過優化配對的人臉 [100,101] 或人臉三元組 [102] 之間的距離度量,來直接學習瓶頸特徵。

使用神經網路來做人臉辨識,並不是什麼新思想。1997 年就有研究者為人臉檢測、眼部定位和人臉辨識提出了一種名為「基於概率決策的神經網路(PBDNN)」[103] 的早期方法。

這種人臉辨識 PDBNN ,被分成了每一個訓練主體,一個全連接子網路,以降低隱藏單元的數量和避免過擬合。研究者使用密度和邊特徵,分別訓練了兩個 PBDNN,然後將它們的輸出組合起來,得到最終分類決定。

另一種早期方法 [104] 則組合,使用了自組織映射(SOM)和卷積神經網路。自組織映射 [105] 是一類以無監督方式訓練的神經網路,可將輸入數據映射到更低維的空間,同時也能保留輸入空間的拓撲性質(即在原始空間中,相近的輸入,在輸出空間中也相近)。

注意,這兩種早期方法,都不是以端到端的方式訓練的([103] 中使用了邊特徵,[104] 中使用了 SOM),而且提出的神經網路架構也都很淺。

[100] 中提出了一種端到端的人臉辨識 CNN。這種方法使用了一種孿生式架構,並使用了一個對比損失函數 [106] 來進行訓練。這個對比損失,使用了一種度量學習流程,其目標是最小化對應同一主體的特徵向量對之間的距離,同時最大化對應不同主體的特徵向量對之間的距離。該方法中使用的 CNN 架構也很淺,且訓練數據集也較小。

上面提到的方法,都未能取得突破性的成果,主要原因是使用了能力不足的網路,且訓練時能用的數據集也相對較小。直到這些模型得到擴展,並使用大量數據 [107] 訓練後,用於人臉辨識的首個深度學習方法 [99,9] 才達到了當前最佳水準。

尤其值得一提的是, Facebook 的 DeepFace [99],這是最早的用於人臉辨識的 CNN 方法之一,其使用了一個能力很強的模型,在 LFW 基準上實現了 97.35% 的準確度,將之前最佳表現的錯誤率降低了 27%。

研究者使用 softmax 損失,和一個包含 440 萬張人臉(來自 4030 個主體)的數據集,訓練了一個 CNN。本論文有兩個全新的貢獻:(1)一個基於明確的 3D 人臉建模的高效的人臉對齊系統;(2)一個包含局部連接的層的 CNN 架構 [108,109],這些層不同於常規的卷積層,可以從圖像中的每個區域,學到不同的特徵。

在那同時,Deep ID 系統 [9] 透過在圖塊(patch)上,訓練 60 個不同的 CNN ,而得到了相近的結果,這些圖塊包含十個區域、三種比例,以及 RGB 或灰度通道。在測試階段,會從每個圖塊提取出 160 個瓶頸特徵,加上其水平翻轉後的情況,可形成一個 19200 維的特徵向量(160×2×60)。

類似於 [99],新提出的 CNN 架構,也使用了局部連接的層。其驗證結果,是透過在這種由 CNN 提取出的 19200 維特徵向量上,訓練一個聯合貝葉斯分類器 [48] 得到的。訓練該系統所使用的數據集,包含 202599 張人臉圖像,來自 10177 位名人 [9]。

對於基於 CNN 的人臉辨識方法,影響準確度的因素主要有三個:訓練數據、CNN 架構和損失函數。因為在大多數深度學習應用中,都需要大訓練集來防止過擬合。一般而言,為分類任務訓練的 CNN 的準確度,會隨每類的樣本數量的成長而提升。這是因為當類內差異更多時,CNN 模型能夠學習到更穩健的特徵。

但是,對於人臉辨識,我們感興趣的是提取出,能夠泛化到訓練集中,未曾出現過的主體上的特徵。因此,用於人臉辨識的數據集,還需要包含大量主體,這樣模型也能學習到更多類間差異。[110] 研究了數據集中主體的數量,對人臉辨識準確度的影響。

在這項研究中,首先以降序形式,按照每個主體的圖像數量,對一個大數據集,進行了排序。然後,研究者透過逐漸增大主體數量,而使用訓練數據的不同子集,訓練了一個 CNN。當使用了圖像數量最多的 10000 個主體進行訓練時,得到的準確度是最高的。

增加更多主體會降低準確度,因為每個額外主體可用的圖像非常少。另一項研究 [111] 研究了更寬度的數據集更好,還是更深度的數據集更好(如果一個數據集包含更多主體,則認為它更寬;類似地,如果每個主體包含的圖像更多,則認為它更深)。這項研究總結到:如果圖像數量相等,則更寬的數據集能得到更好的準確度。

研究者認為,這是因為更寬度的數據集,包含更多類間差異,因而能更好地泛化,到未曾見過的主體上。表 1 展示了某些最常用於訓練人臉辨識 CNN 的公開數據集。
1:公開的大規模人臉數據集。


用於人臉辨識的 CNN 架構,從那些在 ImageNet 大規模視覺辨識挑戰賽(ILSVRC)上,表現優異的架構上,取得了很多靈感。舉個例子,[11] 中使用了一個帶有 16 層的 VGG 網路 [112] 版本,[10] 中則使用了一個相似但更小的網路。

[102] 中探索了兩種不同類型的 CNN 架構:VGG 風格的網路 [112] 和 GoogleNet 風格的網路 [113]。即使這兩種網路,實現了相當的準確度,但 Google Net 風格的網路的參數,數量少 20 倍。

更近段時間,殘差網路(ResNet)[114] ,已經成為了很多目標辨識任務,最受偏愛的選擇,其中包括人臉辨識 [115-121]。ResNet 的主要創新點,是引入了一種使用捷徑,連接的建構模組來學習殘差映射,如圖 7 所示。捷徑連接的使用,能讓研究者訓練更深度的架構,因為它們有助於跨層的資訊流動。

[121] 對不同的 CNN 架構,進行了全面的研究。在準確度、速度和模型大小之間的最佳權衡,是使用帶有一個殘差模組(類似於 [122] 中提出的那種)的 100 層 ResNet 得到的。


 7:[114] 中提出的原始的殘差模組
選擇用於訓練 CNN 方法的損失函數,已經成為近來人臉辨識最活躍的研究領域。即使使用 softmax 損失訓練的 CNN 已經非常成功 [99,9,10,123],但也有研究者認為使用這種損失函數,無法很好地泛化到訓練集中,未出現過的主體上。

這是因為 softmax 損失,有助於學習能增大類間差異的特徵(以便在訓練集中區別不同的類),但不一定會降低類內差異。研究者已經提出了,一些能緩解這一問題的方法。優化瓶頸特徵的一種簡單方法,是使用判別式子空間方法,比如聯合貝葉斯 [48],就像 [9,124,125,126,10,127] 中所做的那樣。另一種方法是使用度量學習。

比如,[100,101] 中,使用了配對的對比損失,來作為唯一的監督信號,[124-126] 中還結合使用了分類損失。人臉辨識方面最常用的度量學習方法,是三元組損失函數 [128],最早在 [102] 中被用於人臉辨識任務。三元組損失的目標,是以一定餘量,分開正例對之間的距離,和負例對之間的距離。從數學形式上講,對於每個三元組 i,需要滿足以下條件 [102]:

其中 x_a 是錨圖像,x_p 是同一主體的圖像,x_n 是另一個不同主體的圖像,f 是模型學習到的映射關係,α 施加在正例對和負例對距離之間的餘量。在實踐中,使用三元組損失訓練的 CNN 的收斂速度,比使用 softmax 的慢,這是因為需要大量三元組(或對比損失中的配對),才能覆蓋整個訓練集。

儘管這個問題,可以透過在訓練階段,選擇困難的三元組(即違反餘量條件的三元組)來緩解 [102],但常見的做法,是在第一個訓練階段,使用 softmax 損失訓練,在第二個訓練階段使用三元組損失,來對瓶頸特徵進行調整 [11,129,130]。

研究者們已經提出了,三元組損失的一些變體。比如 [129] 中使用了點積,作為相似度度量,而不是阿基里德距離;[130] 中提出了一種概率式三元組損失;[131,132] 中提出了一種修改版的三元組損失,它也能最小化正例和負例分數,分布的標準差。

用於學習判別特徵的另一種損失函數,是 [133] 中提出的中心損失(centre loss)。中心損失的目標,是最小化瓶頸特徵,與它們對應類別的中心之間的距離。透過使用 softmax 損失和中心損失,進行聯合訓練,結果顯示 CNN 學習到的特徵,能夠有效增大類間差異(softmax 損失),和降低類內個體差異(中心損失)。

相比於對比損失和三元組損失,中心損失的優點,是更高效和更容易實現,因為它不需要在訓練過程中構建配對或三元組。另一種相關的度量學習方法,是 [134] 中提出的範圍損失(range loss),這是為改善使,用不平衡數據集的訓練而提出的。範圍損失有兩個組件。

類內的損失組件,是最小化同一類樣本之間的 k-最大距離,而類間的損失組件,是最大化每個訓練批中,最近的兩個類中心之間的距離。透過使用這些極端案例,範圍損失為每個類,都使用同樣的資訊,而不管每個類別中有多少樣本可用。類似於中心損失,範圍損失需要與 softmax 損失結合起來,以避免損失降至零 [133]。

當結合不同的損失函數時,會出現一個困難,即尋找每一項之間的正確平衡。最近一段時間,已有研究者提出了幾種修改 softmax 損失的方法,這樣它無需與其它損失結,合也能學習判別特徵。

一種已被證明,可以增加瓶頸特徵的判別能力的方法,是特徵歸一化 [115,118]。比如,[115] 提出歸一化特徵,以具有單位 L2 範數,[118] 提出歸一化特徵,以具有零均值和單位方差。一個成功的方法,已經在 softmax 損失中,每類之間的決策邊界中,引入了一個餘量 [135]。為了簡單,我們介紹一下使用 softmax 損失進行二元分類的情況。在這種情況下,每類之間的決策邊界(如果偏置為零)可由下式給定:


其中 x 是特徵向量,W_1 和 W_2 是對應每類的加權,θ_1 和 θ_2 是 x 分別與 W_1 和 W_2 之間的角度。透過在上式中引入一個乘法餘量,這兩個決策邊界,可以變得更加嚴格:



如圖 8 所示,這個餘量可以有效地增大,類別之間的區分程度,以及各自類別之內的緊湊性。根據將該餘量整合進損失的方式,研究者們已經提出了多種可用方法 [116,119-121]。比如 [116] 中,對加權向量,進行了歸一化以具有單位範數,這樣使得決策邊界,僅取決於角度 θ_1 和 θ_2。

[119,120] 中則提出了一種加性餘弦餘量。相比於乘法餘量 [135,116],加性餘量更容易實現和優化。在這項工作中,除了歸一化加權向量,特徵向量也如 [115] 中,一樣進行了歸一化和比例調整。

[121] 中提出了另一種加性餘量,它既有 [119,120] 那樣的優點,還有更好的幾何解釋方式,因為這個餘量是加在角度上的,而不是餘弦上。表 2 總結了有餘量的 softmax ,損失的不同變體的決策邊界。這些方法是人臉辨識領域的當前最佳。



8:在兩個類別之間的決策邊界中引入一個餘量 m 的效果。(asoftmax 損失,(b)有餘量的 softmax 損失。


2:有餘量的 softmax 損失的不同變體的決策邊界。注意這些決策邊界針對的,是二元分類案例中的類別 1

沒有留言:

張貼留言