在人臉識別領域,有一些比較經典的算法,例如特征臉法(Eigenface)、局部二值模式法、Fisherface等,不過在這里選擇了一個目前應用比較廣泛且流行的方法作為示例,叫做OpenFace。當然,我們不做實際的測試,只是通過它來了解識別的原理。
OpenFace屬于基于模型的方法,它是一個開源庫,包含了landmark,head pose,Actionunions,eye gaze等功能,以及訓練和檢測所有源碼的開源人臉框架。
在前面的步驟中,已經為大家介紹如何通過HOG的方法將圖像中人臉的特征數據提取出來,也就是成功檢測到了人臉。
這時又有一個問題,就是這個人臉的姿勢好像不是那么“正”,同樣一個人,如果她的姿勢,面部的朝向不同,人類仍然能認出她來,而計算機可能就認不出了。
解決這個問題,有一個辦法,就是檢測人臉主要特征的特征點,然后根據這些特征點對人臉做對齊校準。這是Vahid Kazemi和Josephine Sullivan在2014年發明的方法,他們給人臉的重要部分選取68個特征點(Landmarks),這68個點的位置是固定的,所以只需要對系統進行一些訓練,就能在任何臉部找到這68個點。
圖片來源:OpenFace API
有了這68個點,就可以對人臉進行校正了,主要是通過仿射變換將原來比較歪的臉擺正,盡量消除誤差。這里的仿射變換主要還是進行一些旋轉、放大縮小或輕微的變形,而不是夸張的扭曲,那樣就不能看了。
圖片來源:OpenFace github說明頁面
過程大約是這樣,原來的臉被進行了一定程度的校正。
這樣我們把原始的人臉圖像以及HOG的特征向量輸入,能夠得到一張姿勢正確的只含有人臉的圖像。
注意,到這一步我們還不能直接拿這張人臉圖像去進行比對,因為工作量太大,我們要做的是繼續提取特征。
接著,我們將這個人臉圖像再輸入一個神經網絡系統,讓它為這個臉部生成128維的向量,也可以說是這個人臉的128個測量值,它們可以表示眼睛之間的距離,眼睛和眉毛的距離、耳朵的大小等等。這里只是方便大家理解而舉例,實際上具體這128維的向量表示了哪些特征,我們不得而知。
當然,這一步說起來簡單,其實難點在于如何訓練這樣的一個卷積神經網絡。具體的訓練方法不是我們需要了解的,但我們可以了解一下訓練的思路。訓練時我們可以輸入一個人臉圖像的向量表示、同一人臉不同姿態的向量表示和另一人臉的向量表示,反復進行類似的操作,并不斷調整,調整的目標是讓同一類對應的向量表示盡可能接近,其實也就是同一個人的向量表示盡可能距離較近,同理,不同類別的向量表示距離盡可能遠。
其實訓練的思路也很好理解,因為一個人的人臉不管姿態怎么變,在一段時間內有些東西是固定的,比如眼睛間的距離、耳朵的大小、鼻子的長度等。
在得到這128個測量值后,最后一步就簡單了,就是將這128個測量值和我們訓練、測試過的所有面部數據做比對,測量值最接近的,就是我們要識別的那個人了。這樣就可以完成一次人臉的識別。
-
算法
+關注
關注
23文章
4697瀏覽量
94693 -
人臉識別
+關注
關注
76文章
4069瀏覽量
83632
原文標題:硬核科普:一文看懂人臉識別技術流程
文章出處:【微信號:scinaniot,微信公眾號:司南物聯】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
【幸狐Omni3576邊緣計算套件試用體驗】人臉識別
人臉識別技術的算法原理解析
新唐科技基于NuMaker-M55M1平臺的人臉識別系統
FacenetPytorch人臉識別方案--基于米爾全志T527開發板
基于FPGA的人臉識別技術
基于OpenCV的人臉識別系統設計
卷積神經網絡在人臉識別中的應用
人臉識別模型訓練流程
如何挑選理想的人臉識別考勤系統產品?人臉識別設備的選型

評論