一文看懂人臉識別技術流程
文章出處:http://m.luckydriving.com 作者:IT之家 人氣: 發(fā)表時間:2020年07月20日
舉個例子,十多年前大家還在普遍用現金的時代,小編在商店買東西排隊結賬,每當看到收銀員找零時手忙腳亂的樣子就會心急如焚,只恨不能拿了東西直接走人。那時候年幼的小編就攥緊拳頭夢想著以后一定要發(fā)明一種不用找零錢的方法。
后來這個在心底萌芽多年的夢想被別人實現了,失望之余小編也樂享其成。用手機掃掃碼就能付錢可比現金方便快捷多了??商熘佬【?ldquo;懶癌+急癌”晚期,久而久之竟覺得抬手掃碼、輸入密碼這樣的動作也很麻煩。所以后來出現的指紋支付算是拯救了小編。
再后來,連手指都不用動了,因為出現了“刷臉支付”,配合手上iPhone的卓越體驗,不得不說小編愛死了這個功能。
嗯,刷臉支付將小編從付錢時漫長等待的焦躁和不安中解救了出來,所以在IT之家編輯部的科技氛圍里淫浸多年后,小編覺得有必要為大家講一講“刷臉”到底是個什么東西,也可算是知恩圖報了!
“刷臉”,顧名思義,背后是一項關鍵技術:人臉識別。
別看這兩年因為在智能手機上的使用而大熱,其實人臉識別技術最早的研究還要追溯到20世紀50年代,當時已經有科學家在研究人臉輪廓的提取方法,但受限于技術水平,這項技術的相關研究一度停滯,直到20世紀80年代,人臉識別的方法才有了新的突破,神經生理學、腦神經學、視覺等相關知識被引入,人臉識別進入了新的發(fā)展階段。
所以,當前階段的人臉識別不是單一的技術,而是融合了神經生理學、腦神經學、計算機視覺等多方面學科的技術。不過,本質上它還是一項計算機視覺技術。
當然,IT之家做這篇文章的重點不在于回顧人臉識別的歷史,而是和大家講講人臉識別背后的一些基本原理。
人臉識別技術系統(tǒng)的基本邏輯架構
我們每天用人臉識別技術解鎖手機、結賬付款,是那么的自然,但相信很少有同學深入思考這項技術背后是怎樣一個流程。
前面我們說,計算機視覺是人臉識別關系最緊密的技術。所以我們從這一點入手。
計算機視覺,通俗來說就是利用攝像頭等設備代替人眼,來獲取圖像,利用計算機對圖像信息進行處理,綜合人類的認知模式來建立人類視覺的計算理論。
這其中,最難的無疑是如何處理圖像信息、如何模擬人類的認知模式。
為了解決這些問題,計算機視覺還引入了圖像處理、模式識別、圖像理解、圖像生成等學科的知識。
圖像處理就是把原始圖像轉換成計算機更容易識別的圖像;模式識別,就是計算機判斷自己要識別的是什么和怎么識別的過程;圖像理解,就是對圖像中描述的景物進行分析;圖像生成,舉例來說就是當圖像的部分信息缺失時,能夠將缺失的信息補上……
這些都是計算機視覺需要借助的學科技術。這里面我們要著重講的是模式識別,它是一個獨立的理論體系,具體到計算機視覺領域的應用,它表示將計算機表示出來的圖像和一致的類別進行匹配的過程。
有點懂是吧。IT之家為大家通俗解釋一下,所謂“識別”,就是先認識,然后辨別。認識什么?認識的是圖像和從圖像中總結的目標物體的特征。怎么辨別?就是將總結出來的特征和自己已經掌握的特征庫進行比對,然后才能實現辨別。
我們人類識別一樣物體也是遵循這個邏輯,先總結特征,然后比對。至于前面的“模式”,就有點抽象了,你可以理解為一種規(guī)律,它影響著特征和類型比對的結果。
沒錯,人臉識別本質上也是這個過程。
所以,我們沿著模式識別的思路,來看看它的整體過程:分別為預處理、特征提取和分類等。我們畫出如下流程圖:
預處理是第一步,但是這部分工作可能很多很雜,例如減少圖像中的噪聲干擾、提高清晰度、還有包括圖像濾波、變換、轉碼、模數轉化等。
特征提取,就是在預處理后的圖像中,提取對識別有明顯作用的特征,并在這個過程中降低模式特征的維數,令其便于處理。這是一個復雜的過程,后面我們講到具體方法時候會有體現;
分類,就是對提取到的特征值按照一定的準則進行分類,便于決策。
舉個例子,計算機要識別出這張照片中的男人,當它拿到照片時,可能覺得畫面太暗,先提個亮度,然后又發(fā)現噪點太多,再做個降噪……一頓操作后感覺可以了,再將照片轉化為數字信息,這個過程是預處理。
提取出來的特征值會進入單獨的特征空間,因為這樣可以更好地識別和做分類。接下來,就要對特征空間里的數據進行分類了,讓它們眼睛歸眼睛,鼻子歸鼻子,頭發(fā)歸頭發(fā)……基于這些分類好的數據,計算機才可以進行識別判斷和決策。
當然,為了方便大家理解這個邏輯過程,IT之家在這里只是舉例粗略地說明,可能不準確,實際的步驟也是相當復雜的,還要考慮各種干擾的因素,例如圖像的質量不清晰、背景復雜、圖像光照分布不均勻、目標姿勢角度出現扭曲或者佩戴了頭飾、眼鏡以及張了胡須、化了妝等等各種情況。
還有要說明的一點是,這個模式識別的系統(tǒng)是需要一個自我訓練、學習的過程的,其中最重要的是對前面分類錯誤率的訓練(分類器訓練),因為在前面的分類中,我們無法保證分類的結果是100%正確的,但必須控制在一定的錯誤率之類,這必須通過大量的訓練樣本來不斷修正,令錯誤率符合要求。
好了,基于以上對計算機視覺模式識別的討論,我們就可以給出人臉識別系統(tǒng)的主要功能模塊了:
可能有小伙伴覺得上面這個舉出功能模塊太簡單了,所以我們再精確一些,給出下面的邏輯架構圖,相信不難理解:
人臉識別的主流方法
在上面一部分,我們主要介紹了人臉識別的基本邏輯流程,其實人臉識別的基本思想是比較類似的,都是要將圖像中的特征提取出來,轉換到一個合適的子空間里,然后在這個子空間里衡量類似性或分類學習。但問題在于,對客觀世界采用怎樣協(xié)調統(tǒng)一且有成效的表示法?我們要找到怎樣合適的子空間,怎樣去分類,才能區(qū)分不同類,聚集相似的類別?為解決這些問題,衍生出了很多種方法和解決方案。
所以說,我們所說的人臉識別技術是籠統(tǒng)的,事實上,這是一個很多技術和方法的集合。
我們不妨依據上面的邏輯結構圖來逐步說明。
1、預處理
人臉圖像的預處理,這一步沒有太多可說的,主要包括消除噪聲、灰度歸一化、幾何校正等,這些操作一般有現成的算法可以實現,屬于比較基本的操作。不過要說明的是,這里主要說的是靜態(tài)人臉圖像的預處理,如果是動態(tài)人臉圖像的預處理,就比較復雜了,一般是要先將動態(tài)人臉圖像分割成一組靜態(tài)人臉圖像,然后對人臉進行邊緣檢測和定位,在做一系列的處理,這里就不展開了。
2、特征提取
圖像特征的提取是比較關鍵的一步(上文所說的模式空間向特征空間的跨越),但對于圖像處理來說也是比較初級的一步。目前關于圖像特征提取的方法有很多,但其實我們想一想,通常而言圖像的特征還是可以歸類的,例如顏色特征、紋理特征、空間關系特征、形狀特征等,每一種特征都有匹配的方法,其中有一些比較經典、好用的方法,例如HOG特征法,LBP特征法,Haar特征法等,小編當然不可能一一講解,所以這里選取其中一種——HOG特征法。
HOG特征也叫方向梯度直方圖,它是由Navneet Dalal和Bill Triggs在2005年的一篇博士論文中提出的。我們簡單來看它是怎么進行的。
我們以這張照片為例,第一步是要將它變成黑白的照片,因為色彩信息在這里對識別并沒有幫助。
在這張黑白照片中,我們從單個像素看起,觀察它周圍的像素,看它是往哪個方向逐漸變暗的,然后用箭頭表示這個像素變暗的方向。
如果對每個像素執(zhí)行這樣的操作,這樣所有像素都會被這樣的箭頭取代,它們表示了像素明暗變化的方向。每一個這樣的箭頭表示明暗梯度。
事實上,對于每一個像素,給定坐標系,我們能夠求出它的梯度方向值。計算的方法比較復雜,我們不需要了解,只需要知道這一步是為了捕獲目標的輪廓信息,同時進一步弱化光照的干擾。
如果是以這樣的方式做提取的話,計算量會很大。所以我們會把圖像分割成8x8像素的小方塊,叫做一個Cell,然后對每個Cell計算梯度信息,包括梯度的大小和方向。得到的是這個Cell的9維特征向量。
相信到這里大家有些不懂了。IT之家再為小伙伴們稍微解釋一下,其實這一步的目的是為每個Cell構建梯度方向直方圖,直方圖就是我們大家熟知的條形統(tǒng)計圖,這個直方圖中,X軸是將方向劃分的區(qū)間,Navneet Dalal等人研究表示劃分9個區(qū)間效果是最好的,如果是180°的方向,每個區(qū)間就代表20°。y軸表示某個方向區(qū)間內的梯度大小。這樣就等于是每個Cell的特征描述符。
▲大致就是這個意思(圖片來源:加州大學舊金山分校圖像處理論文)
這里還有一步,就是如果你的圖像受到光照的影響比較大,那么還可以將一定的Cell組成一個block,例如2x2個Cell,這樣每個block上就是36維的特征向量,然后對這36維特征向量做規(guī)范化(具體怎樣規(guī)范,涉及到高等數學的知識,大家也不需要知道)。
如果我們輸入的圖像大小是256x512像素,那么就有32x64=2048個Cell,有31x63=1953個block,每個block有36維向量,那么這個圖像就有1953x36=70308維向量。這70308維向量就是這個圖像的HOG特征向量了。
當然,上面這些步驟你也可都不了解,你只需要知道,最后原始的圖像被表示成了HOG的形式,如下圖:
然后根據這個HOG形式,在我們的庫中找到與已知的一些HOG樣式中,看起來最相似的部分。
3、圖像識別
人臉識別技術經過科學家多年的研究和發(fā)展,已經形成了多種研究方向和更多種的研究方法,如果我們梳理一下,主要包括基于幾何特征的方法、基于模板的方法、基于模型的方法以及其他方法。
基于幾何特征的方法是比較早期、傳統(tǒng)的方法了,它主要是研究人臉眼睛、鼻子等器官的形狀和結構關系的幾何描述,以此作為人臉識別的重要特征。
基于模板的方法基本思想是拿已有的模板和圖像中同樣大小的區(qū)域去比對,包括基于相關匹配的方法、特征臉方法、線性判別分析方法、神經網絡方法等。
基于模型的方法的方向是對人臉的顯著特征進行特征點定位,然后進行人臉的編碼,再利用相應的模型進行處理實現人臉識別,例如隱馬爾柯夫模型,主動形狀模型和主動外觀模型的方法等。
在人臉識別領域,有一些比較經典的算法,例如特征臉法(Eigenface)、局部二值模式法、Fisherface等,不過IT之家在這里還是還是覺得與時俱進比較好,所以選擇一個目前應用比較廣泛且流行的方法作為示例,叫做OpenFace。當然,我們不做實際的測試,只是通過它來了解識別的原理。
OpenFace屬于基于模型的方法,它是一個開源庫,包含了landmark,head pose,Actionunions,eye gaze等功能,以及訓練和檢測所有源碼的開源人臉框架。
在前面的步驟中,IT之家已經為大家介紹如何通過HOG的方法將圖像中人臉的特征數據提取出來,也就是成功檢測到了人臉。
這時又有一個問題,就是這個人臉的姿勢好像不是那么“正”,同樣一個人,如果她的姿勢,面部的朝向不同,人類仍然能認出她來,而計算機可能就認不出了。
解決這個問題,有一個辦法,就是檢測人臉主要特征的特征點,然后根據這些特征點對人臉做對齊校準。這是Vahid Kazemi和Josephine Sullivan在2014年發(fā)明的方法,他們給人臉的重要部分選取68個特征點(Landmarks),這68個點的位置是固定的,所以只需要對系統(tǒng)進行一些訓練,就能在任何臉部找到這68個點。
有了這68個點,就可以對人臉進行校正了,主要是通過仿射變換將原來比較歪的臉擺正,盡量消除誤差。這里的仿射變換主要還是進行一些旋轉、放大縮小或輕微的變形,而不是夸張的扭曲,那樣就不能看了。
▲過程大約是這樣,原來的臉被進行了一定程度的校正(圖片來源:OpenFace github說明頁面)
這樣我們把原始的人臉圖像以及HOG的特征向量輸入,能夠得到一張姿勢正確的只含有人臉的圖像。
注意,到這一步我們還不能直接拿這張人臉圖像去進行比對,因為工作量太大,我們要做的是繼續(xù)提取特征。
接著,我們將這個人臉圖像再輸入一個神經網絡系統(tǒng),讓它為這個臉部生成128維的向量,也可以說是這個人臉的128個測量值,它們可以表示眼睛之間的距離,眼睛和眉毛的距離、耳朵的大小等等。這里只是方便大家理解而舉例,實際上具體這128維的向量表示了哪些特征,我們不得而知。
當然,這一步說起來簡單,其實難點在于如何訓練這樣的一個卷積神經網絡。具體的訓練方法不是我們需要了解的,但我們可以了解一下訓練的思路。訓練時我們可以輸入一個人臉圖像的向量表示、同一人臉不同姿態(tài)的向量表示和另一人臉的向量表示,反復進行類似的操作,并不斷調整,調整的目標是讓同一類對應的向量表示盡可能接近,其實也就是同一個人的向量表示盡可能距離較近,同理,不同類別的向量表示距離盡可能遠。至于人工智能神經網絡訓練的基本原理,大家可以查看IT之家之前發(fā)布的《AI不是科幻電影里的洪水猛獸,而是被慢慢變革的生活方式》這篇文章。
其實訓練的思路也很好理解,因為一個人的人臉不管姿態(tài)怎么變,在一段時間內有些東西是固定的,比如眼睛間的距離、耳朵的大小、鼻子的長度等。
在得到這128個測量值后,最后一步就簡單了,就是將這128個測量值和我們訓練、測試過的所有面部數據做比對,測量值最接近的,就是我們要識別的那個人了。
這樣就可以完成一次人臉的識別。
總結
人臉識別技術經過70多年的發(fā)展,到今天已經發(fā)展成為一門以計算機視覺數字信息處理為中心,糅合信息安全學、語言學、神經學、物理學、AI等多學科交合的綜合性技術學科,內涵已極為豐富,并且發(fā)展快速。而IT之家在本文試圖為大家講解的,只是人臉識別最基礎和通俗的原理以及相對單一的用例分析,顯然無法涵蓋人臉識別領域所有的內容,只是希望借此對大家理解、認識如今我們已經習慣使用的人臉識別功能有所幫助。
國際調研機構Gen Market Insights發(fā)布的數據顯示,到2025年底全球人臉識別設備市場價值將達到71.7億美元,智能手機上對人臉識別技術的廣泛應用,只是為我們了解這項技術提供了一個契機,未來,隨著5G萬物互聯(lián)時代的到來,智能硬件市場將得到極大擴展,那才是人臉識別技術真正大展身手的天地。
嗯,不錯,期待這個時代早日到來,到時候小編這張盛世美顏終于能做點有意義的事情了,也算不負父母恩澤。
本文參考資料:
沈理、劉翼光,熊志勇,2015-11-16,《人臉識別原理及算法:動態(tài)人臉識別系統(tǒng)研究》
CSU985,CSDN,2018-10-06,《圖像特征提取總結》
人工智障v,簡書,2018-07-30,《HOG特征——行人識別》
laolaonuonuo,CSDN,2018-03-10,《人臉識別主要算法》
大數據v,CSDN,2018-08-23,《深度干貨!一文讀懂人臉識別技術(建議收藏)》
leon1741,CSDN,2018-08-02,《深入淺出人臉識別原理》
zouxy09,CSDN,2015-04-25,《人臉識別之特征臉方法(Eigenface)》
csdn研發(fā)技術,CSDN,2018-01-26,《看OpenFace如何做到精準人臉識別