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 工程實踐的挑戰及經驗分享
很多人都認為人臉識別應用,算法包打天下,事實並非如此,即使是最好的識別算法也扛不住像圖像質量差。圖像質量差、姿勢變化、面部形狀/紋理隨着時間推移的變化、遮擋這些問題,是我們在工程實踐中面臨的挑戰。
當然,大多數問題工程上我們有應對方法。比如圖像模糊,光照不足,我們可以先檢測圖像是否模糊,關照是否不足,質量不過關,就不把圖像送給識別算法。
再比如,用他人照片或視頻來欺騙人臉識別系統,目前已經有多種活體檢測方法來檢測並防止這種情況。
經過一段時間在人臉識別領域的摸爬滾打,個人認為影響用戶體驗的關鍵因素是識別快、識別准,識別快主要靠產品設計,識別准主要靠算法。
拿人臉門禁來舉個例子,產品設計上可以在前端採集照片的時候過濾掉模糊、無人臉的照片,避免無效識別,同時前端在採集照片的時候,可以同時採集多張併發傳給後台,做併發識別,這些方法都可以大大提升識別通過的速度,提升用戶體驗。
本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】
※台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"
※網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線
※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整