蘋果自爆祕笈:從想法到實現 Face ID 是怎樣煉成的

作者 | 發布日期 2017 年 11 月 27 日 17:33 | 分類 AI 人工智慧 , Apple , 尖端科技 follow us in feedly

蘋果在自家機器學習日報(machinelearning.apple.com)自爆功法,發表論文《基於深度神經網路的裝置端人臉辨識》(An On-device Deep Neural Network for Face Detection),披露臉部辨識技術演變。



2017 年 9 月 13 日(美國時間 12 日),蘋果在賈伯斯劇院發表智慧手機 iPhone X。這款搭載 64 位元架構 A11 神經處理引擎、採用臉部辨識解鎖方式(Face ID)的全螢幕手機,號稱 iPhone 10 週年紀念之作,售價新台幣 35,900 元起。

事實上,蘋果 iOS 10 就開始使用深度學習技術用於臉部辨識,目前已向開發者開放視覺框架,支援相關應用程式開發。下文將著重討論電腦視覺技術在隱私保護遇到的挑戰,及基於深度學習的終端機人臉辨識技術實現方案。

一、終端機深度學習模型的挑戰

蘋果最早發表的臉部辨識 API 是透過 CIDetector 達成,一種針對靜態影響的特徵資訊(包括人臉、幾何圖形、條碼等)辨識的影像處理單元。最早版本的 CIDetector 基於維奧拉─瓊斯目標偵測框架(Viola-Jones),蘋果將其以傳統方式最佳化。

後來,隨著深度學習出現、電腦視覺領域的應用,人臉辨識的準確性得到大飛躍,啟發了蘋果。相比傳統的電腦視覺方案,深度學習演演算法能有更好的模型,也要求更多記憶、儲存/磁碟和可計算資源(Computatioal resource)。

矛盾點來了:以目前終端機(智慧手機)的硬體條件來看,基於深度學習的視覺模型似乎並不是可行方案,而大多數企業的解決方案是提供雲介面(Cloud-Based API),先將圖片傳給能執行大型深度學習框架的伺服器,然後用深度學習偵測臉部。而雲服務往往需要強大的桌機系統級 GPU,需要大量記憶體。

介面方案雖然可行,但違背了蘋果的隱私保護理念,因此,蘋果只提供照片和影片雲服務,所有照片、影片上傳之前需得到帳戶許可;針對電腦視覺指令,上傳雲端被認為是不太合適的方法。

最終,蘋果還是找到了在終端機,也就是 iPhone 上的深度學習方案,並完成高度臉部辨識準確性(state-of-the-art accuracy)。這中間需要解決的挑戰包括:將深度學習模型整合到作業系統,使用寶貴的 NAND 儲存空間(一種非揮發性儲存技術,即電源切斷後仍能儲存資料);還要將其加載到 RAM(隨機存取記憶體),利用 GPU 和/或 CPU 達到合適的計算時間;此外,和雲端深度學習模型不同的是,終端機深度學習還需要解決執行電腦視覺指令的同時,還有其他的背景程式。

總言之,終端機深度學習模型要求的是:針對大型的照片資料庫,用極短的時間執行指令,並使用不多的功耗或說不發燙。

二、從維奧拉─瓊斯到深度學習

2001 年,Paul Viola 和 Michael Jones 基於哈爾特徵和方向可變濾波器,提出了基於簡單特徵的對象辨識技術,此即維奧拉─瓊斯目標偵測框架,這個方法在 OpenCV 中實現為 cvHaarDetectObjects()。基於維奧拉─瓊斯框架,iOS 7 引入 CIDetecor,做到了人臉偵測、辨識功能,但此時的人臉辨識,準確性和可靠性都不成熟。

2014 年,蘋果最開始著手基於深度學習的臉部辨識,深度卷積神經網路(DCN)才剛能完成物體辨識工作,當時的主流方案是 OverFeat(利用卷積網路特徵擷取算子,以達到圖片分類、定位和偵測),能有效快速掃描物體影像。

OverFeat 實現了神經網路的連線層與卷積層(相同空間維度的濾波器的有效卷積)之間的等價性,也就是做到多尺度匯入預測(裁一個 32×32、像素尺度 16 的區域,可匯出任意大小,比如 320×320 的影像,生成適當大小的匯出對映,比如 20×20)。此外,OverFeat 還提供基於更少網路步幅的更密集匯出對映。

基於 OverFeat,蘋果搭建了初始架構,以實現:

  1. 二進位分類:辨識匯入資料中是否有臉部資訊;
  2. 回歸演演算法:邊線預測匯入的人臉資訊,達成人臉定位。

蘋果嘗試一些訓練方式:建立一個固定大小的影像塊大資料集,對應網路的最小有效匯入,使每個塊產生來自網路的單個匯出;定義參數的正負類,訓練網路來最佳化多工作目標,如辨識是否有人臉,找出人臉的座標和縮放比例。高效的完全卷積可處理任意大小的影像並生成二維匯出圖。

整體思路是這樣的:在人臉偵測流程中,包含多尺度的影像金字塔、人臉偵測器以及後處理模組等三大部分。多尺度的金字塔處理各種大小的面孔;人臉偵測器貫穿金字塔的各個等級,並從每層收集候選偵測;後處理模組然後組合這些候選偵測結果跨度,以產生對應網路對影像的臉部最終預測的邊線框清單。

上述策略基本構成終端機電腦視覺方案,但網路複雜性和規模仍然是效能的關鍵瓶頸,不僅要將網路限制在一個簡單的拓樸架構中,且還要限制網路層數,每層信道數量和卷積濾波器的核心大小。

為此,蘋果提出了「師生」培訓方式,即利用已培訓的大型複雜網路(「老師」)匯出,來培訓第二個薄而深的網路(「學生」,一個簡單的 3×3 卷積和層疊重複架構組成,它的架構經過設計,能最妥善利用蘋果自家神經網路推理引擎)。

以上方案是適合終端機用於臉部偵測的深度神經網路演算法,並透過幾輪訓練更新,實現了夠精確的網路模型。

三、最佳化影像管道

深度學習提供一個很厲害的電腦視覺框架(Vision Framework),但它還需要高度最佳化的成像管道。

不管匯入影像是什麼角度、有無縮放、什麼色彩轉換或影像源/格式,人臉偵測都應該執行良好。此外,功耗和記憶體使用情況也是最佳化的關鍵,特別是串流媒體和影像擷取。對此,蘋果採用部分二次取樣解碼技術和自動平鋪技術,即使在非典型的縱橫比下,也能在大影像執行電腦視覺工作。

此外,蘋果還提供了廣泛的色彩空間 API,電腦視覺框架可直接處理色彩匹配,降低開發人員的相關應用開發門檻(不用承擔色彩匹配工作)。

電腦視覺框架還透過有效處理和重複使用中間體來最佳化。透過將演算法的介面抽象出來,找到要處理的影像或緩衝區的所有權位置,演算法框架可建立和緩衝區中間影像,提供盡可能多的解析度和色彩空間,以提高多台電腦視覺工作的效能。

四、最佳化終端機效能

如前所述,終端機人臉偵測 API 必須克服即時應用程式和背景系統程式的問題。用戶要的是處理照片資料庫的同時辨識人臉,或在拍攝後立即分析照片,流暢執行人臉偵測,還不影響功耗,系統不卡頓。

對此,蘋果的方案是最大限度地減少使用記憶體和 GPU,即透過分析計算圖來配置神經網路的中間層:將多個圖層代號到同一緩衝區,既可以減少記憶體使用,又不會影響效能或規格碎片,且可在 CPU 或 GPU 使用。

蘋果電腦視覺的框架的偵測器執行 5 個網路(即對應 5 個比例的金字塔),共用相同的權重和參數,但其匯入、匯出和中間層具有不同形狀。為了進一步減少使用空間,不妨在 5 個網路組成的聯合圖上執行基於活性的記憶體最佳化演算法。此外,多個網路重複使用相同的權重和參數緩衝區,也可減少記憶體需求。

利用網路的完全卷積性,將所有影像都動態調整到匯入影像的解析度,也能大大減少總作業數量。由於作業拓樸架構並沒有因分配其餘部分的重構和高效能而改變,所以動態整形不會引入與規格有關的性能開銷。

為了確保深層神經網路在背景執行時的 UI 回應性和流暢性,蘋果為網路每層分割 GPU 工作項,直到每個單獨時間少於 1 毫秒。所有這些策略綜合起來,確保用戶可享受本地、低延遲、隱私保護的深度學習演算法,而不會意識到手機每秒執行數百萬浮點的神經網路。

(本文由 MacX 授權轉載;首圖來源:蘋果

延伸閱讀: