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