【翻译经典】Rapid Object Detection using aBoosted Cascade of Simple Features(人脸检测经典论文)

   本文翻译的是haar+adaboost+cascade的人脸检测经典文章,《Rapid Object Detection using aBoosted Cascade of Simple Features》

     转载请注明出处:https://blog.csdn.net/u012679707/article/details/80626775

     若需要英文原文,请戳:https://download.csdn.net/download/u012679707/10467945  

    本人才疏学浅,若有翻译的不正确之处,还望指出,可留言,可私信,皆可!

【翻译经典】Rapid Object Detection using aBoosted Cascade of Simple Features(人脸检测经典论文)

                                                        Paul Viola    Michael Jones

 Abstract:

    摘要描述了一种用于视觉物体检测的机器学习方法,该方法能够快速处理图像,达到较高的检测率。这项工作有三个重要的贡献。第一个是引入了一种新的图像表示,称为“积分图”,它使得我们的检测器使用的特性能快速地计算出来。第二种是一种基于AdaBoost的学习算法,它从更大的集合中选择少量关键的视觉特征,并产生极其简单的分类器。第三个贡献是一种将越来越复杂的分类器组合在“级联”中的方法,这种方法允许背景区域的图像被快速丢弃,虽然在有希望的对象区域上花费更多的计算。级联(cascade)可以被看作是一种特殊的关注机制,与之前的方法不同,它提供了统计的保证,而被丢弃的区域不可能包含感兴趣的对象。在人脸检测领域,系统的检测率可以与以前最好的系统相比较。在实时应用中,检测器以每秒15帧的速度运行,而不需要使用图像差异或皮肤颜色检测。

1.Introduction

    这篇论文汇集了新的算法和见解,为健壮和极快的目标检测构建一个框架。这个框架在一定程度上是由人脸检测的任务所推动的。为了达到这个目的我们已经建立了一个正面人脸检测系统,能实现检测率和假正率都相当于已公布的最好的结果[14、11、13、10、11]。这种人脸检测系统与以前的方法相比,最明显的不同体现在快速检测人脸的能力。操作在384*288像素的图像上,人脸在常规的700 MHz Intel Pentium 111处理器上以每秒5帧的速度被检测到。在其他人脸检测系统中,辅助信息,如视频序列中的图像差异,或彩色图像中的像素颜色,已经被用于实现高帧率。我们的系统只用一个灰度图像中的信息,就实现了高帧率。这些可选的信息来源也可以与我们的系统集成,以达到更高的帧率。

    我们的目标检测框架有三个主要的贡献。我们将在下面简要介绍这些想法,然后在后面的章节中详细描述它们。

    这篇论文的第一个贡献是一个新的图像表示,叫做积分图,它可以快速地进行特征值计算。

    在一定程度上受到了Papageorgiou等人的研究的激励,我们的检测系统不能直接与图像强度相关。与这些作者一样,我们使用了一组特征,这些特征让人想起Haar基函数(尽管我们也会使用比Haar过滤器更复杂的相关滤波器)。为了在很多尺度上快速地计算这些特征,我们引入了图像的积分图表示。通过对每个像素的一些操作,可以从图像中计算出积分图。一旦计算出积分图,任何一个类harr(haar-like)特征都可以在任何尺度或位置以常数时间计算出来。

    本文的第二个贡献是通过使用AdaBoost选择少量重要特征来构造分类器,在任何图像子窗口中,类似于haar的特征的总数非常大,远远大于像素的数量。为了确保快速分类,学习过程必须排除大部分可用的特征,并将重点放在一小部分关键特征上。在Tieu和Viola的工作的激励下,通过对AdalBoost程序的简单修改,特征选择被实现了:弱学习器受到约束,

    因此,返回的每个弱分类器只能依赖于单个特征。因此,选择一个新的弱分类器的提升(boosting)过程的每个阶段,都可以被看作是一个特征选择过程。Adalboost提供了一种有效的学习算法和强大的边界泛化性能。

    本文的第三个主要贡献是,在一个级联结构中,将更复杂的分类器组合在一起,通过对图像中有希望的区域的关注,极大地提高了检测器的速度。关注的焦点背后的概念是,通常可以快速地确定对象在图像中的位置。更复杂的处理只针对这些有希望的区域。这种方法的关键衡量标准是,“注意”过程的“假阴性”率。它必须是这样的情况:所有的目标实例都是由“注意”过滤器选择的。

    我们将描述一个训练极其简单和有效的分类器的过程,这个分类器可以被用作注意力操作员的“监督”焦点。“监督”一词指的是注意力操作员被训练来检测某一特定类的例子。在人脸检测的领域中,使用由两个haar-like特征组成的分类器可以实现少于1%的假阴性和40%的假阳性。这个过滤器的作用是将最终检测器必须评估的位置减少一半以上。

    一个极快的人脸探测器将有广泛的实际应用。这些包括用户界面、图像数据库和远程会议。

    在不需要快速帧速率的应用程序中,我们的系统将允许大量的后期处理和分析。另外,我们的系统可以在广泛的小型低功耗设备上实现,包括手持设备和嵌入式处理器。在我们的实验室里,我们已经在Compaq iPaq手持设备上实现了这个人脸检测器,并且已经达到了每秒2帧的检测(这个设备有一个低功率的200 MIPS强大的Arm处理器,但它缺少浮点硬件)。

  本文的其余部分描述了我们的贡献和一些实验结果,包括对我们的实验方法的详细描述。

    关于密切相关的工作的讨论在每个部分的末尾进行。

2. Features

    为什么使用特征而不是直接使用像素值?

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

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

  考虑到探测器的基本分辨率是24x24,矩形特征的全部集合相当大,超过180,000个。请注意,与Haar基不同,矩形特性的集合是过完备的。

        

    图1:封闭的检测窗口中显示的矩形特征。在白色矩形中的像素的总和从灰色矩形的像素之和中减去。两个矩形的特征显示在(A)和(B)中。图(c)显示一个三矩形特征,(D)一个四矩形的特征。

2.1.Integral Image

    矩形的特征可以用一个中间的表示来快速计算,我们称之为积分图。在位置(x,y)的积分图,包含它上面的像素,并且直到(x, y)的左边的和,包括:

        

                                            

       图2:矩形D中像素的总和可以用四个数组参照来计算。位置1的积分图像的值是矩形A的像素之和,位置2的值是A+B,位置3是A+C,位置4是A+B+C+d。D中的和可以被计算为4+1-2+3)。

    使用积分图,任何矩形和都可以在四个数组参照中计算(见图2)。很明显,两个矩形的和可以用8个参考值计算。因为上面定义的两矩形(two-rectangle)的特征涉及到相邻的矩形,它们可以在六个参照数组中计算,在三个矩形(three-rectangle)的例子中有8个,而4个矩形特征的计算需要9个参照数组。

2.2. Feature Discussion

    与方向可调滤波器等替代方案相比,矩形特征有些原始,方向可调滤波器和它们的近亲,对于详细分析边界、图像压缩和纹理分析非常出色。相比之下,矩形特征,虽然对边、条和其他简单的图像结构很敏感,但却相当粗糙。与方向可调滤波器不同的是,矩形特征唯一可用的方向是垂直、水平和对角线。然而,这组矩形特征提供了一个丰富的图像表示,支持有效的学习。与积分图相结合,矩形特征集的效率为其有限的灵活性提供了充足的补偿

3. Learning ClassificationFunctions

    给定一个特征集和一组正样本和负样本图像,可以使用任意数量的机器学习方法来学习分类功能。在我们的系统中,AdaBoost的一个变种被用来选择一组小的特征并训练分类器

    在最初的形式中,AdaBoost学习算法用于提高简单(有时称为弱学习器)学习算法的分类性能。AdaBoost的学习过程提供了许多正式的保证。Freund和Schapire证明了强分类器的训练误差在几轮中呈指数级下降。更重要的是,许多结果都证明了泛化性能。关键的观点是,泛化性能与样本的边界有关,而AdaBoost可以快速获得巨大的边界。

    回想一下,每个图像子窗口有超过18万个矩形特征,这个数字远远大于像素的数量。尽管每个特征都可以非常高效地计算,但是计算完整的集合是非常昂贵的。我们的假设,已经通过实验证实了,可以将这些特征的一小部分组合起来形成一个有效的分类器。主要的挑战是找到这些特征。

    为了支持这一目标,弱学习算法被设计成选择单个矩形特性,它可以最好地分离正样本和负样本的例子(这类似于图像数据库检索领域中一种方法)。对于每个特征,弱学习器决定了最优阈值分类函数,这样被错误分类的样本数最少。因此,一个弱分类器h jx包括一个特征fj、一个阈值θj和一个指示不等号方向的极性pj组成,:

        

    这里x是一个24x24像素的图像的子窗口。请参见图3,以获得boosting过程的摘要。

    在实践中,没有单一的特征可以实现低错误的分类。在boosting过程的早期阶段选择的特征有0.1-0.3之间的错误率。随着任务变得更加困难,在后期阶段中选择的特征会产生0.4-0.5之间的错误率。

    

        图3:用于分类器学习的AdaBoost算法。每一次迭代,boosting从180000个潜在的特征中选择一个特征。

3.1. Learning Discussion

    许多通用特征选择程序已经被提出了。我们的最终应用程序需要一种非常激进的方法,它会抛弃绝大多数的特征。对于类似的识别问题,Papageorgiouet al提出了一种基于特征方差的特征选择方案,他们展示了良好的结果,在1734个特征中选择了37个特征。

    Roth等人提出了一个基于Winnow指数感知器学习规则的特征选择过程。winnow学习过程收敛于一个解决方案,其中许多权重为零。尽管如此,仍然保留了大量的特征(可能是几百或几千个)。

3.2. Learning Results

    虽然第5节介绍了最后系统的训练和性能的细节,但有几个简单的结果值得讨论。最初的实验表明,由200个特征组成的正脸分类器在14084中的检测率为95%,假阳性率为1。这些结果是令人信服的,但对于许多实际的任务来说还不够。在计算方面,这种分类器可能比其他任何发布的系统都快,需要0.7秒的时间来扫描384*288像素的图像。不幸的是,提高检测性能的最直接的技术,增加了分类器的特征,直接增加了计算时间。

    对于人脸检测的任务,AdaBoost选择的初始矩形特征是有意义且容易解释的。第一个特征选择似乎专注于眼睛比鼻子和脸颊更暗这一属性 (参见图4)。这个特征与检测子窗口相比相对较大,并且应该对脸的大小和位置不敏感。选择的第二个特征依赖于眼睛比鼻梁更暗的属性。

        

        图4:AdaBoost选择的第一个和第二个特征。这两个特征显示在最上面一行,然后在底部的一个典型的训练面上覆盖。第一个特征是测量眼睛区域和上颊区域之间的强度差异。该特征利用观察到的观察结果,即眼睛区域通常比脸颊更暗。第二个特征是将眼睛区域的强度与鼻梁上的强度进行比较。

4. The Attentional Cascade

    本节描述了一种构造级联分类器的算法,该算法实现了在降低计算时间的同时,提升了检测性能。关键的一点是,更小的、因而更有效的、boosted的分类器可以被构造出来,拒绝很多负样本(negative)的子窗口的同时,可检测几乎所有正的实例(例如,一个boosted分类器的阈值可以调整,从而使假阴性率接近于零)。在调用更复杂的分类器之前,使用更简单的分类器来拒绝大多数子窗口,实现低的假阳性率(low false positive rates)。

    检测过程的整体形式是一个退化的决策树,我们称之为“cascade”(见图5)。第一个分类器的一个正的结果(positive result)触发了对第二个分类器的评估,它也被调整以达到很高的检测率。第二个分类器的正的结果触发第三个分类器,以此类推。任何时候的负结果(A negative)都会导致子窗口立即被拒绝。

    级联的阶段是通过使用Adaboost的训练分类器、然后调整阈值以减少假阴性来构建的。注意,默认的Adaboost阈值被设计为在训练数据上产生低错误率。一般来说,较低的阈值会产生更高的检测率和更高的假正率。

    例如,一个从2-特征(two-feature)强分类器中构造出来的出色的第一阶段分类器,可以通过降低阈值来减少假阴性。与验证训练集相比,阈值可以调整为百分之百检测人脸,并伴随着40%的假阳性。图4给出了这个分类器中使用的2-特征(two-feature)的描述。

        

    图5:检测级联的示意图。每个子窗口都应用了一系列分类器。最初的分类器消除了大量的负面例子,且只需很少的处理。随后的层消除了额外的负面例子,但需要额外的计算。经过几个阶段的处理后,子窗口的数量已经大大减少了。进一步的处理可以采取任何形式,例如附加级联阶段(如在我们的检测系统中)或使用另一种可选择的检测系统。

    这2-特征分类器的计算相当于大约60个微处理器指令。似乎很难想象,任何更简单的过滤器都能达到更高的拒绝率。相比之下,扫描一个简单的图像模板,或者一个单层感知器,每个子窗口至少需要20倍的操作。

    级联的结构反映了这样一个事实:在任何一张图像中,绝大多数的子窗口都是负的。因此,级联试图在尽可能早的阶段拒绝尽可能多的负例。虽然一个正例将触发对级联中每个分类器的评估,但这是一个低概率事件(通过层层分类器的情况较少)。

    就像决策树一样,后续的分类器也会使用那些经过所有前阶段的例子(examples)来训练。因此,第二种分类器面临的任务比第一个更困难。通过第一阶段的例子比典型的例子更加“困难”。更深层次的分类器所面临的更困难的例子,将整个接收机的操作特性(ROC)曲线向下推。在给定的检测率下,更深层次的分类器相应的假阳性率更高。

4.1. Training a Cascade ofClassifiers

    级联训练过程涉及两种类型的权衡(折衷)。在大多数情况下,具有更多特征的分类器将获得更高的检测率和更低的假阳性率。与此同时,具有更多特征的分类器需要更多的时间来计算。原则上,我们可以定义一个优化框架,其中:i)分类器迭代阶数,ii)每个迭代阶段(stage)的特征数量,以及iii)每个阶段的阈值,为了最小化预期的被评估特性的数量而被改变。

    不幸的是,找到这种最优的方法是一个非常困难的问题。

    在实践中,一个非常简单的框架被用来产生一个高效的分类器。级联的每个阶段都降低了假正率,降低了检测率。选择一个目标,以减少误报和最大化减少检测量。每个阶段都通过添加特征来训练,直到目标检测和假阳性率得到满足(这些率rate是通过在验证集中测试检测器来确定的)。在达到假阳性和检测率的总体目标之前,迭代增加。

4.2. Detector Cascade Discussion

    完整的人脸检测级联结构有38个阶段,有超过6000个特性。虽然,级联结构有快速的平均检测时间。但在一个困难的数据集上,包含507个面孔和7500万个子窗口,每个子窗口的人脸被检测到平均需要10个特征评估。相比之下,这个系统的速度是由Rowley等人构建的探测系统的15倍。

    类似于级联的概念出现在Rowley等人描述的人脸检测系统中,它使用两个检测网络。Rowley等人使用了一个更快但不太精确的网络来对图像进行预筛选,以便找到一个更慢更精确的网络的候选区域。虽然很难准确地确定,但Rowley等人的两个网络人脸系统是目前最快的人脸检测系统。

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

    在最近的研究中,Fleuret和Geman展示了一种人脸检测技术,它依赖于一个测试“链”,以表示在特定的尺度和位置上的人脸的存在。由Fleuret和Geman测量的图像属性,细尺度边缘的分离,与简单的矩形特征是完全不同的,在所有的尺度上都存在,并且是可以解释的。

    这两种方法在他们的学习哲学中的动机也有很大的不同。对于Fleuret和Geman的学习过程是密度估计和密度辨别,而我们的检测器纯粹是有识别力的。最后,Fleuret和Geman的方法的假正率似乎比像Rowley等人的方法和这种方法的方法要高。不幸的是,这篇论文并没有报告这类的定量结果。所包含的示例图像各有2到10个假阳性结果

        

                图6:用于训练的正面直立脸的样例

5  Results

    一种38层级联分类器被训练用来检测正面直立的脸。为了训练探测器,使用了一组脸部和非脸部训练图像。人脸训练集由4916手标记的人脸组成,人脸已对齐且尺寸归一化到24*24像素。这些面孔是从万维网随机抓取的图像中提取出来的。图6中显示了一些典型的面孔示例。用于训练探测器的非人脸子窗口来自9544张图像,这些图像是人工检查的,并且发现不包含任何面孔。在这些非人脸图像中大约有3.5亿个子窗口。

    在检测器的前5层中,特性的数量分别是l、10、25、25和50。接下来的层有越来越多的特征。所有层的总特征数是6061。

    在级联中,每个分类器都接受了4916个训练人脸图像(加上它们的垂直镜像,总共9832个训练脸)和10000个非人脸子窗口(大小是24*24个像素),使用Adaboost的训练程序。对于最初的一个特征分类器,通过从一组不包含人脸的9544图像中选择随机子窗口来收集用于训练的非人脸样例。通过扫描非人脸图像的部分的级联和收集假阳性样本,获得了用于训练的后续层的非人脸样例。每一层都收集了10 000个这样的非人脸子窗口。

Speed of the Find Detector

    级联检测器的速度直接与每个扫描子窗口所评估的特征的数量有关。在mit+cmu测试集的评估中,每一个子窗口中平均有10个特征值(总共6061个特征)。这是可能的,因为大多数子窗口都被级联的第一层或第二层拒绝了。在700Mhz的Pentium i11处理器上,人脸探测器可以在大约0.067秒内处理384*384像素的图像(使用1.25的起始刻度和下面描述的1.5的步长)。这大约比Rowley Baluja-Kanadee探测器的速度快了15倍,比Schneiderman-Kana探测器的速度快了大约600倍。

Image Processing

    所有用于训练的子窗口都是方差规格化,以最大限度地减少不同光照条件的影响。因此,在检测过程中,标准化也是必要的。图像子窗口的方差可以用一对积分图快速计算出来。

        

   σ是标准差,m是均值,x是子窗口中的像素值。子窗口的均值可以用积分图来计算。平方像素的和是用图像的平方的积分图来计算的(即在扫描过程中使用两个积分图)。在扫描图像的过程中,可以通过右乘特征值运算而不是预先将像素相乘实现归一化

Scanning the Detector

    探测器也会在不同的位置进行扫描。通过将窗口移位一些像素Δ来获得后续的位置。这个移位的过程受到探测器的大小的影响:如果当前的刻度是s,那么窗口就会被移动[sΔ],[]是舍入操作。

    Δ的选择对检测器的速度和准确度都有影响。我们给出的结果是Δ=1.0。我们可以通过设置Δ=1.5来达到一个显著的加速效果,只会稍微降低精度。

    表1:包含130个图像有507张人脸的MIT+CMU测试集上的不同数量的假阳性样本的检测率

    

Integration of MultipleDetections(多尺度检测集成)

    由于最终的探测器对转化和尺度上的微小变化不敏感,所以在扫描图像中,每张脸通常会出现多个检测。同样的道理也适用于某些类型的假阳性样本。在实践中,每一张脸的最后一次检测通常是有意义的。为了达到这个目的,对检测到的子窗口进行后处理是很有用的,以便将重叠的检测合并到一个单独的检测中。

    在这些实验中,检测的结合非常简单。一组检测首先被划分成不同的子集。如果它们的边界区域重叠,那么两个检测就在同一个子集中。每个分区都产生一个最终检测。最后的边界的角区域是集合中所有检测角域的平均值。

Experiments on a Real-World TestSet

    我们在mit+cmu正脸测试集上测试了我们的系统。这个测试集由130张图片组成,有507个正面的人脸。在这个测试集中,一个ROC曲线显示了我们的检测器的性能,如图7所示。

    为了创建ROC曲线,最终层分类器的阈值从-∞到+∞调整。将阈值调整到+∞将产生检测率为0.0和假正率为0.0。然而,将阈值调整到-∞,会增加检测率和假阳性,但只会增加到某一点。这两种率都不可能超过 检测级联减去最后一层 的率。实际上,-∞的阈值相当于移除该层。进一步增加检测和假阳性需要降低级联中下一个分类器的阈值。因此,为了构造一个完整的ROC曲线,分类器层被移除。我们使用假阳性的数量,而不是假阳性率,作为与其他系统相比较的ROC曲线的X轴。要计算假阳性率,只需除以扫描的子窗口总数。在我们的实验中,扫描的子窗口的数量是75081800。

                 

         图7:在mit+cmu测试集中的我们的人脸检测器的ROC曲线。探测器运行时使用的是1.0的步长和1.0的起始刻度(75,081,800子窗口扫描)。

    不幸的是,之前发布的大多数人脸检测结果都只包含一个操作规程(即ROC曲线上的单点)。为了与我们的检测器进行比较,我们已经列出了其他系统报告的假正率的检测率。表1列出了我们的系统以及其他已发布系统的各种错误检测的检测率。对于Rowley-Baluja-Kanade的结果,他们的探测器的许多不同版本都经过了测试,产生了许多不同的结果,它们都列在同一个标题下。对于Roth-Yang-Ahuja探测器,他们报告了他们的结果,在mit+cmu测试集减去5张包含被画了人脸移除线条的图片。

    图8显示了来自mit+cmu测试集的测试图像的人脸检测器的输出。

                

A simple voting scheme(投票组合) to further improve results

    在表1中,我们还展示了运行三个检测器的结果(上面描述的38层,加上两个类似的训练好的检测器),并输出了三个检测器的多数选票。这提高了检测率,并消除了更多的误报。

    如果探测器更加独立,改进将会更大。它们的误差的相关性使得三个检测器比最好的单个探测器有了适度的改进。

6  Conclusions

    我们已经提出了一种方法来实现目标检测,它可以最小化计算时间,同时达到高检测精度。

    这种方法被用来构建一个人脸检测系统,它的速度大约是以前任何方法的15倍。

    这篇论文汇集了新的算法、表示和见解,这些都是很通用的并且很可能在计算机视觉和图像处理方面有更广泛的应用。

最后,本文提出了一套复杂的人脸检测数据集,并对其进行了广泛的研究。这个数据集包括在非常广泛的条件下的面孔,包括:照明,缩放,姿势,和相机的变化。在如此大而复杂的数据集上进行实验是困难和费时的。然而,在这些条件下工作的系统不太可能脆弱或局限于单一条件。更重要的是,从这个数据集得出的结论不太可能是实验产物

 -------------------------------------------         END      -------------------------------------

    转载请注明出处:https://blog.csdn.net/u012679707/article/details/80626775

    若需要英文原文,请戳:https://download.csdn.net/download/u012679707/10467945


猜你喜欢

转载自blog.csdn.net/u012679707/article/details/80626775