近年来,人脸识别逐渐成为了视觉领域研究里最热门的课题,人脸相关应用在安防监控、人证比对、人脸解锁、人机交互、人脸特效等领域都有重要的应用价值。人脸检测是很多人脸应用的基础任务,比如人脸关键点,人脸识别,人脸老化等。由于存在姿态变化、遮挡、光照变化、尺度变化等一系列问题,人脸检测的实际落地应用仍存在较大的挑战。衍生于手工设计特征的人脸检测器,现有的检测器通过深度卷积神经网络学到的鲁棒特征大大提升了效果。最近的性能领先的人脸检测器往往受通用目标检测器的启发,通常是基于锚点的深度卷积神经网络。
据我们所知,为了实现高效、准确的人脸检测器,主流的SOTA人脸检测框架往往从以下几个思路去优化:特征融合、上下文信息、锚点设计、额外监督、数据扩充、网络结构、感知野设计、单阶段Refinement、头部网络设计、anchor free等。过去几年,百度视觉技术部在人脸检测问题上也产出了一系列的研究,本文我们通过人脸检测器优化的多个角度来剖析下这些研究。
该图为人脸检测器设计的几个优化思路,包括特征融合、上下文信息、锚点设计、额外监督、数据扩充、网络结构等等。黄色部分为百度视觉技术部发表在各会议和期刊的相关研究。Anchor Free&端到端角度:第一个anchor free且可以进行端到端训练的物体检测器DenseBox (Arxiv 15);
上下文信息角度:引入基于anchor的上下文辅助方法,用于半监督学习人脸上下文特征的PyramidBox (ECCV 18), 同时更好的利用尺度感知的Data-Anchor-Sampling以改变训练样本的分布;
特征融合角度:基于注意力指引的语义增强特征融合框架来学习各个尺度的具有丰富语义特征金字塔的DAFBox (Progressively Refined Face Detection Through Semantics-Enriched Representation Learning. TIFS 19);
锚点设计角度:使得异常人脸被补偿高质量锚点的在线高质量锚点挖掘框架HAMBox (HAMBox: Delving into High-quality Anchors Mining for Outlier Faces Detection. CVPR 20);
网络结构角度:第一个基于神经网络架构搜索的方法,同时搜索一个适合人脸检测的特征提取器(Backbone)和特征金字塔(FPN)的BFBox (BFBox: Searching Face-appropriate Backbone and Feature Pyramid Network for Robust Face Detector. CVPR 20)。
其中,HAMBox方案帮助百度视觉技术部在2019年WIDER Face and Pedestrian Challenge上以mAP值57.13%的成绩夺得人脸检测的冠军,超过了第二名0.47%,远超去年冠军55.82%的成绩。同时将WIDERFACE 验证集hard子集的AP刷新到恐怖的93.3%。PyramidBox和PyramidBox++方案两次刷新WIDER Face国际榜单世界纪录。百度已在飞桨(PaddlePaddle)上开源了PyramidBox,并计划开源HAMBox,该方案将进一步推动人脸检测相关的研究,帮助更多开发者应用更前沿的人脸技术。
以上图中,红色框是PyramidBox的检测效果,可以看出PyramidBox对于姿态、模糊、遮挡、尺度等条件具有极强的鲁棒性。
开源项目地址:https://github.com/PaddlePaddle/models/tree/develop/PaddleCV/face_detection
【Anchor Free&端到端角度: DenseBox: Unifying Landmark Localization with End to End Object Detection】
DenseBox这篇工作从2015年就已经发表了。现在回过头看DenseBox,他是第一个anchor free且可以进行端到端训练的物体检测器,甚至比Fast R-CNN还要早,极具前瞻性。谁能想到2019年物体检测和人脸检测领域出现的大量借鉴DenseBox思路的anchor-free的文章,诸如CornerNet,FCOS,FoveaBox,ExtremeNet,CenterFace,SFace等等。
DenseBox的主要贡献如下:
- DenseBox设计了一个简单的全卷积网络,来高效、准确检测遮挡的多尺度物体,并且实现了端到端的训练和测试。而R-CNN系列算法是从Faster R-CNN中使用了RPN代替了Selective Search才开始实现端到端训练的,而和语义分割的结合更是等到了2017年的Mask R-CNN才开始。
- DenseBox通过多任务学习的方式引入了关键点定位,并且进一步提升了目标检测的准确率。并且在人脸检测数据集MALF和车辆检测数据集KITTI上验证了其优秀的性能。
- 提出多尺度特征,而R-CNN系列直到FPN才开始使用多尺度融合的特征。
如图所示为结合检测和关键点定位的框架图。
【上下文信息角度: PyramidBox: A Context-assisted Single Shot Face Detector (ECCV 18)】
在不受控制的环境中检测小的、模糊的及部分遮挡的人脸仍旧是一个有待解决的难题。针对棘手的人脸检测问题,本文提出了一种语境辅助的单次人脸检测新方法——PyramidBox。考虑到语境的重要性,我们从以下三个方面改进语境信息的利用。首先,我们设计了一种全新的语境 anchor,通过半监督的方法来监督高层级语境特征学习,我们称之为 PyramidAnchors。其次,我们提出了一种低层次级特征金字塔网络,将充分的高层级语境语义特征和低层级面部特征结合在一起,使 PyramidBox 能够一次性预测所有尺寸的人脸。再次,我们引入了语境敏感结构,扩大预测网络的容量,以提高最终的输出准确率。此外,我们还采用「数据-anchor-采样」的方法对不同尺寸的训练样本进行扩充,增加了较小人脸训练数据的多样性。PyramidBox 充分利用了语境的价值,在两个常用人脸检测基准——FDDB 和 WIDER FACE 上表现非凡,取得当前最优水平。2018年3月该方法在世界最权威的人脸检测公开评测集 WIDER FACE 的「Easy」、「Medium」和「Hard」三项评测子集中均荣膺榜首,刷新业内最好成绩。
如下图所示,PyramidBox在六个尺度的特征图上进行不同层级的预测。该工作主要包括以下模块:低尺度特征金字塔LFPN、语境辅助监督模块Pyramid Anchors、上下文敏感结构CPM、尺度感知的Data-anchor-sampling。
LFPN: LFPN全称Low-level Feature Pyramid Networks, 在检测任务中,LFPN可以充分结合高层次的包含更多上下文的特征和低层次的包含更多纹理的特征。高层级特征被用于检测尺寸较大的人脸,而低层级特征被用于检测尺寸较小的人脸。为了将高层级特征整合到高分辨率的低层级特征上,我们从中间层开始做自上而下的融合,构建Low-level FPN。
Pyramid Anchors: 该算法使用半监督解决方案来生成与人脸检测相关的具有语义的近似标签,提出基于anchor的语境辅助方法,它引入有监督的信息来学习较小的、模糊的和部分遮挡的人脸的语境特征。使用者可以根据标注的人脸标签,按照一定的比例扩充,得到头部的标签(上下左右各扩充1/2)和人体的标签(可自定义扩充比例)。如下图所示,可以看出由于缺少背景信息,小人脸很难被定位和分类,然而当给人脸区域充足的上下文信息的条件下,我们能够清晰准确的定位人脸位置。
CPM: CPM全称Context-sensitive Predict Module, 本方法设计了一种上下文敏感结构(CPM)来提高预测网络的表达能力。该模型由混合网络结构和最大输入输出层组成,从融合特征中学习准确的定位和分类;
Data-anchor-sampling: 设计了一种新的采样方法,称作Data-anchor-sampling,该方法可以增加训练样本在不同尺度上的多样性。该方法改变训练样本的分布,重点关注较小的人脸。
Pyramidbox模型可以在以下示例图片上展示鲁棒的检测性能,该图有一千张人脸,该模型检测出其中的880张人脸。
不同模块在baseline上的提升对比实验:
【特征融合角度:DAFBox: Progressively Refined Face Detection Through Semantics-Enriched Representation Learning (TIFS 19)】
特征金字塔旨在学习到多尺度的特征表达,来检测多尺度的人脸。然而,在不同的尺度下,它们往往缺乏足够的上下文信息,特别是当数据集有很多小人脸的时候。本文中,我们提出了基于注意力指引的语义增强特征融合框架来学习各个尺度的具有丰富语义特征金字塔的DAFBox。高维的抽象特征被直接通过skip connections的方式引入到低维特征,这样可以保持尽可能多的语义信息。除此之外,在特征融合过程中,我们使用注意力机制作为“门”来强化有用特征,弱化无用特征。受人类对于小脸的视觉感知启发,我们设计了一个深度渐进精炼损失DPRL有效的使得特征学习变得简单。根据以上原则,我们设计和调研了多种不同的特征金字塔框架。最终,我们提出了两种典型的可以端到端训练的结构:集中注意力特征CAF和分布式注意力特征DAF。
从下图可以明显看出,对于小的人脸来说,包含过大上下文信息的感知野并不是十分有利的。
往往是包括头部或者肩膀的区域能够更容易被人识别出来。
【锚点设计角度: HAMBox: Delving into High-quality Anchors Mining for Outlier Faces Detection. CVPR 20】
近期的人脸检测器利用锚点来构建一个结合分类和坐标框回归的多任务学习问题,有效的锚点设计和锚点匹配策略使得人脸检测器能够在大姿态和尺度变化下精准的定位人脸。然而,我们发现在推理阶段,超过80%可以正确预测的检测框是由负样本锚点(锚点和对应人脸的交并比IoU小于一定阈值)回归生成。这表明这些负样本锚点展示出了极好的回归能力,但是现有的方法都忽略了可以根据负样本锚点进行学习。在本文中,我们提出了一种在线高质量锚点挖掘策略HAMBox, 它可以使得异常人脸(outer faces)被补偿高质量的锚点。我们提出的HAMBox方法可以成为一种基于锚点的单步骤人脸检测器的通用优化方案。
本文提出了在线高质量锚点挖掘策略HAMBox来给异常人脸补偿最合适的锚点。我们首先基于RetinaNet建立了我们的高召回的人脸检测器。接下来,我们细节化的列举了在线高质量锚点补偿策略。最后,我们针对补偿锚点构建了基于回归敏感的focal loss。
- 基于锚点的高召回人脸检测器
已有的人脸检测器利用锚点来构建一个结合分类和坐标框回归的多任务学习问题。我们以RetinaNet作为基线。特征提取器是ResNet-50。遵循S3FD[3]的设置,我们采用了conv2的特征来提升检测器效果。
受启发于图一的数理统计,我们调整锚点尺寸(0.68×{16, 32, 64, 128, 256, 512})来匹配到更多人脸。
- 在线高质量锚点补偿策略
在完成锚点尺寸和比例的设计后,我们需要进一步给锚点分配它们最近邻的真值或者背景。如下图所示,已有的锚点匹配策略由两步组成。人脸首先匹配与之IoU大于一定阈值的锚点,然后不能够匹配上任何锚点的人脸将被补偿一个与之具有最大IoU的锚点。如图c所示,第二步中被补偿的锚点可能会降低网络回归和分类的效果,因为这些锚点本质上与人脸有更低的IoU。
我们惊讶的发现随着训练迭代次数的增加,一些负样本锚点具有了正确预测的能力,然而这些锚点在回归分支被忽略掉了,甚至在分类分支被赋予了背景类的标签。 受这个发现的启发,我们提出了在线高质量锚点补偿策略来解决已有的未对准监督信号的问题。
首先,每个人脸匹配与之IoU大于一定阈值的锚点。但是对于那些剩下的异常人脸来说,我们不补偿任何的锚点。其次,在训练过程中前向传播的结尾,每个锚点通过它对应的回归坐标计算回归检测框。我们定义B_reg为这个回归检测框,F_outer为异常人脸。最后,对于F_outer的每个人脸,我们计算它与B_reg的IoU,并且对这个人脸补偿N个额外的负样本锚点。我们定义所有的IoUs为IoU_set,这些N个补偿的负样本锚点根据以下两个规则选出。(a)其对应的回归框和目标人脸之间的IoUs应该大于一个阈值T(T表示在线的正样本锚点的阈值)。(b)根据规则1计算的IoUs应该在IoU_set集合里面的top-K高的IoU里面。K是一个超参数,表示F_outer匹配到的锚点的最大数目。在经过以上两条规则过滤后,如果N大于K-M, 则我们在这N个负样本锚点中选择出top-(K-M)个高的IoU的锚点来补偿这个脸,并且设置N=K-M。M表示第一步中人脸已经匹配上的锚点的数量。我们已经通过改变T,K来做了很多消融实验。细节参考算法1。
- 基于回归敏感的focal loss
在分析完以上两章节后,我们已经挖掘出了高质量的锚点,接下来的问题是如何有效的利用这些锚点。我们提出了基于回归敏感的focal loss来给予新补偿的高质量锚点一个更合理的权重。
因此我们基于focal loss做出了两个改进。(a)考虑到定位和分类之间的弱连接性,新补偿的锚点被给予了基于IoU的动态权重。(b)我们定义同时满足以下三个条件的锚点为可忽略锚点(在训练中不被优化):1. 属于高质量的锚点。2. 在锚点匹配策略的第一步中,被赋予了背景类的标签。3. 不被包括于新补偿的锚点中。
我们定义损失函数为:
除此之外,新补偿的锚点的监督被添加到定位损失函数中,特定的公式如下:
总之,我们的主要贡献可以总结为以下几点:
- 我们第一个发现了如此令人鼓舞的现象:一些负样本锚点有足够强的回归能力,并且已有的检测框回归分支忽略了这些负样本锚点的学习。这些现象是限制已有检测器效果的主要瓶颈之一,我们认为这个观察对检测方向具有极大的价值。
- 基于该发现,我们提出了在线高质量锚点挖掘策略HAMBox来采样训练过程中的高质量锚点。受益于HAMBox的方法,我们能够在训练过程中给异常人脸提供足够多的有效的锚点。
- 由于补偿了高质量锚点,我们进一步提出了基于动态回归的focal loss,它帮助人脸检测器以更灵活的方式训练。
- 我们的HAMBox需要的额外计算量几乎可以忽略,并且它能够被任意的插入到人脸检测器中来提升效果。它在训练阶段,仅仅需要很少一部分额外性能成本,在推理阶段不需要额外的性能成本。
- 我们的方法在验证集和测试集上取得了超过业内最佳模型2.9%和2.3%个AP的效果。更有甚者,该方法帮助我们在2019年WIDER Face and Pedestrian Challenge上以mAP 57.13%获得冠军。
【神经网络搜索角度: BFBox: Searching Face-appropriate Backbone and Feature Pyramid Network for Robust Face Detector. CVPR 20】
本文提出的方法BFBox是基于神经网络架构搜索(NAS)的方法同时搜索适合人脸检测的特征提取器和特征金字塔。动机是我们发现了一个有趣的现象:针对图像分类任务设计的流行的特征提取器已经在通用目标检测任务上验证了其重要的兼容性,然而在人脸检测任务上却没有取得预期的效果。同时不同的特征提取器与特征金字塔的结合也不是完全正相关的。首先,本文对于比较好的特征提取器进行分析,提出了适合人脸的搜索空间;其次,提出了图1的特征金字塔注意力模块(FPN-attention Module)去加强特征提取器和特征金字塔之间的联系;最后, 采取SNAS的方法同时搜出适和人脸的特征提取器和特征金字塔结构。多个数据集上(WIDER FACE, FDDB, AFW和PASCAL Face)的实验表明了我们提出的方法的优越性。
如下图所示为检测网络的结构。网络是基于RetinaNet的结构加上我们提出的特征金字塔注意力模块(FPN-attention Module),训练超网络时采用的是随机采样的方法。
【人脸检测的讨论】
通过以上分析,我们讲解了人脸检测优化低维度的思路,包括特征融合、上下文信息、锚点设计、额外监督、数据扩充、神经网络搜索、感知野设计、单阶段Refinement、头部网络设计、anchor free等。
也许有人会问,在算法设计上,人脸检测和通用检测又有什么具体的区别呢?基于我们讲解的几篇文章,我们可以看出来:1.人脸具有自己的特定结构化特征,PyramidBox提出用半监督解决方案来生成与人脸检测相关的具有语义的近似标签,其上下文具有包含头部、肩膀等强语义的信息。而通用检测却没有这么强的上下文语义相关性。2. 人脸检测框和人脸关键点信息足够匹配,因此DenseBox通过多任务学习的方式引入了关键点定位,并且进一步提升了目标检测的准确率。而通用检测里面往往无法引入关键点信息。3.针对图像分类任务设计的流行的特征提取器已经在通用目标检测任务上验证了其重要的兼容性,然而在人脸检测任务上却没有取得预期的效果。BFBox重点分析了这种不兼容性底层的原因。
在人脸轻量级检测未来的研究趋势上,还有哪些点值得我们关注呢?如何在端边云上设计更加轻量化的检测模型?在这方面,我们可以关注下AutoML、 int8量化、蒸馏、裁剪等工作的进展。这里也欢迎大家关注我们组参与开发的飞桨PaddleSlim平台,PaddleSlim 实现了目前主流的网络量化、剪枝、蒸馏、AutoML四种压缩策略,并可快速配置多种压缩策略组合使用。我们人脸检测方向基于PaddleSlim平台也有对应的业务收益,同时我们也在PaddleDetection开源了轻量级人脸检测模型FaceBoxes和BlazeFace,其搜索得到的模型结构,相比于原版模型,在FDDB评测集上的离散ROC曲线AP值(DistROC AP)几乎不变的情况下,体积仅有240KB,压缩了3.3倍。在高通骁龙855 ARMv8处理器上单线程测试加速1.22倍。
【传送门】
飞桨(PaddlePaddle)官网: https://www.paddlepaddle.org.cn/
PaddleSlim平台:https://github.com/PaddlePaddle/PaddleSlim
PaddleDetection平台:https://github.com/PaddlePaddle/PaddleDetection