我們知道人臉識(shí)別在這幾年應(yīng)用的相當(dāng)廣泛,目前已有人臉考勤、人臉社交、人臉支付等一系列使用場(chǎng)景?!叭四樧R(shí)別”這項(xiàng)“黑科技”對(duì)生活中的各個(gè)領(lǐng)域都產(chǎn)生了非常重要的影響,特別這幾年機(jī)器學(xué)習(xí)的流行,使得人臉識(shí)別在應(yīng)用和準(zhǔn)確率更是達(dá)到了一個(gè)較高的水準(zhǔn)。
下面將帶著大家揭秘下這項(xiàng)黑科技的原理。
人臉識(shí)別流程:
人臉識(shí)別是由以下步驟組成
利用HOG算法找出所有人臉。
對(duì)人臉進(jìn)行l(wèi)andmark,對(duì)齊人臉。
利用神經(jīng)網(wǎng)絡(luò)找出人臉的特點(diǎn),編碼人臉。
計(jì)算兩張人臉的歐氏距離,確定是否是同一人。
簡(jiǎn)易流程圖如下:
第一步:找出所有面孔
很顯然在我們?cè)谌四樧R(shí)別的流程中得首先找到圖片中的人臉。我們?cè)谑褂?a target="_blank">手機(jī)或相機(jī)拍照時(shí)都會(huì)有人像模式,它能輕松的檢測(cè)出人臉的位置,幫助相機(jī)快速對(duì)焦。
對(duì)于找出圖片中的物體,我們統(tǒng)稱為 OD (Object Detection 物體檢測(cè)),物體檢測(cè)業(yè)界有很多優(yōu)秀的算法和框架可以使用,對(duì)于人臉檢測(cè)我們將使用一種叫做 HOG(Histogram of Oriented Gradients 方向梯度直方圖)的算法,它能夠檢測(cè)物體的輪廓。
首先我們把圖片灰度化,因?yàn)轭伾?a target="_blank">信息對(duì)于人臉檢測(cè)而言沒什么用。
我們分析每個(gè)像素以及其周圍的像素,根據(jù)明暗度畫一個(gè)箭頭,箭頭的指向代表了像素逐漸變暗的方向,如果我們重復(fù)操作每一個(gè)像素,最終像素會(huì)被箭頭取代。這些箭頭被稱為梯度(gradients),它們能顯示出圖像從明亮到黑暗流動(dòng)的過程。
分析每個(gè)像素對(duì)我們來說有點(diǎn)不劃算,因?yàn)樗^細(xì)節(jié)化了,我們可能會(huì)迷失在像素的海洋里,我們應(yīng)該從更高的角度觀察明暗的流動(dòng)。
為此我們將圖像分割成16x16像素的小方塊。在每個(gè)小方塊中,計(jì)算出每個(gè)主方向有多少個(gè)梯度(有多少指向上,指向右上,指向右等)。然后用指向性最強(qiáng)的那個(gè)方向箭頭來代替原來那個(gè)小方塊。
最終結(jié)果,我們把原始圖像轉(zhuǎn)換成一個(gè)非常簡(jiǎn)單的HOG表達(dá)形式,它可以很輕松的捕獲面部的基本結(jié)構(gòu)。
為了在HOG圖像中找到臉部,我們需要做的是,與已知的一些HOG圖案中,匹配最相似的部分。這些HOG圖案都是重其他面部訓(xùn)練數(shù)據(jù)中提取出來的。
第二步:臉部的不同姿勢(shì)
我們已經(jīng)找出了圖片中的人臉,那么如何鑒別面朝不同方向的人臉呢?
對(duì)于電腦來說,朝向不同的人臉是不同的識(shí)別內(nèi)容,為此我們需要適當(dāng)?shù)恼{(diào)整扭曲圖片中的人臉,使得眼睛和嘴總是與被檢測(cè)者重疊。
為了達(dá)到目的我們將使用一種面部特征點(diǎn)估計(jì)(face landmark estimation)的算法。其實(shí)還有很多算法都可以做到,但我們這次使用的是由瓦希德·卡奇米(Vahid Kazemi)和約瑟菲娜·沙利文(Josephine Sullivan)在 2014 年發(fā)明的方法。
這一算法的基本思路是找到68個(gè)人臉上普遍存在的點(diǎn)(稱為特征點(diǎn), landmark)
? 下巴輪廓17個(gè)點(diǎn) [0-16]
? 左眉毛5個(gè)點(diǎn) [17-21]
? 右眉毛5個(gè)點(diǎn) [22-26]
? 鼻梁4個(gè)點(diǎn) [27-30]
? 鼻尖5個(gè)點(diǎn) [31-35]
? 左眼6個(gè)點(diǎn) [36-41]
? 右眼6個(gè)點(diǎn) [42-47]
? 外嘴唇12個(gè)點(diǎn) [48-59]
? 內(nèi)嘴唇8個(gè)點(diǎn) [60-67]
有了這68個(gè)點(diǎn),我們就可以輕松的知道眼睛和嘴巴在哪兒了,后續(xù)我們將圖片進(jìn)行旋轉(zhuǎn),縮放和錯(cuò)切,使得眼睛和嘴巴盡可能的靠近中心。
現(xiàn)在人臉基本上對(duì)齊了,這使得下一步更加準(zhǔn)確
第三步:給臉部編碼
我們還有個(gè)核心的問題沒有解決, 那就是如何區(qū)分不同的人臉。
最簡(jiǎn)單的方法就是把我們第二步中發(fā)現(xiàn)的未知人臉與我們已知的人臉作對(duì)比。當(dāng)我們發(fā)現(xiàn)未知的面孔與一個(gè)以前標(biāo)注過的面孔看起來相似的時(shí)候,就可以認(rèn)定他們是同一個(gè)人。
我們?nèi)祟惸芡ㄟ^眼睛大小,頭發(fā)顏色等等信息輕松的分辨不同的兩張人臉,可是電腦怎么分辨呢?沒錯(cuò),我們得量化它們,測(cè)量出他們的不同。那要怎么做,才能得出測(cè)量人臉的最可靠的方法?以及如何測(cè)量人臉的數(shù)值呢?例如耳朵大小、鼻子長(zhǎng)度、眼睛的顏色。
實(shí)際上,人類對(duì)于人臉這些信息很容易分辨,可是對(duì)于計(jì)算機(jī),這些信息沒什么價(jià)值。實(shí)際上最準(zhǔn)確的方法是讓計(jì)算機(jī)自己找出他要收集的測(cè)量值。深度學(xué)習(xí),比人類更懂得哪些面部測(cè)量值比較重要。
所以,解決方案是訓(xùn)練一個(gè)深度卷積神經(jīng)網(wǎng)絡(luò),訓(xùn)練讓它為臉部生成128個(gè)測(cè)量值。
每次訓(xùn)練要觀察三個(gè)不同的臉部圖像:
1. 加載一張已知的人的面部訓(xùn)練圖像
2. 加載同一個(gè)人的另一張照片
3. 加載另外一個(gè)人的照片
然后,算法查看它自己為這三個(gè)圖片生成的測(cè)量值。再然后,稍微調(diào)整神經(jīng)網(wǎng)絡(luò),以確保第一張和第二張生成的測(cè)量值接近,而第二張和第三張生成的測(cè)量值略有不同。
我們要不斷的調(diào)整樣本,重復(fù)以上步驟百萬次,這確實(shí)是個(gè)巨大的挑戰(zhàn),但是一旦訓(xùn)練完成,它能攻輕松的找出人臉。
慶幸的是 OpenFace 上面的大神已經(jīng)做完了這些,并且他們發(fā)布了幾個(gè)訓(xùn)練過可以直接使用的網(wǎng)絡(luò),我們可以不用部署復(fù)雜的機(jī)器學(xué)習(xí),開箱即用,感謝開源精神。
這128個(gè)測(cè)量值是什么鬼?
其實(shí)我們不用關(guān)心,這對(duì)我們也不重要。我們關(guān)心的是,當(dāng)看到同一個(gè)人的兩張不同照片時(shí),我們的網(wǎng)絡(luò)需要能得到幾乎相同的數(shù)值。
第四步:從編碼中找出人的名字
最后一步實(shí)際上是最簡(jiǎn)單的一步,我們需要做的是找到數(shù)據(jù)庫中與我們的測(cè)試圖像的測(cè)量值最接近的那個(gè)人。
如何做呢,我們利用一些現(xiàn)成的數(shù)學(xué)公式,計(jì)算兩個(gè)128D數(shù)值的歐氏距離
哈,這樣我們得到一個(gè)歐式距離值,系統(tǒng)將給它一個(gè)認(rèn)為是同一個(gè)人歐氏距離的閥值,即超過這個(gè)閥值我們就認(rèn)定他們是 同 (失) 一 (散) 個(gè) (兄) 人 (弟)。
人臉識(shí)別就這樣達(dá)成啦,來來我們?cè)倩仡櫹铝鞒蹋?/p>
使用HOG找出圖片中所有人臉的位置。
計(jì)算出人臉的68個(gè)特征點(diǎn)并適當(dāng)?shù)恼{(diào)整人臉位置,對(duì)齊人臉。
把上一步得到的面部圖像放入神經(jīng)網(wǎng)絡(luò),得到128個(gè)特征測(cè)量值,并保存它們。
與我們以前保存過的測(cè)量值一并計(jì)算歐氏距離,得到歐氏距離值,比較數(shù)值大小,即可得到是否同一個(gè)人。
人臉識(shí)別應(yīng)用場(chǎng)景
人臉識(shí)別分兩大步驟,人臉檢測(cè)和人臉識(shí)別,它們應(yīng)用場(chǎng)景也各不相同。
人臉檢測(cè)實(shí)質(zhì)上是實(shí)現(xiàn)找出人臉,得到人臉的位置的功能,我們可以在美顏,換膚,摳圖,換臉的一些場(chǎng)景中使用到它。我們可以通過系統(tǒng)API調(diào)用相機(jī)完成對(duì)預(yù)覽針的實(shí)時(shí)渲染,那些看上去的黑科技我們也可以玩啦。
人臉識(shí)別則可以應(yīng)用在會(huì)員、支付等場(chǎng)景,帶給用戶更酷炫的使用體驗(yàn),大家快來試試吧。
-
人臉識(shí)別
+關(guān)注
關(guān)注
76文章
4015瀏覽量
82306 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8438瀏覽量
133074
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論