這是 Face++ Detection Team(R4D)第 3 篇知乎專欄。如果說該專欄的定位是雙向交流,一個比較貼切的詞可能是“窗口”:一方面,我們希望從論文的生產、研究員的成長乃至公司的文化氛圍等多方面被了解,被認識,被熟悉,希望攜手共同見證最優檢測算法的研究、創新與落地,突破認知邊界,實現降本增效,為客戶和社會創造最大價值;另一方面,我們也希望了解讀者的想法,增加與讀者的互動,形成雙向反饋的正向溝通機制。R4D 后續也會組織線下活動,加大加深彼此交流。如果你感興趣,或者想加入,歡迎聯系 Face++ Detection Team 負責人俞剛 (yugang@megvii.com)。
本次分享的主題是人臉檢測(Face Detection),分享者是曠視科技王劍鋒,來自 Face++ Detection 組。通過這篇文章,可以一窺曠視近兩年在該方向的工作與思考,并希望為計算機視覺社區帶來啟發,進一步推動人臉檢測技術的研究與落地。人臉檢測是人臉識別的第一站,曠視的努力主要體現在緊緊圍繞人臉檢測領域頑固而核心的問題展開,攻堅克難,功夫花在刀刃上,比如人臉尺度的變動及遮擋等,實現速度與精度的雙重漲點。
導語
人臉檢測的目的是,給定任意圖像,返回其中每張人臉的邊界框(Bounding Box)坐標,實際操作上它對通用物體檢測(General Object Detection)有較多借鑒,是通用物體檢測技術的聚焦和細分。由于人臉檢測是所有人臉分析算法的前置任務,諸如人臉對齊、人臉建模、人臉識別、人臉驗證/認證、頭部姿態跟蹤、面部表情跟蹤/識別、性別/年齡識別等等技術皆以人臉檢測為先導,它的好壞直接影響著人臉分析的技術走向和落地,因而在學術界和工業界引起廣泛的重視和投入。
如今,隨著深度學習普及,人臉檢測與通用物體檢測已相差無幾,作為二分類任務,其難度也低于通用物體檢測,因此現階段人臉檢測研究更需走差異化路線,從實際應用中汲取營養。
尺度變化是人臉檢測不同于通用物體檢測的一大問題。通用物體的尺度變化范圍一般在十幾倍之內;與之相比,人臉的尺度變化范圍由于攝像頭不斷升級,在 4K 甚至更高分辨率場景中可達數十倍甚至上百倍。面對這一問題,[1, 2] 給出的答案是尋找最優尺度多次采樣原圖,其本質是優化圖像金字塔(Image Pyramid);[3, 4] 則利用不同深度的特征圖適應不同尺度的人臉,其本質是優化特征金子塔(Feature Pyramid);而曠視自主研創的 SFace 方法試著從完全不同的角度切入這一問題。這是本文第一部分。
和尺度變化一樣,遮擋也是人臉檢測面臨的常見挑戰之一。實際場景中的眼鏡、口罩、衣帽、頭盔、首飾以及肢體等皆會遮擋人臉,拉低人臉檢測的精度。對此,[5, 6] 嘗試提升神經網絡適應遮擋情況的能力,[7] 則將問題轉化為遮擋與非遮擋人臉在向量空間中的距離這一度量學習問題。此外,很多深度學習方法訓練時輔用的數據增強技術也在一定程度上提高了網絡對遮擋情形的魯棒性;而曠視原創的全新算法 FAN 也是針對人臉遮擋問題而提出。這是本文第二部分。
如上所述,人臉檢測是人臉關鍵點、人臉識別等的前置任務,人臉檢測框質量直接影響著整條 Pipeline 的表前,常見人臉檢測數據集的評測指標對邊界框質量缺乏關注;2018 WIDER Challenge Face Detection 首次采用相同于MS COCO 的評測方式,表明這一狀況已有大幅改善;本文第三部分則將介紹這次比賽奪冠的一些訣竅。
尺度變化: SFace
論文鏈接:https://arxiv.org/abs/1711.07246
目前的人臉檢測方法仍無法很好地應對大范圍尺度變述,基于圖像金字塔的方法理論上可覆蓋所有尺度,但必須多次采樣原圖,導致大量重復計算;而基于特征金字塔的方法,特征層數不宜加過多,從而限制了模型處理尺度范圍的上限。是否存在一種方法,圖像只通過模型一次,同時又覆蓋到足夠大的尺度范圍呢?
目前,單步檢測方法大致可分為兩類:1)Anchor-based 方法,如 SSD[8]、RetinaNet[9] 等;2)Anchor-free 方法,如 DenseBox[10]、UnitBox[11]等。Anchor-based 方法處理的尺度范圍雖小,但更精準;Anchor-free 方法覆蓋的尺度范圍較大,但檢測微小尺度的能力低下。一個非常自然的想法就是,兩種方法可以融合進一個模型嗎?理想很豐滿,現實很骨感,Anchor-based 和 Anchor-free 方法的輸出在定位方式和置信度得分方面差異顯著,直接合并兩個輸出困難很大,具體原因如下:
其一,對于 Anchor-based 方法,ground truth IoU ≥ 0.5 的錨點將被視為正訓練樣本。可以發現,正負樣本的定義與邊界框回歸結果無關,這就導致 Anchor-based 分支每個錨點輸出的分類置信度實質上表示的是“錨點框住的區域是人臉”的置信度,而不是“網絡預測的回歸框內是人臉”的置信度。故而分類置信度很難評估網絡實際的定位精度。對于在業務層將 Classfication Subnet 和 Regression Subnet 分開的網絡,情況將變得更為嚴重。
其二,對于 Anchor-free 方法,網絡訓練方式類似于目標分割任務。輸出的特征圖以邊界框中心為圓心,半徑與邊界框尺度成比例的橢圓區域被定義為正樣本區域,特征圖其它位置(像素)被視為背景。通過這種方式,Anchor-free 分支的分類置信度得分實質為“該像素落在人臉上”的置信度,而且該分類置信度與定位的準確度的關聯同樣很弱。
總而言之,Anchor-based 方法和 Anchor-free 方法的分類置信度都與回歸定位精度關聯甚微,其置信度得分也分別代表著不同的含義。因此通過分類結果直接合并兩個分支輸出的邊界框是不合理的,并且可能導致檢測性能的急劇下降。
SFace網絡結構
因此,可以將回歸的邊界框和 groundtruth 邊界框之間的 IoU 當作 Classfication Subnet 的 groundtruth,這正是 SFace 所做的事情。
具體而言,SFace 設計了Anchor-based 和 Anchor-free 兩個分支,前者基于RetinaNet,后者基于 UnitBox;兩個分支都在訓練第一步通過 Regression Subnet 生成邊界框;接著計算邊界框和 groundtruth 邊界框之間的 IoU;(Anchor-based 分支的)錨點和(Anchor-free 分支的)像素中 IoU≥0.5 的結果將視為Classfication Subnet 的正樣本,其它則視為負樣本,Classfication Loss 采用 Focal Loss。我們還嘗試過直接回歸 IoU,然而實驗結果表明,相較于采用 Sigmoid Cross Entropy 或 Focal Loss,直接回歸 IoU 所得結果方差較大,實際效果欠佳。
Anchor-based 分支和 Anchor-free 分支都使用 IoU Loss 做為 Regression Loss。這種調整有助于統一兩個分支的輸出方式,優化組合結果。通過以上修正,兩個分支的分類子網絡的實質含義得到統一,分類置信度的分布得到一定程度的彌合,從而 SFace 可有效融合兩個分支的結果。
此外,SFace 必須運行很快才有實際意義,否則大可以選擇做圖像金字塔。為此,基于Xception,SFace 采用了一個 FLOPs 僅有 39M 的 Backbone,稱之為 Xception-39M,每個 Block 包括 3 個 SeparableConv 的 Residual Block。Xception-39M 運算量非常小,感受野卻高達 1600+,十分適合處理更高分辨率圖像。
Xception-39M 網絡結構
Xception-39M 單一 Block 結構
SFace Backbone 理論計算量只有下表中部分方法的 1/200,這些方法多采用 VGG-16、ResNet-101 等作為 Backbone),且都采用多尺度測試;而 SFace測試全部在單一尺度下進行。事實上,SFace 的設計初衷正是只在一個尺度下測試即可覆蓋更大范圍的尺度變化。
WIDER Face 驗證集和測試集的 PR 曲線
消融實驗證明直接融合 Anchor-based 與 Anchor-free 方法不可行,而 SFace提出的融合方法是有效的。Anchor-free 分支覆蓋了絕大多數尺度(easy set和 medium set),而 Anchor-based 分支提升了微小人臉(hard set)的檢測能力。
WIDER Face 驗證集的消融實驗
4K 分辨率下,SFace 運行速度上接近實時,據知這在深度學習人臉檢測領域是第一個,也是首個在 4K 分辨率下 WIDER Face hard AP 高于 75 的實時人臉檢測方法。
SFace 在不同分辨率下的運行時間(單張NVIDIA Titan Xp)
遮擋:FAN
論文名稱:Face Attention Network: An Effective Face Detector for the Occluded Faces
論文鏈接:https://arxiv.org/abs/1711.07246
我們可以從另一個角度考慮遮擋問題。一個物體在清晰可見、無遮擋之時,其特征圖對應區域的響應值較高;如果物體有(部分)遮擋,理想情況應是只有遮擋區域響應值下降,其余部分不受影響;但實際情況卻是整個物體所在區域的響應值都會降低,進而導致模型 Recall 下降。
2025-04-09 12:40
2025-04-08 08:51
2025-04-07 12:08
2025-04-07 12:07
2025-04-07 12:06
2025-04-07 09:52
2025-04-07 09:49
2025-04-07 09:43
2025-04-03 09:11
2025-04-03 08:56