人脸检测
首发于人脸检测
CVPR2016_WIDER FACE

CVPR2016_WIDER FACE

本笔记记录CVPR2016论文wider face,也是现阶段人脸检测最权威的数据集,论文同时提出了人脸检测算法Multiscale Cascade CNN;wider face数据集由港中文、商汤科技、中科院深圳先进所联合发布,链接:mmlab.ie.cuhk.edu.hk/pr,包含训练 / 验证 / 测试集,性能评估工具,排行榜(benchmark leader boards),参考论文清单等;


名词定义:

1 MS C-CNN:multi-scale 2-stage cascade CNN,本文提出的针对多尺度人脸的检测网络;


个人认为论文有三个spotlight

1 提出人脸检测数据集wider face,对比现有benchmark数据集,在数据量、标定类型、场景多样性、人脸尺度、遮挡、姿态方面都提出了很高的挑战;

2 提出wider face上sota人脸检测算法Multiscale Cascade CNN,对比四个benchmark算法,性能优势明显;

3 提出将wider face训练集用于模型训练,验证集测试集用于评估,发现性能提升明显(如5.2小节),以后也成为各类算法评估的一个标准:在wider face训练集上做训练,验证集测试集上做评估;


Abstract

1 现阶段人脸检测算法库与真实场景中的人脸复杂度还存在差距,我们提出了人脸检测数据集wider face,以期缩小这种差距;

2 wider face在数据量、标签量、人脸多样性(尺度、遮挡、姿态等)上远超现有数据集,给人脸检测提出了很大的挑战;

3 wider face训练集用于模型训练,验证集测试集用于评估,性能提升明显;

4 复现了四种人脸检测算法,作为wider face的benchmark,同时提出Multiscale Cascade CNN,在wider face上是sota,能处理人脸的大尺度变化问题;

5 对一些误检、漏检样例进行了分析和思考;


1. Introduction

人脸检测目标很简单:对一张图像,告知是否存在人脸,如果存在,返回图像中所有人脸的位置;V-J算法虽然已经很牛掰,但面对fig 1中的尺度、遮挡、光照、表情变化、化妆、姿态变化等情形,人脸检测任务仍然道阻且长;

人脸检测算法库和检测算法本身是相互促进的,有了更大规模、与真实场景更接近的算法库,才能激发我们设计更好的算法,解决人脸检测中的各类挑战,但当前已有人脸检测算法库都普遍数据规模太小,场景过于单一,无法覆盖真实场景中的情形;

基于以上情形,本文做出了三个贡献:

1 提出了wider face数据集,32203张人脸图像,393703个标注人脸,数据量比当前数据库高出10倍,且各类场景十分复杂,如fig1;为了深入分析各类误检,我们对每个人脸bbox还标注了多属性:遮挡、姿态、事件等,可以全方位多角度的评估算法的性能;

3 提出了Multiscale Cascade CNN算法,使用2-stage、分而治之(divide and conquer)的策略来处理人脸大尺度变化,具体地,我们训练了若干针对不同尺度输入的CNN,每个CNN仅需处理特定尺度范围内的人脸目标即可;---- 算是比较早的探索用不同网络(或分支)专门处理不同尺度目标的算法了,后面的SSH,ScaleFace、FAN都使用了类似的方法;我的理解就是每个单独的网络(或分子)都可以被认为是单独处理某项子任务(特定尺度范围内)的专家系统,如果一个网络无法覆盖到所有尺度,那么多个专家系统,就有点三个臭皮匠,顶个诸葛亮的意思;

3 复现了四种有代表性的人脸检测算法(源码 / 开源库),作为wider face的benchmark;并分析了在不同参数设置下,这些算法在wider face的各类误检、漏检案例;


2. Related Work

Brief review of recent face detection methods

人脸检测算法可以分为四类:

1 cascade based:V-J:haar feaures + Adaboost classifier + cascade structure + 用于加速haar特征计算的图像积分图;---- integral image to compute Haar-like features in constant time;

2 part based:DPM:使用Latent SVM建模人脸各个部件(器官),及各个部件间的联系,对比cascade 方法,在遮挡情形下更加鲁棒;

3 channel feature based:主要是基于ACF,结合梯度直方图、积分直方图、颜色通道信息等特征 + boosting classifier + cascade structure用于人脸检测;

4 neural network based:那就太多了,不一一列举了;


Existing datasets

wider face与现有人脸检测数据集对比如table 1;

1 AFW:从Flickr上收集,205张图像,473个标注人脸,每个标注人脸包含一个矩形bbox、6个landmark,姿态角度等;

2 FDDB:从Yahoo news上收集,2845张图像,5171个标注人脸,缺点有二:1 都是知名人士的人脸,与真实场景存在偏差(真实场景中没那么高频地集中出现名人,且名人照片拍照水平高,图像质量高,真实场景图像质量差异性更大;有些团队还到网上收集对应名人的样本以扩充数据集训练,然后去刷分);2 FDDB使用椭圆框标注,而非矩形bbox,这就导致需要训练一个矩形bbox到椭圆框的回归器,增加了额外操作;

3 PASCAL FACE:从pascal voc中包含人类别的图像中收集,851张图像,1341个标注人脸;

以上三个数据集,都只能用作评估,因数据量太少,无法应用于模型训练;

4 AFLW:21997张图像,25993个标注人脸,包含一个bbox和21个landmark信息,有16k张图像可以用做训练;

5 IJB-A:24327张图像,49759个标注人脸,可用于人脸检测 + 识别;

6 MALF:5250张图像,11931个标注人脸,是一个支持细粒度评估的人脸检测数据集,各种细粒度属性:遮挡、姿态、表情等;

以上六个数据集,因为数据量本身比较少,场景多样性不够,导致现有算法在这些数据集上都基本快刷到饱和了,wider face就应运而生,让大家有了个可以刷的新数据集;


3. WIDER FACE Dataset

3.1. Overview

wider face是当前最大规模的人脸检测数据集,来源于wider数据集;32203张人脸图像,393703个标注人脸,各类尺度变化、还提供了遮挡、姿态、事件等多标签;

wider face可以划分为60类事件,每类事件中的图像按照:训练 / 验证 / 测试:40% / 10% / 50%的比例划分,共包含两种训练 / 测试方案:

1 Scenario-Ext:使用外部数据训练,不使用wider face训练集,仅在wider face测试集上评估性能;

2 Scenario-Int:使用wider face训练 / 验证集做训练,在wider face测试集上评估性能;

PS:从官网可知,Scenario-Int参与算法更多,不增加外部数据的buff,也更加公平对比;

使用pascal voc的评估

评估方案与pascal voc一致,同样基于mAP;与MALF、CoCo一致,提供训练 / 验证集的gt bbox标签,不提供测试集的gt bbox标签,


3.2. Data Collection

Collection methodology

wider face是wider数据集的子集,wider数据集图像收集方式以下三步:

1 从LSCOM的1000个事件类型中定义事件类型,选取和人脸相关的事件;

2 使用google / bing等搜索引擎,每类收集1000 ~ 3000张图像数据;

3 对步骤2中每类数据做人工清洗,剔除不包含人脸的照片,剔除相似场景图像,以增加场景多样性;

最终wider face一共收集32203张图像;


Annotation policy

如fig 2,我们对wider face中每一个可识别人脸都标定bbox,每个bbox都需要尽量包含前额、下巴、脸颊(遮挡另考虑,请勿抬杠)等,如果人脸被遮挡了,根据人脸尺度估计遮挡部位的大致位置,并做正常标注(with an estimation on the scale of occlusion,如fig 2中蓝色框);与pascal voc类似,当由于低分辨率、小尺度(高度10 pix以下)导致某个人脸特别难以辨认,我们会对该人脸bbox设置一个“ingore” flag(可用可不用,比如在pascal voc里面,我就使用了所有bbox,忽略了这个flag);除了bbox位置框外,我们进一步对每个人脸标注了多个属性:姿态(典型 / 非典型:typical / atypical)、遮挡(部分遮挡 / 严重遮挡:partial / heavy)等;

每个标注框都使用单人标注、双人交叉验证的策略;


3.3. Properties of WIDER FACE

我们使用proposals生成方法(generic object proposal approaches),来评估wider face的多维度标签属性;通过proposal生成数目 VS. 对应人脸检出率的对比分析,可以对wider face的困难程度和潜在检测性能有一个初步分析;

具体地址,我们使用EdgeBox用于生成proposals,因其效率和准确度都不错;

fig 3表示在不同proposals生成数量的情况下,各个场景人脸检出率,检出率越低,难度越大;


Overall

fig 3(a)表明wider face上检出率较低,人脸检测难度远超其他数据集;同时基于EdgeBox的检出率,将wider face设定为Easy、Medium、Hard三个级别,难度逐级递增,且数据逐级包含;在8000个proposals时,三个级别检出率(其实就是人脸召回率)分别为92%、76%、34%;---- 我怎么记得是按照bbox尺度划分Easy、Medium、Hard三个级别的?论文里却告诉我是根据EdgeBox的检出率?


Scale

fig 3(b),依照人脸尺度(bbox高度 pix)划分为三个子集:小尺度(10 ~ 50 pix),中尺度(50 ~ 300 pix),大尺度(300 ~),在8000个proposals时,中、大尺度目标可以获得90%+的检出率,胆小尺度人脸上,即使是10000个proposals时,召回率不超过30%;


Occlusion

fig 3(c),随遮挡严重程度,检测性能逐步下降,在8000个proposals时,部分遮挡、严重遮挡检出率低于50%;

wider face对遮挡划分三个等级:无遮挡、部分遮挡、严重遮挡;(no / partial / heavy occlusion);

具体标注为:每个人脸标注两个bbox:一个全人脸区域标注Sa,一个可视人脸区域标注Ss,遮挡部分占比So就很容易计算:So = (Sa - Ss) / Sa;

部分遮挡:So:1% ~ 30%;

严重遮挡:So:30% ~;


Pose

姿势分两类:典型 / 非典型(typical / atypical);

非典型姿势有两类:1 俯仰角大于30度;2 水平翻转角大于90度;

fig 3(d),非典型姿势检出难度颇大;


Event

fig 4表示在尺度这个维度,proposals数量固定为10000,不同事件下的平均人脸检出率(按升序排列);基于排序也可以对事件做easy / medium / hard(41 ~ 60,21 ~ 40,1 ~ 20 classes)的划分;

wider face包含了60类事件,每个事件对应不同场景,可以在不同维度(scale / occlusion / pose)进行评估,对每个维度都可以根据事件类型计算检出率,并按检出率排序,如fig 4;


Effective training source

本小节主要介绍使用wider face作为训练集的优势,table 1中,FDDB、AFW、PASCAL FACE都是作为测试集,本身并不提供训练数据,因此人脸检测算法一般都使用ALFW的训练集训练,但ALFW设计的初衷是用于人脸landmark定位;此外,ALFW还有两个问题:

1 ALFW几乎不包含小尺度、低分辨率、遮挡的人脸,人脸多样性比较差;

2 ALFW背景比较干净,背景复杂度不够;

wider face就厉害了:所有可识别人脸都标注(bbox高10 pix以上),因为基于事件收集的数据,样本的多样性也很够,包含了各类复杂的场景;5.2小节也说明了使用wider face作为训练集效果棒棒哒;


4. Multi-scale Detection Cascade

本小节介绍为处理wider face中人脸大尺度变化而设计的网络:multi-scale 2-stage cascade CNN,采用分而治之的策略;具体操作:训练若干人脸检测器,每个检测器只检测特定尺度范围内的人脸(train a set of face detectors, each of which only deals with faces in a relatively small range of scales,对应fig 5就是每行proposal network -> response map -> proposals -> detecttion network -> detection result一条龙);

这样每个人脸检测器就是2-stage操作:

stage-1:通过FCN网络生成multi-scale proposals;---- 这个操作和cascade cnn和mtcnn是很类似的,当然了,cascade cnn是通过图像金字塔 + 滑窗生成proposals的,mtcnn是通过fcn生成feature map响应图生成proposals的;传送门:zhuanlan.zhihu.com/p/38 + 评论部分;

stage-2:常规操作,类似RPN的多任务,对stage-1的candidate做face / non-face的二分类,同时预测face的bbox;

具体流程如fig 5,缺点:文中没提,但很明显了,fig 5中需要4个2-stage的multi-scale模型,训练很麻烦,而且耗时也估计不小,文中也没提;


Multi-scale proposal

proposal network中,为人脸分类 + 尺度分类训练若干FCN(joint train a set of FCN for face classification and scale classification),如table 2;根据图像patch尺度将其划分为四个类(每行代表一类,each row represents a category),在每类中,又继续划分为三个子类,这三类根据图像patch中人脸尺度划分(对应三列);

每个网络(table 2中每行,共4个网络)使用对应图像patch尺度的最高尺度范围做训练(Each network is trained with image patches with the size of their upper bound scale),举个栗子:PN1、PN2的图像patch训练尺度为30 × 30、120 × 120,那么图像patch中人脸尺度就在10 x 10 ~ 30 x 30、30 x 30 ~ 120 × 120范围内;

尺度标签:区域中心位置的人脸图像patch为正样本(align a face at the center of an image patch as positive sample),对图像patch中每个人脸尺度细化标签到每列,举个栗子:18 x 18人脸,就会被标记至PN1 - class 2(assign a scale class label based on the predefined scale subclasses in each group);

负样本:从训练图像中随机crop,但必须保证与正样本的IoU小于0.5;

负样本的尺度类别标签设置为 - 1,训练的时候直接忽略;

批注:尺度分类标签的作用,按我的认知简单描述下,如果理解有错,欢迎指正;首先我们可以发现MS C-CNN是没有使用anchor的,且没有使用图像金字塔,那么单尺度图像输入MS C-CNN,对同时过PN1 ~ PN4,以PN1为例,经过PN1生成响应图,那么在响应图上如何生成proposals?cascade cnn、mtcnn都有图像金字塔操作,设置最小检出尺度12 pix,再在图像金字塔上依次操作;那么PN1都没有预定义检出尺度,那么就需要依赖尺度分类标签了:图像过PN1,生成response map,响应图上高响应的点就对应10 ~ 30 pix尺度,尺度范围依然很大,那么就通过尺度分类标签,把尺度进一步划分为class 1 - 3中的一个,然后在赋予该尺度范围内的最大尺度即可;例如,如果响应图上某个位置包含人脸,且尺度分类被分为PN1 - class 2了,那么该位置就有一个20 x 20 pix的proposal;

公式不方便截图,所以我就上全段落了,比较容易理解,文中以N2为例,所有训练数据集中图像patch尺度都为120 × 120,但patch中人脸的尺度范围为30 x 30 ~ 120 × 120,就可以进一步划分yi-s的尺度标签,总loss就是两个离散分类的交叉熵损失:一个二分类face / non-face,一个三分类尺度class 1 - 3;


Face detection

stage-2对stage-1检出的proposals做进一步分类筛选和bbox回归,对每个尺度范围,通过联合人脸分类 + bbox回归的多任务来refine这些proposals,此外,stage-2与stage-1使用相同的网络结构,有相同的输入尺度;---- 相同的输入尺度:fig 5中可以看出DN1输出尺度是30 x 30 pix,也即虽然stage-1检测的人脸尺度可能是18 x 18,但输入stage-2的图像patch相当于做了扩充,扩充至30 x 30 pix作为stage-2的输入;

人脸分类标签:正样本:stage-1 proposal与gt bbox IoU > 0.5;否则负样本;

bbox回归,proposal与其最近的gt bbox回归即可;

负样本不需要做bbox回归,那么bbox回归的标签就给了[−1,−1,−1,−1];

Loss:与fast rcnn类似,多任务:分类loss + 回归loss;人脸分类loss:face / non-face二分类交叉熵损失;bbox回归loss:不使用fast rcnn的Smooth L1 loss(相对距离绝对值loss),使用欧氏距离loss,相当于相对距离平方loss;


5. Experimental Results

5.1. Benchmarks

第二节中介绍人脸检测算法分为四类,本小节选择四种代表性算法作为benchmark评估: VJ、ACF 、DPM、Faceness;使用Scenario-Ext方式训练:使用外部数据训练,不使用wider face训练集,仅在wider face测试集上评估性能(used “as is” without re-training them on WIDER FACE)使用pascal voc评估标准,使用线性变换将每个算法的结果转换为wider face标注格式;

Overall

整体检测难度如fig 6 (a.1) - (a.3),Faceness性能最好,在hard set上所有算法AP都没有超过30%;

Scale

依照人脸bbox高度pix划分:小尺度(10 ~ 50 pix),中尺度(50 ~ 300 pix),大尺度(300 ~);

只在非遮挡人脸(un-occluded faces only)上评估,结果如fig 6 (b.1) - (b.3),在小尺度数据集上AP未超过12%,说明当前算法处理小尺度人脸难度颇大;

Occlusion

wider face对遮挡划分三个等级:无遮挡、部分遮挡、严重遮挡;(no / partial / heavy occlusion);

部分遮挡:So:1% ~ 30%;

严重遮挡:So:30% ~;

只在bbox高度大于30 pix的人脸上评估,如fig 6 (c.1) - (c.3),在严重遮挡数据集上AP未超过14.4%;

Pose

姿势分两类:典型 / 非典型(typical / atypical);

非典型姿势有两类:1 俯仰角大于30度;2 水平翻转角大于90度;

只在bbox高度大于30 pix的人脸 && 非遮挡人脸上做评估,结果如fig 6 (d.1) - (d.2),性能最好的Faceness在非典型人脸上AP也不超过20%;

Summary

整体上,四个benchmark算法在wider face上性能都很一般,同时也有很大提升空间;


5.2. WIDER FACE as an Effective Training Source

本小节评估使用wider face训练集做模型训练是否会带来性能的提升,训练方式:Scenario-Int,bbox高度大于30 pix的人脸用于训练;重新训练的模型表示为:ACF-WIDER、Faceness-WIDER,在wider face测试集和FDDB上评估性能;

WIDER FACE

如fig 7 (a) ~ (c),使用wider face作为训练集重新训练的ACF-WIDER、Faceness-WIDER比对应baseline性能都要好;

FDDB

如fig 7 (d),结果与wider face测试集上一致,基于wider face训练集重新训练后,模型性能能有所提升;


Event

table 3上使用bbox高度大于30 pix的人脸用于评估,将ACF-WIDER、Faceness-WIDER、ACF、Faceness等四个算法对wider face上所有60个类别分别进行评估,可以发现60个类中,56个类的性能得到了提升,其中Faceness-WIDER在30个类上有性能提升,ACF-WIDER在26个类上有性能提升,Faceness在4个类上有性能提升;


5.3. Evaluation of Multiscale Detection Cascade

本节评估MS C-CNN的性能;

Two-stage CNN:对比MS C-CNN,stage-1使用一个CNN处理所有尺度的人脸,测试阶段,使用图像金字塔操作,各层图像输入stage-1生成多尺度人脸proposals,stage-2与MS C-CNN中stage-2一致;

结果如fig 8,可以发现MS C-CNN在wider face medium / hard集合上性能远超另外三个算法,说明MS C-CNN处理多尺度是很厉害的;---- having multiple networks specialized on different scale range is shown effective in comparison to using a single network to handle multiple scales,就是说单尺度模型无法处理所有尺度的人脸目标;----- MS C-CNN这种每个网络分别处理不同尺度范围的设计,就是本文提出的分而治之(divide and conquer)的思想;

6. Conclusion

1 提出人脸检测数据集wider face,对比现有benchmark数据集,在数据量、标定类型、场景多样性、人脸尺度、遮挡、姿态方面都提出了很高的挑战;

2 复现了四种人脸检测算法,作为wider face的benchmark,同时提出Multiscale Cascade CNN,在wider face上是sota,能处理人脸的大尺度变化问题;

3 提出将wider face训练集用于模型训练,验证集测试集用于评估,发现性能提升明显(如5.2小节),以后也成为各类算法评估的一个标准:在wider face训练集上做训练,验证集测试集上做评估;


论文参考

1 CVPR2016_Multiscale Cascade CNN_WIDER FACE: A Face Detection Benchmark

编辑于 2018-07-19

文章被以下专栏收录