當前位置:
首頁 > 最新 > 通過OpenFace來理解人臉識別

通過OpenFace來理解人臉識別

【導讀】本文是Stephanie Kim的一篇博文你,作者探討的是一個老生常談的話題「人臉識別」,介紹針對人臉識別任務的一個特定的開源庫——OpenFace。作者之所以專門介紹該開源庫,說明該庫必然是有其獨特的優勢。與Google FaceNet和Facebook DeepFace不同,它主要聚焦在移動設備上的實時人臉識別,旨在用少量數據實現高準確率。本文還介紹了OpenFace原理、訓練過程、及相關案例,剛興趣的讀者不妨讀一讀,相信不會令你失望。專知內容組編輯整理。

Understanding Facial Recognition Through OpenFace人臉識別已經成為我們生活中越來越普遍的一部分。

如今,智能手機使用人臉識別來進行訪問控制,動畫電影如(「阿凡達」)則使用它來為帶來逼真的運動和表情。警方的監控攝像機使用臉部識別軟體來識別被逮捕的罪犯,這些模型也被用於零售店進行有針對性的營銷活動。當然,我們都會使用celebrity look-a-like和Facebook』s auto tagger等應用來對我們自己,我們的朋友以及我們的家人進行分類。

人臉識別可用於許多不同的應用,但並不是所有的人臉識別庫在準確性和性能上都是相同的,大多數最先進的人臉識別系統都是專有的黑箱。

OpenFace是一個開放源代碼庫,可以與專有模型的性能和準確性相媲美。這個項目是在考慮移動設備的情況下創建的,所以讓我們來看一些使這個庫快速準確的內部實現,並列舉一些案例來說明為什麼你可能想要在你的項目中使用它。

高層架構概覽

OpenFace是一個由Brandon Amos,Bartosz Ludwiczuk和Mahadev Satyanarayanan開發的深度學習面部識別模型。它基於這篇文章:FaceNet: A Unified Embedding for Face Recognition and Clustering,該文由Florian Schroff,Dmitry Kalenichenko和James Philbin在Google發表,並且使用Python和Torch進行實現,因此可以在CPU或GPU上運行。

雖然OpenFace只有幾年的歷史,但它被廣泛採用,因為它提供了相當於Google FaceNet或Facebook DeepFace等企業級的最新人臉識別準確性水平的人臉識別模型。

除了開源之外,OpenFace還有一個特別的好處,那就是該模型的開發主要集中在移動設備上的實時人臉識別,因此可以在很少的數據的情況下以高精度訓練模型。

從高層面來看,OpenFace使用Torch來進行離線訓練,這意味著OpenFace只需進行一次訓練並且用戶也不必親自來訓練這些海量的圖片。這些圖像然後被扔進谷歌的FaceNet模型進行特徵提取。FaceNet使用三元損失函數(triplet loss function)來計算神經網路對人臉進行分類的準確性,並且由於在超球面(hypersphere)上產生的度量結果而能夠對人臉進行聚類。

新圖像在dlib的人臉檢測模型運行之後,這個訓練好的神經網路在後面Python實現中被使用。

一旦面部被OpenCV的仿射變換(Affine transformation),所有的人臉都指向相同的方向,它們被送入一個訓練好的神經網路進行一次前向傳播。這個128維的人臉表達可以用來進行分類或匹配,甚至可以用於進行相似性檢測的聚類演算法。

訓練

在OpenFace的訓練部分,500k圖像通過神經網路進行訓練。這些圖像來自兩個公共數據集: CASIA-WebFace :包含了10,575個人和494,414圖像; FaceScrub:包含了530個人和106863張圖像。

顯然,提前在所有的圖片上訓練神經網路十分關鍵,因為在移動設備或任何其他實時場景下不可能訓練500,000個圖像來檢索所需的面部表示。現在請記住,這部分的流程只執行一次,因為OpenFace訓練這些圖像以生成128維的人臉表示,這些人臉表示可以表示一般的人臉,將在稍後使用。接下來,不是在高維空間中匹配圖像,你只需使用低維數據,這將加快整個模型的速度。

如前所述,OpenFace使用Google的FaceNet架構進行特徵提取,並使用三元損失函數來測試神經網路對人臉的分類的精度。他是通過訓練三個不同的圖像來實現的,其中一個是已知的人臉圖像,稱為錨圖像,然後同一個人的另一個圖像具有正的表示,而最後一張是一個不同人的圖像,具有負的表示。

如果你想了解更多關於三元損失的信息可以點擊Convolutional Neural Network Coursera video.

關於使用三元嵌入的一個很酷的事情是表示是,嵌入是在單位超球面上測量的,在這個單位超球面上使用歐幾里得距離來確定哪些圖像靠得更近,哪些距離更遠。很明顯,負圖像表示距離正圖像表示和錨圖像表示比較遠,而後兩個表示之間的距離更近。這非常重要,因為這樣可以將聚類演算法用於相似性檢測。例如,如果想在家譜網站上檢測家庭成員,或者在社交媒體上查找可能的營銷活動(在這裡考慮groupon),就可能需要使用聚類演算法。

從背景中分離出人臉

我們已經介紹了OpenFace如何使用Torch來訓練數以十萬計的圖像,以獲得低維的臉部嵌入,我們通過對流行的人臉檢測庫dlib的使用對其進行檢查,並解釋為什麼要使用它而不是OpenCV的人臉檢測庫。

人臉識別軟體的第一步就是從圖像的背景中分離出真實的人臉,並將每張人臉與圖像中的其他人臉分離開來。人臉檢測演算法也必須能夠處理不良和不一致的光照以及諸如傾斜或旋轉臉部而形成的各種臉部扭曲。幸運的是,dlib和OpenCV一起能處理所有這些問題。Dlib負責找到臉上的基準點,而OpenCV則進行臉部位置的歸一化。

需要注意的是,在使用OpenFace時,可以使用dlib進行人臉檢測,該工具使用HOG(面向梯度的直方圖)和支持向量機或OpenCV的Haar級聯分類器的組合。兩者都是在正樣本和負樣本圖像上進行訓練(意味著有一張圖像有面部,一張沒有),但是在實現,速度和準確性等方面有很大差異。

使用HOG分類器有幾個好處。首先,使用圖像上的滑動子窗口進行訓練,因此可以像OpenCV中使用的Harr分類器一樣不需要進行子採樣和參數操作。這使得基於dlib的HOG和SVM人臉檢測更易於使用、訓練速度更快。這也意味著需要更少的數據,並且HOG具有比OpenCV的Haar級聯分類器更高的人臉檢測精度。使用dlib的HOG + SVM使得人臉檢測變得簡單!

預處理

除了在圖像中查找每個人臉之外,人臉識別過程的一部分是對圖像進行預處理,以處理諸如不一致和光照情況,將圖像進行灰度轉換以加快訓練以及面部位置歸一化化等問題。

雖然一些人臉識別模型可以通過對大量數據集進行訓練來處理這些問題,但是dlib使用OpenCV的2D仿射變換來旋轉臉部,並使得每個臉部的眼睛,鼻子和嘴的位置保持一致。在仿射變換中使用68個面部標記用於特徵檢測,並且測量這些點之間的距離並與在平均人臉圖像中找到的點相比較。然後根據這些點對圖像進行旋轉和變換,以對面部進行歸一化比較,並裁剪成96×96像素輸入到訓練好的神經網路。

分類

所以,當我們從背景中分離圖像並使用dlib和OpenCV對圖像進行預處理後,我們可以使用以將圖像送入到Torch上訓練好的神經網路。在這個步驟中,在神經網路上進行單次前向傳播以獲得用於預測的128維的表示(面部特徵)。然後將這些低維面部表示用於分類或聚類。

為了進行分類,OpenFace使用在現實世界中常用的線性支持向量機來匹配圖像特徵。關於OpenFace最令人印象深刻的是,圖像分類僅需要幾毫秒便可完成。

使用案例

現在我們已經理解了OpenFace的高層體系結構,我們可以介紹一些有趣的開源的案例。之前提到,面部識別被用作訪問控制和識別的一種形式。我們在幾年前探索的一個想法是在進入我們的辦公室時使用它來識別和定製您的體驗https://blog.algorithmia.com/hey-zuck-we-built-your-facial-recognition-ai /。

但是,你也可以考慮創建一個移動應用程序,只有VIP才能進入俱樂部或派對。保鏢不需要記住每個人的臉,也不需要依靠名單讓人們進入。快速地為訓練數據添加新的面孔也是容易的,並且在個人到室外呼吸新鮮空氣並且想要再次進入俱樂部的這段時間訓練模型。使用這種方法可以構建聚會、會議人員人臉識別案例。安保人員和前台人員可以輕鬆地更新或刪除手機上的數據集的圖像。

哪裡可以找到OpenFace實現

我們已經提出了OpenFace。你可以從 OpenFace on GitHub (https://cmusatyalab.github.io/openface/)自己實現面部識別模型,或者OpenFace model on Algorithmia上查看和託管你的OpenFace模型,在這裡你可以使用我們的SVM實現來添加,訓練,移除和預測圖像。如果你想學習如何使用我們的面部識別演算法,請查看我們製作 celebrity classifier的方法。

https://blog.algorithmia.com/understanding-facial-recognition-openface/

OpenFace代碼鏈接:

https://cmusatyalab.github.io/openface/

-END-

專 · 知

人工智慧領域主題知識資料查看獲取【專知薈萃】人工智慧領域26個主題知識資料全集(入門/進階/論文/綜述/視頻/專家等)

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 專知 的精彩文章:

FastText:自然語言處理的利器——一個快速文本表示和分類庫

TAG:專知 |