Robust Real-Time Face Detection

参考  Robust Real-Time Face Detection - 云+社区 - 腾讯云

摘要

本文描述了一种能够极其快速地处理图像并实现高检出率的人脸检测框架。有三个关键贡献。第一个是引入一种新的图像表示称为“积分图像”,它允许我们的检测器使用的特征被非常快速地计算。第二种方法是使用AdaBoost学习算法构建一个简单高效的分类器,从一大堆潜在特征中选择少量的关键视觉特征。第三个贡献是一种将分类器组合成“级联”的方法,它允许图像的背景区域快速丢弃,同时在有希望的人脸区域上花费更多的计算。给出了一组人脸检测领域的实验。该系统的人脸检测性能可与之前最好的系统相比。在传统的桌面上实现,人脸检测以每秒15帧的速度进行。

1、介绍

本文汇集了新的算法和见解,以构建一个框架的鲁棒和极其快速的视觉检测。为此,我们构建了一个正面人脸检测系统,实现了与最佳发表结果。这种人脸检测系统与以前的方法最明显的区别在于它能够极其迅速地检测人脸。使用384 * 288像素的图像,在传统的700 MHz Intel Pentium III上以每秒15帧的速度检测人脸。在其他的人脸检测系统中,辅助信息,如视频序列中的图像差异,或彩色图像中的像素颜色,已经被用于实现高帧率。我们的系统实现了高帧率工作,仅与信息在一个单一的灰度图像。这些可供选择的信息来源也可以与我们的系统集成,以实现更高的帧率。

我们的人脸检测框架有三个主要贡献。我们将在下面简要介绍每一个想法,然后在随后的章节中详细描述它们。

本文的第一个贡献是一种新的图像表示称为积分图像,它允许非常快速的特征评估。部分受到Papageorgiou等人工作的推动,我们的检测系统不直接与图像强度工作。像这些作者一样,我们使用了一组让人联想到Haar基函数的特性(尽管我们也将使用比Haar过滤器更复杂的相关过滤器)。为了在许多尺度上非常快速地计算这些特征,我们引入了图像的积分图像表示(积分图像非常类似于计算机图形中用于纹理映射的面积求和表)。积分图像可以通过对每个像素进行一些操作从图像中计算出来。一旦计算出来,这些类似哈尔的特征中的任何一个都可以在常数时间内以任何比例或位置计算出来。

本文的第二个贡献是一个简单而高效的分类器,它是使用AdaBoost从一个巨大的潜在特征库中选择少量的重要特征来构建的。在任何图像子窗口中,haar类特征的总数都非常大,远远大于像素的数量。为了保证快速分类,学习过程必须排除大部分可用的特征,并专注于一小组关键特征。在Tieu和Viola工作的推动下,通过约束每个弱分类器只依赖于一个单一特征,使用AdaBoost学习算法实现了特征选择。因此,每一个选择新的弱分类器的增强过程都可以看作是一个特征选择过程。AdaBoost提供了一种有效的学习算法和泛化性能的强边界。

本文的第三个主要贡献是一种将更复杂的分类器逐次组合在级联结构中的方法,通过将注意力集中在图像的有希望区域,从而显著提高检测器的速度。关注焦点法背后的概念是,通常可以快速确定一张脸可能出现在图像的何处。更复杂的处理只保留给这些有前途的区域。这种方法的关键衡量标准是注意过程的“假阴性”率。它必须是这样的情况,所有的,或几乎所有的,面孔实例被选择的注意过滤器。

我们将描述一个训练一个极其简单和高效的分类器的过程,它可以被用作一个“监督的”注意力算子可以学习人脸检测注意操作,它将过滤掉超过50%的图像,同时保留99%的人脸(通过大型数据集评估)。这种过滤器非常有效;它可以在每个位置/规模的20个简单操作(大约60个微处理器指令)中进行评估。

那些没有被初始分类器拒绝的子窗口由一个分类器序列处理,每个分类器都比前一个稍微复杂一些。如果任何分类器拒绝子窗口,则不执行进一步的处理。级联检测过程的结构本质上是一个退化的决策树,因此与Fleuret和german和Amit和german的工作有关。

完整的人脸检测级联有38个分类器,总共超过8万次操作。然而,级联结构导致极快的平均检测时间。在一个包含507个人脸和7500万个子窗口的复杂数据集上,每个子窗口平均使用270条微处理器指令来检测人脸。相比之下,该系统比Rowley等人构建的检测系统的实现速度快约15倍。

一个极其快速的人脸检测器将有广泛的实际应用。其中包括用户界面、图像数据库和电话会议。这一速度的提高将使实时人脸检测应用程序能够在以前无法实现的系统上实现。在不需要快速帧率的应用中,我们的系统将允许大量额外的后处理和分析。此外,我们的系统可以在各种小型低功耗设备上实现,包括手持设备和嵌入式处理器。在我们的实验室中,我们在一个低功耗200 mips的Strong Arm处理器上实现了这个人脸检测器,该处理器没有浮点硬件,并以每秒两帧的速度实现了检测。

1.1、概览

论文的其余部分将讨论探测器的实现,相关的理论和实验。第2节将详细介绍这些特性的形式以及快速计算它们的新方案。第3节将讨论将这些特征组合起来形成分类器的方法。所用的机器学习方法是AdaBoost的一个应用,同时也是一种特征选择机制。虽然以这种方式构建的分类器具有良好的计算和分类性能,但它们对于实时分类器来说太慢了。第4节将描述一种方法,构建一个级联分类器一起产生一个极其可靠和有效的人脸检测器。第5部分将描述一些实验结果,包括我们的实验方法的详细描述。最后,第6节讨论了本系统及其与相关系统的关系。

2、特征

我们的人脸检测程序根据简单特征的值对图像进行分类。使用特性而不是直接使用像素有许多动机。最常见的原因是,特性可以对特定的领域知识进行编码,而使用有限数量的训练数据很难学习这些知识。对于这个系统来说,特性还有第二个关键的动机:基于特性的系统比基于像素的系统运行得更快。

使用的简单特征让人想起了Papageorgiou等人使用的Haar基函数。更具体地说,我们使用三种特性。两个矩形特征的值是两个矩形区域内像素之和的差值。这些区域具有相同的大小和形状,并且水平或垂直相邻(见图1)。三个矩形特征计算两个外部矩形的和减去中心矩形的和。最后一个四矩形特征计算对角矩形对之间的差值。

考虑到探测器的基本分辨率是24 × 24,详尽的矩形特征集是相当大的,16万。注意,与Haar基不同的是,矩形特征集是过于完整的。

                               Robust Real-Time Face Detection_第1张图片

2.1、积分图像

矩形特征可以通过使用图像的中间表示(我们称之为积分图像)来非常迅速地计算出来位置x, y的整幅图像包含了x, y上面和左边的像素之和,包括:

                                    Robust Real-Time Face Detection_第2张图片

其中ii(x, y)为积分图像,i(x, y)为原始图像(见图2)。利用以下两种递归式:

                           Robust Real-Time Face Detection_第3张图片

(其中s(x, y)是累计行和,s(x,−1)= 0,和ii(−1,y) = 0)积分图像可以对原始图像进行一次计算。

 使用积分图像,可以在四个数组引用中计算任意矩形和(见图3)。显然,两个矩形和之间的差可以在八个引用中计算。由于上面定义的两个矩形特征涉及相邻的矩形和,它们可以在6个数组引用中计算,在3个矩形特征的情况下是8个,在4个矩形特征中是9个。

对于整体图像的另一种动机来自Simard等人(1999)的“boxlets”工作。作者指出,在线性运算(如f·g)的情况下,只要将f或g的逆运算应用于结果,则任何可逆的线性运算都可以应用于f或g。例如,在卷积的情况下,如果导数算子同时应用于图像和核,那么结果必须是双重积分:

                                

                     Robust Real-Time Face Detection_第4张图片

作者继续表明,如果f和g的导数是稀疏的(或者可以这样做),卷积可以显著加速。一个类似的见解是,一个可逆的线性运算可以应用于f,如果它的逆应用于g:

                                     Robust Real-Time Face Detection_第5张图片

在这个框架中,矩形和的计算可以表示为点积i\cdot r,其中i是图像,r是框汽车图像(值在感兴趣的矩形内,外为0)。此操作可以重写:
                                  Robust Real-Time Face Detection_第6张图片

积分图像实际上是图像的二重积分(首先沿着行,然后沿着列)。矩形的二阶导数(首先是行,然后是列)在矩形的角上得到四个delta函数。第二个点积的求值是通过4次数组访问来完成的。

2.2、特征讨论

与可控制的过滤器。可导向过滤器及其相关产品非常适合于边界、图像压缩和纹理分析的详细分析。虽然矩形特征对边缘、条和其他简单的图像结构也很敏感,但它们相当粗糙。不像导向过滤器,唯一可用的方向是垂直,水平和对角。由于正交性不是这个特征集的中心,我们选择生成一个非常大的和多样的矩形特征集。典型的表现是400倍的过完整。这种过完备集提供了任意长宽比和精确采样位置的特征。从经验上看,似乎矩形特征集提供了丰富的图像表示,支持有效的学习。矩形特征的极高计算效率为其局限性提供了足够的补偿。

为了欣赏积分图像技术的计算优势,考虑一种更传统的方法,其中一个图像金字塔计算。和大多数人脸检测系统一样,我们的检测器在许多尺度上扫描输入信息;从24 × 24像素的人脸的基本比例尺开始,以12比例尺扫描一幅384 × 288像素的图像,比例尺比上一幅大1.25倍。传统的方法是计算一个由12幅图像组成的金字塔,每幅图像比前一幅图像小1.25倍。然后用一个固定比例的检测器扫描每一幅图像。金字塔的计算虽然简单,但却需要大量的时间。在传统硬件上有效实现(使用双线性插值来缩放金字塔的每一层),它大约需要0.05秒来计算这个大小的12层金字塔(在Intel PIII 700mhz处理器上)。

相比之下,我们定义了一组有意义的矩形特征,它们的属性是单个特征可以在任何规模和位置上通过一些操作进行评估。我们将在第4节展示,有效的人脸检测器可以用最少的两个矩形特征构建。考虑到这些特征的计算效率,在每一尺度下,整个图像的人脸检测过程可以以每秒15帧的速度完成,仅评估12级图像金字塔所需的时间大约相同。任何需要这种类型的金字塔的过程必然会比我们的检测器运行得慢。

3、学习分类功能

给定一个特征集和一个正负图像的训练集,任何数量的机器学习方法都可以用来学习一个分类函数。Sung和Poggio使用混合高斯模型。Rowley等人使用了一小组简单的图像特征和神经网络。Osuna等人使用了支持向量机。最近,Roth等人(2000)提出了一种新的不同寻常的图像表示方法,并使用了Winnow学习程序。

回想一下,每个图像子窗口都有160000个矩形特征,这个数字远远大于像素的数量。尽管可以非常有效地计算每个特性,但计算整个集合的成本非常高。我们的假设是,这些特征的一个非常小的数量可以组合形成一个有效的分类器,这已经被实验证明。主要的挑战是找到这些特性。

在我们的系统中,AdaBoost的一个变体用于选择特征和训练分类器。在其原始形式中,AdaBoost学习算法用于提高简单学习算法的分类性能(例如,它可能用于提高简单感知器的性能)。它通过组合一组较弱的分类函数来实现这一点,从而形成一个较强的分类器。在语言强化中,简单的学习算法被称为弱学习者。例如,感知器学习算法搜索可能的感知器集合并返回分类误差最低的感知器。这种学习器被称为弱学习器,因为我们并不期望即使是最好的分类函数也能很好地分类训练数据(即,对于一个给定的问题,最好的感知器分类训练数据的正确率只有51%)。为了促进弱势学习者的学习,需要解决一系列的学习问题。在第一轮学习之后,对例子进行加权,以强调那些被先前的弱分类器错误分类的例子。最后一个强分类器以感知器的形式出现,它是弱分类器的加权组合,后跟一个阈值。

AdaBoost学习过程提供的正式保证相当强大。Freund和Schapire证明强分类器的训练误差在轮数上呈指数逼近零。更重要的是,一些结果后来证明了泛化性能。关键的见解是泛化性能与示例的边界有关,而AdaBoost能够快速实现很大的边界。

传统的AdaBoost过程可以很容易地解释为贪婪特征选择过程。考虑一般的Boosting问题,在这个问题中,大量的分类函数使用加权多数投票进行组合。挑战是将大权重与每个好的分类函数相关联,而较小的权重与较差的分类函数相关联。AdaBoost是一种积极的机制,用于选择一小组良好的分类函数,但这些函数具有显著的多样性。AdaBoost是弱分类器和特征之间的类比,它是一种有效的程序,可以搜索到少量的好“特征”,但这些“特征”具有显著的多样性。

 传统的AdaBoost过程可以很容易地解释为贪婪特征选择过程。考虑一般的boosting问题,在这个问题中,大量的分类函数使用加权多数投票进行组合。挑战是将大权重与每个好的分类函数相关联,而较小的权重与较差的分类函数相关联。AdaBoost是一种积极的机制,用于选择一小组良好的分类函数,但这些函数具有显著的多样性。AdaBoost是弱分类器和特征之间的类比,它是一种有效的程序,用于搜索少量的好“特征”,但这些“特征”具有显著的多样性。

完成这个类比的一个实用方法是将弱学习者限制在一组分类函数中,每个分类函数都依赖于一个单一的特征。为了支持这一目标,设计了弱学习算法来选择最能分离正负示例的单一矩形特征(这类似于Tieu和Viola(2000)在图像数据库检索领域的方法)。对于每个特征,弱学习器确定最优阈值分类函数,使错误分类的样本个数最小。因此,一个弱分类器(h(x, f, p, θ))由一个特征(f)、一个阈值(θ)和一个极性(p)组成,它们表示不等式的方向:

                      Robust Real-Time Face Detection_第7张图片

这里x是图像的24 × 24像素的子窗口。

在实际应用中,没有一个单一的特征能以低误差完成分类任务。在过程早期选择的特征产生的错误率在0.1到0.3之间。随着任务变得更加困难,在随后的几轮中选择的特征产生的错误率在0.4到0.5之间。表1显示了学习算法。

我们使用的弱分类器(阈值单一特征)可以看作是单节点决策树。在机器学习文献中,这种结构被称为决策桩。Freund和Schapire的原创作品也尝试了增加决策的树桩。

                     Robust Real-Time Face Detection_第8张图片

3.1、学习讨论

表1中描述的算法用于从可能的弱分类器集合中选择关键弱分类器。虽然AdaBoost过程非常高效,但弱分类器的集合非常大。由于每个不同的特征/阈值组合都有一个弱分类器,因此存在有效的KN弱分类器,其中K为特征数,N为示例数。为了理解对N的依赖性,假设示例是按照给定的特征值排序的。在训练过程中,位于同一对排序样本之间的任意两个阈值是等效的。因此不同阈值的总数为N。给定一个N = 20000, K = 160000的任务,有32亿个不同的二元弱分类器。

包装器方法也可以用来学习一个利用M个弱分类器的感知器(John et al., 1994)。包装器方法也会在每一轮中增加一个弱分类器到感知器。添加的弱分类器是当添加到当前集合产生最小误差感知器的分类器。每轮至少需要O(NKN)(或60万亿次操作);枚举所有二进制特性并计算使用该特性的每个示例的时间。这就忽略了学习感知器权重的时间。即便如此,学习200个特征分类器的最终工作将是O(MNKN),即1016次操作。

作为一种特征选择机制,AdaBoost相对于包装器方法等竞争对手的关键优势在于学习速度。使用AdaBoost可以在O(MNK)或大约1011个操作中学习200个特征分类器。一个关键的优点是,在每一轮中,对之前选择的特征的整个依赖都使用示例权重高效而紧凑地编码。这些权重可以用来在常数时间内评估给定的弱分类器。

弱分类器选择算法如下。对于每个特性,示例都是根据特性值排序的。然后,该特性的AdaBoost最优阈值可以在对这个排序列表的单次传递中计算出来。为每个元素在排序的列表中,四个维护总结和评价:积极T +例子权重的总和,总金额的负面例子权重T−,积极的和权重低于当前S +例子和负权值之和低于当前年代−示例。在排序列表中将当前示例和前一个示例的范围分开的阈值的错误是:

                   

或者将当前例子下面的所有例子标记为负,将上面的例子标记为正,相对于相反的错误的最小误差。随着搜索的进行,这些金额很容易更新。

许多一般特征选择程序已经被提出(见Webb(1999)的第8章综述)。我们最终的应用程序需要一个非常激进的过程,这将放弃绝大多数功能。针对类似的识别问题,Papageorgiou等(1998)提出了一种基于特征方差的特征选择方案。他们从总共1734个特征中选择了37个特征,结果很好。虽然这是一个显著的减少,但为每个图像子窗口评估的特征数量仍然相当大。

Roth等人(2000)提出了一种基于Winnow指数感知器学习规则的特征选择过程。这些作者使用一个非常大和不寻常的特征集,其中每个像素被映射到一个d维的二进制向量(当一个特定像素取值x,在[0,d−1]范围内,第x维设置为1,其他维设置为0)。将每个像素的二进制向量连接起来,形成一个维度为nd (n为像素的数量)的单个二进制向量。分类规则是一个感知器,它给输入向量的每个维度分配一个权重。Winnow学习过程收敛到一个解,其中许多权值为零。尽管如此,仍然保留了大量的功能(可能只有几百或几千个)。

3.2、学习结果

虽然关于最终系统的培训和性能的细节在第5节中介绍,几个简单的结果值得讨论。最初的实验表明,由200个特征构建的分类器可以产生合理的结果(见图4)。在检测率为95%的情况下,分类器在测试数据集上产生的假阳性率为1 / 14084。这是很有前途的,但对于一个人脸检测器实际应用,假阳性率必须接近1 / 100万。

对于人脸检测任务,AdaBoost选择的初始矩形特征是有意义的,容易解释。第一个特性选择似乎专注于房地产的区域的眼睛通常是鼻子和脸颊的地区(见图5)。这个特性与检测sub-window相比相对较大,并且应该对脸的大小和位置。第二个特征是眼睛的颜色比鼻梁的颜色深。

总之,200个特征分类器提供了初步证据,从矩形特征构建的增强分类器是一种有效的人脸检测技术。在检测方面,这些结果是引人注目的,但对许多现实世界的任务还不够。该分类器的计算速度非常快,扫描384 * 288像素的图像需要0.7秒。不幸的是,提高检测性能最直接的技术,即为分类器添加特征,直接增加了计算时间。

                   Robust Real-Time Face Detection_第9张图片

                  Robust Real-Time Face Detection_第10张图片

 4、注意的迭代

本节描述了一种构建分类器级联的算法,该算法可以提高检测性能,同时从根本上减少计算时间。关键的洞见是,可以构造更小,因此更高效的增强分类器,它可以拒绝许多负面子窗口,同时检测几乎所有积极的实例。在调用更复杂的分类器以实现低误报率之前,使用更简单的分类器来拒绝大多数子窗口。

级联中的各个阶段由AdaBoost训练分类器构建。从双特征强分类器入手,通过调整强分类器阈值来最小化误报,得到有效的人脸滤波器。初始AdaBoost阈值为,旨在对训练数据产生较低的错误率。阈值越低,检出率越高,假阳性率也越高。基于使用验证训练集测量的性能,可以调整双特征分类器来检测100%的人脸,假阳性率为50%。图5描述了该分类器中使用的两个特征。

双特征分类器的检测性能远远不能作为人脸检测系统。然而,分类器可以显著减少需要进一步处理的子窗口数量,操作非常少:

  1. 计算矩形特性(每个特性需要6到9个数组引用)。
  2. 计算每个特征的弱分类器(每个特征需要一个阈值操作)。
  3. 组合弱分类器(需要每个特征乘一次,再加一次,最后一个阈值)。

 一个两个特征分类器相当于大约60条微处理器指令。似乎很难想象任何更简单的过滤器可以达到更高的排除率。相比之下,扫描一个简单的图像模板每个子窗口至少需要20倍的操作。

检测过程的整体形式是一棵退化的决策树,我们称之为“级联”。来自第一个分类器的积极结果触发第二个分类器的评估,该分类器也被调整,以达到非常高的检出率。第二个分类器的阳性结果触发第三个分类器,以此类推。任何时候的负面结果都会导致立即拒绝子窗口。

                  Robust Real-Time Face Detection_第11张图片

级联的结构反映了这样一个事实:在任何单个图像中,绝大多数子窗口都是负的。因此,级联反应试图在尽可能早的阶段拒绝尽可能多的负面影响。虽然一个正的实例将触发级联中的每个分类器的评估,但这是非常罕见的事件。

就像决策树一样,后续的分类器是使用那些经过前面所有阶段的例子进行训练的。因此,第二个分类器比第一个分类器面临更困难的任务。通过第一阶段的例子比典型的例子“更难”。更深层次的分类器所面临的更困难的例子将整个接受者操作特征(ROC)曲线向下推。在给定的检出率下,越深的分类器对应的假阳性率越高。

 4.1、训练分类器的迭代

级联设计过程是由一组检测和性能目标驱动的。对于人脸检测任务,过去的系统已经实现了良好的检出率(在85 - 95%之间)和极低的假阳性率(在10−5或10−6的量级)。级联级数的数目和每个级的大小必须足够达到相似的检测性能,同时最小化计算。给定训练好的级联分类器,级联的假阳性率为:

                                                

其中F是级联分类器的假阳性率,K是分类器的数量,fi是第i个分类器通过它的例子的假阳性率。检出率为:

                                                    Robust Real-Time Face Detection_第12张图片

其中D为级联分类器的检出率,K为分类器的数量,di为第i个分类器对通过它的例子的检出率。

给定总体假阳性和检出率的具体目标,可以确定级联过程中每个阶段的目标率。例如,如果每个阶段的检出率为0.99(从0.9≈0.9910开始),10阶段分类器可以实现0.9的检出率。虽然达到这一检出率听起来似乎是一项艰巨的任务,但由于每个阶段只需要达到约30%(0.3010≈6 × 10−6)的假阳性率,这就大大简化了。

扫描真实图像时所评估的特征数必然是一个概率过程。任何给定的子窗口都将沿着级联向下移动,每次一个分类器,直到确定该窗口为负,或者在极少数情况下,该窗口在每次测试中成功并被标记为正。该过程的预期行为由典型测试集中图像窗口的分布决定。每个分类器的关键度量是它的“阳性率”,即被标记为可能包含一张脸的窗户的比例。被评估的功能的预期数量是:

                                  Robust Real-Time Face Detection_第13张图片

其中N为估计的特征数,K为分类器数,pi为第i个分类器的正确率,ni为第i个分类器中的特征数。有趣的是,由于面孔极其罕见,“阳性率”实际上等于假阳性率。

 训练级联的每个元素的过程需要一些注意。在第3节中提出的AdaBoost学习程序只是试图将错误最小化,并不是专门设计以牺牲较大的假阳性率为代价来实现高检出率。一个简单而又非常传统的解决方案是调整AdaBoost产生的感知器的阈值。较高的阈值产生较少的误报和较低的检出率的分类器。较低的阈值产生更多的误报和较高的检出率的分类器。目前尚不清楚,以这种方式调整阈值是否保留AdaBoost提供的训练和泛化保证。

 整个培训过程涉及两种类型的权衡。在大多数情况下,具有更多特征的分类器将获得更高的检出率和更低的假阳性率。同时,具有更多特征的分类器需要更多的计算时间。原则上,可以定义一个优化框架,其中

  • 分类器阶段的数量
  • 每个阶段的特征数n_i
  • 每个阶段的阈值

为了减少对F和d的目标的预期数量,因此被交换,不幸的是找到这个最佳的是一个非常困难的问题。

                  Robust Real-Time Face Detection_第14张图片

在实践中,使用一个非常简单的框架来产生高效的分类器。用户选择fi的最大可接受率和di的最小可接受率。AdaBoost对级联的每一层进行训练(如表1所示),使用的特征数量不断增加,直到达到该级别的目标检测和假阳性率。速率是通过在验证集中测试当前检测器来确定的。如果总体目标假阳性率未达到,则在级联中添加另一层。通过在一组不包含任何人脸实例的图像上运行当前检测器,收集所有错误检测,从而获得用于训练后续层的负集。表2给出了更精确的算法。

4.2、简单的实验

为了探索级联方法的可行性,我们训练了两个简单的检测器:一个单一的200个特征分类器和10个级联的20个特征分类器。利用从非人脸图像中随机选取5000张人脸和10000个非人脸子窗口,对级联的第一阶段分类器进行训练。第二阶段分类器的训练对象是与第一分类器相同的5000张面孔加上5000个假阳性。这一过程继续进行,因此后续阶段使用前一阶段的假阳性进行训练。

在训练级联分类器的所有阶段的所有实例的并集上训练单片200特征分类器。注意,如果没有引用级联分类器,可能很难选择一组非人脸训练示例来训练整体分类器。我们当然可以使用所有非人脸图像的子窗口,但这会使训练时间不切实际地长。级联分类器的顺序训练方法通过丢弃简单的例子而专注于“困难的”例子,有效地减少了非人脸训练集。

图7给出了比较两种分类器性能的ROC曲线。结果表明,两者在精度上相差不大。然而,在速度方面有很大的不同。级联分类器的速度快了近10倍,因为它的第一阶段抛出了大多数非面孔,所以它们永远不会被随后的阶段评估。

4.3、检测器迭代讨论

把检测器训练成分类器的序列有一个隐藏的好处,那就是最终检测器看到的负面示例的有效数量可以非常大。我们可以想象训练一个带有许多特征的大型分类器,然后通过观察特征的部分和来试图加快其运行时间,如果部分和低于适当的阈值,则尽早停止计算。这种方法的一个缺点是,要使训练可行,负面例子的训练集必须相对较小(大约10,000到100,000个例子)。使用级联检测器,级联的最后一层可以有效地查看数亿个负面示例,以便找到一组10,000个负面示例,这些负面示例是级联的前一层无法找到的。所以负训练集更大更专注于级联检测器的难例子。

一个类似于级联的概念出现在罗利等人(1998)所描述的人脸检测系统中。罗利等人训练了两个神经网络。其中一个网络较为复杂,专注于图像的一个小区域,检测出假阳性率较低的人脸。他们还训练了第二种神经网络,其速度更快,聚焦于图像的更大区域,并检测出假阳性率更高的面孔。roley等人使用较快的第二网络对图像进行预选,以便为较慢的更精确的网络找到候选区域。虽然很难准确地确定,但似乎Rowley等人的两个网络人脸系统是现有的最快的人脸检测器我们的系统使用类似的方法,但它将这两级联扩展到包括38级。

              Robust Real-Time Face Detection_第15张图片

级联检测过程的结构本质上是一个退化的决策树,因此与Amit和german(1999)的工作有关。与使用固定检测器的技术不同,Amit和german提出了另一种观点,即使用简单图像特征的不寻常的共现来触发更复杂的检测过程的评估。通过这种方式,完整的检测过程不需要在许多潜在的图像位置和尺度上进行评估。虽然这一基本见解非常有价值,但在它们的实现中,有必要首先在每个位置评估一些特征检测器。然后对这些特征进行分组,以发现不寻常的共同出现。在实践中,由于我们的检测器的形式和它使用的特征是非常高效的,评估我们的检测器在每个尺度和位置的平摊成本要比在整个图像中寻找和分组边缘快得多。

在最近的工作Fleuret和german(2001)提出了一种基于“链”测试的人脸检测技术,以表示在特定规模和位置上存在人脸。Fleuret和german测量的图像属性,精细尺度边缘的分离,与矩形特征有很大的不同,矩形特征是简单的,存在于所有尺度,并有一定的解释性。这两种方法在学习哲学上也有很大的不同。因为Fleuret和german的学习过程没有使用负面例子,他们的方法更多地基于密度估计,而我们的检测器是纯粹的判别。最后Fleuret和german的方法的假阳性率似乎高于之前的方法,如Rowley等和本方法。在发表的论文中,所包含的样本图像每个都有2到10个假阳性。对于许多实际任务来说,重要的是任何图像中误报的预期数量小于1(因为在许多任务中,误报的预期数量也小于1)。不幸的是,本文没有报道标准数据集上的定量检测和假阳性结果。

5、结果

本节描述了最终的人脸检测系统。讨论包括级联检测器的结构和训练的细节,以及在大型真实世界测试集上的结果。

5.1、训练数据集

人脸训练集包括4916个手标记的人脸,按比例和对齐到24 * 24像素的基本分辨率。这些人脸是从随机抓取万维网下载的图像中提取出来的。一些典型的人脸示例如图8所示。训练脸只是大致对齐。这是通过让一个人在每张脸周围放置一个包围框来完成的,这个包围框位于眉毛上方和嘴和下巴的中间位置。然后将这个边界框放大50%,然后裁剪并缩放到24 * 24像素。没有做进一步的对齐(即眼睛没有对齐)。注意,这些示例比图8中使用的示例包含更多的头部。用于训练的正面垂直面部图像的例子。罗利等人(1998)或Sung和Poggio(1998)。最初的实验也使用了16 * 16像素的训练图像,在这些图像中,人脸被更严格地裁剪,但得到的结果略差。据推测,24 × 24的例子包括额外的视觉信息,如下巴和脸颊的轮廓和头发线,这有助于提高准确性。由于所使用特性的性质,较大的子窗口不会降低性能。事实上,包含在较大子窗口中的附加信息可以用于在检测级联的早期拒绝非人脸。

5.2、检测器迭代的结构

最后的检测器是一个38层级联的分类器,共包含6060个特征。级联中的第一个分类器使用两个特征构建,在正确检测接近100%的人脸的同时,拒绝约50%的非人脸。下一个分类器有10个特征,拒绝80%的非人脸,但检测到几乎100%的人脸。接下来的两层是25个特征分类器,然后是3个50个特征分类器,然后是根据表2中的算法选择的具有各种不同数量特征的分类器。每个层的特征数量的特定选择是通过一个试验和错误过程来驱动的,在这个过程中,特征的数量不断增加,直到能够显著降低误报率。增加更多的水平,直到验证集上的假阳性率接近于零,同时仍然保持较高的正确检出率。最终的层数和每个层的大小对最终的系统性能并不重要。为了减少检测器的训练时间,我们用来选择每层特征数量的程序是由人工干预指导的(前7层)。对表2中描述的算法进行了轻微修改,通过手动指定每层的最小特征数量以及一次添加多于1个特征,来减轻计算负担。在后面的层中,在验证集上进行测试之前,一次添加25个特性。这样就避免了必须在验证集中测试检测器,以了解添加到分类器的每一个特性。

                 Robust Real-Time Face Detection_第16张图片

通过从一组9500幅不包含人脸的图像中选择随机子窗口来收集用于训练第一级级联的非人脸子窗口。通过扫描大块非人脸图像的部分级联并收集假阳性,获得用于训练后续层的非人脸示例。每层最多收集6000个这样的非面子窗口。在9500张非人脸图像中包含了大约3.5亿个非人脸子窗口。整个38层探测器的训练时间在466 MHz的AlphaStation XP900上约为几周。此后,我们将算法并行化,使其有可能在大约一天的时间内训练一个完整的级联。

5.3、最终检测器的速度

级联检测器的速度与每个扫描子窗口所评估的特征数直接相关。正如第4.1节所讨论的,所评估的特征的数量取决于所扫描的图像。由于大多数子窗口在级联的前两个阶段被丢弃,平均每个子窗口中6060个特征中有8个特征被评估(如MIT + CMU评估(Rowley et al., 1998)。在700 Mhz的Pentium III处理器上,人脸检测器可以在0.067秒内处理384 * 288像素的图像(起始刻度为1.25,步长为1.5,如下所述)。这大约比Rowley- balujakanade检测器(Rowley et al., 1998)快15倍,比Schneiderman-Kanade检测器(Schneiderman and Kanade, 2000)快600倍。

 5.4、图像处理

所有用于训练的子窗口示例均进行方差归一化,以最小化不同光照条件的影响。因此,在检测过程中也需要标准化。利用一对积分图像,可以快速计算出图像子窗口的方差。回想一下,,其中σ是标准差,m是均值,x是子窗口内的像素值。子窗口的均值可以用积分图像来计算。像素平方和的计算使用图像平方和的一个积分图像(即在扫描过程中使用两个积分图像)。在扫描过程中,图像归一化的效果可以通过后乘特征值而不是对像素进行操作来实现。

5.5、扫描检测器

最后的检测器在多个尺度和位置上扫描图像。缩放是通过缩放检测器本身来实现的,而不是缩放图像。这个过程是有意义的,因为功能可以以相同的成本在任何规模上进行评估。使用1.25倍的尺度获得了良好的检测结果。

探测器也被扫描跨位置。后续的位置是通过移动窗口的像素数量来获得的。这个移动过程受到检测器的尺度的影响:如果当前尺度为s,窗口将被移动[s],其中[]是舍入操作。

的选择既影响探测器的速度,也影响探测器的精度。由于训练图像具有一定的平移变异性,学习后的检测器能够在图像中实现良好的检测性能。因此,检测器子窗口每次可以移动超过一个像素。然而,超过一个像素的步长倾向于略微降低检出率,同时也减少了误报的数量。我们给出了两种不同步长的结果。

5.6、多重检测的集成

由于最终的检测器对平移和尺度上的微小变化不敏感,因此通常会在扫描图像的每个人脸周围进行多次检测。某些类型的假阳性通常也是如此。在实践中,对每张脸返回一次最终检测通常是有意义的。为此,对被检测的子窗口进行后处理是很有用的,以便将重叠检测合并为单个检测。

在这些实验中,检测以一种非常简单的方式组合在一起。首先将检测集划分为不相交的子集。两个检测在同一子集中,如果它们的边界区域重叠。每个分区产生一个单独的最终检测。最终边界区域的角是集合中所有检测的角的平均值。

在某些情况下,这种后处理减少了假阳性的数量,因为假阳性的重叠子集减少到一个单一的检测。

5.7、真实世界测试集上的实验

我们在麻省理工学院+ CMU正面面部测试集上测试了我们的系统(Rowley等人,1998年)。这一组由130张图片组成,其中507张是正面的。图9显示了我们的检测器在该测试集上的性能。为了创建ROC曲线,最后一层分类器上感知器的阈值从+∞调整到−∞。将阈值调整为+∞将产生0.0的检出率和0.0的假阳性率。但将阈值调整为−∞时,检出率和假阳性率都有所提高,但只提高到一定程度。这两种速率都不能高于检测级联的速率减去最后一层。实际上,−∞的阈值相当于移除该层。进一步提高检测率和假阳性率需要降低级联中下一个分类器的阈值。因此,为了构建完整的ROC曲线,需要去掉分类器层。我们使用假阳性的数量而不是假阳性的比率作为ROC曲线的x轴,以便于与其他系统进行比较。要计算假阳性率,只需除以扫描的子窗口总数。在 = 1.0,起始规模= 1.0的情况下,扫描子窗口数量为75,081,800。对于 = 1.5,起始规模= 1.25,扫描子窗口数为18901947。

                 Robust Real-Time Face Detection_第17张图片

 不幸的是,大多数先前发表的人脸检测结果只包括一个单一的操作机制(即ROC曲线上的单个点)。为了方便与我们的检测器比较,我们列出了我们对其他系统报告的相同假阳性率的检出率。表3列出了我们的系统以及其他已经发布的系统对不同数目的误检的检出率。对于RowleyBaluja-Kanade的结果(Rowley et al., 1998),测试了他们的许多不同版本的检测器,得出了许多不同的结果。虽然这些不同的结果实际上不是特定检测器的ROC曲线上的点,但它们确实表明了使用它们的方法可以实现的许多不同的性能点。他们确实发布了两个检测器的ROC曲线,但这些ROC曲线并不代表他们的最佳结果。对于Roth- yang - ahuja检测器(Roth等人,2000年),他们报告了他们在麻省理工学院+ CMU测试集减去5张包含线条画的人脸的结果。因此,他们的结果是麻省理工学院+ CMU测试集的一个子集,包含125张图片和483张面孔。如果使用完整的测试集,他们的检出率可能会更低。它们的检出率周围的括号表示这个稍有不同的测试集。由于CMU部分还不存在,因此Sung and Poggio人脸检测器(Sung and Poggio, 1998)是在MIT + CMU测试集的MIT子集上测试的。麻省理工学院的测试包含23张图片,149张面孔。检出率为79.9%,假阳性5例。我们的5个假阳性检出率是77.8%的MIT测试集。图10显示了我们的人脸检测器对来自MIT + CMU测试集的一些测试图像的输出。

5.7.1、一个简单的投票方案进一步改善结果

通过组合使用不同的初始负样本训练的三个检测器,对负与正误差的权重略有不同,以及对分类器大小进行假阳性交易的标准略有不同,可以获得最好的结果。这三个系统在最后一个任务中执行的类似,但在某些情况下,错误是不同的。来自这三个检测器的检测结果通过只保留那些至少有2个检测器一致的检测结果组合在一起。这提高了最终的检出率,并消除了更多的假阳性。由于检测器的误差不是不相关的,结合结果在一个可测量的,但适度的改进,比最好的单个检测器。

 5.7.2、失败的模型

通过观察我们的面部检测器在一些测试图像上的表现,我们注意到几种不同的故障模式。

面部检测器的测试对象是正面、直立的面孔。这些面只是大致对齐,所以在平面内和平面外的旋转都有一些变化。非正式的观察表明,面部探测器可以检测到在平面上倾斜约±15度,在平面外倾斜约±45度(朝向侧面图)的面部。探测器在比这个旋转更多的情况下变得不可靠。

我们也注意到苛刻的背光,在这种情况下,脸部非常暗,而背景相对较亮,有时会导致失败。值得注意的是,使用基于鲁棒统计的非线性方差归一化方法去除异常值可以提高这种情况下的检出率。这种归一化的问题是在我们的整体图像框架内大大增加了计算成本。

最后,我们的人脸检测器在显著遮挡的人脸上失败。例如,如果眼睛被遮挡,检测器通常就会失效。嘴并不是那么重要,所以一张有遮盖嘴的脸通常还是会被发现的。

             Robust Real-Time Face Detection_第18张图片

6、结论

我们提出了一种最小化计算时间同时达到较高检测精度的人脸检测方法。该方法被用于构建一个人脸检测系统,其速度大约是之前任何方法的15倍。初步的实验,将在其他地方描述,表明高效的探测器,其他物体,如行人或汽车,也可以用这种方式建造。

这篇论文汇集了新的算法,表示和见解,这些是相当普遍的,可能有更广泛的应用在计算机视觉和图像处理。

第一个贡献是利用整体图像计算丰富的图像特征集的新技术。为了实现真尺度不变性,几乎所有的人脸检测系统都必须在多个图像尺度上进行操作。积分图像消除了计算多尺度图像金字塔的需要,显著减少了人脸检测所需的初始图像处理。使用积分图像,人脸检测完成的时间几乎与计算图像金字塔的时间相同。

虽然完整的图像也应该立即用于其他使用类似哈尔特征的系统,如Papageorgiou等人(1998),但可以预见的是,它可以对任何可能具有哈尔特征价值的任务产生影响。最初的实验表明,类似的特征集对于参数估计也是有效的,其中脸部的表情,头部的位置,或一个物体的姿势是确定的。

本文的第二个贡献是使用AdaBoost从计算效率高的特征构建一个简单高效的分类器来进行特征选择。这个分类器对于人脸检测显然是一个有效的分类器,我们相信它在其他领域也会有效,如汽车或行人检测。此外,一种积极有效的特征选择技术的想法应该对各种学习任务产生影响。给定一个有效的功能选择工具,系统设计师可以自由地定义一个非常大和非常复杂的功能集作为学习过程的输入。尽管如此,所得到的分类器在计算上是有效的,因为在运行时只需要评估少量的特征。通常得到的分类器也非常简单;在一大堆复杂的特征中,更有可能找到几个关键的特征,它们以一种直接的方式捕获分类问题的结构。

本文的第三个贡献是构建分类器级联的技术,从根本上减少了计算时间,同时提高了检测精度。级联的早期阶段被设计为拒绝大部分图像,以便将后续处理集中在有希望的区域。一个关键点是所提出的叶栅结构简单且均匀。先前的注意过滤方法,如Itti等人(1998)提出了一种更复杂和异构的过滤机制。同样,Amit和german(1999)提出了一种检测的层次结构,其中各阶段在结构和处理上有很大的不同。同构系统除了易于实现和理解之外,还具有处理时间和检测性能之间可以进行简单权衡的优点。

最后,本文对一个已经被广泛研究的复杂人脸检测数据集进行了详细的实验。该数据集包括在非常广泛的条件下的人脸,包括:照明、比例、姿势和相机变化。在如此庞大和复杂的数据集上进行实验是困难和耗时的。然而,在这些条件下工作的系统不太可能是脆弱的或局限于单一的一组条件。更重要的是,从该数据集得出的结论不太可能是实验性的人工制品。

你可能感兴趣的:(计算机视觉,计算机视觉,机器学习,决策树)