摘要
近年来,基于深度学习的人脸检测算法取得了巨大进展。这些算法一般可以分为两类,即像Faster R-CNN这样的两阶段检测器和像YOLO这样的一阶段检测器。由于一阶段检测器在精度和速度之间取得了更好的平衡,因此已被广泛应用于多种场景。在本文中,我们提出了一种基于一阶段检测器YOLOv5的实时人脸检测器,命名为YOLO-FaceV2。我们设计了一个称为RFE的感受野增强模块来增强小人脸的感受野,并使用NWD Loss来弥补IoU对小物体位置偏差的敏感性。针对人脸遮挡问题,我们提出了一种称为SEAM的注意力模块,并引入了排斥损失(Repulsion Loss)来解决它。此外,我们使用滑动权重函数(Slide)来解决简单样本和困难样本之间的不平衡问题,并利用有效感受野的信息来设计锚框。在WiderFace数据集上的实验结果表明,我们的人脸检测器优于YOLO,并且其变体在所有简单、中等和困难子集上均表现优异。源代码在https://github.com/Krasjet-Yu/YOLO-FaceV2。
关键词:人脸检测,YOLO,尺度感知,损失函数,不平衡问题
1 引言
人脸检测是许多人脸相关应用(如人脸识别、人脸验证和人脸属性分析等)中的关键步骤。近年来,随着深度卷积神经网络的蓬勃发展,人脸检测器的性能得到了极大的提升。许多基于深度学习的高性能人脸检测算法被提出。一般来说,这些算法可以分为两个分支。一个分支的典型基于深度学习的人脸检测算法[1,2,3]使用神经网络的级联方式作为特征提取器和分类器,从粗到细地检测人脸。尽管它们取得了巨大的成功,但值得注意的是,级联检测器存在一些缺点,如训练困难和检测速度慢。另一个分支是从通用目标检测算法[4,5,6]改进而来的。通用目标检测器考虑了物体更常见和更广泛的特征。因此,特定任务的检测器可以共享这些信息,然后通过特殊设计来强化显著特性。一些流行的人脸检测器,包括YOLO [7, 8, 9, 10]、Faster R-CNN [5]和RetinaNet [6],都属于这一类。在本文中,受YOLOv5 [11]、TridentNet [12]和FAN中的注意力网络[13]的启发,我们提出了一种新型的人脸检测器,它在一阶段人脸检测中达到了最先进的水平。
尽管深度卷积网络极大地改善了人脸检测,但在现实场景中检测尺度、姿态、遮挡、表情、外观和光照等方面具有高度变化的人脸仍然是一个巨大的挑战。在我们之前的工作中,我们提出了YOLOFace [14],这是一种基于YOLOv3 [9]的改进人脸检测器,它主要关注尺度变化问题,设计了适合人脸的锚框比例,并使用了更准确的回归损失函数。在WiderFace [15]验证集上,Easy、Medium和Hard的mAP分别达到了0.899、0.872和0.693。自那以后,出现了各种新型检测器,人脸检测性能得到了显著提升。然而,对于小物体,一阶段检测器必须以更细的粒度划分搜索空间,因此容易导致正负样本不平衡的问题[16]。此外,复杂场景中的人脸遮挡[13]对人脸检测器的准确性产生了显著影响。为了解决人脸尺度变化、简单和困难样本不平衡以及人脸遮挡的问题,我们提出了一种基于YOLOv5的人脸检测方法,称为YOLO-FaceV2。
通过仔细分析人脸检测器遇到的困难和YOLOv5检测器的不足,我们提出了以下解决方案。
多尺度融合:在许多场景中,图像中通常存在不同尺度的人脸,这使得人脸检测器很难全部检测到它们。因此,解决不同尺度的人脸问题是人脸算法中非常重要的任务。目前,解决尺度变化问题的主要方法是构建一个金字塔来融合人脸的多尺度特征[17,18,19,20]。例如,在YOLOv5中,FPN[20]融合了P3、P4和P5层的特征。然而,对于小尺度目标,信息在经过多层卷积后很容易丢失,即使在较浅的P3层中,保留的像素信息也非常少。因此,提高特征图的分辨率无疑有利于小目标的检测。
注意力机制:在许多复杂场景中,人脸遮挡经常发生,这是人脸检测器精度下降的主要原因之一。为了解决这个问题,一些研究人员尝试使用注意力机制进行人脸特征提取。FAN[13]提出了一种锚点级注意力机制。他们建议的解决方案是保持未遮挡区域的响应值,并通过注意力机制补偿遮挡区域降低的响应值。然而,它并没有充分利用通道之间的信息。
困难样本:在一阶段检测器中,许多边界框没有被迭代过滤掉。因此,一阶段检测器中的简单样本数量非常大。在训练过程中,它们的累积贡献主导了模型的更新,导致模型过拟合[16]。这被称为样本不平衡问题。为了解决这个问题,Lin等人提出了Focal Loss,以动态地为困难样本分配更多权重[6]。与Focal Loss类似,梯度调和机制(GHM)[21]抑制了来自正负简单样本的梯度,以更多地关注困难样本。Cao等人提出的Prime Sample Attention(PISA)[22]根据不同标准为正负样本分配权重。然而,当前的困难样本挖掘方法需要设置太多的超参数,这在实践中非常不便。
锚点设计:如[23]所指出的,卷积神经网络(CNN)特征图中的一个区域有两种类型的感受野,即理论感受野和实际感受野。实验表明,感受野中的所有像素并不都同等响应,而是服从高斯分布。这使得基于理论感受野的锚点尺寸大于其实际尺寸,从而增加了边界框回归的难度。Zhang等人在S3FDS^{3} FDS3FD[24]中根据有效感受野设计了锚点的大小。而FaceBoxes[25]设计了多尺度锚点来丰富感受野,并在不同层上对锚点进行离散化,以处理不同尺度的人脸。因此,锚点框的尺度和比例设计非常重要,这可能极大地提高模型的准确性和收敛过程。
回归损失:回归损失用于衡量预测边界框和真实边界框之间的差异。目标检测器中常用的回归损失函数有L1/L2损失、平滑L1损失、交并比(IoU)损失及其变体[26, 27, 28, 29]。YOLOv5采用IoU损失作为其目标回归函数。然而,IoU对不同尺度目标的敏感性差异很大。很容易理解的是,对于小目标,轻微的位置偏差就会导致IoU显著下降。Wang等人[30]提出了一种基于Wasserstein距离的小目标评估方法,以有效减轻小目标的影响。然而,他们的方法对于大目标的效果并不显著。
在本文中,为解决上述问题,我们基于YOLOv5设计了一种新的人脸检测器。我们的目标是找到一个最优的组合检测器,有效解决小脸、尺度变化大、遮挡场景以及难易样本不平衡等问题。首先,我们融合了特征金字塔网络(FPN)的P2层信息,以获得更多的像素级信息,并补偿小脸的信息。然而,这样会导致大、中目标的检测精度略有降低,因为输出特征图的感受野变小了。为改善这种情况,我们为P5层设计了感受野增强(RFE)模块,通过使用空洞卷积来增大感受野。其次,受特征注意力网络(FAN)和ConvMixer[31]的启发,我们重新设计了一个多头注意力网络,以补偿遮挡人脸响应值的损失。此外,我们还引入了排斥损失(Repulsion Loss)[32],以提高类内遮挡的召回率。第三,为挖掘难样本,受自适应训练样本选择(ATSS)[33]的启发,我们设计了具有自适应阈值的滑动权重函数,使模型在训练过程中更加关注难样本。第四,为了使锚框更适合回归,我们根据有效感受野和人脸比例重新设计了锚框的大小和比例。第五,我们借鉴了归一化Wasserstein距离度量[30],并将其引入回归损失函数中,以平衡在预测小脸时交并比(IoU)的不足。
综上所述,我们提出了一种新的人脸检测器YOLO-FaceV2,其主要贡献如下。
- 对于多尺度人脸检测,感受野和分辨率是关键因素。因此,我们设计了一个感受野增强模块(称为RFE),以学习特征图的不同感受野,并增强特征金字塔的表示能力。
- 我们将人脸遮挡分为两类,即不同人脸之间的遮挡和其他物体对人脸的遮挡。前者使得检测精度对非极大值抑制(NMS)阈值非常敏感,从而导致漏检。我们使用排斥损失进行人脸检测,该损失会对预测框向其他真实对象偏移进行惩罚,并要求每个预测框远离具有不同指定目标的其他预测框,从而使检测结果对NMS的敏感性降低。后者会导致特征消失,从而导致定位不准确,我们设计了注意力模块SEAM来增强人脸特征的学习。
- 为解决难易样本不平衡的问题,我们根据IoU对易样本和难样本进行加权。为减少超参数调整,我们将所有候选正样本与真实对象之间的IoU均值作为正负样本的分界线。我们还设计了一个名为Slide的加权函数,为难样本赋予更高的权重,这有助于模型学习更难的特征。该函数的详细信息将在第3-5节中介绍。
本文的其余部分安排如下:第2节回顾了该领域的相关文献;第3节详细描述了模型结构,并分别介绍了主要改进,包括感受野增强模块、注意力模块、自适应样本加权函数、锚框设计、排斥损失和归一化高斯Wasserstein距离(NWD)损失;第4节描述了实验和相应的结果分析,包括消融实验和与其他模型的比较;第5节总结了我们的工作,并给出了未来研究的建议。
2 相关工作
人脸检测。人脸检测几十年来一直是计算机视觉领域的一个热门研究方向。在深度学习的早期,人脸检测算法通常使用神经网络自动提取图像特征进行分类。CascadeCNN[1]提出了一种具有三个阶段精心设计的深度卷积网络的级联结构,以由粗到细的方式预测人脸和特征点位置。MTCNN[2]开发了一种类似的级联架构,用于联合对齐人脸特征点和检测人脸位置。PCN[3]使用角度预测网络来校正人脸,提高人脸检测的准确性。但早期基于深度学习的人脸检测算法存在一些缺点,如训练繁琐、局部最优、检测速度慢、检测精度低等。
当前的人脸检测算法主要通过继承通用目标检测算法(如SSD[4]、Faster R-CNN[5]、RetinaNet[6]等)的优点进行改进。CMSRCNN[34]以Faster R-CNN为主干网络,并引入上下文信息和多尺度特征来检测人脸。Zhang等人[25]设计了一个基于SSD结构的轻量级网络FaceBoxes,通过32倍下采样快速缩小特征图尺寸,并使用多尺度网络模块在网络的宽度和深度维度上增强特征。SRN[35]在通用目标检测算法RefineDet[36]和RetinaNet[6]的基础上进行了改进,通过引入两阶段分类和回归实现高性能,并设计了一个多分支模块来增强感受野的效果。
尺度不变性。作为人脸检测中最具挑战性的问题之一,复杂场景中的大人脸尺度变化对检测器的准确性有重要影响。多尺度检测能力主要取决于尺度不变特征,许多工作致力于更准确、有效地提取这些特征[13, 24, 37, 38]。对于小目标检测,使用较少的下采样层和空洞卷积可以显著提高检测性能[39,40]。解决这一问题的另一种方法是使用更多的锚框。锚框可以提供良好的先验信息,因此使用更密集的锚框和相应的匹配策略可以有效提高目标候选框的质量[24,25,37,40]。多尺度训练有助于构建图像金字塔并增加样本多样性,这是提高多尺度目标检测性能的一种简单而有效的方法。另一方面,感受野会增加,相应的语义信息也会更丰富,但空间信息可能会相应缺失。一个自然的想法是将深层语义信息与浅层特征相融合,如[20,41,42]。此外,SNIP[43]和TridentNet[12]也为解决多尺度问题提供了新的思路,将在以下部分详细讨论。
遮挡问题。密集人脸及其带来的遮挡问题导致部分数据缺失被遮挡人脸的信息,因为一些区域不可见或边界模糊,这很容易导致漏检和召回率低。一些工作已经证明,上下文信息有助于人脸检测以缓解遮挡问题。SSH[37]通过使用简单的卷积层来扩大候选框周围的窗口,从而结合上下文信息。FAN[13]提出了一种锚框级注意力机制,通过突出人脸区域的特征来检测被遮挡的人脸。PyramidBox[44]设计了一个上下文敏感预测模块,其中用DSSD的残差预测模块替换了SSH中上下文模块的卷积层。RetinaFace[45]在五个特征金字塔级别上应用独立的上下文模块,以增加感受野并增强刚性上下文建模能力。上述方法在遮挡问题上取得了良好的效果。因此,利用上下文信息来提高遮挡区域的有效性是一个可行的方向,值得进一步探索。
易难样本不平衡。对于单阶段人脸检测,易样本的数量非常大,它们主导了损失的变化,导致模型只能学习易样本的特征,而忽略了难样本的学习。为了解决这个问题,OHEM[46]算法根据样本损失选择难样本,并将难样本的损失应用于随机梯度下降的训练中。针对OHEM算法中忽略易样本的问题,Focal Loss[6]通过对样本进行加权来更好地利用所有样本,并获得更高的准确性。SRN[35]也遵循了这一思路。Faceboxes[25]根据样本的IoU损失进行排序,并控制正负样本的比例小于1:3。虽然上述方法可以有效解决样本不平衡问题,但它们也人为地引入了一些超参数,增加了调整的难度。因此,我们设计了一个具有自适应参数的样本平衡函数。
3 YOLO-FaceV2
3.1 网络架构
YOLOv5是一款出色的通用目标检测器。我们将其引入人脸检测领域,并尝试解决小人脸和人脸遮挡等问题。
我们的YOLO-FaceV2检测器的架构如图1所示。它包含三个部分:主干结构、颈部和头部。我们采用CSPDarknet53作为主干结构,并在P5层用RFE模块替换Bottleneck,以融合多尺度特征。在颈部部分,我们保留了SPP[47]和PAN[48]的结构。此外,为了提高目标位置感知能力,我们还将P2层融入PAN中。头部用于分类目标类别并回归目标位置。我们还向头部添加了一个特殊分支,以增强模型对遮挡检测的能力。
在图1(a)中,左侧的红色部分是检测器的主干结构,由CSP块和CBS块组成。它主要用于提取输入图像的特征。我们在P5层添加RFE模块,以扩大有效感受野并增强多尺度特征的融合能力。在图1(b)中,右侧的蓝色和黄色部分称为颈部层,由SPP和PAN组成。我们额外融合了P2层的特征,以提高目标定位的精确度。在图1(c)中,我们在颈部层的输出部分之后引入了分离和增强注意力模块(SEAM),以增强遮挡人脸的响应性。
3.2 尺度感知RFE模型
由于不同大小的感受野意味着捕获长距离依赖性的能力不同,我们设计了RFE模块,通过使用空洞卷积来充分利用特征图中感受野的优势。受TridentNet启发,我们使用四个不同空洞率的空洞卷积分支来捕获多尺度信息和不同范围的依赖性。所有分支共享权重,唯一不同的是它们独特的感受野。一方面,这减少了参数数量,从而降低了潜在过拟合的风险。另一方面,它可以充分利用每个样本。所提出的RFE模块可分为两部分:基于空洞卷积的多分支部分和收集&加权层,如图2所示。多分支部分分别以1、2和3作为不同空洞卷积的空洞率,均使用固定的3x3卷积核大小。此外,我们添加了一个残差连接,以防止训练过程中出现梯度爆炸和消失的问题。收集和加权层用于从不同分支收集信息并为每个分支的特征加权。加权操作用于平衡不同分支的表示。
为了明确说明,我们用RFE模块替换了YOLOv5中C3模块的瓶颈部分,以增加特征图的感受野,从而提高多尺度目标检测和识别的准确性,如图2所示。
3.3 遮挡感知排斥损失
类内遮挡可能导致人脸A包含人脸B的特征,从而导致更高的误检率。通过排斥力引入排斥损失可以有效地缓解这个问题。排斥损失分为两部分:RepGT和RepBox。RepGT损失的功能是使当前边界框尽可能远离周围的真实框。这里的周围真实框是指除边界框本身要返回的对象外,与面部IoU最大的面部标签。RepGT损失函数的公式如下:
LRepGT=∑P∈P+Smoothln(IoG(P,GRepP))∣P+∣L_{\mathrm{RepGT}}=\frac{\sum_{P \in \mathcal{P}_{+}} \operatorname{Smooth}_{l n}\left(\operatorname{IoG}\left(P, G_{R e p}^{P}\right)\right)}{\left|\mathcal{P}_{+}\right|}LRepGT=∣P+∣∑P∈P+Smoothln(IoG(P,GRepP))
其中
Smooth ln={ −ln(1−x)x≤σx−σ1−σ−ln(1−σ)x>σ\text { Smooth }_{l n}=\left\{\begin{array}{ll} -\ln (1-x) & x \leq \sigma \\ \frac{x-\sigma}{1-\sigma}-\ln (1-\sigma) & x>\sigma \end{array}\right. Smooth ln={ −ln(1−x)1−σx−σ−ln(1−σ)x≤σ