Scale-Aware Face Detection

来源:互联网 发布:禁止软件开机启动 编辑:程序博客网 时间:2024/05/29 12:30

2017CVPR 文章链接: 《Scale-Aware Face Detection》

对于人脸检测,通常我们需要采用各种手段小心的处理多尺度的问题。事实上,对于很多待检测图像,其只在某个尺度上才有人脸存在。如果我们可以“提前预知”哪些尺度上存在人脸,就可以针对性的进行检测从而减少计算量。

1. 方法介绍

整个检测分为两个阶段:

  • stage1,输入缩小的图片进入Scale Proposal Network (SPN) 来预测在哪个尺度上存在人脸。
  • stage2,将图片按照尺度预测结果进行缩放,然后送入Single Scale RPN (SS-RPN)检测人脸。

2. 要点介绍

(1)Scale Proposal Network (SPN)

如上图,SPN网络为全卷积网络,可以接受任意大小的输入,并在最后通过Global Max Pooling来获得固定的 \(1 \times1 \times n\)大小的概率输出。 \(n\) 表示 \(n\)种不同的尺度,其为精心设计的 等比数列,定义如下:

假设最大和最小检测人脸分别为 \(l_{max}\) 和 \(l_{min}\),并定义指数范围为\(s_n = \log_2l_{max}\) 和 \(s_0 = \log_2l_{min}\)。 则相邻尺度的间隔为: \(d = (s_n-s_0)/n\)。

于是,最后第 \(i\) 个输出对应的人脸尺度范围为:

\([2^{s_0+(i-1)d},2^{s_0+id})\)

(2)Ground truth preparation

训练SPN所用的label该如何生成?

首先需要注意的一点是,标注bounding box存在很强的主观性,这也就意味着标记的人脸尺寸很可能不准。为了弱化这种主观偏差,这里采用5个人脸关键点来定义新的bounding box:

其中,\(o_x,\ o_y, \ o_s\) 为所有样本共享的offset参数。

有了人脸尺寸后,我们不是简单地将label置为非0即1(出现该尺寸则label置为1,否则置为0),因为这样很容易受噪声影响。 同样为了弱化这种影响,这里采用相对平滑的高斯分布来分配label。

其中的方差因子 \(\sigma\) 与ground truth的误差分布以及检测器窗口大小有关,文中实验设置为 \(\sigma = 0.4\)。

当有多个尺度的人脸时,最终的label是取多个高斯分布在对应位置的最大值而不是加和。总之思想类似于下图:

(3)Scaling strategy generation

怎样对SPN的输出进行后处理?

如上图,采用滑动窗口对SPN的输出进行平滑处理,窗口大小为检测器处理范围的一半; 然后采用一维NMS寻找极值点。

3. 分析

  • (1)在FDDB上表现中等

因为一旦尺度估计有问题,后续几乎无法弥补。

  • (2)人脸较少时,速度不错

所以,这种策略可以用在一些特殊场景下,算作一种不错的自适应策略。