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