论文阅读:S3FD: Single Shot Scale-invariant Face Detector
ICCV 2017
Paper: S3FD: Single Shot Scale-invariant Face Detector
Abstract
本文提出了一种实时人脸检测器,称为单射尺度不变人脸检测器(S3FD),它使用单个深度神经网络在各种人脸尺度上表现出色,尤其对于小脸。
具体来说,我们试图解决基于锚框的(anchor-based)探测器随着目标变小而急剧恶化的常见问题。
我们在以下三个方面做出了贡献:
- 提出了一个具有尺度不变性(scale-equitable)的人脸检测框架,以便很好地处理不同尺度的人脸。我们在各种图层上平铺锚框,以确保所有人脸比例都具有足够的特征用于检测。此外,我们设计了基于有效感受野和提出的等比例间隔原理的锚框尺度;
- 通过尺度补偿锚框匹配策略提高小脸的召回率
- 通过max-out背景标签降低小脸的误报率。
最终,我们的方法在所有常见的人脸检测基准上实现了最先进的检测性能,包括AFW,PASCAL face,FDDB和WIDER FACE数据集,并且可以在Nvidia Titan X(Pascal )上以36 FPS运行处理VGA分辨率图像。
1 Introduction
人脸检测可以被视作通用目标检测的一个特例,许多人脸检测方法都从通用物体检测方法继承了有效的技术。
回顾基于锚框目标检测方法
基于锚框的目标检测方法通过对一系列预先设定的锚框进行分类和回归来检测物体
- 锚框是通过在图像上 regularly tiling 具有不同尺度和纵横比的框的集合而生成的。
- 锚框和一个或几个卷积层相关联,其空间大小和步长分别决定了锚框的位置和间隔。对锚框相关的层进行卷积以对相应的锚框进行分类和对齐。
- 与其他方法相比,基于锚框的检测方法在复杂场景中更加稳健,并且它们的速度对于对象数量是不变的。然而,随着物体变小,基于锚框的探测器的性能急剧下降。
基于锚框的检测方法存在的几个问题
- 如图(a)所示,对于检测层网络来说,步长对应的感受野较大,小尺度人脸能够表达出的特征少之又少;
- 如图(b)所示,锚框与感受野的大小不能很好的匹配,同时锚框、感受野都不能很好的匹配到小尺度人脸区域;
- 如图(c)所示,由于锚框大小实际上都是固定的,所以落在这些固定大小之外的人脸就不能很好的检测到;
- 如图(d)所示,如果想要检测到小尺度人脸,相对于大尺度人脸,那么就注定会有更多的小尺度、不包含人脸的背景锚框。
2 Related work
人脸检测在过去几十年中引起了广泛的研究关注。 Viola-Jones [48]的里程碑式工作使用Haar功能和AdaBoost来训练一系列人脸/非人脸分类,以实现高效的实时效率。 在那之后,许多工作都致力于通过更复杂的手工制作特征[25,28,53,60]和更强大的分类器[2,33]来提高性能。 除了级联结构外,[30,51,63]将可变形零件模型(DPM)引入到人脸检测任务中,并取得了显著的性能。 然而,这些方法高度依赖于手工制作的特征的鲁棒性并且分别优化每个部件,使得人脸检测流水线欠佳。 近年来基于CNN的人脸探测产生了长足进步。 CascadeCNN [21]开发了一种基于CNN的级联架构,具有强大的判别能力和较高性能。Qin等人[34]提出联合训练CascadeCNN以实现端到端优化。Faceness [55]训练一系列CNN用于人脸属性识别以检测部分遮挡的人脸。 MTCNN [58]提出使用若干多任务CNN共同解决人脸检测和对准问题。 UnitBox [57]引入了一种新的交叉联合损失函数。 此外,人脸检测还继承了通用目标检测任务的一些成就。Jiang等人 [15]在人脸检测中应用了Faster R-CNN,并取得了可喜的成果。 CMS-RCNN [59]在人脸检测中使用Faster R-CNN和身体上下文信息。 Convnet [24]将CNN与3D人脸模型集成在一个端到端的多任务学习框架中。 Wan等人 [49]将更快的R-CNN与 hard negative mining 相结合,实现了人脸检测性能的显著提升。 STN [3]提出了一种新的监督转换网络和一种带有RPN的ROI卷积用于人脸检测。 Sun等人 [43]提出了几种有效的策略来改进Faster RCNN以解决人脸检测任务。在本文,受启发于 Faster RCNN [38]中的 RPN 和SSD中的多尺度机制 [26],我们开发了一种具有实时速度的 state-of-the-art 的人脸检测器。
3 S3FD
3.1 尺度不变框架
我们的具有尺度不变性的框架是一种基于锚框的检测框架,其它的例如 RPN 和 SSD。 这些基于锚框的检测框架最大的弊端就是当脸变小时表现变得显著不佳,而我们的网络
- 在决定锚框位置后,设计了 16-512 的锚框尺度,基于感受野和等比例间距原则
- 前者保证各尺度的锚框都和对应感受野较好匹配,后者使不同尺度锚框在图像中有相同密度
模型长这样:
- Base Convolutional Layers 里就是 VGG16 的框架,但是只取 conv1_1 到 pool5 层。
- Extra Convolutional Layers 里原本 VGG16 的全连接层 fc6、fc7 被换成了卷积层(通过下采样它们的参数,当然我们知道,通过设计卷积层卷积核大小与前一层特征图相等,也能实现全连接的功能),同时后面也额外加上了4层卷积层。
- Detection Convolutional Layers:选择左下角方框里的卷基层作为检测层,对应不同尺度的锚框来预测 detections。
- Normalization Layers:和其他检测层相比,Base方框里的卷积层(conv3_3, conv4_3 和 conv5_3)有不同的特征尺度。所以使用 L2 normalization 分别将其范数 rescale 到 10,8,5。
- Predicted Convolutional Layers:每个检测层后都有一个 p×3×3×q 的卷积层,对于每个锚框,我们预测预测相对于其坐标的 4 个偏移和用于分类的 N_s 置信分数,一般的层的 N_s = 2,第一层 conv3_3 特殊处理,N_s = N_m + 1(N_m 是 maxout background label)。
- Multi-task Loss Layer:使用 softmax loss 分类,smooth L1 loss 回归。
Designing scales for anchors 为了在不同层上检测不同尺度的人脸,我们需要定义不同层的锚框尺寸。 因为人脸区域的标定框一般都是正方形,所以锚框也定义成正方形,长宽比1:1。 anchor 的尺寸取决于两个因素:
-
有效感受野 我们知道,CNN中的一个单元有两种感受野。一种是理论感受野,表示理论上可以影响该单元的输出值的输入区域,如图(a)的整个黑色方框区域。然而,并非理论感受野中的每个像素都对最终输出做出同等贡献。 通常,中心像素具有比外部像素大得多的影响,换句话说,只有一小部分区域对输出值有影响,这部分区域称为有效感受野,也就是图(a)中白色区域。 根据这一理论,anchor 应明显小于理论感受野,以匹配有效感受野。因此图(b)中蓝色虚线圆就是有效感受野,红色实线框就应该是我们的锚框大小。
-
等比例间距原则(Equal-proportion interval principle) 检测层的步长确定其在输入图像上的锚框的间隔, 例如,conv3_3的步长大小为4个像素,其锚框为16×16,表示输入图像上每 4 个像素有一个16×16的 anchor。等比例间距原则就是,anchor 的尺寸是其间隔的4倍。如图3(c)所示,它保证了不同尺度的锚框在图像上具有相同的密度,因此各种尺度的脸部可以大致匹配相同数量的锚框。
3.2 尺度补偿锚框匹配策略(Scale compensation anchor matching strategy)
训练过程中,我们需要知道哪些锚框匹配到人脸边界框。现在的锚框匹配算法首先匹配那些与标记好的人脸有最好 IOU 交并比(jaccard overlap)的锚框,然后匹配那些与任意人脸的 IOU 交并比大于某个临界值(通常为0.5)的锚框。
但是,锚框尺度是离散的,人脸尺度确是连续的。因此,尺度分布远离锚框尺度的人脸不能匹配足够的锚框,导致它们的低召回率。
如图(c)所示,两个观察结果: 1)匹配锚框的平均数量约为3,这不足以召回高分数的人脸; 2)匹配锚框的数量与锚框的尺度高度相关。 远离锚框尺度的人脸往往被忽略,导致其低召回率。
为了解决这些问题,提出一个尺度补偿锚匹配策略,分为两个阶段:
- 阶段1:我们采用当前锚框匹配算法但是将临界值从 0.5 降低到 0.35,以便增加匹配锚框的平均数。
- 阶段2:在阶段1之后,一些人脸还没有匹配够足够的锚框,比如小的和锚框尺度之外的脸(tiny and outer faces),我们对这些脸中的每一个作如下处理:首先选出与这张脸 IOU 交并比大于 0.1 的锚框(即将阈值改为 0.1),然后对它们排序选出 top-N 作为匹配锚框(N 设置为阶段1得到的平均数)。
这样一来,对于 tiny face 和 outer face 效果显著,可以看到锚框匹配曲线从图(a)蓝色虚线提高到了红色实线。
3.3 “最大者胜”的背景标签(Max-out background label)
基于锚框的人脸检测方法可以被视为一个二分类问题,也就是确定锚框是人脸(正样本)还是背景(负样本)。在我们的方法中,它是一个非常不平衡的二元分类问题:根据我们的统计结果,超过99.8%的预设锚框属于负样本(背景),只有少数锚是正样本(人脸)。
如 Table2 所示,对于一张 640×640 图像,总共产生了 34,125 个锚框,而 conv3_3 检测层贡献了其中约 75% 的最小锚框(16×16)。这些最小的锚框提高了小脸的检测率但也不可避免的导致了小脸的高假阳性率。
为了解决这个问题,在最低层采用更复杂的分类策略来处理小锚框的复杂背景。
如图(b)所示,在conv3_3检测层对于每个锚框,我们同时预测一系列背景标签的 N_m 分数,然后选择置信度最高的作为其负样本最终分数,即 Max-out。Max-out 操作将一些局部最优解集成到 S3FD 模型中,减少了小脸的假阳性率。
Conclusion
S3FD在所有常见的人脸检测基准上都实现了 state-of-the-art performance。
(当然,现在已经不是了,打江山易,守江山难啊~)
最后是人脸检测论文都会用的神图。
在这张共有1000张脸的全世界人数最多的自拍中,S3FD方法检测出了853张脸。
有什么想法,留个评论吧: