人脸检测的评价方式

在不断对人脸检测器进行改进的过程中,有一个问题是不容忽视的:如何科学地比较两个人脸检测器的优劣?

简单地说,出一套考题让所有的检测器进行一场考试,谁得分高谁就更好。

对于人脸检测器而言,

所谓考题(测试集)就是一个图像集合,通常其中每张图像上都包含至少一张人脸,并且这些人脸的位置和大小都已经标注好。

关于得分,需要考虑检测器两方面的表现,

    1. 一是检测率,也即对人脸的召回率,检测出来的人脸占总人脸的比例——测试集中一共标注了100张人脸,检测器检测出其中70张人脸,则检测率为70%;
    2. 二是误检(也称为虚警)数目,即检测器检测出来的人脸中出现错误(实际上不是人脸)的数目 —— 检测器一共检测出80张人脸,然而其中有10个错误,只有70个是真正的人脸,那么误检数目就是10。

 

在这两个指标上,我们所希望的总是检测率尽可能高,而误检数目尽可能少,但这两个目标之间一般是存在冲突的;

在极端的情况下,如果一张脸也没有检测出来,那么误检数目为0,但是检测率也为0,而如果把所有的窗口都判别为人脸窗口,那么检测率为100%,而误检数目也达到了最大。

在比较两个检测器的时候,我们通常固定一个指标,然后对比另一个指标,要么看相同误检数目时谁的检测率高,要么看相同检测率时谁的误检少。

对于每一个检测出的人脸,检测器都会给出这个检测结果的得分(或者说信度),那么如果人为地引入一个阈值来对检测结果进行筛选(只保留得分大于阈值得检测结果),那么随着这个阈值的变化,最终得检测结果也会不同,因而其对应得检测率和误检数目通常也会不同。

通过变换阈值,我们就能够得到多组检测率和误检数目的值,由此我们可以在平面直角坐标系中画出一条曲线来:

以x坐标表示误检数目,以y坐标表示检测率,这样画出来的曲线称之为ROC曲线(不同地方中文译法不一,如接收机曲线、接收者操作特征曲线等,这里直接采用英文简写)。ROC曲线提供了一种非常直观的比较不同人脸检测器的方式,得到了广泛的使用。



评测人脸检测器时还有一个重要的问题:怎么根据对人脸的标注和检测结果来判断某张人脸是否被检测到了?

一般来说,检测器给出的检测框(即人脸窗口)不会和标注的人脸边框完全一致,而且对人脸的标注也不一定是矩形,例如还可能是椭圆形;因此当给定了一个检测框和一个标注框时,我们还需要一个指标来界定检测框是否和标注框相匹配,这个指标就是交并比:两者交集(重叠部分)所覆盖的面积占两者并集所覆盖面积的比例,一般情况下,当检测框和标注框的交并比大于0.5时,我们认为这个检测框是一个正确检测的人脸。

 

在早期的人脸检测工作中,一般采用MIT-CMU人脸检测数据集作为人脸检测器的测试集,来比较不同的检测器。这个测试集只包含几百张带有人脸的图像,并且人脸主要是清晰且不带遮挡的正面人脸,因而是一个相对简单的测试集,现在几乎已经不再使用

在2010年,美国麻省大学的一个实验室推出了一个新的人脸检测评测数据集:FDDB,这个集合共包含2845张带有人脸的互联网新闻图像,一共标注了5171人脸,其中的人脸在姿态、表情、光照、清晰度、分辨率、遮挡程度等各个方面都存在非常大的多样性,贴近真实的应用场景,因而是一个非常具有挑战性的测试集。FDDB的推出激发人们在人脸检测任务上的研究热情,极大地促进了人脸检测技术的发展,在此后的几年间,新的人脸检测方法不断涌现,检测器在FDDB上的表现稳步提高。从100个误检时的检测率来看,从最初VJ人脸检测器的30%,发展到现在已经超过了90% —— 这意味着检测器每检测出50张人脸才会产生一个误检,这其中的进步是非常惊人的,而检测器之间的比拼还在继续。

基于CNN的人脸检测器

上面提到的都是通用的目标检测器,这些检测器可以直接通过人脸图像学习从而得到人脸检测器,虽然它们没有考虑人脸本身的特殊性,但是也能够获得非常好的精度,这反映出不同类型目标的检测其实是相通的,存在一套通用的机制来处理目标检测问题。也有一部分工作是专门针对人脸检测任务的,有的考虑了人脸自身的特点,有的其实也是比较通用的目标检测方法,可以自然地迁移到各种类型目标的检测任务中去。

FacenessNet专门针对人脸设计的一个检测器,其考虑了头发眼睛鼻子嘴巴胡子这五个脸部特征,

简单地说,对于一个候选窗口,FacenessNet 先分析这五个部分是否存在,然后再进一步判断是不是一张人脸 

 

这种方法:

    • 一方面同时利用了整体和局部的信息,能够从不同的角度对图像内容进行刻画,使得人脸和非人脸能够更好地被区分;
    • 另一方面增强了对遮挡的鲁棒性,人脸的局部遮挡会影响整体表现出的特征,但是并不会对所有的局部区域造成影响,因而增强了检测器对遮挡的容忍度。

 

 

检测精度的大跃进

随着越来越多的检测器开始采用深度网络,人脸检测的精度也开始大幅地提升。

在2014年,学术界在FDDB上取得的最好检测精度是在100个误检时达到84%的检测率,达到这一精度的是JointCascade 人脸检测器

到2015年,这一纪录被FacenessNet 打破,在100个误检时,检测率接近88%,提升了几乎4个百分点。

 

不仅如此,工业界的最好记录已经达到了100个误检时92.5%的检测率 (估计是通过额外的人脸数据库),检测率达到 90%以上的公司还不止一家,并且这些结果都是通过基于深度网络的人脸检测器所获得的。

在大幅提升人脸检测精度的同时,深度学习实际上还降低了包括人脸检测技术在内的各种目标检测技术的门槛,几乎到了只要采用深度网络就能获得不错的检测精度的地步;

在精度方面,相比于基于非深度学习方法的检测器,基于深度学习方法的检测器在起点上就要高出一截

不过在检测速度方面,基于深度学习方法的检测器还难以达到实际应用的需求,即使是在GPU上,也还不能以实时的速度(25fps)运行

而反过来看,一旦速度问题能够得到解决,那么深度学习也一定会在目标检测任务上有更广泛和更大规模的应用。

 

 

传统人脸检测技术和 CNN 的结合    

VJ人脸检测器自提出以来,启发和影响了后续的大量工作,所引入的积分图、AdaBoost方法、级联结构等至今仍在各种各样的检测器中以不同的形式被使用。

传统的人脸检测技术优势在于速度,而在精度上则相比基于深度网络的方法要略输一筹,

在这种情况下,一个自然的想法就是:

能否将传统的人脸检测技术和深度网络(如CNN)相结合,在保证检测速度的情况下进一步提升精度?    

Cascade CNN可以认为是传统技术和深度网络相结合的一个代表,

和VJ人脸检测器一样,其包含了多个分类器,这些分类器采用级联结构进行组织,然而不同的地方在于,Cascade CNN采用CNN作为每一级的分类器,而不是用AdaBoost方法通过多个弱分类器组合成的强分类器,并且也不再有单独的特征提取过程,特征提取和分类都由CNN来统一完成。

 

1. 在检测过程中,Cascade CNN采用的还是传统的滑动窗口范式,为了避免过高的计算开销,第一级的CNN仅包含一个卷积层和一个全连接层,并且输入图像的尺寸控制在12*12,同时滑动窗口的步长设置为4个像素,在这种情况下,

一方面每张图像上候选窗口的数量变少了,窗口数量随着滑动步长的增大是按照平方规律下降的,

另一方面每个窗口提取特征和分类的计算开销也受到了严格控制。

2. 经过第一级CNN之后,由于通过的窗口中人脸和非人脸窗口之间更加难以区分,因此第二级CNN将输入图像的尺寸增大到了24*24,以利用更多的信息,并且提高了网络复杂度——虽然仍然只包含一个卷积层和一个全连接层,但是卷积层有更多的卷积核,全连接层有更多的节点。

3. 第三级CNN也采用了类似的思路,增大输入图像大小的同时提高网络的复杂度 —— 采用了两个卷积层和一个全连接层。通过引入CNN,传统的级联结构也焕发出了新的光彩,在FDDB上,Cascade CNN在产生100个误检的时候达到了85%的检测率,而在速度上,对于大小为640*480的图像,在限定可检测的最小人脸大小为80*80的条件下,Cascade CNN在CPU上能够保持接近10fps的处理速度。Cascade CNN中还采用了一些其它的技术来保证检测的精度和速度,如多尺度融合、边框校准、非极大值抑制等,限于篇幅,这里不再继续展开。

吸取传统人脸检测技术中的精华,借鉴深度学习研究的最新成果,在对问题的深刻思考和理解上,探寻旧瓶装新酒的最佳模式,这是一条值得去继续探索的道路。

 


 

对现状和未来的简单思考

经过几十年的研究和发展,人脸检测方法正日趋成熟,在现实场景中也已经得到了比较广泛的应用,但是人脸检测问题还并没有被完全解决,

复制代码
复杂多样的姿态变化,
千奇百怪的遮挡情况,
捉摸不定的光照条件,
不同的分辨率,
迥异的清晰度,
微妙的肤色差,
复制代码

各种内外因素的共同作用让人脸的变化模式变得极其丰富,而目前还没有检测器可以同时对所有的变化模式都足够鲁棒。

 

目前的人脸检测器在FDDB上已经能够取得不错的性能,不少检测器在100个误检时的检测率达到了80%以上,这意味着它们检测出40个以上的人脸才会出现一个误检。

到目前为止,本文所提到的误检和召回率都对应于FDDB上的离散型得分ROC曲线,所谓“离散型”是指每个人脸是否被检测到是分别用1和0来表示的;相对应地也有连续型得分ROC曲线,而“连续型”指的是人脸被检测到与否是通过检测框和标注框之间的交并比来表示的,从某种意义上来说,连续型得分试图评判的是检测框的准确程度,即检测框的位置和大小与实际人脸的位置和大小的接近程度。对于两个不同的检测器而言,两类曲线的相对关系并非是完全一致的:离散型得分ROC曲线接近的两个检测器,其对应的连续型得分ROC曲线可能存在明显的差异。最直接地,这说明有的检测器虽然检测出了人脸,但是检测框的准确度比较低,但其实造成这种不一致性的另一个重要原因还在于检测框与标注框之间的差异性。

在FDDB中人脸是通过椭圆来进行标注的,大多数情况下,几乎会包含整个头部,相比之下,检测器给出的检测结果是矩形的人脸框,并且通常只包含脸部区域——尤其是对于采用滑动窗口范式的检测器,这就很容易导致检测框和标注椭圆之间的交并比过小,甚至可能小于0.5。对不同的检测器来说,其能够最好地区分人脸和非人脸窗口的情况所对应的框的大小会有所不同,从而不同检测器给出的检测框也会存在差别,部分方法会采用扩大检测框或者回归椭圆的方式,以尽量减小由标注框和检测框的不一致性所造成的影响,保证评测的公平性。

除了标注框的问题之外,要更为客观地看待FDDB上的评测结果,我们还需要考虑另外一点:FDDB测试图像上的人脸和实际应用场景的差异性,换言之,我们需要思考这样一个问题:人脸检测器在FDDB上所达到的精度能否真实反映其在实际应用场景中的表现?FDDB中测试图像上的人脸包含了从表情到姿态、从光照到遮挡等各个方面的变化,因而是一个相对通用的数据集,但是在实际应用中,不同场景下人脸往往呈现出比较鲜明的特点,例如在视频监控场景下,由于摄像头架设位置较高和分辨率有限,同时在存储和传输过程中会引入噪声,因此图像上的人脸往往具有较大的俯仰角,且清晰度较低,在这种情况下,原来在FDDB上表现出色的检测器就未必能够达到令人满意的精度。在FDDB中,有大约10%的人脸其大小在40*40以下,而对于人脸识别等一些任务来说,太小的人脸并不适合,因此如果一个检测器因为在小脸上表现不好而导致其在FDDB上表现平平,而在较大的人脸上和表现更好的一些检测器没有太大差别,那么将其应用在人脸识别任务中是完全没有问题的,甚至还可能因为模型简单带来速度上的优势。

 

总而言之,当面对具体的应用场景时,

    • 一方面,我们还需要具体问题具体分析,不能盲目地根据检测器在FDDB或者其它人脸检测数据集上精度来下结论;
    • 另一方面,我们需要基于当前的人脸检测器去适配实际所需要处理的数据,以使检测器能够在特定的场景下达到更好的精度。   

 

除了FDDB之外,比较常用的人脸检测评测集还有AFW,以及最近几年公开的MALF、IJB-A和Wider Face。

AFW包含的图像数比较少,总共只有205张测试图像,标注了468张人脸,不过由于其覆盖了众多的人脸变化模式,具有一定的挑战性,因此也比较常用。

另外三个评测集在图像规模上都相对较大,其中MALFWider Face没有发布人脸标注和评测程序,需要提交检测结果给发布方进行评测,这在一定程度上防止了由于评测方式不一致而导致比较不公平和对测试集进行过拟合的情况;这两个数据集还按照不同的属性(如分辨率、姿态、难易程度等)将测试集分成了多个子集,评测时会同时在全集和子集上进行测试,这能够更加全面地反映检测器在不同场景下的能力。

IJB-A中不仅包含静态人脸图像,还有一部分是从视频中提取的视频帧。

 

在上面提到的所有评测集中,只有Wider Face提供了专门的训练集和验证集,其它评测集合都只包含测试集

这其实也给不同方法的比较带来了一个问题:

    • 我们难以判断导致检测器在精度上存在差异的原因到底是训练数据还是算法和模型本身,
    • 也不知道这两方面的因素谁起的作用更大。

 

Wider Face应该是难度最大的一个评测集,所标注的人脸在姿态、遮挡情况等方面的跨度非常大,并且分辨率在50*50以下的人脸占到了50%(训练集和校验集中达到了80%以上),不过在部分应用场景下(如人脸识别),过于关注小尺寸的人脸并没有必要。    

虽然基于深度网络的检测器目前能够达到很高的检测精度,并且其通用性非常强,但其所付出的计算代价也非常高,因此这类检测器突破的关键在于深度网络的简化加速

除此之外,如果单单考虑人脸检测,这个分类问题相对来说要简单一些,也存在一种可能性:直接学习一个小型的网络就能足够好地完成这个任务。

对于采用非深度学习方法的检测器,其基础的检测精度相比会低不少,但是速度上会有明显的优势,因此其关键在于针对特定应用场景下的问题进行合理的改进和适配,以获得更好的检测精度。

为了提供更加便利的人机交互接口,创造有效的视觉理解手段,让机器变得有温度,会观察,能感受,广大的科研工作者们在人脸检测和通用目标检测任务上还在继续探索。终有一天,当我们和机器四目相对时,彼此能够会心一笑:科学让生活更美好!


  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值