深度概念 簡述人臉識別開發原理

2021-09-24 01:21:23 字數 3219 閱讀 8831

我們知道人臉識別在這幾年應用相當廣泛,人臉考勤,人臉社交,人臉支付,**都有這黑科技的影響,特別這幾年機器學習流行,使得人臉識別在應用和準確率更是達到了乙個較高的水準。

下面將帶著大家揭秘下這項黑科技的原理。

首先找到一張中的所有人臉。

對於每一張臉來說,無論光線明暗或面朝別處,它依舊能夠識別出是同乙個人的臉。

能夠在每一張臉上找出可用於他人區分的獨特之處,比如眼睛多大,臉有多長等等。

最後將這張臉的特點與已知所有人臉進行比較,以確定這個人是誰。

第一步:找出所有的面孔

很顯然在我們在人臉識別的流程中得首先找到中的人臉。我們在使用手機或相機拍照時都會有人像模式,它能輕鬆的檢測出人臉的位置,幫助相機快速對焦。

我們得感謝 保羅·比奧拉(paul viola)和麥可·瓊斯(michael jones)在2023年發明了一種能夠快速在廉價相機上執行的人臉檢測方法,人臉檢測在相機上的應用才成為主流。然而現在我們有更可靠的解決方案hog(histogram of oriented gradients)方向梯度直方圖,一種能夠檢測物體輪廓的演算法。

首先我們把灰度化,因為顏色資訊對於人臉檢測而言沒什麼用。

我們分析每個畫素以及其周圍的畫素,根據明暗度畫乙個箭頭,箭頭的指向代表了畫素逐漸變暗的方向,如果我們重複操作每乙個畫素,最終畫素會被箭頭取代。這些箭頭被稱為梯度(gradients),它們能顯示出影象從明亮到黑暗流動的過程。

分析每個畫素對我們來說有點不划算,因為它太過細節化了,我們可能會迷失在畫素的海洋裡,我們應該從更高的角度觀察明暗的流動。

為此我們將影象分割成16x16畫素的小方塊。在每個小方塊中,計算出每個主方向有多少個剃度(有多少指向上,指向右上,指向右等)。然後用指向性最強的那個方向箭頭來代替原來那個小方塊。

最終結果,我們把原始影象轉換成乙個非常簡單的hog表達形式,它可以很輕鬆的捕獲面部的基本結構。

為了在hog影象中找到臉部,我們需要做的是,與已知的一些hog圖案中,看起來最相似的部分。這些hog圖案都是重其他面部訓練資料中提取出來的。

第二步:臉部的不同姿勢

我們已經找出了中的人臉,那麼如何鑑別面朝不同方向的人臉呢?

對於電腦來說朝向不同的人臉是不同的東西,為此我們得適當的調整扭曲中的人臉,使得眼睛和嘴總是與被檢測者重疊。

為了達到目的我們將使用一種面部特徵點估計(face landmark estimation)的演算法。其實還有很多演算法都可以做到,但我們這次使用的是由瓦希德·卡奇公尺(vahid kazemi)和約瑟菲娜·沙利文(josephine sullivan)在 2014 年發明的方法。

這一演算法的基本思路是找到68個人臉上普遍存在的點(稱為特徵點, landmark)。

有了這68個點,我們就可以輕鬆的知道眼睛和嘴巴在哪兒了,後續我們將進行旋轉,縮放和錯切,使得眼睛和嘴巴盡可能的靠近中心。

現在人臉基本上對齊了,這使得下一步更加準確。

第三步:給臉部編碼

我們還有個核心的問題沒有解決, 那就是如何區分不同的人臉。

最簡單的方法就是把我們第二步中發現的未知人臉與我們已知的人臉作對比。當我們發現未知的面孔與乙個以前標註過的面孔看起來相似的時候,就可以認定他們是同乙個人。

我們人類能通過眼睛大小,頭髮顏色等等資訊輕鬆的分辨不同的兩張人臉,可是電腦怎麼分辨呢?沒錯,我們得量化它們,測量出他們的不同,那要怎麼做呢?

實際上,對於人臉這些資訊很容易分辨,可是對於計算機,這些值沒什麼價值。實際上最準確的方法是讓計算機自己找出他要收集的測量值。深度學習比人類更懂得哪些面部測量值比較重要。

所以,解決方案是訓練乙個深度卷積神經網路,訓練讓它為臉部生成128個測量值。

每次訓練要觀察三個不同的臉部影象:

載入一張已知的人的面部訓練影象

載入同乙個人的另一張**

載入另外乙個人的**

然後,演算法檢視它自己為這三個生成的測量值。再然後,稍微調整神經網路,以確保第一張和第二張生成的測量值接近,而第二張和第三張生成的測量值略有不同。

我們要不斷的調整樣本,重複以上步驟百萬次,這確實是個巨大的挑戰,但是一旦訓練完成,它能攻輕鬆的找出人臉。

慶幸的是 openface 上面的大神已經做完了這些,並且他們發布了幾個訓練過可以直接使用的網路,我們可以不用部署複雜的機器學習,開箱即用,感謝開源精神。

這128個測量值是什麼鬼?

其實我們不用關心,這對我們也不重要。我們關心的是,當看到同乙個人的兩張不同**時,我們的網路需要能得到幾乎相同的數值。

第四步:從編碼中找出人的名字

最後一步實際上是最簡單的一步,我們需要做的是找到資料庫中與我們的測試影象的測量值最接近的那個人。

如何做呢,我們利用一些現成的數學公式,計算兩個128d數值的歐氏距離。

這樣我們得到乙個歐式距離值,系統將給它乙個認為是同乙個人歐氏距離的閥值,即超過這個閥值我們就認定他們是 同 (失) 一 (散) 個 (兄) 人 (弟)。

人臉識別就這樣達成啦,來來我們再回顧下流程:

使用hog找出中所有人臉的位置。

計算出人臉的68個特徵點並適當的調整人臉位置,對齊人臉。

把上一步得到的面部影象放入神經網路,得到128個特徵測量值,並儲存它們。

與我們以前儲存過的測量值一併計算歐氏距離,得到歐氏距離值,比較數值大小,即可得到是否同乙個人。

人臉識別分兩大步驟,人臉檢測和人臉識別,它們應用場景也各不相同。

人臉檢測目的是找出人臉,得到人臉的位置,我們可以在美顏,換膚,摳圖,換臉 的一些場景中使用到它。

基於深度學習的人臉表情識別開發

目前深度學習很流行,很大程度減輕了影象開發的難度。表情識別是影象演算法的重要研究方向,本文提供一種基於深度學習的表情識別方法。1,獲取模型 2,檢測人臉並識別表情 人臉檢測有很多方法,比如傳統的haar檢測人臉,深度學習的mtcnn,還有別的一些方法。綜合起來,mtcnn在精度和速度上很有優勢。mt...

深度應用 一文搞懂深度學習人臉識別模型開發流程

度量學習 metric learning 也稱距離度量學習 distance metric learning,dml 屬於機器學習的一種。其本質就是相似度的學習,也可以認為距離學習。因為在一定條件下,相似度和距離可以相互轉換。比如在空間座標的兩條向量,既可以用余弦相似度的大小,也可以使用歐式距離的遠...

深度應用 一文搞懂深度學習人臉識別模型開發流程

度量學習 metric learning 也稱距離度量學習 distance metric learning,dml 屬於機器學習的一種。其本質就是相似度的學習,也可以認為距離學習。因為在一定條件下,相似度和距離可以相互轉換。比如在空間座標的兩條向量,既可以用余弦相似度的大小,也可以使用歐式距離的遠...