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

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

我們先來看看人臉識別的幾個應用。第一個是蘋果的FACE ID,自從蘋果推出FaceID后,業界對人臉識別的應用好像信心大增,各種人臉識別的應用從此開始“野蠻生長”。

事實上,人臉識別技術在很多場景的應用確實可以提升認證效率,同時提升用戶體驗。前兩年,很多機場安檢都開始用上了人臉驗證;今年4月,很多一、二線城市的火車站也開通了“刷臉進站”的功能;北京的一些酒店開始使用人臉識別技術來做身份驗證。

 

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

我們再來看看幾個場景。

 

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

第二個是刷臉買咖啡,進入咖啡店后,在你選好喝什麼咖啡前,系統已經識別出站在點單台前的用戶是誰,並做好點單準備;

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

 

3 “人臉驗證”還是“人臉識別”?

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

第一個的場景,用戶實際提供了兩個信息,一是用戶的證件信息,比如身份證號碼,或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 工程實踐的挑戰及經驗分享

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

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

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

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

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

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整