新款iPhone X最熱門功能之一就是新的解鎖方法:FaceID。由于創建了無邊框手機,蘋果不得不開發一種能簡單快捷的解鎖手機的新方法。不同于一些競爭對手繼續使用放在不同位置的指紋傳感器,蘋果決定革新我們解鎖手機的方式,讓我們看一下手機就能解鎖。
借助一款先進的前置深度相機(facing depth-camera),iPhone X能夠創建用戶臉部的3維映射。此外,使用紅外相機拍攝用戶臉部的圖片,該圖片對于環境的光線和顏色的變化更具魯棒性。運用深度學習,智能手機能夠非常詳細地學習用戶的臉,因此每當手機被其擁有者拿起時,它都會立刻認出他。更令人驚訝的是據蘋果表示,這種方法比TouchID更安全,錯誤率僅為百萬分之一。
我對蘋果實現FaceID的技術很感興趣,希望了解如何使用深度學習來實現這個過程,以及如何優化每個步驟。在這篇文章中,我將展示如何使用Keras實現一個類似FaceID的算法。我將解釋我采取的各種架構決策,并使用Kinect展示一些最終實驗結果,它一種非常流行的RGB深度相機,它與iPhone X前置攝像頭的輸出非常相似(但設備更大)。那么,讓我們開始對蘋果的革新進行逆向工程。
了解FaceID
“…… 支持FaceID的神經網絡不是簡單地執行分類。”
FaceID設置過程
第一步是仔細分析FaceID在iPhone X上的工作原理。他們的白皮書可以幫助我們理解FaceID的基本機制。過去,在使用TouchID時,用戶必須通過按幾次傳感器,初始登記其指紋。在大約15-20次不同的觸摸之后,注冊完成,TouchID可以開始使用了。同樣地,FaceID的用戶也要注冊他的臉。過程非常簡單:只是像往常一樣看手機,然后慢慢地轉動頭部,這樣就可以從不同的姿勢來記錄面部。就這樣,這個過程完成,手機就可以解鎖了。這種快速的注冊過程可以告訴我們很多關于這種學習算法的潛在信息。比如,支持FaceID 的神經網絡不僅僅是執行分類。
蘋果推出iPhone X和FaceID
針對神經網絡進行分類,意味著學習如何預測它看到的臉是否是用戶的。所以,它應該主要使用一些訓練數據來預測“真”或“假”,但與許多其他深度學習用例情況不同,這種方法實際上是行不通的。首先,網絡要使用從用戶臉上獲得的新數據進行再訓練。這需要大量時間,能量消耗和不實用的訓練數據為不同的臉去做否定實例(在遷移學習和已經訓練好的網絡上微調的情況下會有所改變)。
此外,這種方法無法使用的一個原因是:蘋果要訓練更復雜的離線網絡。也就是說,要在他們的實驗室中訓練,然后發送預訓練好的網絡給用戶的手機。所以,我相信FaceID是由類似孿生卷積神經網絡(siamese convolutional neural network)驅動的,該網絡由蘋果公司“離線”訓練,將臉部映射到低維隱空間中,利用對比損失(contrastive loss)最大化不同人臉之間的距離。會發生什么是你得到一個能夠“one shot learning”(少樣本精準分類的一種)的架構。
從數字識別到人臉識別的神經網絡
孿生神經網絡一般由兩個相同的神經網絡組成,共享所有的權重。該架構可以學習計算特定類型的數據之間的距離。原理是,你通過孿生網絡傳遞數據(或者簡單地通過同一網絡在兩個不同的步中傳遞數據),網絡將它映射到一個低維特征空間,就像一個n維數組,然后你訓練網絡進行映射,使不同類別的數據點盡可能地遠,同一類別的數據點盡可能接近。網絡將學習從數據中提取最有意義的特征,并將其壓縮成一個數組,從而創建一個有意義的映射。為了對此有一個直觀的理解,我們想象一下使用較少維度的矢量來描述狗的品種,使類似的狗具有更接近的矢量。你可能會用一個數字來編碼狗的毛色,另一個用來表示狗的大小,再一個用于毛的長度,等等。這樣,相似的狗將具有相似的向量。孿生神經網絡可以學習為你做這件事,類似于一個自動編碼器。
圖片來自Hadsell,Chopra和LeCun發表的論文“通過學習不變映射降維”。注意這個架構是學習數字之間的相似性,并自動將它們分組為二維。技術上與臉部識別類似。
使用這種技術,人們可以使用大量面孔來訓練這種架構,以識別哪些臉最為相似。如果擁有不錯的預算和計算能力(像蘋果那樣),也可以使用更難的例子,使網絡對諸如雙胞胎,對抗攻擊(面具)等更具魯棒性。使用這種方法的優勢是什么?你有了一個隨時可用的模型,可在無需進一步訓練的情況下識別不同的用戶,它只需要在初始設置期間拍攝一些照片后,計算用戶的臉部位于臉部映射空間中的哪個位置即可。。另外,FaceID能夠適應你的方面的變化:突兀的變化(例如,眼鏡,帽子,化妝)和細節變化(面部毛發)。這需要通過在此映射中添加參考臉的向量來完成的,它根據你的新外觀計算而來。
當你的外表改變時,FaceID會適應
現在,讓我們看看如何使用Keras實現它。
在Keras中實現FaceID
我們首先需要的是數據。我在網上找到了RGB-D人臉數據集。它由一系列面向不同方向,做出不同表情的RGB-D圖片組成(與FaceID所需吻合)。
實現:https://github.com/normandipalo/faceID_beta
Colab Notebook:https://colab.research.google.com/drive/1OynWNoWF6POTcRGFG4V7KW_EGIkUmLYI
我創建了一個基于SqueezeNet架構的卷積網絡。網絡輸入耦合人臉的RGBD圖像,因此是4通道,并輸出兩個嵌入之間的距離。該網絡訓練時會產生對比損失,可以最大限度地減少同一人的照片之間的距離,并使不同人的照片之間的距離最大化。
對比損失
經過一些訓練后,網絡能夠將人臉映射成128維數組,使得同一人的圖片被分組在一起,而與其他人的圖片相距甚遠。這意味著,要解鎖你的設備,網絡只需計算在解鎖過程中拍攝的照片與在注冊階段存儲的照片之間的距離。如果距離低于某個閾值,則設備解鎖(閾值越小,設備越安全)。
我使用t-SNE算法在2維中可視化128維嵌入空間。每種顏色都對應不同的人:如你所見,網絡已經學會了將這些圖片正確分組。(當使用t-SNE算法時,簇之間的距離沒有意義)使用PCA降維算法時也會出現一個有趣的現象。
使用t-SNE創建的嵌入空間中的人臉簇。每種顏色都是不同的面孔(顏色被重復使用)。
使用PCA創建的嵌入空間中的人臉簇。每種顏色都是不同的面孔(顏色被重復使用)。
實驗
現在我們可以試著看看這個模型的運作,它模擬一個FaceID的流程:首先,注冊用戶的臉。然后,解鎖階段,從用戶(應該成功),從其他人那里,不應該解鎖設備。前面提到,區別在于網絡在解鎖手機和已注冊的人臉之間進行計算的距離,以及是否處于某個閾值之下。
讓我們從注冊開始:我從數據集中采集了同一個人的一系列照片,并模擬了注冊階段。該設備開始計算每個姿態的嵌入,并將它們存儲在本地。
受FaceID新用戶注冊過程的啟發
深度相機所看到的注冊階段
現在讓我們看看如果同一用戶試圖解鎖設備會發生什么。同一用戶的不同姿勢和面部表情實現了較低的距離,約為0.30多點。
同一用戶嵌入空間中的距離。
另一方面,來自不同人的RGBD圖片的平均距離為1.1。
不同用戶嵌入空間中的距離
因此,使用約0.4的閾值應足以防止陌生人解鎖你的設備。
-
iphonex
+關注
關注
3文章
614瀏覽量
30691 -
faceid
+關注
關注
2文章
89瀏覽量
11950
原文標題:使用深度學習實現iPhone X的FaceID
文章出處:【微信號:machinelearningai,微信公眾號:機器學習算法與人工智能】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論