人脸识别技术原理与工程实践
1人臉識別應(yīng)用場景(驗證)
我們先來看看人臉識別的幾個應(yīng)用。第一個是蘋果的FACE ID,自從蘋果推出FaceID后,業(yè)界對人臉識別的應(yīng)用好像信心大增,各種人臉識別的應(yīng)用從此開始“野蠻生長”。
事實上,人臉識別技術(shù)在很多場景的應(yīng)用確實可以提升認證效率,同時提升用戶體驗。前兩年,很多機場安檢都開始用上了人臉驗證;今年4月,很多一、二線城市的火車站也開通了“刷臉進站”的功能;北京的一些酒店開始使用人臉識別技術(shù)來做身份驗證。
2 人臉識別應(yīng)用場景(識別)
我們再來看看幾個場景。
第一個是刷臉的自動售貨機。當我第一次看到這個機器的時候就有個疑問:”現(xiàn)在人臉識別算法已經(jīng)做到萬無一失了嗎,認錯人,扣錯錢怎么辦?”,后來才發(fā)現(xiàn),其實關(guān)鍵不在于算法,產(chǎn)品設(shè)計才是最重要的。用過這個售貨機的人可能知道,第一次使用的時候,要求輸入手機號的后四位,這個看似簡單的產(chǎn)品設(shè)計,可以讓自動售貨機的誤識別率降低到億分之一,這樣底概率的條件下,誤識別帶來的損失完全可以忽略。同時這款自動售貨機還會提醒你,你的消費行為會綁定“芝麻信用”,想想有幾個人會為了一瓶“可樂”去影響自己的征信記錄呢?
第二個是刷臉買咖啡,進入咖啡店后,在你選好喝什么咖啡前,系統(tǒng)已經(jīng)識別出站在點單臺前的用戶是誰,并做好點單準備;
第三個是在人臉門禁系統(tǒng)。小伙伴們再已不用擔心忘記帶工卡了。人臉門禁對識別速度和準確度的要求是相對較高的,設(shè)備掛在門的側(cè)面墻也會影響體驗,增加產(chǎn)品設(shè)計和開發(fā)的難度。
3 “人臉驗證”還是“人臉識別”?
其實,前面兩頁的場景是有些區(qū)別的,不知道大家看出來了沒有。
第一個的場景,用戶實際提供了兩個信息,一是用戶的證件信息,比如身份證號碼,或APP賬號;另一個信息是用戶的現(xiàn)場照片;這類場景的目標實際上是:讓人臉識別系統(tǒng)驗證現(xiàn)場照片是否是證件所宣稱的那個人。我們把這類場景叫著“人臉驗證”。
第二個的場景,用戶實際只提供的現(xiàn)場照片,需要人臉識別系統(tǒng)判斷照片上的人是誰。我們把這類場景叫著“人臉識別”。
“人臉驗證”拿現(xiàn)場人臉跟用戶所宣稱的人臉做1比1的比較,而“人臉識別”是拿現(xiàn)場人臉跟后臺注冊人臉庫中的所有人臉比較,是1比N的搜索。可以看出,兩種場景的技術(shù)原理一致,但是難度不同,第二頁場景的難度普遍比第一頁高得多。
4 人臉識別原理
計算機是怎么識別人臉的呢?如果我們大家是人臉識別系統(tǒng)的設(shè)計者,我們應(yīng)用怎樣來設(shè)計這個系統(tǒng)?
“把人臉區(qū)域從圖片中摳出來,然后拿摳出來的人臉跟事先注冊的人臉進行比較”,沒錯,就是這樣,說起來簡單,做又是另外一回事了,這里又有兩個新的問題:
一是,“怎樣判斷圖片中是有沒有人臉?”,“怎樣知道人臉在圖片中的具體位置呢”,這是人臉檢測要解決的問題,人臉檢測告訴我們圖像中是否有人臉以及人臉的具體位置坐標。
二是,“我們怎樣比較兩個人臉是不是同一個人呢?”,一個像素一個像素比較嗎?光照,表情不一致,人臉偏轉(zhuǎn)都將導致該方法不可行。”人是怎樣判斷兩種照片中的人臉是不是同一個人的呢?”,我們是不是通過比較兩種照片上的人,是不是高鼻梁、大眼睛、瓜子臉這樣的面部特征來做判斷的呢?
我們來看一下計算機人臉識別的流程,首先是獲取輸入圖像,然后檢測圖像中是否有人臉,人臉的具體位置,然后判斷圖像的質(zhì)量,比如圖像是否模糊,光照度是否足夠,然后檢測人臉偏轉(zhuǎn)的角度,旋轉(zhuǎn)人臉到一個正臉位置,再然后提取人臉特征,比對人臉特征,最后輸出識別結(jié)果。其中圖像質(zhì)量檢測和人臉對齊這兩步是可選的步驟,根據(jù)具體應(yīng)用場景來決定。
5 人臉檢測-經(jīng)典方法
我們來看看經(jīng)典的人臉檢測方法。
OpenCV和Dlib是兩個常用的算法庫。
OpenCV 中使用Haar Cascade來做人臉檢測,其實Haar Cascade可以檢測任何對象,比如人臉和臉上眼睛的位置。
DLIB中是使用方向梯度直方圖(Histogram of Oriented Gradient, HOG),即通過計算圖像局部區(qū)域的梯度方向直方圖來提取特征,這種方法的本質(zhì)在于梯度的統(tǒng)計信息,而梯度主要存在于邊緣的地方。
OpenCV和DLIB各自也有他們自己的基于深度學習的人臉檢測方法,使用起來非常簡單。從這幾種方法都可以做到CPU實時或GPU實時;經(jīng)典的檢測方法對正臉的檢測效果比較好,深度學習的方法適應(yīng)性更強,可以檢測各種角度的人臉。
6 MTCNN人臉檢測
2016年提出來的MTCNN算法是目前公認比較好的人臉檢測算法是(Multi-task Cascaded Convolutional Networks),可以同時實現(xiàn)face detection和alignment,也就是人臉檢測和對齊。
這里的對齊指的是檢測人臉眼睛、鼻子、嘴巴輪廓關(guān)鍵點LandMark。
MTCNN算法主要包含三個子網(wǎng)絡(luò):P-Net (Proposal Network)、 R-Net(Refine Network)、O-Net(Output Network),這3個網(wǎng)絡(luò)按照由粗到細的方式處理輸入照片,每個網(wǎng)絡(luò)有3條支路用來分別做人臉分類、人臉框的回歸和人臉關(guān)鍵點定位。
左上角,最開始對在多個尺度上對圖像做了resize,構(gòu)成了圖像金字塔,然后這些不同尺度的圖像作為P、P、O網(wǎng)絡(luò)的輸入進行訓練,目的是為了可以檢測不同尺度的人臉。
P-Net主要用來生成候選人臉框。 R-Net主要用來去除大量的非人臉框。O-Net和R-Net有點像,在R-NET基礎(chǔ)上增加了landmark位置的回歸,最終輸出包含一個或多個人臉框的位置信息和關(guān)鍵點信息。
7 人臉特征提取-經(jīng)典方法
接下來,我們來看一下人臉特征提取。經(jīng)典的人臉特征提取方法有EigenFace和FisherFace兩種。
EigenFace的思想是把人臉從像素空間變換到另一個空間,在另一個空間中做相似性的計算。EigenFace的空間變換方法是主成分分析PCA。這個方法90年代開始應(yīng)用于人臉識別,因為主成分有人臉的形狀,所以也稱為“特征臉”。
FisherFace是一種基于線性判別分析LDA(全稱Linear Discriminant Analysis,)的人臉特征提取算法, LDA和PCA都是利用特征值排序找到主元的過程。LDA強調(diào)的是不同人臉的差異而不是照明條件、人臉表情和方向的變化。所以,F(xiàn)isherface對人臉光照、人臉姿態(tài)變化的影響更不敏感。
8 人臉特征提取-深度學習法
我們再來看看深度學習法。
利用神經(jīng)網(wǎng)絡(luò)學習高度抽象的人臉特征,然后將特征表示為特征向量,通過比較特征向量之間的歐式距離來判定兩張照片是否是同一個人。
9人臉特征提取-深度學習法
總體思路是把人臉識別人物當分類任務(wù)來訓練,通過在損失函數(shù)上施加約束,讓相同的人的照片提取的特征距離盡可能近,不是同一個人的照片的提取的特征距離盡可能的遠。
第一個Logit的地方輸出的是人臉的特征向量,一般是128維或者512維,浮點向量。這個Logit前面是CNN分類網(wǎng)絡(luò),這個Logit后面的部分是通過在損失函數(shù)上施加約束來訓練模型,讓模型區(qū)分相同的人和不同的人,后面的部分只需要在訓練階段計算,推理階段是不需要的。
10 人臉特征提取-Metric Learning
基于深度學習的人臉特征提取方法主要有兩類,一類Metric Learning,另一個是Additive Margin,這兩類方法的底層原理都是一樣的,就是“通過訓練網(wǎng)絡(luò),讓相同人的特征距離盡可能近,不同人的特征距離盡可能的遠”。
孿生網(wǎng)絡(luò)和Triplet都屬于 Metric Learning這類方法。左邊孿生網(wǎng)絡(luò)顧名思義,就是有兩個網(wǎng)絡(luò),一個網(wǎng)絡(luò)訓練讓相同的人之間的距離盡可能的近,另一個網(wǎng)絡(luò)讓不同人之間的距離盡可能遠。
右邊Triplet網(wǎng)絡(luò)是對孿生網(wǎng)絡(luò)的改進,將樣本組織為錨點、正樣本、負樣本的元組,通過訓練網(wǎng)絡(luò)讓錨點與正樣本之間的距離盡可能的近,錨點與負樣本之間的距離盡可能的遠,并且至少遠于一個閥值阿爾法。
11 人臉特征提取-Additive Margin
Additive Margin這類方法主要是在分類模型的基礎(chǔ),通過控制損失函數(shù)來達到“讓相同人的特征距離盡可能近,讓不同人的特征距離盡可能遠”的目標。
前面介紹的Metric Learning的方法最大的問題在于:需要重新組織樣本,模型最終能否收斂很大程度上取決于采樣是不是合理?;贏dditive Margin的方法則不需要這一步,完全將人臉特征提取當做分類任務(wù)來訓練,參數(shù)的設(shè)置也不需要太多trick,Additive Margin的方法大都是在損失函數(shù)上做文章。
最近幾年,這個類方法研究的比較多,上面這個圖中的softmax,Sphereface,Cosface,ArcFace都是Additive Margin方法,可以看出它都是通過改進損失函數(shù),來實現(xiàn)“讓相同人的特征距離盡可能近,讓不同人的特征距離盡可能遠”這個目標。
上面這個圖中,顏色相同的點表示一個人,不同的點表示不同的人,這個圖的展示比較形象,可以看出最后一個超球體的效果非常不錯。
Additive Margin正在成為主流, InsightFace也屬于這一類,損失函數(shù)正是這個ArcFace。
大家可用思考一下,為什么分類方法不能直接用于人臉識別?這里不做詳細討論了。
12 人臉特征提取-效果評估
我們再來看一下怎樣評估人臉特征提取算法的效果。
主要是通過召回率和虛警率兩個指標來衡量。應(yīng)用場景不同,這個兩個指標的設(shè)置也不同,一般情況下,在實踐中我們都要求在虛警率小于某個值(比如萬分之一)的條件下,召回率達到某個值(比如99%)。很多產(chǎn)品宣稱的識別準確率達到多少多少,很大可能是在公開數(shù)據(jù)集比如LFW上的測試結(jié)果。
公開的訓練數(shù)據(jù)集比較推薦的有:MS1MV2,這個數(shù)據(jù)集微軟前段事件已經(jīng)宣布撤回不再提供下載,這個數(shù)據(jù)集大概有85000個不同的人的380萬張照片。另一個數(shù)據(jù)集是GLINT_ASIA,有9萬多人的280萬張照片。
13 工程實踐的挑戰(zhàn)及經(jīng)驗分享
很多人都認為人臉識別應(yīng)用,算法包打天下,事實并非如此,即使是最好的識別算法也扛不住像圖像質(zhì)量差。圖像質(zhì)量差、姿勢變化、面部形狀/紋理隨著時間推移的變化、遮擋這些問題,是我們在工程實踐中面臨的挑戰(zhàn)。
當然,大多數(shù)問題工程上我們有應(yīng)對方法。比如圖像模糊,光照不足,我們可以先檢測圖像是否模糊,關(guān)照是否不足,質(zhì)量不過關(guān),就不把圖像送給識別算法。
再比如,用他人照片或視頻來欺騙人臉識別系統(tǒng),目前已經(jīng)有多種活體檢測方法來檢測并防止這種情況。
經(jīng)過一段時間在人臉識別領(lǐng)域的摸爬滾打,個人認為影響用戶體驗的關(guān)鍵因素是識別快、識別準,識別快主要靠產(chǎn)品設(shè)計,識別準主要靠算法。
拿人臉門禁來舉個例子,產(chǎn)品設(shè)計上可以在前端采集照片的時候過濾掉模糊、無人臉的照片,避免無效識別,同時前端在采集照片的時候,可以同時采集多張并發(fā)傳給后臺,做并發(fā)識別,這些方法都可以大大提升識別通過的速度,提升用戶體驗。
來自https://www.cnblogs.com/dskit/p/11920405.html
總結(jié)
以上是生活随笔為你收集整理的人脸识别技术原理与工程实践的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 函数式编程的兴衰与当前之崛起
- 下一篇: Redis MSET的极限在哪里