因?yàn)槲衣殬I(yè)是算法工程師,當(dāng)我看到iPhone的Face ID,說真的,我被它的模型設(shè)計(jì)所感嘆,確實(shí)是很有想象力,真的會“細(xì)思極恐”,怎么有這么優(yōu)雅的工業(yè)設(shè)計(jì),我就從我的角度來說說它吧。
Apple開始在iOS 10中使用深度學(xué)習(xí)進(jìn)行人臉檢測。隨著Vision框架的發(fā)布,開發(fā)人員現(xiàn)在可以在其應(yīng)用程序中使用該技術(shù)和許多其他計(jì)算機(jī)視覺算法。在開發(fā)框架時面臨著嚴(yán)峻的挑戰(zhàn),以便可以保護(hù)用戶的隱私并在設(shè)備上高效運(yùn)行。
介紹
蘋果首先通過CIDetector類在Core Image框架的公共API中發(fā)布了人臉檢測。Apple應(yīng)用程序(例如,照片)在內(nèi)部也使用了此API。最早發(fā)布的CIDetector使用了一種基于Viola-Jones檢測算法的方法。蘋果基于傳統(tǒng)計(jì)算機(jī)視覺的進(jìn)步對CIDetector進(jìn)行了后續(xù)改進(jìn)。

隨著深度學(xué)習(xí)的出現(xiàn)及其在計(jì)算機(jī)視覺問題中的應(yīng)用,最新的人臉檢測精度取得了巨大的飛躍。但與傳統(tǒng)的計(jì)算機(jī)視覺相比,深度學(xué)習(xí)中的學(xué)習(xí)模型需要更多數(shù)量級的內(nèi)存,更多磁盤存儲以及更多計(jì)算資源。
蘋果的iCloud照片庫是用于照片和視頻存儲的基于云的解決方案。但是,由于Apple對用戶隱私的堅(jiān)定承諾,蘋果無法將iCloud服務(wù)器用于計(jì)算機(jī)視覺計(jì)算。發(fā)送到iCloud照片庫的每張照片和視頻在發(fā)送到云存儲之前均已在設(shè)備上加密,并且只能由向iCloud帳戶注冊的設(shè)備解密。因此,為了將基于深度學(xué)習(xí)的計(jì)算機(jī)視覺解決方案帶給大家使用,所以必須直接解決在iPhone上運(yùn)行深度學(xué)習(xí)算法的挑戰(zhàn)。
深度學(xué)習(xí)模型需要作為操作系統(tǒng)的一部分提供,占用寶貴的NAND存儲空間。它們還需要加載到RAM中,并在GPU和/或CPU上需要大量的計(jì)算時間。與基于云的服務(wù)(其資源只能專門用于視覺問題)不同,必須在與其他正在運(yùn)行的應(yīng)用程序共享這些系統(tǒng)資源的同時進(jìn)行設(shè)備上計(jì)算。最后,計(jì)算必須足夠有效,以在相當(dāng)短的時間內(nèi)處理大型照片庫,而又不會顯著降低功耗或熱量增加。
本文的其余部分討論了我們基于深度學(xué)習(xí)的人臉檢測的算法方法,以及如何成功應(yīng)對挑戰(zhàn)以實(shí)現(xiàn)最新的準(zhǔn)確性,有如下難點(diǎn):
- 如何充分利用我們的GPU和CPU(使用BNNS和Metal);
- 網(wǎng)絡(luò)推理以及圖像加載和緩存的內(nèi)存優(yōu)化;
- 如何以不干擾iPhone預(yù)期執(zhí)行的許多其他同時任務(wù)的方式實(shí)施網(wǎng)絡(luò)。
從Viola-Jones轉(zhuǎn)向深度學(xué)習(xí)

蘋果基于OverFeat論文的一些見解構(gòu)建了初始體系結(jié)構(gòu),從而形成了具有以下各項(xiàng)的多任務(wù)目標(biāo)的完全卷積網(wǎng)絡(luò)(請參見圖1):
- 二進(jìn)制分類,以預(yù)測輸入中是否存在人臉;
- 進(jìn)行回歸以預(yù)測最能在輸入中定位人臉的邊界框參數(shù)。
研究室嘗試了幾種訓(xùn)練這種網(wǎng)絡(luò)的方法。例如,用于訓(xùn)練的簡單過程是創(chuàng)建固定大小的圖像圖塊的大型數(shù)據(jù)集,該圖像圖塊的大小對應(yīng)于網(wǎng)絡(luò)的最小有效輸入,以使每個圖塊從網(wǎng)絡(luò)生成單個輸出。訓(xùn)練數(shù)據(jù)集在理想情況下是平衡的,因此一半的圖塊包含一個臉(正類),另一半不包含一個臉(負(fù)類)。對于每個正片,研究人員會提供臉部的真實(shí)位置(x,y,w,h)。所以在訓(xùn)練網(wǎng)絡(luò)時會優(yōu)化前面描述的多任務(wù)目標(biāo)。訓(xùn)練完成后,網(wǎng)絡(luò)就可以預(yù)測圖塊是否包含人臉,如果這樣,它還可以提供圖塊中人臉的坐標(biāo)和比例。
由于網(wǎng)絡(luò)是完全卷積的,因此它可以有效地處理任意大小的圖像并生成2D輸出圖。地圖上的每個點(diǎn)都對應(yīng)于輸入圖像中的圖塊,并包含來自網(wǎng)絡(luò)的有關(guān)該標(biāo)題中存在或不存在人臉及其在輸入圖塊中的位置/比例的預(yù)測。
有了這樣的網(wǎng)絡(luò),就可以構(gòu)建一個相當(dāng)標(biāo)準(zhǔn)的處理管道來執(zhí)行面部檢測,該管道由多尺度圖像金字塔,面部檢測器網(wǎng)絡(luò)和后處理模塊組成。而且需要一個多尺度的金字塔來處理各種尺寸的面孔。然后將網(wǎng)絡(luò)應(yīng)用于金字塔的每個級別,并從每一層收集候選檢測。最后使用處理模塊將這些候選檢測結(jié)果跨比例組合在一起,以生成與網(wǎng)絡(luò)對圖像中人臉的最終預(yù)測相對應(yīng)的邊界框列表。

優(yōu)化設(shè)備性能
蘋果實(shí)施了幾種策略來最大程度地減少內(nèi)存占用和GPU使用率。為了減少內(nèi)存占用,測試過程中通過分析計(jì)算圖來分配神經(jīng)網(wǎng)絡(luò)的中間層。這使可以將多個圖層別名到同一緩沖區(qū)。在完全確定性的同時,此技術(shù)可減少內(nèi)存占用空間,而不會影響性能或分配碎片,可在CPU或GPU上使用。
對于視覺,檢測器運(yùn)行5個網(wǎng)絡(luò)(每個圖像金字塔比例一個,如圖2所示)。這5個網(wǎng)絡(luò)共享相同的權(quán)重和參數(shù),但其輸入,輸出和中間層具有不同的形狀。為了進(jìn)一步減少占用空間,在由這5個網(wǎng)絡(luò)組成的聯(lián)合圖上運(yùn)行了基于活動度的內(nèi)存優(yōu)化算法,從而大大減少了占用空間。同樣,多個網(wǎng)絡(luò)重復(fù)使用相同的權(quán)重和參數(shù)緩沖區(qū),從而減少了內(nèi)存需求。
為了在深層神經(jīng)網(wǎng)絡(luò)在后臺運(yùn)行時確保UI響應(yīng)性和流暢性,蘋果為網(wǎng)絡(luò)的每一層劃分了GPU工作項(xiàng),直到每個單獨(dú)的時間都小于一毫秒。這允許驅(qū)動程序及時將上下文切換到優(yōu)先級較高的任務(wù),例如UI動畫,從而減少并有時消除幀丟失。
結(jié)合所有這些策略,可以確保Apple用戶可以享受本地的,低延遲的私有深度學(xué)習(xí)推理,而無需知道他們的手機(jī)正在以每秒數(shù)百吉比特的速度運(yùn)行神經(jīng)網(wǎng)絡(luò)。

總結(jié)
與當(dāng)今的手機(jī)一樣,典型的高端手機(jī)對于深度學(xué)習(xí)視覺模型而言并不是可行的平臺。業(yè)界大多數(shù)人通過基于云的API提供深度學(xué)習(xí)解決方案來解決此問題。在基于云的解決方案中,圖像被發(fā)送到服務(wù)器以使用深度學(xué)習(xí)推理來檢測人臉進(jìn)行分析。這些基于云的服務(wù)通常使用功能強(qiáng)大的臺式機(jī)級GPU,具有大量可用內(nèi)存。大型網(wǎng)絡(luò)模型以及潛在的大型模型集合可以在服務(wù)器端運(yùn)行,從而使客戶端(可能是手機(jī))可以利用大型的深度學(xué)習(xí)架構(gòu),而這些架構(gòu)在本地?zé)o法運(yùn)行。而iPhone卻可以將這些技術(shù)無縫融合到這臺手機(jī)上而且不影響用戶體驗(yàn),我覺得這已經(jīng)很難得了。