本文提出了一种基于single-shot尺度不变的人脸实时检测方法,该方法在各种尺度的人脸检测中都具有良好的性能,尤其是在小尺度的人脸检测中。具体来说,我们试图解决基于anchor的探测器随着物体变小而急剧恶化的常见问题。我们在以下三个方面做出了贡献:1)提出了一个尺度公平的人脸检测框架,能够很好地处理不同尺度的人脸。我们在大范围的图层上平铺anchors,以确保所有的人脸尺度都有足够的特征来检测。在此基础上,根据有效感受野和等比例间隔原理设计了anchor尺度;2)采用尺度补偿匹anchor配策略提高小人脸的召回率;3)通过max-out背景标签降低小面孔的假阳性率。因此,我们的方法可以在所有常见的人脸检测基准上实现最先进的检测性能,包括AFW、PASCAL人脸、FDDB和更广泛的人脸数据集,并可以在Nvidia Titan X (PASCAL)上以36帧每秒的速度运行vga分辨率的图像。
人脸检测是后续人脸识别应用的关键步骤,如人脸对齐[50,61]、人脸识别[32,40,62]、人脸验证[44,46]、人脸跟踪[17]等。在过去的几十年里,它已经得到了很好的发展。继Viola-Jones人脸检测器[48]的开创性工作之后,早期的工作大多集中在设计健壮的特征和训练有效的分类器。但是这些方法依赖于非鲁棒的手工特性,并分别对每个组件进行优化,使得人脸检测pipeline处于次优状态。
近年来,卷积神经网络(convolutional neural network, CNN)取得了显著的成功,从图像分类[10,42,45]到目标检测[8,23,26,37,38],都激发了人脸检测的灵感。一方面,许多工作[21,31,54,55,58]在传统的人脸检测框架中使用CNN作为特征提取器。另一方面,人脸检测被认为是通用目标检测的一个特例,很多方法[3,15,43,49,59]都继承了通用目标检测方法[38]的有效技术。在此基础上,改进了基于anchor的通用目标检测框架,提出了一种最先进的人脸检测方法。
基于anchor的目标检测方法[26,38]通过对一系列预置anchor进行分类和回归来检测目标,这些预置anchor是通过在图像上定期平铺一组不同尺度和长宽比的方框生成的。这些anchor与一个[38]或多个[26]卷积层相关联,其空间大小和步长大小分别决定了anchor的位置和间隔。与anchor相关的层进行卷积,以对相应的anchor进行分类和对齐。与其他方法相比,基于anchor的检测方法在复杂场景中具有更强的鲁棒性,且检测速度不受目标个数的影响。然而,正如[12]所示,随着物体的变小,基于anchor的检测器的性能急剧下降。为了提出一种基于尺度不变anchor的人脸检测器,我们综合分析了产生上述问题的原因如下:
图1所示。基于anchor的方法存在问题的原因。(a)特征少:小人脸在检测层特征少。(b)误匹配:anchor尺度与感受野不匹配,均太大,无法适应小人脸。(c)anchor匹配策略:图中为当前anchor匹配方法下不同人脸尺度匹配anchor的数量。它反映了小的和外部的人脸匹配太少的anchors。(d)小anchor背景:两幅图分辨率相同。左边平铺小anchor检测小人脸,右边平铺大anchor检测大人脸。小anchor会在背景上产生大量的负anchor。
有偏见的框架。基于anchor的检测框架容易漏掉中小人脸。首先,最低anchor相关层的步长过大(如[26]中的8个像素,[38]中的16个像素),因此中小人脸在这些层上被高度压缩,检测的特征较少,如图1(a)所示。其次,小的人脸、anchor尺度和感受野相互不匹配;anchor尺度与感受野不匹配,都太大,无法匹配小人脸,见图1(b)。为了解决上述问题,我们提出了一个尺度公平的人脸检测框架。我们将anchor平铺在大范围的特征层上,这些特征层的步长从4像素到128像素不等,这保证了不同尺度的人脸具有足够的特征来检测。此外,我们设计anchor尺度从16到512像素/不同层根据有效的感受野[29]和一个新的等比例间隔的原则,确保anchor在不同层匹配相应的有效的感受野和anchor均匀分布在图像的不同尺度。
小anchor的背景。为了很好地检测小人脸,必须在图像上密集地平铺大量小anchor。如图1(d)所示,这些小anchor导致背景上的负anchor数量急剧增加,产生了许多假阳性人脸。例如,在我们的尺度公平框架中,超过75%的负anchor来自最低的conv3_3层,该层用于检测小人脸。为了降低小人脸的假阳性率,本文提出了一种max-out 背景标签来检测最底层人脸。
为清晰起见,本文的主要贡献可以概括为:
•提出一种尺度公平的人脸检测框架,包含广泛的anchor关联层和一系列合理的anchor尺度,可以很好地处理不同尺度的人脸。
•提出一种尺度补偿anchor匹配策略(满足等比例间隔原则),提高小人脸的召回率。
•引入max-out背景标签,降低小人脸的高假阳性率。
•在AFW、PASCAL face、FDDB和WIDER face上实时实现最好的结果。
人脸检测在过去的几十年里引起了广泛的研究关注。Viola-Jones[48]的里程碑式工作是利用Haar特征和AdaBoost训练一个级联的人脸/非人脸分类器,达到了良好的精度和实时性。在此之后,许多工作都集中于使用更复杂的手工特性[25,28,53,60]和更强大的分类器[2,33]来改进性能。除了级联结构外,[30,51,63]还将可变形部件模型(deformable parts models, DPM)引入人脸检测任务中,取得了显著的性能。然而,这些方法高度依赖于手工特征的鲁棒性,对每个组件分别进行优化,使得人脸检测管道次优。
近年来,基于cnn的人脸检测技术得到了很大的发展。级联神经网络[21]开发了一种基于神经网络的级联结构,具有强大的识别能力和高性能。Qin等人提出联合训练级联神经网络实现端到端优化。Faceness[55]训练了一系列用于人脸属性识别的神经网络来检测部分遮挡的人脸。MTCNN[58]提出了利用多个多任务神经网络共同解决人脸检测和对齐问题。UnitBox[57]引入了一个新的交叉过联合损失函数。
此外,人脸检测继承了一般目标检测任务的一些成果。Jiang等人将Faster R-CNN应用于人脸检测中,取得了很好的效果。CMS-RCNN[59]使用Faster R-CNN人脸检测与身体上下文息。Convnet[24]将CNN与三维人脸模型集成在一个端到端的多任务学习框架中。Wan等人将Faster R-CNN与硬负挖掘相结合,实现了人脸检测性能的显著提高。STN[3]提出了一种新的有监督变压器网络,并与RPN进行了ROI卷积,用于人脸检测。Sun等人提出了几种有效的策略来改进快速RCNN来解决人脸检测任务。本文以Faster RCNN[38]中的RPN和SSD[26]中的多尺度机制为灵感,研制了一种具有实时速度的最先进的人脸检测系统。
本节介绍我们的单点尺度不变人脸检测器,包括尺度公平框架(3.1节)、尺度补偿anchor匹配策略(3.2节)、max-out背景标签(3.3节)和相关的训练方法(3.4节)。
我们的尺度公平框架是基于基于anchor的检测框架,如RPN[38]和SSD[26]。尽管取得了巨大的成就,但该框架的主要缺点是,当人脸变得更小时,性能会急剧下降。为了提高对人人脸尺度的鲁棒性,我们开发了一个具有广泛anchor相关层的网络架构,其步长从4像素逐渐增加到128像素。因此,我们的体系结构确保不同尺度的人脸具有足够的特征来检测anchor相关的层。在确定anchor位置后,基于有效感受野和等比例区间原则,设计了16 - 512像素的anchor尺度。前者保证每个尺度的anchor与对应的有效感受野良好匹配,后者使不同尺度的anchors在图像上具有相同的密度。
图2. Single-Shot尺度不变人脸检测器(S3FD)的结构。它由基本(base)卷积层、额外卷积层、检测卷积层、归一化层、预测卷积层和多任务损失层组成。
构造结构。我们的架构(见图2)是基于VGG16[42]网络(在任何分类层之前都被截断),并有一些辅助结构:
1,基本卷积层:我们保留了从conv1到pool5的VGG16层,并删除了所有其他层(全连接层)。
2,额外卷积层:通过对VGG16的fc6和fc7的参数[4]进行下采样,将它们转换为卷积层,然后在后面添加额外的卷积层。这些层的尺寸逐渐减小,形成多尺度特征图。
3,检测卷积层:我们选取conv3_3、conv4_3、conv5_3、conv_fc7、conv6_2、conv7_2作为检测层,这些检测层与不同尺度的anchors相关联,预测检测结果。
4,归一化层:与其他检测层相比,conv3_3、conv4_3、conv5_3具有不同的特征尺度。因此,我们使用L2归一化[27]将它们的范数分别缩放到10、8和5,然后在反向传播过程中学习尺度。
4,预测卷积层:每个检测层后面都有一个p*3*3*q卷积层,其中p和q为输入输出通道数,3*3为卷积核大小。对于每个anchor,我们预测4个坐标偏移量和Ns个分类得分,其中,conv3_3检测层的Ns = Nm + 1 (Nm为maxout背景标签),其他检测层的Ns = 2。
5,多任务损失层:采用softmax损失进行分类,平滑L1损失进行回归。
表1。 六个检测层的步长、anchor尺度和感受野(RF)。这里的感受野与检测层上的3*3卷积核单元相关,因为它后面是一个3*3的预测卷积层来预测检测。
anchors尺度设计。六个检测层中的每一个都与一个特定的anchor尺度关联(即,表1第三列)检测对应尺度人脸。我们的anchors是1:1长宽比(即,因为面包围框近似为正方形。如表1第二列和第四列所示,各检测层的步长和感受野是固定的,这是我们设计anchors尺度时的两个基点:
•有效的感受野:正如[29]中指出的,CNN中的一个单元有两种类型的感受野。一个是理论感受野,它表示理论上可以影响该单元值的输入区域。然而,理论感受野中并不是每个像素都对最终输出有相同的贡献。一般来说,中心像素的影响要比外部像素大得多,如图3(a)所示。换句话说,只有一小部分区域对输出值有有效影响,这是另一种接受域,称为有效感受野。根据该理论,anchor应明显小于理论感受野,以匹配有效接受域(具体例子见图3(b))。
•等比例间隔原理:检测层的步长大小决定了其anchor在输入图像上的间隔。例如,conv3_3的步长为4个像素,其Anchor为16*16,表示输入图像上每4个像素有一个16*16个的anchor。如表1第二列和第三列所示,我们的anchor的尺度是它的间隔的4倍。我们称之为等比例间隔原理(如图3(c)所示),它保证不同尺度的anchors在图像上具有相同的密度,因此不同尺度的人脸能够近似匹配相同数量的anchors。
图3.(a)有效感受野:整个黑盒子为理论感受野(TRF),高斯分布的白点云为有效感受野(ERF)。ERF只占TRF的一小部分。这个图片来自[29]。(b)一个具体例子:在我们的框架中,conv3_3的后的理论感受野48*48(黑色虚线框),ERF为(a)估计的蓝色虚线圆圈,其anchor为16*16(红色实线框),比TRF小很多,但与ERF匹配。(c)等比例区间原则:假设n为anchor尺度,则n/4为该尺度anchor的间隔。n/4也对应于与此anchor相关联的层的步长大小。彩色效果最佳。
得益于尺度公平的框架,我们的人脸检测器可以更好地处理各种尺度的人脸,尤其是小人脸。
在训练中,我们需要确定哪些anchor对应于一个人脸边界框。当前的anchor匹配方法首先将每个人脸匹配到具有最佳jaccard重叠[5]的anchor,然后将anchor匹配到任何jaccard重叠超过阈值(通常为0.5)的人脸。然而,anchor尺度是离散的,而人脸尺度是连续的,这些远离anchor尺度分布的人脸无法匹配足够的anchor,导致召回率较低。如图1(c)所示,我们计算不同尺度人脸匹配anchor的平均数量。有两个观察结果:1)匹配的anchor平均数量约为3,不足以召回高分人脸;2)匹配deanchors的数量与anchors的尺度高度相关。远离anchor尺度的人脸往往被忽略,导致它们的召回率较低。针对这些问题,我们提出了一种分两个阶段的尺度补偿锚匹配策略:
图4.(a)比较现有的anchor匹配方法与我们的尺度补偿anchor匹配策略对不同尺度人脸的匹配数。(b)maxout背景标签的说明。
•第一阶段:我们按照目前的anchor匹配方法,将阈值从0.5降低到0.35,以增加匹配anchor点的平均数量。
•第二阶段:第一阶段后,仍有部分人脸与anchor匹配不足,如图4(a)中以灰色虚线标记的小人脸和外部人脸。我们对每一个人脸进行如下处理:首先选择与该人脸jaccard重叠大于0.1的acnhors,然后对它们进行排序,选择top-N作为该人脸匹配的anchor。我们设N为第一阶段的平均值。
如图4(a)所示,我们的anchor匹配策略大大增加了小人脸和外部人脸的匹配anchor,显著提高了这些人脸的召回率。
基于anchor的人脸检测方法可以看作是一个二分类问题,它决定了anchors是人脸还是背景。在我们的方法中,这是一个非常不平衡的二分类问题:根据我们的统计结果,超过99:8%的预置anchors属于负anchors(即,背景),只有少数anchors是正anchors(即,人脸)。这种极端的不平衡主要是由于对小人脸的检测。具体来说,我们必须在图像上密集地平铺大量小anchor来检测小人脸,这导致负anchors的数量急剧增加。例如,如表2所示,640*640图像共有34125个anchors,其中大约75%来自与最小anchor相关的conv3_3检测层(16*16)。这些最小的anchor对假阳性人脸贡献最大。因此,通过平铺小anchors来提高小人脸的检测率,必然会导致小人脸的高假阳性率。
表2. 在640*640图片中关于anchor的详细信息
为了解决这一问题,我们提出了一种更复杂的底层分类策略来处理小anchor复杂的背景。我们为conv3_3检测层应用了max-out背景标签。对于每一个最小的anchors,我们对背景标签的Nm值进行预测,然后选择最高的作为最终得分,如图4(b)所示。Max-out操作将局部最优解集成到我们的S3FD模型中,从而降低小人人脸的假阳性率。
在本小节中,我们将介绍训练数据集、数据扩充、损失函数、硬负挖掘等实现细节。
训练数据集和数据增强。我们的模型在WIDER FACE数据集上训练于12880张人脸,采用以下数据增强策略
•颜色蒸馏:应用一些类似于[11]的图像指标蒸馏。
•随机裁剪:我们采用放大操作来产生更大的人脸脸。因为WIDER FACE训练集中有太多小的人脸。具体来说,每张图片从原始图像随机裁剪选择从五方形patch,:一个是最大的方形patch,和其他四个方形patch的大小范围在原始图像短边的[0.3,1]之间。如果人脸框的中心在采样的patch中,我们保留了人脸框的重叠部分。
•水平翻转:随机裁剪后,将选中的正方形patch大小调整为640*640,水平翻转的概率为0:5。
•损失函数。我们使用RPN 中定义的多任务损失函数联合优化模型参数:
其中 i 为anchor的索引,pi 为anchor i 是人脸的预测概率。如果anchor为正,则ground-truth标签 pi* 为1,否则为0。 ti 为表示预测边界框的4个参数化坐标的向量,ti* 为与正anchros关联的ground truth框的参数化坐标。分类损失Lcls(pi,pi*) 是二类(人脸和背景)softmax损失。回归损失 Lreg(ti,ti*) 为[8]中定义的smooth L1损失,pi*Lreg 表示回归损失仅在anchor为正时被激活,否则被禁用。这两项由Ncls和Nreg归一化,并由一个平衡参数lanmuda加权。在我们的实现中,cls项由正anchors和负anchors的数量进行标准化,而reg项由正anchors的数量标准化。由于正anchors和负anchors数量的不平衡,lanmuda被用来平衡这两个损失项。
硬负样本挖掘。在anchors匹配步骤后,大多数anchors都是负的,这就导致了正、负训练样本之间的显著不平衡。为了更快的优化和更稳定的训练,我们不再使用全部或随机选择一些负样本,而是根据损失值对它们进行排序,并选择最优的样本,这样负与正的比例最多为3:1。对于hard negative mining,我们设置上述背景标签Nm = 3, lanmuda = 4来平衡分类和回归的损失。
其他实现细节。在参数初始化方面,基本卷积层具有与VGG16相同的体系结构,其参数由预先训练好的[39]VGG16初始化。通过VGG16的fc6和fc7的子采样参数初始化conv_fc6和conv_fc7的参数,并用“xavier”方法[9]随机初始化其他附加层的参数。我们使用SGD,Momentum=0.9、0.0005的权重衰减和32的batch size大小对模型进行微调。迭代的最大数量是120k(300个epoch),前80k(前200 epoch)我们设置学习率为0.001,然后继续训以0.0001和0.00001的学习率训练20k迭代(20k次迭代为50个epoch)。我们的方法是在Caffe[14]中实现的,代码可以在https://github.com/sfzhang15/SFD中找到。
在本节中,我们首先分析了我们的尺度公平框架、尺度补偿anchor匹配策略和max-out背景标签的有效性,然后在常用的人脸检测基准数据集上对最终模型进行评估,最后介绍了推理时间。
通过大量的实验,我们在WIDER FACE人脸验证集上分析了我们的模型。WIDER FACE人脸验证集有easy、medium和hard子集,它们分别大致对应于大脸、中脸和小脸。因此,对我们的模型进行评价是合适的。
Baseline。为了评估我们的贡献,我们用我们的baseline进行了对比实验。我们的S3FD是受RPN[38]和SSD[26]的启发,直接用它们训练两个人脸检测器作为baseline,分别标记为RPN-face和SSD-face。与[38]不同的是,将RPN -face 平铺的六个尺度的方形anchors(16、32、64、128、256、512)放在VGG16的conv5_3层上,使比较更加充实。SSD-face继承了SSD的体系结构和 anchors设置。其余部分与我们的S3FD设置相同。
消融设置。为了更好地理解S3FD,我们进行了消融实验,以检查每个提出的组件如何影响最终性能。我们在三种不同情况下评估我们方法的性能:(i) S3FD(F):它只使用尺度公平的框架(即。构造的结构和设计的anchors),并消融另外两个组件;(二)S3FD(F+S):采用尺度公平框架和尺度补偿anchor匹配策略;(三)S3FD(F+S+M):这是我们完整的模型,包括尺度公平框架、尺度补偿anchor匹配策略和max-out背景标签。
表3。在WIDER FACE人脸验证子集上,我们模型的比较和消融结果。这些方法的精度-召回曲线(PR曲线)在补充资料中。
从表3的结果可以看出,一些有客观的结论可以总结如下:
尺度公平框架很重要。与S3FD(F)相比,RPN-face和SSD-face唯一的区别是它们的框架。RPN -face有和我们一样的anchor选择,但是只在VGG16的最后一个卷积层上使用进行检测输出。它的步长(16像素)对于小的脸来说太大了,而且不同尺度的anchor具有相同的感受野。SSD-face 在几个卷积层上平铺anchors,而对于小的人脸,其最小的步长(8像素)和对于最小的anchor相比小人脸还是过大。此外,其anchors与有效感受野不匹配。表3中S3FD(F)的结果表明,我们的框架大大优于SSD-face和RPN-face,特别是在hard子集上(上升了8.6%),这主要由小人脸组成。通过比较不同子集的结果,我们的S3FD(F)能够很好地处理不同尺度的人脸,并且随着人脸的变小,S3FD(F)的处理能力略有下降,说明了S3FD对人脸尺度的鲁棒性。
尺度补偿anchor匹配策略更好。对比表3中第三行和第四行,我们的尺度补偿anchor匹配策略有效地提高了性能,特别是对于小人脸。mAP对easy,medium和hard子集,分别增加了0.9%,0.4%,2.2%。增加的主要原因是不同尺度的人脸召回率较高,特别是对于当前anchor匹配方法忽略的人脸召回率更高。
max-out背景标签很可观。S3FD的最后一个贡献是max-out背景标签。它处理大量来自conv3_3检测层小的负anchors(例如,背景),该检测层用于检测小的人脸。如表3所示,easy、medium和hard子集的改进分别为0.2%、0.4%、0.7%。结果表明,maxout背景标签的有效性与输入图像的难度呈正相关。因为harder图片会产生越难分的小背景。
推理时间
在推理过程中,我们的方法输出大量的框(例如,用于vga分辨率图像的25600个框)。为了加快推理时间,我们首先以0.05的置信度阈值过滤掉大部分框,在应用NMS之前保留前400个框,然后执行jaccard重叠为0.3的NMS,保留前200个框。我们使用Titan X (Pascal)和cuDNN v5.1以及Intel Xeon [email protected]来测量速度。对于单GPUbatch size大小为1的VGA分辨率图像,我们的人脸检测器可以以每秒36帧的速度运行,达到实时的速度。此外,约80%的forward时间花在VGG16网络上,因此使用更快的base网络可以进一步提高速度。