【paper】BlazeFace: Sub-millisecond Neural Face Detection on Mobile GPUs
概要
文章名稱:BlazeFace: Sub-millisecond Neural Face Detection on Mobile GPUs
文章來源:Google
文章作者:Valentin Bazarevsky Yury Kartynnik Andrey Vakunov
文章下載:https://arxiv.org/pdf/1907.05047.pdf
代碼實現:https://github.com/tkat0/PyTorch_BlazeFace
概要說明:算法設計時,追求復雜度低和適合硬件加速(比如適合GPU運算等)是算法加速的兩大方向。BlazeFace算法是一款專為移動GPU推理量身定制的輕量級且性能卓越的人臉檢測器。BlazeFace 在主流的移動設備上以200-1000+ FPS的速度運行。這種超實時性能使其能夠應用于任何對性能要求極高的增強現實應用中。
主要創新點
-
改進網絡,增大感受野。基于Mobilenet v1/v2,改進網絡,提出一種輕量級的特征提取網絡(Single BlazeBlock and Double BlazeBlock)
-
特征提取網絡設計
-
改進Anchor。基于SSD的Anchor設計,改進Anchor的梯度金字塔結構,使其更加適應于GPU運算,從而達到提速的目的。
-
使用blending策略(tie resolution)替換非極大抑制(NMS)。
1. 改進網絡,增大感受野
在MobileNet架構中,使用5×5卷積核代替3×3卷積核,擴大感受野,而這種在深度可分離卷積中卷積核大小增大,而帶來的計算量增加是有限的。另外為了促進感受野Size的傳遞,提出了double BlazeBlock 模塊,如下圖:
[PS]在深度可分離卷積(depthwise separable convolution)中,depthwise convolution部分(s2ck2 )與 pointwise convolution 部分(s2cd)計算量比值為(k2 : d),可見depthwise separable convolution計算量主要由d 決定。使用55卷積核代替33卷積核,不會帶來太大開銷,但是可以增大感受野(receptive field)。
[PS]不會帶來太大開銷:論文中以56×56×128輸入為例,在16 bit 浮點運算下, 3×3 的depthwish需要0.07ms,pointwish需要0.3s,即便換成5×5,整個網絡運算時間依舊在1ms量級內,并未增加大量計算開銷。
[PS]右側的Optional需要參考特征提取網絡設計來看,當stride=2的時候,需要使用右側分支來進行通道對齊。
2. 特征提取網絡設計
針對前置攝像頭人臉檢測的特定需要,人臉尺度變化較小,定義更加輕量級的特征提取,輸入圖像128*128,含有5個Single BlazeBlock和6個double BlazeBlock。網絡架構如下表:
[PS] 主干網絡中,首先通過一個cov增加通道
3. 改進Anchor
修改的SSD目標檢測anchor機制,使其更適于GPU計算。在8×8特征圖尺寸處停止而無需進一步下采樣(如下圖2),將8×8,4×4和2×2分辨率中的每個像素的2個anchor替換為8×8的6個anchor。由于人臉長寬比的變化有限,因此作者們發現將anchor固定為1:1縱橫比足以進行精確的面部檢測。
[PS] 為什么要把2×4×4和2×2×2使用4×8×8來代替?
文中講到,與CPU的運算不同,GPU的運算成本聚焦在特定的網絡層運算上,對于處理深度的低分辨率隱層,CPU能夠做的更好。但這里的低分辨率為什么設置成小于8×8,論文中沒有詳細說明,也沒有給出實驗證明。
這里筆者猜測,由于本文是重在移動端GPU運算的優化,太小的分辨率的cnn在gpu上的運算比較耗時,而且對于小于8×8的場景下的人臉檢測必要性不大,所以將Anchor停留在8×8。
4. 使用blending策略(tie resolution)替換非極大抑制(NMS)
由于上述anchor機制中特征提取器未將分辨率降低到8×8以下,所以與給定對象重疊的anchor數量將會下降。在SSD的NMS中,只有一個勝出的anchor用于算法輸出,這導致在視頻中進行檢測時,人臉框抖動明顯。
為了降低這種效應,作者不再使用NMS,代之一種blending策略,以重疊框的加權平均值來估計邊界框的回歸參數。它幾乎不會產生之前NMS部分的成本。作者稱對于在視頻中的面部檢測任務,此調整導致準確度提高10%。
論文通過連續輸入目標輕微偏移的圖像來統計框抖動的數量以觀察模型輸出是如何被影響的。在應用這一策略后,抖動的數量大幅下降。
[PS]這里舉個猜測的例子:
設a,b兩個矩形框為人臉框的重疊框,經由網絡輸出a(bbox, score), b(bbox, score),并且a_score > b_score,IoU(a,b) > iou_nms_threhold
傳統的NMS方法:b(score) 設置為0,bbox直接選取a(bbox)
Blending: (weigth_a * bbox_a) + (weight_b * bbox_b) = bbox
其中 weidth_a = a(score)/[a(score)+b(score)]
實驗結果
下圖是比較結果,精度高于MobileNetV2-SSD,在iPhone XS上的速度也從2.1毫秒降到0.6毫秒。
更多手機上的運算速度比較:
應用
總結
以上是生活随笔為你收集整理的【paper】BlazeFace: Sub-millisecond Neural Face Detection on Mobile GPUs的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Anaconda-Error】'num
- 下一篇: 饥荒黑曜石怎么挖