CVPR 2017论文《Scale-Aware Face Detection》学习


CVPR 2017论文《Scale-Aware Face Detection》学习(点此下载)



0 Abstract

CNN不擅长处理多尺度的人脸,要么用具备多尺度感知能力的单个大模型,要么借助图像金字塔多次通过一个模型。这俩都耗费计算。作者提出SAFD尺度感知人脸检测器,明确地处理尺度问题,精度更高负荷更小。

具体做法是:在检测前先通过高效的CNN预测人脸尺度直方图,以指导图像缩放;由于缩放后的目标尺度一致,所以可以通过一个很小的CNN来进行人脸检测。

实验:对AFW,检测出了其中99%的脸,而每张图像缩放级数平均不到两级。还在FDDB,MALF上进行了充分实验。



1 Introduction


人脸检测中的尺度问题并没有被很好的讨论,还有很大提升空间。处理尺度的两个思路是:加大CNN容量,或者缩放更多级金字塔。前者需要把图像送入一个大模型一次(单次多尺度),后者需要把图像(的不同缩放)送入一个小模型多次(多次单尺度)。

作者采用多次单尺度的思路,直接把图像缩放到适合模型的大小,跳过图像金字塔中无价值的级。即,先估计人脸尺度,缩放后进行单尺度人脸检测。

具体而言,第一阶段,用尺度提议网SPN估计人脸尺寸。实现为全卷积、以全局最大池化结尾,输出固定长度的向量;可通过图像级gt直方图向量监督训练,不需要人脸位置信息。

第二阶段,进行单尺度人脸检测。实现为RPN;训练时把人脸缩放到相同的尺度,从而用一个较小的CNN也能达到较高性能。

使用该两阶可感知尺度的区域提议网SARPN,计算量小且精度高。其原因很明显:用小网络处理单尺度,比多尺度性能更好;而大尺度的人脸可以通过缩小来避免无效计算。

Contributions

  1. 把人脸检测任务分成两个子问题:尺度估计和单尺度检测。减少了运算量。
  2. 提出SPN,进行精细尺度估计。而该网络很容易在图像级监督上进行训练。

CVPR 2017论文《Scale-Aware Face Detection》学习
图1 单尺度检测器需要在图像金字塔上进行检测,从而涵盖不同尺度的人脸。然而图像金字塔的大部分级是无效的(红线箭头),只有少部分有效(绿线箭头)。在无效的级上进行检测浪费计算。作者提出用CNN先估计人脸的有效尺度,进而可以剔除这些无效级,显著地减少运算量。

2 Related works


已有一些方法成功地处理了尺度:融合不同层的特征图之后检测;直接用不同层的特征图进行检测。

他们的思路都是:打脸需要大感受野,小脸需要小感受野(更高的分辨率)。

他们的弊端有两点:不能明确地共享不同尺度间的特征(只是模糊地共享网络的不同层),需要更多参数来处理更大范围的人脸;要一次性处理图像中的所有人脸,尤其为了防止丢失小脸而不缩放图像,无效计算太多,有损速度。

3 Scale-aware detection pipeline


CVPR 2017论文《Scale-Aware Face Detection》学习
图2 SAFD的流程。先把输入图像下采样送入SPN以获得尺度直方图。根据尺度直方图冲采样输入图像。最后把这些图像送入RPN,得到检测结果。

3.1 Scale Proposal Network (SPN)

作者把尺度提议定义为一组估计的人脸尺寸和相应的置信度。前者将在4.2中详谈。SPN在设计目标是以最少的人为约束来产生尺度直方图。

SPN为FCN,以Global Max Pool结尾,把任意输入尺寸固定为定长向量。结构见图3。输入hwn、输出11n,每个元素代表相应尺度的人脸概率。该直方图矢量可看做概率-尺度直方图。矢量的长度代表尺度的数量;概率值由Sigmoid归一化得到。

CVPR 2017论文《Scale-Aware Face Detection》学习
图3 SPN的构造。以Global Max Pool结尾,可得输出固定维度的尺度矢量。其中每个元素的值表示图像含有相应尺度的人脸的概率。训练时SPN只需要图像级监督。

尺度矢量的详细定义。从左到右有n个尺度段,最小尺度为s0、最大为sn,都是log尺度。尺度矢量h为:
CVPR 2017论文《Scale-Aware Face Detection》学习

其中x表示某个人脸,size(x)size(x)表示其尺寸。

aia_i所处的尺度区间为[sil,sir)[s_i^l, s_i^r),其中sil=s0+(i1)×ds_i^l = s_0 + (i - 1) \times dsir=s0+i×ds_i^r = s_0 + i \times dd=(s0sn)/nd = (s_0 - s_n) / n

换言之,第i个尺度区间所对应的人脸的尺寸在式(3)范围内:
CVPR 2017论文《Scale-Aware Face Detection》学习

至于SPN末尾的Global Max Pool,它充当了一个响应聚合器,摒弃了位置信息、提取了所有位置的最大响应——这是一项巨大的优势。训练RPN的过程天然基于如下假设:当分类热图在原图上的投影靠近目标中心时,分类的置信度应当很高。但是,在SPN中,人脸响应可以落在热图的任意位置。忽略位置信息帮助网络从人脸和上下文学习根据表现力的特征,就算人脸尺度远大于或远小于检测器的表达能力。这种安排让人脸的各个区域也可以为尺度估计做贡献。只选择最大响应增强了健壮性。

SPN的训练策略将在4.1讨论。

3.2 Scaling strategy generation

一张图里可能有多张脸,为了减少运算,作者希望可以把人脸缩放到相近尺寸,这样一次检测就可以全部覆盖。由于SPN的高分尺度估计,这点可以通过NMS实现。

不过,尺度直方图有噪声;某个尺度上有人脸,会在其临近尺度上引发高响应。因而很难直接通过阈值选出高响应尺度提议。

CVPR 2017论文《Scale-Aware Face Detection》学习
图4 从输入图像生成尺度提议的过程。图像经过SPN得到尺度矢量。然后用滑动平均减少噪声。最后用一维NMS获得最终的尺度提议。

为从尺度直方图提取有用信息,要先通过移动平均法平滑直方图,减少高频噪声,同时保留足够分辨率。再通过一维NMS从直方图提取峰值,峰值位置对应人脸尺寸、高度对应置信度。

经过处理的直方图可以指导图像的缩放。就算它不能保证最少数量的缩放,但是次优的结果也显著降低运算量并提供足够的召回率。

3.3 Single-scale RPN

作者采用RPN检测人脸。它是FCN,有分类和回归两个分支,每个分支又有多个不同尺度的子分支(我:意为不同大小和比例的anchor)详见[30]。

由于在SPN的指导下已经通过缩放消除了尺度差异,所以RPN只用一个anchor就够了。作者把最大可检测人脸的尺寸设置为最小可检测人脸尺寸的2倍,这可以兼顾较少的缩放次数和较高的精度。



4 Implementation details


4.1 Global supervision

SPN的输出尺度矢量通过Sigmoid交叉熵损失来监督:
CVPR 2017论文《Scale-Aware Face Detection》学习
其中N表示尺度矢量的维数或者尺度区间数,p^n\hat{p}_n是SPN估计的第n个尺度区段内有人脸的概率、pnp_n则是真实值。

和训练RPN不同,训练SPN时没有位置信息:梯度只在有最大响应的地方反向传播。由于不相关位置的相似特征不能泛化到所有训练样本,SPN在全局的监督下能够自动地学习那些容易泛化的特征,并快速地排除那些可能引起错误尺寸提议的特征。

忽略位置约束,正是全局监督的一项优势。相比之下,训练全卷积检测器或分割网络时,把真实样本匹配到热图有赖于一系列策略,而这些手工匹配给训练过程引入了强约束。比如RPN,热图上的位置必须和输入图像对应。移除这些约束,SPN可以适应好的特征并给出合适的响应。全局监督的好处在于,小感受野的SPN也可以为很大尺寸的目标产生正确的尺度提议;Global Max Pool具有天然的困难样本挖掘能力。

当然,尺度提议也可由具有大感受野的复杂网络如RPN产生,但是它们显然不具备SPN的速度优势。

CVPR 2017论文《Scale-Aware Face Detection》学习
图5 大于和小于SPN感受野(不考虑最后的Global Max Pool)的尺度响应图。右上的脸远大于SPN感受野,其相应图刚好对应的人脸关键点。这说明即使目标远大于SPN感受野,SPN仍可以根据目标的部分相应召回该目标。而且,尽管作者在Global Max Pool之前并没有监督人脸的位置,响应图仍可以揭示出一些位置信息。

4.2 Ground truth preparation

Definition of bounding box

用于生成真实直方图的人脸的尺寸定义为正方形边框的边长。这有一个问题,即如何定义人脸的边框、又如何保证它在所有样本中保持统一。而且,边框标注的任何噪声都会伤害SPN的精度,两阶段的边框不对齐都会严重影响性能。

人工标注的bbox太主观,所以作者用更客观一些的5关键点数据集,按式(5)推算bbox。
CVPR 2017论文《Scale-Aware Face Detection》学习

即:bbox的x=五点的横坐标的均值+偏移量;bbox的y=五点的纵坐标的均值+偏移量;bbox的s=五点的纵坐标的标准差*偏移量。从而得到相应的边框bbox (xib,yib,sib)(x_i^b, y_i^b, s_i^b)。式(5)中的oxo_xoyo_yoso_s为经验常量、应用于所有样本。

我:这里假设了样本都是正脸(yaw、pitch、roll);否则推算出的bbox可能不准确。

Ground truth generation

直观想法是:把尺寸直方图每个元素都当做二分类结果,其值表示相应尺度范围内有人脸的概率。但是这种最近邻方法也会招致噪声。尽管作者让该方法在尺度间隔为log21\log 2^1的设定下运行起来了,但是随着尺度间隔的减少(我:不应该是“随着尺度间隔的增加”?),SPN性能快速恶化甚至训练时不收敛。

鉴于以上原因,作者采用更平稳的方法来生成真实尺度矢量。作者对每个人脸尺寸s应用如式(6)的高斯函数。而第i个尺度区段的目标值根据式(7)采样得到。
CVPR 2017论文《Scale-Aware Face Detection》学习CVPR 2017论文《Scale-Aware Face Detection》学习

这样,SPN对不完美的标注的噪声更具抵抗力,因为高斯函数提供了软边际。其中σ\sigma取决于真实样本的错误分布和检测器的窗口尺寸;作者选用0.4。

如果一幅图内有多张脸,则真实尺度矢量取值为:由式(6)、(7)计算每个人脸的尺度矢量,然后做逐元素最大化;这和Global Max Pool层的使用相一致。

4.3 Receptive field problem

和所有FCN一样,在Global Max Pool之前SPN的感受野是有限的;但和RPN不同的是,这种有限不会阻碍SPN精确地估计很大的脸的尺寸。这是因为大脸的子区域有足够信息推理出其尺寸。作者的SPN感受野为108*108,但它足以估计大小为512*512的人脸的尺寸。如图5所示。

4.4 Training RPN

训练RPN很简单:落在可检测范围内的脸认作正样本、之外的认作负样本。



5 Experiments


Training data overview

训练数据包括三块:(1)700k张自己标注的网络图像,其中350k张有人脸;(2)AFLW;(3)用剔除了人脸图像的COCO扩充负样本。

对其中容易区分的人脸标注5个关键点,然后推算出边框;忽略难以标注的人脸,给这些区域填充随机色彩。

Network structure

SPN和RPN都使用删减版的GoogLeNet,即到inception-3b为止。对于SPN,输出通道减为1/4。SPN和RPN都使用了Batch Norm。具体如表1所示。
CVPR 2017论文《Scale-Aware Face Detection》学习
表1 SPN和RPN的网络结构和计算量。假设输入为2242243。省略了Batch Norm和辅助卷积层。

Multi-scale testing RPN

略。

Single view RPN

略。

5.1 Evaluation of scale proposal stage

略。

5.2 Overall performance

略。

5.3 Computational cost analysis

略。



6 Conclusion


略。