Face Paper:finding tiny faces论文详解

《Finding Tiny Faces》

项目主页:https://www.cs.cmu.edu/~peiyunh/tiny/

Github主页: https://github.com/peiyunh/tiny

Face Paper:finding tiny faces论文详解

为了便于和论文对照,这里按照论文顺序进行分析。

Abstract

小目标检测依然是检测领域的一个难题,原因大概有3个方面:目标本身尺度变化、图像分辨率以及环境因素。虽然很多方法都可以处理多尺度目标检测,但是检测一个3pixel大小的目标和一个500pixel大小的目标还是有本质不同的。

文章针对多尺度训练了不同的检测器。为了保持效率,这些检测器所用的特征来自同一网络的不同的层级。此外,为了检测极小目标,文章充分利用了上下文信息(大的感受野),同时finetune网络的时候也充分考虑了多尺度的因素。

总之,结果爆炸。尤其是在Wider Face(小目标遮挡目标较多)上,结果超第二名一倍。

Introduction

检测小目标难,原因主要有3个方面:目标本身尺度变化;图像分辨率;环境因素。 本文为此提出了以下技术:

Multi-task modeling of scales:

——目前的多尺度检测,要么是通过金字塔图像滑窗要么是通过R-CNN这种Region Proposal。这两种套路通常都使用固定尺寸的模板。问题是,模板尺寸怎么定。小尺寸可以帮助检测小目标,大尺寸又能获得更丰富的信息。

——文章针对不同尺度(或者不同长宽比)训练了多个检测器。这样做有两个问题:每个尺度的训练数据可能不足,实际检测时要多个模型效率不高。为此,文章采用了一种multi-task模式,充分利用一个模型的不同层级的特征。

How to generalize pre-trained networks:

Face Paper:finding tiny faces论文详解

上图的(a)和(b)是常用的两种检测多尺度目标的检测方法。

(a) 模板固定,构建了图像金字塔。但是单个模板的性能可能较差。

(b) 图像固定,训练了金字塔模板。不同模板虽然可以很好的把握不同分辨率的信息,但是这些模板可能不能覆盖实际当中的所有目标尺度。同时,训练的时候,可能某一尺度会缺少训练样本(比如训练大尺度模板可能缺少大的人脸作为正样本)。

(c) 作者将(a)和(b)进行结合。

Face Paper:finding tiny faces论文详解

为了进一步检测更小的人脸,文章利用了额外的上下文信息,如图 (d); 同时进一步的利用了多层特征的融合,如图 (e)

How best to encode context?

Face Paper:finding tiny faces论文详解

上图是作者做的一个实验,直接说实验结论;

(1) 左图: 直观来看,扩大感受野范围,可以有效帮助识别“small”人脸;(对于大的人脸,这点影响不是很大);

(2) 右图: 仅仅采用3倍感受野不能充分把握尺度变化,文章采用固定300像素的感受野效果则不错。

Exploring context and resolution

上下文信息对于小人脸检测至关重要,这一节通过小实验来分析上下文信息和分辨率的关系。

首先提出一个简单的问题: 当已知待检测人脸大小是25x20的时候,该怎样设计检测策略?

先说一下实验设置:采用ResNet-50的FCN结构,输出二分类概率图。

Context

Face Paper:finding tiny faces论文详解

如上图,resX表示不同层级的特征,X越大表示感受野越大。

现象:

(1) 增加更多的上下文信息(感受野)有助于检测;

(2) 对于小人脸,483x483的感受野造成了性能下降,作者通过对比训练和测试性能认为是过拟合;

(3) 对于大的人脸,更大的感受野带来的提升已经不是很明显。

结论: 不同尺度目标检测都使用同样大小的感受野,即291x291.

文章进一步对比了多层特征融合的效果,如下图。文章将这种融合特征称之为“中心凹”结构特征。

Face Paper:finding tiny faces论文详解

现象与结论: 不同级别特征融合是检测小目标的关键,对于大目标效果就不是很明显了。

Resolution

Face Paper:finding tiny faces论文详解

实验现象:

(1) 对于小人脸(25x20),中等尺寸的模板(50x40)可以明显提升性能;

(2) 对于大人脸(250x200),中等尺寸的模板(125x100)同样可以提升性能;

提出问题: 为什么对于大人脸,大尺寸模板反而不能获得更好地表现?

原因猜测: 
模型是从ImageNet上finetune得到的,而ImageNet上80%的目标尺寸分布在40~140像素,这很可能导致模型更偏爱识别这个范围内的目标。

下图是ImageNet数据集上目标的尺寸分布:

Face Paper:finding tiny faces论文详解

Approach: scale-specific detection

文章通过实验来为特定尺寸的目标择更合适的模检测板 ?

首先用 t(h,w,σ) 描述一个模板,该模板用于检测 t(h/σ,w/σ) 大小的人脸。参看 Resolution 小节中的第一张图,t(125,100,0.5) 表示在0.5分辨率上检测 250×200 大小的人脸。

文章利用IOU进行聚类,得到了一组候选目标大小,记为 si=(hi,wi)

提出问题: σ 怎样取值才能使得模板 ti(σih,σiw,σ) 的性能最佳?

试验方法: * 做很多实验(训很多网络),对比看哪种参数设置效果比较好。*

试验结果: 如下图,横坐标是通过聚类得到的目标尺寸,左纵坐标是AP,右纵坐标表示不同大小目标的数量。

结论是: 检测大目标(140像素以上),采用0.5倍分辨率的模板;检测小目标(40像素一下),采用2倍分辨率的模板;其它保持一致。

Face Paper:finding tiny faces论文详解

另一方面, 如果直接采取上面的策略设计模板可能会导致重复。比如,检测 31×25的目标应该采用的模板为 (62,50,2);而检测 64×50的目标应该采用的模板为 64,50,1。显然,这两种模板很接近。

文章最终采用了一种简化的方案:

Face Paper:finding tiny faces论文详解

如上图,最终方案为 A+B

A: 1X 分辨率模板结合较为稀疏的图像金字塔来检测 40140 大小的目标;

B: 2X 分辨率模板结合2X图像差值来检测 20以下的目标;

该方案要比使用原始的 “Full”策略效果甚至要好:

Face Paper:finding tiny faces论文详解

Architecture

首先给出一些检测的配置信息:

(1) 检测模型是一个ResNet全卷积网络,当输入是500x500时,输出的feature map尺寸为63x63x125。 500/63 = 8, 即输出点的位置和其在原图对应的位置是一个8倍的关系。

(2) 125=25+4×25, 即每个点对应25种不同大小的模板(bounding box),每个模板又对应了4个描述bounding box 坐标偏移量的参数。如下图,针对不同分辨率的模板:

Face Paper:finding tiny faces论文详解

(3) 输出特征是不同级别特征的融合(SUM)。

Face Paper:finding tiny faces论文详解

结合上面的检测示意图(以及更上面的检测配置),我们梳理一下检测流程:

(1) 将原始图像以 2/2 的缩放系数,构建一个图像金字塔。(具体要构建多少金字塔,由输入图像大小以及最大模板尺寸决定)

(2) 依次处理每一张金字塔图像。每一张输入图像都会得到 n×n×125 的输出,对应25种不同尺寸的模板(类似于R-CNN或者YOLO中的anchor)。 
重点来了, 并不是25种模板都会使用,针对不同的输入图像分辨率以及待检测目标大小,只会从中选一部分来使用。

具体地:如果图像变小了(检测大目标),则只使用编号5-12的针对1X分辨率的模板;如果图像变大了(检测小目标),则使用编号5-12和19-25的模板;

(3) 根据一定阈值,在不同模板对应的feature map上选出目标,并进行boundingbox矫正,最后使用NMS融合。

Experiments

首先是在Wider Face上的表现, 超第2名约17%。(Wider上标注的人脸大部分都很小。)

Face Paper:finding tiny faces论文详解

然后是在FDDB上的表现,其中continue score(表征检测人脸位置准确性)大幅超出其他方法,因为文章使用了椭圆-bounding-box的回归(FDDB的标注是椭圆)。

Face Paper:finding tiny faces论文详解