在不断对⼈脸检测器进⾏改进的过程中,有⼀个问题是不容忽视的:如何科学地⽐较两个⼈脸检测器的优劣? 简单地说,出⼀套考题让所有的检测器进⾏⼀场考试,谁得分⾼谁就更好。
对于⼈脸检测器⽽⾔,
所谓考题(测试集)就是⼀个图像集合,通常其中每张图像上都包含⾄少⼀张⼈脸,并且这些⼈脸的位置和⼤⼩都已经标注好。
关于得分,需要考虑检测器两⽅⾯的表现,
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 先分析这五个部分是否存在,然后再进⼀步判断是不是⼀张⼈脸。quantumas
这种⽅法:
礼品袋制作检测精度的⼤跃进
随着越来越多的检测器开始采⽤深度⽹络,⼈脸检测的精度也开始⼤幅地提升。
在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 中还采⽤了⼀些其它的技术来保证检测的精度和速度,如多尺度融合、边框校准、⾮极⼤值抑制等,限于篇幅,这⾥不再继续展开。
吸取传统⼈脸检测技术中的精华,借鉴深度学习研究的最新成果,在对问题的深刻思考和理解上,探寻旧瓶装新酒的最佳模式,这是⼀条值得去继续探索的道路。
对现状和未来的简单思考
zigbee模块通信经过⼏⼗年的研究和发展,⼈脸检测⽅法正⽇趋成熟,在现实场景中也已经得到了⽐较⼴泛的应⽤,但是⼈脸检测问题还并没有被完全解决,
复杂多样的姿态变化,
千奇百怪的遮挡情况,
捉摸不定的光照条件,
不同的分辨率,
迥异的清晰度,
微妙的肤⾊差,
各种内外因素的共同作⽤让⼈脸的变化模式变得极其丰富,⽽⽬前还没有检测器可以同时对所有的变化模式都⾜够鲁棒。
⽬前的⼈脸检测器在FDDB上已经能够取得不错的性能,不少检测器在100个误检时的检测率达到了80%以上,这意味着它们检测出40个以上的⼈脸才会出现⼀个误检。
到⽬前为⽌,本⽂所提到的误检和召回率都对应于FDDB上的离散型得分ROC曲线,所谓“离散型”是指每个⼈脸是否被检测到是分别⽤1和0来表⽰的;相对应地也有连续型得分ROC曲线,⽽“连续型”指的是⼈脸被检测到与否是通过检测框和标注框之间的交并⽐来表⽰的,从某种意义上来说,连续型得分试图评判的是检测框的准确程度,即检测框的位置和⼤⼩与实际⼈脸的位置和⼤⼩的接近程度。对于两个不同的检测器⽽⾔,两类曲线的相对关系并⾮是完全⼀致的:离散型得分ROC曲线接近的两个检测器,其对应的连续型得分ROC曲线可能存在明显的差异。最直接地,这说明有的检测器虽然检测出了⼈脸,但是检测框的准确度⽐较低,但其实造成这种不⼀致性的另⼀个重要原因还在于检测框与标注框之间的差异性。
在FDDB中⼈脸是通过椭圆来进⾏标注的,⼤多数情况下,⼏乎会包含整个头部,相⽐之下,检测器给出的检测结果是矩形的⼈脸框,并且通常只包含脸部区域——尤其是对于采⽤滑动窗⼝范式的检测器,这就很容易导致检测框和标注椭圆之间的交并⽐过⼩,甚⾄可能⼩于0.5。对不同的检测器来说,其能够最好地区分⼈脸和⾮⼈脸窗⼝的情况所对应的框的⼤⼩会有所不同,从⽽不同检测器给出的检测框也会存在差别,部分⽅法会采⽤扩⼤检测框或者回归椭圆的⽅式,以尽量减⼩由标注框和检测框的不⼀致性所造成的影响,保证评测的公平性。
除了标注框的问题之外,要更为客观地看待FDDB上的评测结果,我们还需要考虑另外⼀点:FDDB测试图像上的⼈脸和实际应⽤场景的差异性,换⾔之,我们需要思考这样⼀个问题:⼈脸检测器在FDD
B上所达到的精度能否真实反映其在实际应⽤场景中的表现?FDDB中测试图像上的⼈脸包含了从表情到姿态、从光照到遮挡等各个⽅⾯的变化,因⽽是⼀个相对通⽤的数据集,但是在实际应⽤中,不同场景下⼈脸往往呈现出⽐较鲜明的特点,例如在视频监控场景下,由于摄像头架设位置较⾼和分辨率有限,同时在存储和传输过程中会引⼊噪声,因此图像上的⼈脸往往具有较⼤的俯仰⾓,且清晰度较低,在这种情况下,原来在FDDB上表现出⾊的检测器就未必能够达到令⼈满意的精度。在FDDB中,有⼤约10%的⼈脸其⼤⼩在40*40以下,⽽对于⼈脸识别等⼀些任务来说,太⼩的⼈脸并不适合,因此如果⼀个检测器因为在⼩脸上表现不好⽽导致其在FDDB上表现平平,⽽在较⼤的⼈脸上和表现更好的⼀些检测器没有太⼤差别,那么将其应⽤在⼈脸识别任务中是完全没有问题的,甚⾄还可能因为模型简单带来速度上的优势。
总⽽⾔之,当⾯对具体的应⽤场景时,
除了FDDB之外,⽐较常⽤的⼈脸检测评测集还有AFW,以及最近⼏年公开的MALF、IJB-A和Wider Face。
AFW包含的图像数⽐较少,总共只有205张测试图像,标注了468张⼈脸,不过由于其覆盖了众多的⼈脸变化模式,具有⼀定的挑战性,因此也⽐较常⽤。
另外三个评测集在图像规模上都相对较⼤,其中MALF和Wider Face没有发布⼈脸标注和评测程序,需要提交检测结果给发布⽅进⾏评测,这在⼀定程度上防⽌了由于评测⽅式不⼀致⽽导致⽐较不公平和对测试集进⾏过拟合的情况;这两个数据集还按照不同的属性(如分辨率、姿态、难易程度等)将测试集分成了多个⼦集,评测时会同时在全集和⼦集上进⾏测试,这能够更加全⾯地反映检测器在不同场景下的能⼒。
IJB-A中不仅包含静态⼈脸图像,还有⼀部分是从视频中提取的视频帧。
在上⾯提到的所有评测集中,只有Wider Face提供了专门的训练集和验证集,其它评测集合都只包含测试集,
这其实也给不同⽅法的⽐较带来了⼀个问题:
Wider Face应该是难度最⼤的⼀个评测集,所标注的⼈脸在姿态、遮挡情况等⽅⾯的跨度⾮常⼤,并且分辨率在50*50以下的⼈脸占到了50%(训练集和校验集中达到了80%以上),不过在部分应⽤场景下(如⼈脸识别),过于关注⼩尺⼨的⼈脸并没有必要。
虽然基于深度⽹络的检测器⽬前能够达到很⾼的检测精度,并且其通⽤性⾮常强,但其所付出的计算代价也⾮常⾼,因此这类检测器突破的关键在于深度⽹络的简化和加速。
牛头饰 手工制作制作奖章除此之外,如果单单考虑⼈脸检测,这个分类问题相对来说要简单⼀些,也存在⼀种可能性:直接学习⼀个⼩型的⽹络就能⾜够好地完成这个任务。
对于采⽤⾮深度学习⽅法的检测器,其基础的检测精度相⽐会低不少,但是速度上会有明显的优势,因此其关键在于针对特定应⽤场景下的问题进⾏合理的改进和适配,以获得更好的检测精度。
为了提供更加便利的⼈机交互接⼝,创造有效的视觉理解⼿段,让机器变得有温度,会观察,能感受,⼴⼤的科研⼯作者们在⼈脸检测和通⽤⽬标检测任务上还在继续探索。终有⼀天,当我们和机器四⽬相对时,彼此能够会⼼⼀笑:科学让⽣活更美好!