谷歌公佈亞毫秒級人臉檢測算法BlazeFace 人臉檢測又一突破
谷歌近日發布了一款專為移動GPU 推理量身定制的輕量級人臉檢測器——亞毫秒級的人臉檢測算法Blaze Face。它能夠在旗艦設備上以200~1000+ FPS 的速度運行,並且可以應用在諸多需要快速準確的識別出人臉區域的任務中,例如:2D/3D 面部關鍵點識別與幾何評估、面部特徵和表情分類以及面部區域分割等。谷歌發表了相關論文介紹了該研究成果。
BlazeFace 簡介
近年來,通過對深度神經網絡中各種架構的改進,我們已經可以實現實時目標檢測。在移動應用程序中,實時目標檢測通常是視頻處理流程中的第一步,接著是各種特定任務組件,例如分割,跟踪或幾何推理。因此,目標檢測模型推理必須盡可能快地運行,其性能最好能夠達到遠高於標準的實時基準。
我們提出了一種名為BlazeFace的新面部檢測框架,該框架是在單鏡頭多盒檢測器(SSD)框架上針對移動GPU推理進行的優化。我們的主要創新包括:
1. 有關於推理速度
- 一個專為輕量級目標檢測而設計的在結構上與MobileNetV1/V2 相關的非常緊湊的特徵提取器卷積神經網絡。
- 一種基於SSD 的新型GPU-friendly anchor 機制,旨在提高GPU 利用率。Anchors(SSD 術語中的先驗)是預定義的靜態邊界框,作為網絡預測調整和確定預測粒度的基礎。
2. 有關於推理效果
- 一種替代非最大抑制的聯合分辨率策略,可在多預測之間實現更穩定、更平滑的聯繫分辨率。
基於AR 的人臉檢測
雖然該框架適用於各種目標檢測任務,但在本文中,我們致力於探討手機相機取景器中的人臉檢測問題。由於不同的焦距和捕獲物體尺寸,我們分別為前置和後置攝像頭構建了模型。
除了預測軸對齊的面部矩形外,BlazeFace 模型還生成了6 個面部關鍵點坐標(用於眼睛中心、耳、嘴中心和鼻尖),以便我們估計面部旋轉角度(滾動角度)。這樣的設置使其能夠將旋轉的面部矩形傳遞到視頻處理流程的後期任務特定階段,從而減輕後續處理步驟對重要平移和旋轉不變性的要求。
模型結構與設計
BlazeFace 模型架構圍繞下面討論的四個重要設計考慮因素而構建。
1、擴大感受野
雖然大多數現代卷積神經網絡架構(包括MobileNet,https://arxiv.org/pdf/1704.04861.pdf )都傾向於在模型圖中都使用3×3卷積核,但我們注意到深度可分離卷積計算是由它們的點態部分主導。在s×s×c輸入張量上,應用可分離卷積操作,其中,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倍,即後續的點卷積操作需要0.3毫秒(由於固定成本和存儲器訪問因素導致的純算術運算計數差)。
該觀察表明增加深度部分的核尺寸性價比更高。我們在模型架構中使用5×5 內核,這樣使得感受野達到指定大小所需的bottleneck 數量大大減少,得到的BlazeBlock 有下圖所示的兩種結構:
圖1 單個BlazeBlock (左) 與雙BlazeBlock (右)
2、特徵提取器
對於具體的例子,我們專注於前置攝像頭模型的特徵提取器。該特徵提取器必須考慮較小範圍的目標尺度,因此它具有較低的計算需求。提取器採用128×128 像素的RGB 輸入,包括一個2D 卷積和5 個單BlazeBlock 和6 個雙BlazeBlock 組成,完整佈局見下表。最大張量深度(通道分辨率)為96,而最低空間分辨率為8×8(與SSD 相比,它將分辨率一直降低到1×1)。
圖2 BlazeFace 特徵提取器的網絡結構
3、Anchor 機制
類似SSD 的目標檢測模型依賴於預定義的固定大小的基礎邊界框,稱為先驗機制,或Faster-R-CNN 術語中的錨點。為每個錨預測一組回歸(可能還包括分類)參數,例如中心偏移量和尺寸調整。它們用於將預定義的錨位置調整為緊密的邊界矩形。
通常的做法是根據目標比例範圍在多個分辨率級別定義錨點,同時下採樣也是計算資源優化的手段。典型的SSD模型使用1×1,2×2,4×4,8×8和16×16特徵映射大小的預測。然而,金字塔池化網絡PPN架構(https://arxiv.org/pdf/1807.03284.pdf)的成功意味著在特徵圖達到某個特徵映射分辨率後,將產生大量額外的計算。
相比於CPU 計算,GPU 獨有的關鍵特性是調度特定層計算會有一個顯著的固定成本,這對於流行的CPU 定制架構固有的深度低分辨率層而言非常重要。例如,在一個實驗中我們觀察到MobileNetV1 推理時間需要4.9 毫秒,而在實際GPU 計算中花費3.9 毫秒。
考慮到這一點,我們採用了另一種錨定方案,該方案停留在8×8 特徵圖尺寸處而無需進一步下採樣(圖2)。我們已經將8×8,4×4 和2×2 分辨率中的每個像素的2 個錨點替換為8×8 的6 個錨點。由於人臉長寬比的變化有限,因此發現將錨固定為1:1 縱橫比足以進行精確的面部檢測。
圖3 錨點計算,SSD(左)與BlazeFace(右)
4、後處理機制
由於我們的特徵提取器未將分辨率降低到8×8 以下,因此給定目標重疊的錨點數量會隨目標尺寸的增加而顯著增加。在典型的非最大抑制方案中,只有一個錨點被選中作為算法的輸出。這樣的模型應用於後續視頻人臉預測時,預測結果將在不同錨之間波動並且在時間序列上檢測框上持續抖動(人類易感噪聲)。
為了最小化這種現象,我們用一種混合策略代替抑制算法,該策略以重疊預測之間的加權平均值估計邊界框的回歸參數,它幾乎不會產生給原來的NMS 算法帶來額外成本。對於人臉檢測任務,此調整使準確度提高10%。
我們通過連續輸入目標輕微偏移的圖像來量化抖動量,並觀察模型結果(受偏移量影響)如何受到影響。在聯合分辨率策略修改之後,抖動量(定義為原始輸入和移位輸入的預測之間的均方根差)在我們的前置攝像頭數據集上下降了40%,在包含較小人臉的後置攝像頭數據集上下降了30%。
實驗
我們在66K 圖像的數據集上訓練我們的模型。為了評估實驗結果,我們使用了由2K 圖像組成的地理位置多樣數據集。
對於前置攝像頭模型,它只考慮佔據圖像區域的20%以上的面部,這是由預期的用例決定的(後置攝像頭型號的閾值為5%)。
回歸參數誤差採用眼間距離(IOD)進行尺度不變性歸一化,中值絕對誤差為IOD 的7.4%。通過上述程序評估的抖動度量是IOD 的3%。
圖4 顯示了所提出的正面人臉檢測網絡的平均精度(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 個關鍵點(紅色)如何通過一個更複雜的人臉輪廓估計模型來進一步細化,並將其應用於擴展的結果。
圖7 流程示例;紅色代表BlazeFace 輸出;綠色代表任務特定的模型輸出
詳細的關鍵點可以產生更精細的邊界框估計(綠色),並在不運行人臉檢測器的情況下重新用於後續幀中的跟踪。為了檢測該計算節省策略的故障,該模型還可以檢測面部是否存在所提供的矩形裁剪中合理地對齊。每當違反該條件時,BlazeFace 人臉檢測器將再次在整個視頻幀上運行。
論文鏈接