人脸检测技术演进史
导读 本次分享题目为人脸检测技术演进史,包括近期的论文分享、人脸检测主要的研究方向及未来的发展方向。主要分为以下四大部分:
全文目录:
-
人脸检测任务介绍
-
论文分享
-
ModelScope应用
-
未来工作展望
分享嘉宾|刘洋 阿里巴巴 算法专家
编辑整理|付琰 百度
出品社区|DataFun
01/人脸检测任务介绍
1.人脸检测数据集
人脸检测,顾名思义,即检测人脸在图片中的位置,是整个人脸系统的基石,后续做人脸识别、人脸属性分析都依赖人脸检测提供的检测框。
这个领域的代表性数据集是Wider Face,是16年香港中文大学和商汤联合发布的一个数据集。主要贡献在于明确了人脸检测存在的几大挑战:
- ²Scale,小尺度的人脸
- ²Pose,非常规角度的人脸
- ²Occlusion,有遮挡的人脸
- ²Expression,表情夸张的人脸
- ²Makeup,装扮人脸
- ²Illumination,曝光过度的人脸
在16年之后主要围绕着这个数据集展开研究,典型的评价指标是AP score,在Iou=0.5的情况下计算AP值。
2.人脸检测研究方向
(1)Feature Fusion & Context & Receptive Field
这个领域的研究集中在比较早期的17-19年。主要工作内容是,发现了上下文信息对检测的性能提升很大,对底层的特征加上context module,做特征融合。
(2)Label Assign
Label Assign就是划分正负样本的步骤,是从人脸检测到通用多目标检测中一个都非常火的方向,从17年到22年都有相关的文章。S3FD是中科院李子青团队发表的一篇文章,是这个领域的奠基性工作,提供了比较好的检测架构及准则,例如anchor如何设定,anchor assign的超参等等,后续很多工作都follow他们的超参展开研究。
Seeing Small Face是18年CMU的一篇文章,对Label Assign从scale到stride的角度,提出了Expected Max Overlapping (EMO) score,采用新的anchor设计策略,解决基于anchor的人脸检测器在小尺度人脸上性能急剧下降的问题;
HAMBox是我在20年的一篇文章,主要贡献在于发现了online信息的重要性,对未匹配的anchor具有出色的回归能力。在21年往后大家开始注意到online信息的一些用法,在我的视角这是第一篇利用online信息进行label assignment的文章。
MogFace进一步做了adaptive Online 和offline 信息相结合的方法。
(3)Auxiliary Supervision Signal
利用辅助的关键信号提升人脸检测的性能。MTCNN和RetinaFace是其中的代表性工作,用关键点的信息帮助更好地检测人脸,同时在检测模块可以输出关键点的位置,减少了整个人脸识别系统的模块数量。
Face Attention Network引入了一个attention的分支,对遮挡人脸进行预测。
PyramidBox,指出了上下文信息的重要性。利用头、肩膀的soft label,没有引入显式的监督信号,从我的实践结果看涨点甚至高于关键点类的方法。
(4)Anchor Free
不需要预设anchor的方法,从15年百度的DenseBox就开始了这方面的研究。CenterFace是非常出色的轻量化人脸检测方法,直到最近被SCRFD和YOLO-v5打败,不再是sota,但也是一个非常不错的工作。
(5)Data Augmentation
由于scale的挑战,很多通用物体检测领域的方法不适用于这个场景,例如multi-scale training、random crop等等。MogFace在这方面做了一些思考,提出一种scale-level的数据增强策略。
(6)Nas-based
基于NAS(神经网络架构搜索)的一些方法。
BFBox重新设计了检测器领域的backbone和Feature Pyramid Network的搜索空间,基于FP-NAS搜索出对人脸检测比较友好的检测架构。
ASFD是优图基于DARTS来搜索检测器架构的一个工作。
SCRFD受RegNet的启发,对人脸检测器的不同组件(主干、颈部和头部)进行全局优化。
02/论文分享
接下来对上一部分图中标红的文章进行重点介绍。
1.S3FD:Single Shot Scale-invariant Face Detector(ICCV 2017)
这是一篇人脸检测的经典文章,方法目前来看比较简单,VGG结构加下采样特征层,最后做multi stage预测。主要贡献在于确定了人脸检测的标准,并且开源做的比较好。
第一个贡献:设定了anchor的尺寸。
人脸检测与通用物体检测不同,一般在一个像素点只匹配一个anchor,这样设置的主要原因是人脸检测中的小脸比较多,通常在较浅的p2层进行检测,如果设置多个anchor,会导致正负样本极度不均衡。
那么如何设定合理的anchor大小?这篇文章借鉴了有效感受野的概念:由于所有像素对卷积输出的贡献并不是完全相同,仅有一小部分区域对输出值能够产生有效的影响,而这一小部分区域则为有效感受野。因此anchor应该比理论感受野小,从而更好的匹配有效感受野。作者提出了传播间隔相等原则(Equal proportion interval principle),简单来说就是检测层的步长大小决定了anchor的间隔,在所有检测层上,anchor的尺寸均为步长的4倍。
第二个贡献:尺度补偿的anchor 匹配策略。
在训练过程中,通常通过IoU 对anchor和人脸bounding box进行匹配。为了解决一些尺寸的人脸找不到合适的anchor尺寸与之匹配的问题,首先把IoU的阈值从0.5降低到0.35,对于仍然无法匹配的人脸采取如下方法:首先,挑选出所有阈值大于0.1 的人脸;其次,对这些人脸进行逆序排序,选择top N 个anchor作为该人脸的匹配anchor。
这个方法并没有考虑补偿anchor的质量,还有一些方法例如增加anchor的尺寸也能达到补偿的效果,因此这一步还有一定的优化空间。
2. PyramidBox: A Context-assisted Single Shot Face Detector (ECCV 18)
第一个贡献:发现了上下文特征的作用。PyramidBox在底层特征后接了一个类似inception结构的Context-sensitive Prediction Module,用于提取context信息。下面分享一些我的个人思考。在人脸检测中,在context上做收益远比backbone上要大。在通用检测领域,从resnet50到resnet100,性能可能就有4-5个点的提升,因此在网络结构上加head module的做法很少。但在人脸检测领域,在head上加深,对性能提升比较明显,带来这一区别的本质原因是数据集分布不同。这篇文章对于探索head和backbone的作用、整个网络算力分配有一定启发。
第二个贡献是PyramidAnchors。除了人脸之外,还引入了人头、肩膀的额外标注。人头就是把ground truth扩大一倍,肩膀是在此基础上再扩大一倍。实际实验中,加入人头对性能有明显提升。
第三个贡献是DAS(Data anchor sampling),把人脸往更小的方向resize。减少前景和背景的比例,帮助检测器收敛。后续在MogFace中会介绍这个工作的缺点和改进。
3.RetinaFace: Single-stage Dense Face Localisation in the Wild (CVPR 20)
RetinaFace的网络结构非常直白,就是RetinaNet加上Context Module,最后是一个multi-task loss,包含bounding box分类loss和关键点检测loss。这篇工作开源做得非常好,可以轻易部署在各种平台上。
这篇工作的第一个贡献是,multi-task loss。把人脸检测和关键点检测两个任务联合起来,在实际业务应用中不需要再额外部署一个关键点模型。
第二个贡献是Context Module,引入了可变形卷积,提升模型的上下文推理能力以捕获微小人脸。
4.HAMBox: Delving into High-quality Anchors Mining for Outlier Faces Detection (CVPR 20)
接下来介绍HAMBox,是我20年的一个工作。
我们发现在推理阶段,超过80%正确预测的检测框是由负样本anchor回归生成的。针对这个现象,我们进行了很多定量和定性的分析,最终得出的结论是负样本anchor有很好的回归能力,其中的主要原因还是正负样本不平衡。在检测任务中,正负样本比例可能达到1:3000,所有检测框都由正样本回归得到是不现实的。
在传统方法中,对于异常人脸(匹配不到足够多Anchor的人脸),会匹配一个IoU较低的anchor,回归之后的IoU也比较低。而在HAMBox中,我们在online阶段会重新分配一些负样本anchor,最终匹配的anchor和ground truth的IoU非常高。
(a)表明可以通过增加anchor的尺度来增加人脸匹配的anchor的数量。我们统计了0.01-2之间所有的anchor尺度。在anchor尺度是0.5的时候,每个人脸能匹配到2.41个anchor,并且95%的人脸都可以匹配到anchor。
(b)表明增加anchor 尺度,会导致无法匹配的人脸数量增加。
最终这个超参选择的是0.68,只有7%的outer face,每个人脸能匹配到的anchor数量也比较多。在这个条件下后续对outer face进行了一系列的实验分析。
右图说明了negative anchor有很好的回归能力。
下面介绍HAMBox使用的匹配策略。
(1)第一步是标准的匹配策略,将每张脸匹配到那些与它的IoU大于某个阈值的anchor。
(2)前向过程回归得到的框记为B。对于没有匹配到K个anchor 的异常人脸,把ground truth与B中所有的框计算IoU,然后逆序排序。选择排序靠前的anchor作为补充样本,加入训练中。直到补充到K个为止。
5.MogFace: Towards a Deeper Appreciation on Face Detection (CVPR 22)
接下来介绍我们2022年的一篇工作。主要思考了几个问题:
(1)如何解决极端尺度变化的人脸检测问题。
(2)如何解决误检问题。
(3)重新思考Label assign中online information的使用。
Figure1说明了人脸检测和通用物体检测的差异。黄色线是通用物体检测的coco数据集,蓝色线是人脸检测数据集。55%的人脸尺度在20以下,但coco中尺度小于20的只有18%。所以在人脸检测中,核心是要解决小脸的问题。
目前比较典型的通用物体检测方案,包括Multi-scale training和Data-anchor-sampling,在人脸检测上并不完全适用。我们发现:
(1)并不是每一个stage上匹配到的人脸越多,检测器在该stage上的性能越好。这充分说明需要控制不同stage上匹配的人脸比例。
(2)直接学习带有大量前景的图像,对网络性能影响很大,需要合理控制前背景的分布。
基于上面两个发现,我们提出了设计准则,最大化stage-level表征:基于先验信息确定不同stage匹配的ground-truth的分布,来最大化 stage-level的检测能力。
Table2表明,在各个stage上,并不是匹配的越多越好。Table 4表明MST涨点比较少,但DAS提升明显,这是因为DAS把前景的数量减少了,说明了前景的重要性。
这是第一篇从 pyramid layer的学习能力/表征能力来控制gt分布的文章。缺点是需要根据数据集,预先统计每个stage的比例。
在实际应用中,通常对误检十分敏感。目前解决误检的主要做法是收集大量误检图片fine-tune或者从头训练检测器。但这种数据驱动的策略并不是一个完全可靠的解决方案。我们对误检数据分析并发现了一个现象:对于一个FP,把它对应区域crop出来,并施加一些数据增强策略,此时再经过检测器的前向传播,超过95%的误检都消失了。说明上下文信息在解决FP时是比较有效的。进一步,我们设计了一个级联的上下文encoding模块。该模块大致分为两个步骤:
(1)找到网络前向过程中FP对应的context information,也就是它周围N*N的一个区域。
(2)把context information加入到FPN的feature map上,来做后续的分类、回归。
在HAMBox中,对online信息的利用还存在一些问题。
(1)Online information不能提供高质量的匹配信息。因为在网络训练过程中,前期网络还没收敛,提供的信息很多是错的。
(2)不同任务迁移的时候,T和K超参数的选取也需要做调优,否则对效果的影响很大。因此需要做自适应的超参选取。
在这里我们首先利用offline的IoU和中心点得到大量的候选anchor列表,然后利用online的classification信息对所有anchor进行排序,从而更好地利用online信息。超参选取方面,把T设置为当前层所有ground-truth匹配到的anchor数量最大值,解决了自适应的超参选取问题。
6.Sample and Computation Redistribution for Efficient Face Detection (ICLR 22)
利用regnet的思想,确定了backbone, head, neck 之间的算力分配。
(1)基于数据集的统计数据,在最需要的步骤上分配更多训练样本。
(2)基于神经网络架构搜索方法,在模型的backbone, head, neck之间重新分配计算,灵感来源于RegNet。
(3)性能达到sota。
03/ModelScope应用
ModelScope平台提供了MogFace、RetinaFace等人脸检测、人脸识别、活体检测的模型,支持一键打开notebook,并且提供了可运行的GPU、CPU资源以及demo图片,欢迎大家前来试用。
04/未来工作展望
1.鲁棒的Label Assign策略。人脸检测任务对scale比较敏感,例如WiderFace数据集包括很多小脸,但实际数据集中可能大脸比较多,现有的label assign方法在实际数据集上并不合理。网络不同模块的算力分配,在coco数据集上增强底层特征取得了不错的效果,但不代表在所有数据集上都适合这样分配。因此scale-level data augmentation、computation allocation、label assign这三者需要一个新的设计准则,才能得到一个鲁棒的label assign策略。
2.在人脸检测的实际应用中,误检是非常重要的指标。
学术界也需要一个新的评价指标,来衡量检测器去除误检的能力。
3.轻量级、快速的人脸检测器。
4.少样本、领域迁移、无监督、半监督等基础视觉任务与人脸检测结合。
5.人脸检测和人脸识别的统一框架。这两个任务有着天然的关联性,人脸识别特征可以帮助检测更好地定位,人脸检测的上下文信息对人脸识别任务也是很有帮助的。
今天的分享就到这里,谢谢大家。