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