人臉識別技術原理與工程實踐(10個月人臉識別領域實戰總結)

1人臉識別應用場景(驗證)前端

咱們先來看看人臉識別的幾個應用。第一個是蘋果的FACE ID,自從蘋果推出FaceID後,業界對人臉識別的應用好像信心大增,各類人臉識別的應用今後開始「野蠻生長」。git

事實上,人臉識別技術在不少場景的應用確實能夠提高認證效率,同時提高用戶體驗。前兩年,不少機場安檢都開始用上了人臉驗證;今年4月,不少1、二線城市的火車站也開通了「刷臉進站」的功能;北京的一些酒店開始使用人臉識別技術來作身份驗證。算法

 

2 人臉識別應用場景(識別)網絡

咱們再來看看幾個場景。併發

 

第一個是刷臉的自動售貨機。當我第一次看到這個機器的時候就有個疑問:」如今人臉識別算法已經作到萬無一失了嗎,認錯人,扣錯錢怎麼辦?」,後來才發現,其實關鍵不在於算法,產品設計纔是最重要的。用過這個售貨機的人可能知道,第一次使用的時候,要求輸入手機號的後四位,這個看似簡單的產品設計,可讓自動售貨機的誤識別率下降到億分之一,這樣底機率的條件下,誤識別帶來的損失徹底能夠忽略。同時這款自動售貨機還會提醒你,你的消費行爲會綁定「芝麻信用」,想一想有多少人會爲了一瓶「可樂」去影響本身的徵信記錄呢?函數

第二個是刷臉買咖啡,進入咖啡店後,在你選好和什麼咖啡前,系統已經識別出站在點單臺前的用戶是誰,並作好點單準備;學習

第三個是在人臉門禁系統。小夥伴們再已不用擔憂忘記帶工卡了。人臉門禁對識別速度和準確度的要求是相對較高的,設備掛在門的側面牆也會影響體驗,增長產品設計和開發的難度。測試

 

3 「人臉驗證」仍是「人臉識別」?設計

其實,前面兩頁的場景是有些區別的,不知道你們看出來了沒有。3d

第一個的場景,用戶實際提供了兩個信息,一是用戶的證件信息,好比身份證號碼,或APP帳號;另外一個信息是用戶的現場照片;這類場景的目標其實是:讓人臉識別系統驗證現場照片是不是證件所宣稱的那我的。咱們把這類場景叫着「人臉驗證」

第二個的場景,用戶實際只提供的現場照片,須要人臉識別系統判斷照片上的人是誰。咱們把這類場景叫着「人臉識別」

「人臉驗證」拿現場人臉跟用戶所宣稱的人臉作1比1的比較,而「人臉識別」是拿現場人臉跟後臺註冊人臉庫中的全部人臉比較,是1比N的搜索。能夠看出,兩種場景的技術原理一致,可是難度不一樣,第二頁場景的難度廣泛比第一頁高得多。

 

4 人臉識別原理

計算機是怎麼識別人臉的呢?若是咱們你們是人臉識別系統的設計者,咱們應用怎樣來設計這個系統?

「把人臉區域從圖片中摳出來,而後拿摳出來的人臉跟事先註冊的人臉進行比較」,沒錯,就是這樣,提及來簡單,作又是另一回事了,這裏又有兩個新的問題:

一是,「怎樣判斷圖片中是有沒有人臉?」,「怎樣知道人臉在圖片中的具體位置呢」,這是人臉檢測要解決的問題,人臉檢測告訴咱們圖像中是否有人臉以及人臉的具體位置座標。

二是,「咱們怎樣比較兩我的臉是否是同一我的呢?」,一個像素一個像素比較嗎?光照,表情不一致,人臉偏轉都將致使該方法不可行。」人是怎樣判斷兩種照片中的人臉是否是同一我的的呢?」,咱們是否是經過比較兩種照片上的人,是否是高鼻樑、大眼睛、瓜子臉這樣的面部特徵來作判斷的呢? 

咱們來看一下計算機人臉識別的流程,首先是獲取輸入圖像,而後檢測圖像中是否有人臉,人臉的具體位置,而後判斷圖像的質量,好比圖像是否模糊,光照度是否足夠,而後檢測人臉偏轉的角度,旋轉人臉到一個正臉位置,再而後提取人臉特徵,比對人臉特徵,最後輸出識別結果。其中圖像質量檢測和人臉對齊這兩步是可選的步驟,根據具體應用場景來決定。

 

5 人臉檢測-經典方法

咱們來看看經典的人臉檢測方法。

OpenCV和Dlib是兩個經常使用的算法庫。

OpenCV 中使用Haar Cascade來作人臉檢測,其實Haar Cascade能夠檢測任何對象,好比人臉和臉上眼睛的位置。

DLIB中是使用方向梯度直方圖(Histogram of Oriented Gradient, HOG),即經過計算圖像局部區域的梯度方向直方圖來提取特徵,這種方法的本質在於梯度的統計信息,而梯度主要存在於邊緣的地方。

OpenCV和DLIB各自也有他們本身的基於深度學習的人臉檢測方法,使用起來很是簡單。從這幾種方法均可以作到CPU實時或GPU實時;經典的檢測方法對正臉的檢測效果比較好,深度學習的方法適應性更強,能夠檢測各類角度的人臉

 

6 MTCNN人臉檢測

2016年提出來的MTCNN算法是目前公認比較好的人臉檢測算法是(Multi-task Cascaded Convolutional Networks),能夠同時實現face detection和alignment,也就是人臉檢測和對齊。

這裏的對齊指的是檢測人臉眼睛、鼻子、嘴巴輪廓關鍵點LandMark。

MTCNN算法主要包含三個子網絡:P-Net (Proposal Network)、 R-Net(Refine Network)、O-Net(Output Network),這3個網絡按照由粗到細的方式處理輸入照片,每一個網絡有3條支路用來分別作人臉分類、人臉框的迴歸和人臉關鍵點定位

左上角,最開始對在多個尺度上對圖像作了resize,構成了圖像金字塔,而後這些不一樣尺度的圖像做爲P、P、O網絡的輸入進行訓練,目的是爲了能夠檢測不一樣尺度的人臉

P-Net主要用來生成候選人臉框。 R-Net主要用來去除大量的非人臉框。O-Net和R-Net有點像,在R-NET基礎上增長了landmark位置的迴歸,最終輸出包含一個或多我的臉框的位置信息和關鍵點信息

 

7 人臉特徵提取-經典方法

接下來,咱們來看一下人臉特徵提取。經典的人臉特徵提取方法有EigenFace和FisherFace兩種。

EigenFace的思想是把人臉從像素空間變換到另外一個空間,在另外一個空間中作類似性的計算。EigenFace的空間變換方法是主成分分析PCA。這個方法90年代開始應用於人臉識別,由於主成分有人臉的形狀,因此也稱爲「特徵臉」。

FisherFace是一種基於線性判別分析LDA(全稱Linear  Discriminant Analysis,)的人臉特徵提取算法, LDA和PCA都是利用特徵值排序找到主元的過程。LDA強調的是不一樣人臉的差別而不是照明條件、人臉表情和方向的變化。因此,Fisherface對人臉光照、人臉姿態變化的影響更不敏感。

 

8 人臉特徵提取-深度學習法

咱們再來看看深度學習法。

利用神經網絡學習高度抽象的人臉特徵,而後將特徵表示爲特徵向量,經過比較特徵向量之間的歐式距離來斷定兩張照片是不是同一我的

 

9人臉特徵提取-深度學習法

整體思路是把人臉識別人物當分類任務來訓練,經過在損失函數上施加約束,讓相同的人的照片提取的特徵距離儘量近,不是同一我的的照片的提取的特徵距離儘量的遠

第一個Logit的地方輸出的是人臉的特徵向量,通常是128維或者512維,浮點向量。這個Logit前面是CNN分類網絡,這個Logit後面的部分是經過在損失函數上施加約束來訓練模型,讓模型區分相同的人和不一樣的人,後面的部分只須要在訓練階段計算,推理階段是不須要的。

 

10 人臉特徵提取-Metric Learning

基於深度學習的人臉特徵提取方法主要有兩類,一類Metric Learning,另外一個是Additive Margin,這兩類方法的底層原理都是同樣的,就是「經過訓練網絡,讓相同人的特徵距離儘量近,不一樣人的特徵距離儘量的遠」。

孿生網絡和Triplet都屬於 Metric Learning這類方法。左邊孿生網絡顧名思義,就是有兩個網絡,一個網絡訓練讓相同的人之間的距離儘量的近,另外一個網絡讓不一樣人之間的距離儘量遠。

右邊Triplet網絡是對孿生網絡的改進,將樣本組織爲錨點、正樣本、負樣本的元組,經過訓練網絡讓錨點與正樣本之間的距離儘量的近,錨點與負樣本之間的距離儘量的遠,而且至少遠於一個閥值阿爾法。

 

11 人臉特徵提取-Additive Margin

Additive Margin這類方法主要是在分類模型的基礎,經過控制損失函數來達到「讓相同人的特徵距離儘量近,讓不一樣人的特徵距離儘量遠」的目標。

前面介紹的Metric Learning的方法最大的問題在於:須要從新組織樣本,模型最終可否收斂很大程度上取決於採樣是否是合理。基於Additive Margin的方法則不須要這一步,徹底將人臉特徵提取當作分類任務來訓練,參數的設置也不須要太多trick,Additive Margin的方法大都是在損失函數上作文章。

最近幾年,這個類方法研究的比較多,上面這個圖中的softmax,Sphereface,Cosface,ArcFace都是Additive Margin方法,能夠看出它都是經過改進損失函數,來實現「讓相同人的特徵距離儘量近,讓不一樣人的特徵距離儘量遠」這個目標

上面這個圖中,顏色相同的點表示一我的,不一樣的點表示不一樣的人,這個圖的展現比較形象,能夠看出最後一個超球體的效果很是不錯

Additive Margin正在成爲主流, InsightFace也屬於這一類,損失函數正是這個ArcFace。

你們可用思考一下,爲何分類方法不能直接用於人臉識別?這裏不作詳細討論了。

 

12 人臉特徵提取-效果評估

咱們再來看一下怎樣評估人臉特徵提取算法的效果。

主要是經過召回率和虛警率兩個指標來衡量。應用場景不一樣,這個兩個指標的設置也不一樣,通常狀況下,在實踐中咱們都要求在虛警率小於某個值(好比萬分之一)的條件下,召回率達到某個值(好比99%)。不少產品宣稱的識別準確率達到多少多少,很大多是在公開數據集好比LFW上的測試結果。

公開的訓練數據集比較推薦的有:MS1MV2,這個數據集微軟前段事件已經宣佈撤回再也不提供下載,這個數據集大概有85000個不一樣的人的380萬張照片。另外一個數據集是GLINT_ASIA,有9萬多人的280萬張照片。

 

13 工程實踐的挑戰及經驗分享

不少人都認爲人臉識別應用,算法包打天下,事實並不是如此,即便是最好的識別算法也扛不住像圖像質量差。圖像質量差、姿式變化、面部形狀/紋理隨着時間推移的變化、遮擋這些問題,是咱們在工程實踐中面臨的挑戰。

固然,大多數問題工程上咱們有應對方法。好比圖像模糊,光照不足,咱們能夠先檢測圖像是否模糊,關照是否不足,質量不過關,就不把圖像送給識別算法。

再好比,用他人照片或視頻來欺騙人臉識別系統,目前已經有多種活體檢測方法來檢測並防止這種狀況。

通過一段時間在人臉識別領域的摸爬滾打,我的認爲影響用戶體驗的關鍵因素是識別快、識別準,識別快主要靠產品設計,識別準主要靠算法

拿人臉門禁來舉個例子,產品設計上能夠在前端採集照片的時候過濾掉模糊、無人臉的照片,避免無效識別,同時前端在採集照片的時候,能夠同時採集多張併發傳給後臺,作併發識別,這些方法均可以大大提高識別經過的速度,提高用戶體驗。

相關文章
相關標籤/搜索