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
- 把人脸检测任务分成两个子问题:尺度估计和单尺度检测。减少了运算量。
- 提出SPN,进行精细尺度估计。而该网络很容易在图像级监督上进行训练。
图1 单尺度检测器需要在图像金字塔上进行检测,从而涵盖不同尺度的人脸。然而图像金字塔的大部分级是无效的(红线箭头),只有少部分有效(绿线箭头)。在无效的级上进行检测浪费计算。作者提出用CNN先估计人脸的有效尺度,进而可以剔除这些无效级,显著地减少运算量。
2 Related works
已有一些方法成功地处理了尺度:融合不同层的特征图之后检测;直接用不同层的特征图进行检测。
他们的思路都是:打脸需要大感受野,小脸需要小感受野(更高的分辨率)。
他们的弊端有两点:不能明确地共享不同尺度间的特征(只是模糊地共享网络的不同层),需要更多参数来处理更大范围的人脸;要一次性处理图像中的所有人脸,尤其为了防止丢失小脸而不缩放图像,无效计算太多,有损速度。
3 Scale-aware detection pipeline
图2 SAFD的流程。先把输入图像下采样送入SPN以获得尺度直方图。根据尺度直方图冲采样输入图像。最后把这些图像送入RPN,得到检测结果。
3.1 Scale Proposal Network (SPN)
作者把尺度提议定义为一组估计的人脸尺寸和相应的置信度。前者将在4.2中详谈。SPN在设计目标是以最少的人为约束来产生尺度直方图。
SPN为FCN,以Global Max Pool结尾,把任意输入尺寸固定为定长向量。结构见图3。输入hwn、输出11n,每个元素代表相应尺度的人脸概率。该直方图矢量可看做概率-尺度直方图。矢量的长度代表尺度的数量;概率值由Sigmoid归一化得到。
图3 SPN的构造。以Global Max Pool结尾,可得输出固定维度的尺度矢量。其中每个元素的值表示图像含有相应尺度的人脸的概率。训练时SPN只需要图像级监督。
尺度矢量的详细定义。从左到右有n个尺度段,最小尺度为s0、最大为sn,都是log尺度。尺度矢量h为:
其中x表示某个人脸, s i z e ( x ) size(x) size(x)表示其尺寸。
而 a i a_i ai所处的尺度区间为 [ s i l , s i r ) [s_i^l, s_i^r) [si