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

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

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

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

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