不久之前,騰訊優圖開源了人臉檢測演算法 DSFD(Dual Shot Face Detector),該演算法相關論文已經被計算機視覺頂級會議 CVPR 2019 接收,重新整理了人臉檢測資料集 WIDER FACE 和 FDDB 新紀錄。
Github 開源地址:https://github.com/TencentYoutuResearch/FaceDetection-DSFD
論文公開地址:https://arxiv.org/abs/1810.10220v2
DSFD 人臉檢測演算法簡介
人臉檢測演算法是在影像上,檢測出人臉的位置(通常以矩形框形式輸出),是人臉配準、人臉屬性識別、人臉核身、人臉檢索等技術的基礎。據騰訊優圖介紹,此次提出的 DSFD 人臉檢測演算法,主要有 3 點創新:
(1)設計了一種新的「特徵增強」模組(FEM:Feature Enhance Module)
FEM 在採用 Top-Down 層間資訊融合的同時,在同一「感受野」內做了更多的 enhancement。因此在 width and depth 上學習到了更有效的 context 和 semantic 資訊。
(2)提出了「分層錨點漸進」式的代價函式監督(PLA:Progressive Anchor Loss)
模型採用 2 個層級(hierarchy),基於第一層(low-level)和第二層(high-level)的差異性,適配了不同尺寸的 anchor。在訓練過程中,PAL 對整個模型形成了更有效的監督。
(3)設計了一種「改進的錨點匹配策略」(Improved Anchor Matching Strategy)
One-stage detector 由於在輸出層分配有密集的 anchor,anchor 與 face 匹配的好壞直接影響訓練效果。優圖的研究人員 data augmentation 過程中充分考慮了不同大小的 face 和各個 anchor 的關係,提出了一種新的資料擴增法。
圖注:演算法整體流程圖
下面兩張圖都展示 DSFD 人臉檢測的效果,它們在不同尺度、姿態、遮擋、模糊、裝扮和光照等條件下有很不錯的效果。下圖藍色的檢測框表示檢測置信度超過了 0.8。
專案怎麼用
整個實現專案是建立在 PyTorch 上的,Torch 版本為 0.3.1。專案不依賴特殊庫,只需要 Python 3.6 和 CuDNN 等就行了。如果需要使用該專案,我們可以直接透過 Git 下載(下載後的根目錄表示為$DSFD_ROOT):
git clone https://github.com/TencentYoutuResearch/FaceDetection-DSFD.git
cd FaceDetection-DSFD
export CUDA_VISIBLE_DEVICES=0
我們可以直接下載 WIDER FACE 和 FDDB 資料集,並利用預訓練的模型測試效果。在 WIDER FACE 資料集訓練的 DSFD 模型可在以下地址下載:
騰訊微雲:https://share.weiyun.com/567x0xQ
Google Drive:https://drive.google.com/file/d/1WeXlNYsM6dMP3xQQELI-4gxhwKUQxc3-/view?usp=sharing
以上的預訓練權重需要放在$DSFD_ROOT/weights/目錄中,專案中的 demo.py 展示瞭如何使用 DSFD 模型檢測人臉,並將檢測結果列印出來。如下是檢測人臉的命令列:
python demo.py [--trained_model [TRAINED_MODEL]] [--img_root [IMG_ROOT]]
[--save_folder [SAVE_FOLDER]] [--visual_threshold [VISUAL_THRESHOLD]]
--trained_model Path to the saved model
--img_root Path of test images
--save_folder Path of output detection resutls
--visual_threshold Confidence thresh
除此之外,專案還可以透過內建測試程式碼評估預訓練模型在 WIDER FACE 和 FDDB 資料集的效果,感興趣的讀者可查閱原 GitHub 專案。
實驗結果
騰訊優圖的研究員在 WIDER FACE 和 FDDB 兩個流行的面部檢測基準上評估了 DSFD 模型。該模型只使用 WIDER FACE 的訓練集進行訓練,然後在兩個基準上進行評估,沒有更多的精調。
如下圖 6 所示,在所有的 SOTA 面部檢測器中,在三個子集上的平均精度(AP)上 DSFD 取得了最好的表現,也就是在驗證集上分別為 96.6% (簡單)、95.7% (一般) 和 90.4% (困難),在測試集上為 96.0% (簡單)、95.3% (一般) 和 90.0% (困難)。
圖 6:在 WIDER FACE 驗證和測試集上的精度-召回曲線。
如下圖 7 所示,DSFD 在連續、非連續 ROC 曲線上都取得了 SOTA 表現,也就是當假正例數量為 1000 時得分分別為 99.1%、 86.2%。
圖 7:在 FDDB 資料集上與主流 SOTA 方法的對比。第一排兩張圖展示了沒有額外註釋的 ROC 曲線結果,第二排兩張圖展示了帶有額外註釋的 ROC 曲線。