最近大家談論最多的關于新款iPhone X的功能之一就是新的解鎖技術,即TouchID的后續(xù)技術:FaceID。
創(chuàng)建了無邊框手機后,蘋果不得不找出新方法簡單快捷地解鎖手機。雖然一些競爭對手繼續(xù)使用放在不同位置的指紋傳感器,但蘋果決定對解鎖手機的方式進行創(chuàng)新和變革:只需看一眼,F(xiàn)aceID就能安全地解鎖iPhone X。借助一款先進(而且非常小巧)的前置深度相機,iPhone X可以建立用戶臉部的3D模型。此外,iPhone X通過紅外攝像頭識別人臉,可以避免環(huán)境光和顏色對人臉識別的影響。通過深度學習,手機可以捕捉到用戶臉部的很多細節(jié),因此在用戶拿著手機的時候,手機可以識別出它的主人。比較令人驚訝的是,蘋果表示這種方法比TouchID更安全,出錯率為百萬分之一。
我對蘋果的FaceID的實現(xiàn)技術非常感興趣,特別是它完全運行在設備上,而且只需利用用戶的面部進行一點點訓練,就可以在每次拿起手機的時候順利地進行識別。我研究了如何使用深度學習來實現(xiàn)此過程,以及如何優(yōu)化每個步驟。在這篇文章中,我將展示如何使用Keras實現(xiàn)一個類似FaceID的算法。我會介紹采用的各種架構,并展示一些在Kinect(一種非常流行的RGB-D相機,擁有與iPhone X前置攝像頭非常相似的輸出,但設備本身更大)上的最終實驗。倒杯咖啡,讓我們開始逆向工程蘋果的新技術。
對FaceID的初步了解
“……賦予FaceID力量的神經(jīng)網(wǎng)絡不是簡單的分類。”
FaceID注冊的過程
第一步我們來仔細分析FaceID在iPhone X上的工作原理。我們可以通過蘋果的白皮書理解FaceID的基本機制。使用TouchID的時候,用戶必須多次按傳感器來注冊自己的指紋。大約需要15-20次不同的觸摸,iPhone才能完成注冊,并準備好TouchID。同樣地,F(xiàn)aceID也需要用戶進行臉部注冊。過程非常簡單:用戶只需像往常一樣看著手機,然后慢慢地轉動頭部一圈,從不同的角度注冊臉部。如此,注冊過程就完成了,手機已經(jīng)準備好解鎖了。這個超快的注冊過程可以告訴我們很多關于底層學習算法的信息。比如,F(xiàn)aceID背后的神經(jīng)網(wǎng)絡并不是簡單的分類。我會在后面進行詳細的解釋。
Apple Keynote推出iPhone X和FaceID
對于神經(jīng)網(wǎng)絡來說,分類的意思是學習如何預測看到的臉是不是用戶的臉。所以,它需要一些訓練數(shù)據(jù)來預測“是”或“否”,但與很多其他深度學習的應用場景不同,所以這種方式在這里并不適用。首先,神經(jīng)網(wǎng)絡需要使用從用戶臉上捕捉到的數(shù)據(jù)重新進行訓練。而這需要消耗大量的時間和電量,還需要大量的不同面孔作為訓練數(shù)據(jù)以獲得負面的樣本,這也是不現(xiàn)實的。即使是試圖遷移并微調(diào)已經(jīng)訓練好的神經(jīng)網(wǎng)絡,這些條件也幾乎不會變化。而且,蘋果也不可能在實驗室等地方“線下”訓練復雜的神經(jīng)網(wǎng)絡,然后再將訓練好的神經(jīng)網(wǎng)絡搭載在手機中。相反,我認為FaceID是由孿生卷積神經(jīng)網(wǎng)絡實現(xiàn)的(siamese-like convolutional neural network),該網(wǎng)絡由蘋果公司進行“線下”培訓,將臉部映射到一個低維潛在空間(latent space),并通過對比損失函數(shù)(contrastive loss)最大化不同人臉之間的距離。通過本文,你可以了解Keynote中提到的體系結構。我知道,很多讀者對上述名詞很陌生,但是沒關系,我會逐步的進行詳細的解釋。
FaceID看起來會是TouchID之后的新標準。蘋果是否會把它帶到所有的新設備上?
從人臉到神經(jīng)網(wǎng)絡的數(shù)字
Hadsell,Chopra和LeCun發(fā)表的論文“Dimensionality Reduction by Learning an Invariant Mapping”。請注意此架構是如何學習數(shù)字之間的相似性,并自動將它們分組在二維中。類似的技術也可以應用于面部識別。
FaceID可以適應外觀的變化
接下來,讓我們看看如何利用Python和Keras實現(xiàn)。
使用Keras實現(xiàn)FaceID
就像所有的機器學習項目一樣,我們首先需要的是數(shù)據(jù)。創(chuàng)建自己的數(shù)據(jù)集需要花費大量時間和許多人的配合,這項工作本身可能非常具有挑戰(zhàn)性。因此,我搜索了網(wǎng)絡上RGB-D的人臉數(shù)據(jù)集,找到了一個非常合適的數(shù)據(jù)集(http://www.vap.aau.dk/rgb-d-face-database/)。這個數(shù)據(jù)集是根據(jù)人臉面向不同的方向以及不同的表情制作出的RGB-D圖像集,正好類似于iPhone X的情況。
最終的實現(xiàn)可以參考我的GitHub代碼庫(https://github.com/normandipalo/faceID_beta),里面有個Jupyter Notebook。我還進一步嘗試了使用Colab Notebook,你也可以試試看。
我創(chuàng)建了一個基于SqueezeNet架構的卷積網(wǎng)絡。這個神經(jīng)網(wǎng)絡以兩組RGBD的面部圖像(即4通道圖像)作為輸入,并輸出兩組數(shù)據(jù)之間的距離。該網(wǎng)絡用對比損失函數(shù)(constrastive loss)訓練,可以最大程度地減少同一人的照片之間的距離,同時最大程度地提高不同人的照片之間的距離。
對比損失函數(shù)
使用t-SNE創(chuàng)建嵌入空間中的人臉的簇,每種顏色代表不同的面孔(但顏色被重復使用)
使用PCA創(chuàng)建嵌入空間中的人臉的簇,每種顏色都是不同的面孔(但顏色被重復使用)
實驗!
現(xiàn)在我們可以試試個模型,模擬一個常見的FaceID的流程:首先,注冊用戶的面部;然后在解鎖階段,需要驗證兩個方面——主人可以解鎖,而其他人不可以。 如前所述,區(qū)別在于神經(jīng)網(wǎng)絡會計算解鎖手機時和注冊時的臉部的距離,然后判斷是否在某個閾值以下。
下面我們來注冊:我從數(shù)據(jù)集中采集了同一人的一系列照片,并模擬了注冊階段。現(xiàn)在該設備將計算每個姿勢的嵌入,并保存在本地。
新用戶注冊階段,模仿FaceID的過程
在深度相機中觀察到的注冊階段
嵌入空間中同一個用戶的面部距離
嵌入空間中不同用戶的面部距離
因此,我們可以將閾值設置為大約0.4,就可以阻止陌生人解鎖設備了。
結論
在這篇文章中,我展示了如何利用面部嵌入和孿生卷積神經(jīng)網(wǎng)絡,實現(xiàn)FaceID解鎖機制的原型。希望對你能有所幫助。如果你有任何問題都可以和我聯(lián)系。你可以從以下鏈接找到所有相關的Python代碼:
-
iPhone
+關注
關注
28文章
13500瀏覽量
205334 -
神經(jīng)網(wǎng)絡
+關注
關注
42文章
4812瀏覽量
103147 -
faceid
+關注
關注
2文章
89瀏覽量
12292
發(fā)布評論請先 登錄
Apple Find My?Network 防丟方案
如何開發(fā)一款Google Find My Tag?
蘋果2025上半年新品爆發(fā) 有iPhone SE 4 M4 MacBook Air、帶屏HomePod、iPad 11、Apple Watch SE 3等
首批Apple Intelligence功能驚艷亮相,12月新功能值得期待
蘋果發(fā)布Apple Intelligence開發(fā)者測試版
蘋果表示 Apple Pay 將支持更多合作伙伴兌換獎勵
Apple Intelligence未達預期,iPhone 16銷量受挫,AI全球化挑戰(zhàn)浮現(xiàn)
Canalys:iPhone 16系列奠定蘋果AI發(fā)展硬件基石
Apple全新系列“iPhone16”與“iPhone16 Pro”如何選擇?

評論