谷歌公布亞毫秒級人臉檢測算法 人臉檢測又一突破

來自:熱點網  |  2019年08月11日

谷歌公布亞毫秒級人臉檢測算法 人臉檢測又一突破

谷歌近日發布了一款專為移動 GPU 推理量身定制的輕量級人臉檢測器——亞毫秒級的人臉檢測算法 Blaze Face。它能夠在旗艦設備上以 200~1000+ FPS 的速度運行,并且可以應用在諸多需要快速準確的識別出人臉區域的任務中,例如:2D/3D 面部關鍵點識別與幾何評估、面部特征和表情分類以及面部區域分割等。谷歌發表了相關論文介紹了該研究成果,雷鋒網 AI 科技評論將其編譯如下。

BlazeFace 簡介

近年來,通過對深度神經網絡中各種架構的改進,我們已經可以實現實時目標檢測。在移動應用程序中,實時目標檢測通常是視頻處理流程中的第一步,接著是各種特定任務組件,例如分割,跟蹤或幾何推理。因此,目標檢測模型推理必須盡可能快地運行,其性能zuì好能夠達到遠高于標準的實時基準。

我們提出了一種名為 BlazeFace 的新面部檢測框架,該框架是在單鏡頭多盒檢測器(SSD)框架上針對移動 GPU 推理進行的優化。我們的主要創新包括:

1、有關于推理速度

一個專為輕量級目標檢測而設計的在結構上與 MobileNetV1/V2 相關的非常緊湊的特征提取器卷積神經網絡。

一種基于 SSD 的新型 GPU-friendly anchor 機制,旨在提高 GPU 利用率。Anchors(SSD 術語中的先驗)是預定義的靜態邊界框,作為網絡預測調整和確定預測粒度的基礎。

2、有關于推理效果

一種替代非zuì大抑制的聯合分辨率策略,可在多預測之間實現更穩定、更平滑的聯系分辨率。


谷歌公布亞毫秒級人臉檢測算法 人臉檢測又一突破

基于 AR 的人臉檢測

雖然該框架適用于各種目標檢測任務,但在本文中,我們致力于探討手機相機取景器中的人臉檢測問題。由于不同的焦距和bǔ獲物體尺寸,我們分別為前置和后置攝像頭構建了模型。

除了預測軸對齊的面部矩形外,BlazeFace 模型還生成了 6 個面部關鍵點坐標(用于眼睛中心、耳、嘴中心和鼻尖),以便我們估計面部旋轉角度(滾動角度)。這樣的設置使其能夠將旋轉的面部矩形傳遞到視頻處理流程的后期任務特定階段,從而減輕后續處理步驟對重要平移和旋轉不變性的要求。

模型結構與設計

BlazeFace 模型架構圍繞下面討論的四個重要設計考慮因素而構建。

1、擴大感受野

雖然大多數現代卷積神經網絡架構(包括 MobileNet,https://arxiv.org/pdf/1704.04861.pdf )都傾向于在模型圖中都使用 3 x 3 卷積核,但我們注意到深度可分離卷積計算是由它們的點態部分主導。在 s×s×c 輸入張量上,應用可分離卷積cāo作,其中,k×k 的深度卷積涉及 s^2ck^2 次乘加運算,而后續的 1×1 卷積到 d 個輸出通道由 s^2cd 次乘加運算組成,是深度階段的 d /(k^2)倍。

實際上,在具有金屬外殼的 Apple iPhone X 上,16 位浮點運算中的 3×3 深度卷積對于 56×56×128 的張量需要花費 0.07 ms,相比之下 128 到 128 通道的 1×1 卷積運算會慢 4.3 倍,即后續的點卷積cāo作需要 0.3 毫秒(由于固定成本和存儲器訪問因素導致的純算術運算計數差)。

該觀察表明增加深度部分的核尺寸性價比更高。我們在模型架構中使用 5×5 內核,這樣使得感受野達到指定大小所需的 bottleneck 數量大大減少,得到的 BlazeBlock 有下圖所示的兩種結構:


谷歌公布亞毫秒級人臉檢測算法 人臉檢測又一突破

圖 1 單個 BlazeBlock (左) 與 雙 BlazeBlock (右)

2、特征提取器

對于具體的例子,我們專注于前置攝像頭模型的特征提取器。該特征提取器必須考慮較小范圍的目標尺度,因此它具有較低的計算需求。提取器采用 128×128 像素的 RGB 輸入,包括一個 2D 卷積和 5 個單 BlazeBlock 和 6 個雙 BlazeBlock 組成,完整布局見下表。zuì大張量深度(通道分辨率)為 96,而zuì低空間分辨率為 8×8(與 SSD 相比,它將分辨率一直降低到 1×1)。


谷歌公布亞毫秒級人臉檢測算法 人臉檢測又一突破

圖 2 BlazeFace 特征提取器的網絡結構

3、Anchor 機制

類似 SSD 的目標檢測模型依賴于預定義的固定大小的基礎邊界框,稱為先驗機制,或 Faster-R-CNN 術語中的錨點。為每個錨預測一組回歸(可能還包括分類)參數,例如中心偏移量和尺寸調整。它們用于將預定義的錨位置調整為緊密的邊界矩形。

通常的做法是根據目標比例范圍在多個分辨率級別定義錨點,同時下采樣也是計算資源優化的手段。典型的 SSD 模型使用 1×1,2×2,4×4,8×8 和 16×16 特征映shè大小的預測。然而,金字塔池化網絡 PPN 架構(https://arxiv.org/pdf/1807.03284.pdf)的成功意味著在特征圖達到某個特征映shè分辨率后,將產生大量額外的計算。

相比于 CPU 計算,GPU 獨有的關鍵特性是調度特定層計算會有一個顯著的固定成本,這對于流行的 CPU 定制架構固有的深度低分辨率層而言非常重要。例如,在一個實驗中我們觀察到 MobileNetV1 推理時間需要 4.9 毫秒,而在實際 GPU 計算中花費 3.9 毫秒。

考慮到這一點,我們采用了另一種錨定方案,該方案停留在 8×8 特征圖尺寸處而無需進一步下采樣(圖 2)。我們已經將 8×8,4×4 和 2×2 分辨率中的每個像素的 2 個錨點替換為 8×8 的 6 個錨點。由于人臉長寬比的變化有限,因此發現將錨固定為 1:1 縱橫比足以進行jīng確的面部檢測。


谷歌公布亞毫秒級人臉檢測算法 人臉檢測又一突破

圖 3 錨點計算,SSD(左)與 BlazeFace(右)

4、后處理機制

由于我們的特征提取器未將分辨率降低到 8×8 以下,因此給定目標重疊的錨點數量會隨目標尺寸的增加而顯著增加。在典型的非zuì大抑制方案中,只有一個錨點被選中作為算法的輸出。這樣的模型應用于后續視頻人臉預測時,預測結果將在不同錨之間波動并且在時間序列上檢測框上持續抖動(人類易感噪聲)。

為了zuì小化這種現象,我們用一種混合策略代替抑制算法,該策略以重疊預測之間的加權平均值估計邊界框的回歸參數,它幾乎不會產生給原來的 NMS 算法帶來額外成本。對于人臉檢測任務,此調整使準確度提高 10%。

我們通過連續輸入目標輕微偏移的圖像來量化抖動量,并觀察模型結果(受偏移量影響)如何受到影響。在聯合分辨率策略修改之后,抖動量(定義為原始輸入和移位輸入的預測之間的均方根差)在我們的前置攝像頭數據集上下降了 40%,在包含較小人臉的后置攝像頭數據集上下降了 30%。

實驗

我們在 66K 圖像的數據集上訓練我們的模型。為了評估實驗結果,我們使用了由 2K 圖像組成的地理位置多樣數據集。

對于前置攝像頭模型,它只考慮占據圖像區域的 20%以上的面部,這是由預期的用例決定的(后置攝像頭型號的閾值為 5%)。

回歸參數誤差采用眼間距離(IOD)進行尺度不變性歸一化,中值絕對誤差為 IOD 的 7.4%。通過上述程序評估的抖動度量是 IOD 的 3%。

圖 4 顯示了所提出的正面人臉檢測網絡的平均jīng度(AP)度量(標準 0.5 交叉聯合邊界框匹配閾值)和移動 GPU 推理時間,并將其與基于 MobileNetV2 的目標檢測器(MobileNetV2-SSD)進行了比較。我們在 16 位浮點模式下使用 TensorFlow Lite GPU 作為推理時間評估的框架。


谷歌公布亞毫秒級人臉檢測算法 人臉檢測又一突破

圖 4 前置相機人臉檢測性能

圖 5 給出了更多旗艦設備上兩種網絡模型的 GPU 推理速度的透視圖:


谷歌公布亞毫秒級人臉檢測算法 人臉檢測又一突破

圖 5 跨多個移動設備的推理速度

圖 6 展示了由于模型尺寸較小引起的回歸參數預測質量的退化程度。如下一節所述,這不一定會導致整個 AR 管道質量的成比例降低。


谷歌公布亞毫秒級人臉檢測算法 人臉檢測又一突破

圖 6 回歸參數預測質量

應用

上述模型可以在完整圖像或視頻幀上運行,并且可以作為幾乎任何與人臉相關的計算機視覺應用的第一步,例如 2D / 3D 人臉關鍵點、輪廓或表面幾何估計、面部特征或表情分類以及人臉區域分割。因此,計算機視覺流程中的后續任務可以根據適當的面部剪裁來定義。結合 BlazeFace 提供的少量面部關鍵點估計,此結果也可以旋轉,這樣圖像中的面部是居中的、標準化的并且滾動角接近于零。這消除了 SIG-nifi 不能平移和旋轉不變性的要求,從而允許模型實現更好的計算資源分配。

我們通過一個具體的人臉輪廓估計示例來說明這種方法。在圖 7 中,我們展示了 BlazeFace 的輸出,即預測的邊界框和面部的 6 個關鍵點(紅sè)如何通過一個更復雜的人臉輪廓估計模型來進一步細化,并將其應用于擴展的結果。


谷歌公布亞毫秒級人臉檢測算法 人臉檢測又一突破

圖 7 流程示例;紅sè代表 BlazeFace 輸出;綠sè代表任務特定的模型輸出

詳細的關鍵點可以產生更jīng細的邊界框估計(綠sè),并在不運行人臉檢測器的情況下重新用于后續幀中的跟蹤。為了檢測該計算節省策略的故障,該模型還可以檢測面部是否存在所提供的矩形裁剪中合理地對齊。每當違反該條件時,BlazeFace 人臉檢測器將再次在整個視頻幀上運行。

友情鏈接
平码绝密公式规律