不久之前,腾讯优图开源了人脸检测算法 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 曲线。