《计算机视觉阅读文献_rapid object detection using a boosted cascade of simple features》由会员分享,可在线阅读,更多相关《计算机视觉阅读文献_rapid object detection using a boosted cascade of simple features(9页珍藏版)》请在金锄头文库上搜索。
1、 “Rapid Object Detection using a Boosted Cascade of Simple Features” 阅读报告1 内容简要本文介绍了一种机器学习的视觉目标检测方法,建立了一个正面人脸检测系统,实现检测和误检率相当于所公布的最好的结果,能够非常迅速地处理图像,并取得较高的检测率。并且在快速检测人脸的能力上,这个人脸检测系统明显区别于以前的方法。在其他的人脸检测系统中,辅助信息,如视频序列中图像的差异,或彩色图像中的像素的颜色,已被用于实现高的帧速率。但是此系统只在一个单一的灰度图像的信息下实现了高的帧率。而且这些可供选择的信息来源也可以结合本文介绍的系统,以实
2、现更高的帧速率。一个非常快速的人脸检测器,将具有广阔的实际应用价值。其中包括用户界面,图像数据库,和电话会议。在不要求高帧速率的实际应用中,此系统将允许增加额外重要的后处理和分析。此外,系统可以在大多数小型低功耗设备上运行,包括手持设备和嵌入式处理器。在作者的实验室,已经在Compaq iPAQ手持设备上运行这个人脸检测器,并实现每秒两帧的速率进行检测(这种设备仅有一个200 MIPS的低功耗的ARM处理器,并且缺乏浮点运算硬件)。2 解决问题的思路2.1 主要突出点本文建立的快速检测系统主要有三个突出的地方:(1)引进一种新的图像表示法称为“积分图像”(Integral Image);(2)
3、基于 AdaBoost 算法的学习算法;(3)一种级联越来越复杂的分类器成为一个“级联分类器”的方法。下面分别加以详细阐述。和其它的人脸检测一样,使用一系列与 Haar 基本函数相关的特征。为了在多尺度中非常迅速地计算这些特征值,引入积分图像表示法。在一张图像中,对每个像素使用较少的运算就能计算出积分图像。只要完成一次遍历计算,在任意尺度和位置上,每个 Haar 特征值都可以在常量时间内计算完成。在任何图像子窗口内 Harr 特征的总数量是非常大的,远远大于像素的总数量。为了确保快速分类,在学习过程中必须剔除大部分可用的特征,并关注一小部分关键的特征。由于 Tieu 和 Viola 的工作,通
4、过对 AdaBoost 算法程序的一个简单修改实现了特征的选择:受弱学习的限制,使每个弱分类器返回值只能取决于一个单一的特征。因此,在每一个阶段的增强过程中,选择一个新的弱分类器,都可以被看作是一个特征选择的过程。AdaBoost 算法提供了一个有效的学习算法和良好的泛化性能。本文的第三个主要突出点是一个在级联结构中连续结合更复杂的分类器的方法,通过将注意力集中到图像中更像目标的区域,来大大提高了探测器的速度。使用重点关注的方法之后,通常可以迅速确定对象在图像中可能会出现的区域。更复杂的处理过程只用在这些更像目标的区域。这种方法的关键措施是目标处理过程中的“漏检”(即将人脸当做非人脸)的概率。
5、所有或几乎所有的目标例子都必须通过目标过滤器的选择。2.2 主要知识点2.2.1 特征本文介绍的目标检测方法是基于简单的特征值来分类图像的。使用特征比直接使用像素来得更加有效。这主要是因为,特征可以反映特定领域的知识,这是很难使用有限数量的训练数据来学习的。对该系统来说,选择使用特征还具有另外一个重要的原因:基于特征的系统的运行速度要远比基于像素的快。文章中使用了三种不同的特征,一个是由两个矩形框组成的特征的值,定义为两个矩形区域里像素和的差值。该区域具有相同的大小和形状,并且水平或垂直相邻(见图1)。另一个是由三个矩形框组成的特征的值,定义为外侧两个矩形框内像素之和减去中间矩形框内像素之和的
6、差值。最后一个是由四个矩形框组成的特征的值,定义为斜对角的矩形框内像素和之间的差值。图1:例如矩形特征相对封闭的检测窗口计算位于白色矩形框内的像素值之和减去位于灰色矩形框内的像素值之和的差值。两个矩形的特征如图中的(A)和(B)所示。图(C)显示一个由三个矩形框组成的特征,和(D)由一个四个矩形框组成的特征。2.2.2 积分图通过使用称之为积分图像的中间表示形式,矩形特征值可以非常迅速地计算出来。在坐标(x,y)上的积分图像包含该坐标和其正上方的像素之和,再加上该坐标左边区域像素之和的总和,定义为: ,(,)(,)xyii设是 积分图像和 是原始图像。使用如下一对公式迭代:(,)ixy,i()
7、(1)(,)siixyiysx其中 是累积行和, ,和 遍历一次原始图像即(,)sxy()0(,0i可计算出积分图像。利用积分图像可以用四个数组计算任意矩形特征的值(见图2)。显然两个矩形特征像素之和的差值可以由八个数组计算。由于由两个矩形组成的特征是相邻的矩形,所以仅由六个数组就可以计算出结果,同理由三个矩形组成的特征的值可以由八个数组计算,由四个矩形组成的特征的值可以由九个数组计算。图2:在矩形D内的像素值总和可以由四个数组计算。在位置1的积分图像的值是矩形A内像素值的总和。在位置2的积分图像的值是矩形A + B内像素和的总值,在3的位置是A + C的像素和总值,在位置4是A + B +
8、C + D的像素和总值。在矩形D内的像素和的值计算方法为4 + 1 -(2 + 3)。矩形特征不同于导向滤波等类似方法,导向滤波非常适合用于边界的详细分析,图像压缩,纹理分析。而矩形特征,对于边缘、条纹以及其他简单的图像结构的敏感度是相当粗糙的,仅有的有效位置就是垂直,水平和对角线。但是矩形特征集却提供了丰富的、支持有效学习的图像表示法。与积分图像相结合,矩形特征集的效率对其受限的灵活性(矩形特征采用像素来计算的效率比较低)提供了充分的补偿。用于人脸检测的任务, AdaBoost算法选取的初始矩形特征是有意义的和容易理解的。第一个选取的特征把重点放在通常比鼻子和脸颊区域更暗的眼睛区域见图3。图
9、 3 AdaBoost 算法选取的第一个和第二个特征两个特征显示在最上面一行,然后覆盖在下面一行的一个训练人脸样本代表上。第一个特征反应眼睛和两颊上部区域之间强烈程度的差别。通过该特征发现眼睛的区域通常比脸更暗。第二个特征反应眼睛在跨越鼻梁区域的(像素差)强度。2.2.3 训练分类器 AdaBoost 算法给定一个特征集和一个包括正面和负面的图像的训练集,任何数量的机器学习方法都可以用来学习分类功能。在本文的系统中,一种改进的 AdaBoost 算法可被用来选择少量特征集来训练分类器。文章中已经证实可以将极少数的特征结合起来,形成有效的分类器,而主要的难点在于如何找到这些特征。为了能够找到这些
10、特征,采用了弱学习算法,选择能最佳分离正面和负面的样本的单一矩形特征。对于每个特征,弱学习取决于最优阈值分类函数,这样才使样本被错误分类的数目最小化。一个弱分类器 由特征值 ,阈值()jhxjf和表示不等号方向的标志 构成:jjp是图像中一个 2424 的像素大小的子窗口,详见图 4 中增强过程的概述,x每一轮的增强都从 18 万个有可能的特征中选择一个特征。1()()0jjjifxhxotherws图 4 分类器的 Adaboost 算法学习过程2.2.4 构建强分类器在检测过程中,整体形态是一个退化的决策树,称之为“级联”,见图5。通过第一级分类器的有可能的结果被送到已被调整到很高检测率的
11、第二级分类器。通过第二级分类器的有可能的结果再被送到第三级分类器,以此类推下去。在任何一级上,子窗口被认为是负面的结果时,将被直接丢弃。图5 级联检测的示意图 级联阶段利用 Adaboost 训练分类器,然后调整阈值以得到最低漏检率。默认的 AdaBoost 阈值的目的是得到一个在训练数据中的低错误率。在一般情况下,一个较低的阈值会得到较高的检测率和更高的误检率。级联的训练过程中,涉及两种类型的权衡。在大多数情况下分类器具有更多的特征将达到较高的检测率和较低的误检率。同时有更多特征的分类器需要更多的时间来计算。在原则上可以定义一个最优框架:1)分类器的级数;2)每级的特征数量;3)调整每级的阈
12、值,以尽量减少评价特征的预期数量。但是找到这个最佳方案是一个非常困难的问题。 本文实践中在每个阶段的训练时,不断增加特征,直到达到检测率和误检率的目标为止(这些比率的确定是在确定的集上通过测试检测器得到的)。同时增加级数,直到误检率和检测率达到总体目标为止。3 实验结果训练了一个 38 层级联分类器,用来检测正面直立人脸,使用了一系列包含人脸与非人脸的图像。人脸训练集包括 4916 张手工标记并都缩放和对齐成2424 像素大小的图像,人脸图像是在万维网上随机抓取图像下载提取的。一些典型的人脸例子如图 6 所示。来自经过人工检查并不包含任何人脸的 9544 张图像的非人脸子窗口被用来训练检测器。
13、在这些非人脸图像中,总共约有 3.5亿个子窗口。图 6 用于训练的正面直立人脸图像样本所有用来训练的子窗口例子都经过方差标准化达到最小值,尽量减少不同光照条件的影响。一个图像子窗口的方差可以使用一对积分图像快速计算。此处 是标准差, 是均值,而 是在子窗口中的像素值。子窗口的均值mx可利用积分图像计算。像素的平方和可以由一个图像的积分图像的平方得出(即两个积分图像在扫描进程中使用)。在扫描图像中,图像的规范化可以通过后乘以特征值达到,而不是预先乘以像素值。在多尺度和位置下,最终探测器进行整个图像的扫描。尺度缩放更多是由缩放检测器自身而不是缩放图像得到。这个方法的意义在于特征可以同一成本在任何尺
14、度下进行评估。使用1.25倍的缩放比例可以取得良好的效果。检测器也根据定位扫描。后续位置的获得是通过将窗口平移个像素获得的。这个移动的距离受到检测器尺度的影响:若当前尺度是s,窗口将移动s,这里是指取整操作。的选择不仅影响到检测器的速度还影响到检测精度,展示的221N结果是取了=1.0,通过设定=1.5,实现了显著的加速,而精度只有微弱降低。由于最终的检测器对平移和尺度的微小变化不敏感,在扫描一幅图像时,每个人脸通常会得到多个检测结果。对于误判的结果往往也是如此。在实际应用中,通常一张人脸返回一个检测结果。为此,对单个人脸多次重复检测出来的子窗口进行后续处理以合并成一个检测结果是有意义的。在这
15、些试验中,首先把一系列检测分割成许多不相交的子集。若两个检测结果的边界区重叠了,那么它们就是相同子集的。每个部分产生单个最终检测结果。最终合并区域的边界由在该子集中的所有检测结果的边界平均值来确定。在MIT+CMU正面人脸测试集上对系统进行测试。这个集合由130幅图像组成,共有507个标记好的正面人脸。图7是一个ROC曲线,显示在该测试集上运行的检测器的性能。其中最后一层分类器的阈值设置为从到+。当调节阈值趋近+时,检测率趋于0.0,误检率也趋于0.0。而当调节阈值趋近时,检测率和误检率都增长了,但最终会趋向一个恒值。速率最高的就是级联中的最后一层。实际上,阈值趋近就等价于移走这一层。要想得到
16、检测率和误检率更多的增长,就需要减小下一级分类器的阈值。因此,为了构建一个完整的ROC曲线,将分类器层数移走了。为了方便与其它系统比较,使用误检的数目而不是误检率作为坐标的x轴。为了计算误检率,简单将扫描的子窗口总数与之相除即可。在实验中,扫描过的子窗口总数达到了75,081,800个。图 7 MIT+CMU 测试集的 ROC 曲线4 启发本文汇集了十分通用的新算法、表征和见解,在计算机视觉和图像处理方面实现广泛应用。最大限度地减少计算时间的同时实现较高的检测精度。用该方法来构建的人脸检测系统,检测速度比以往的方法快约15倍。其中还有许多内容没有彻底理解,还需要在实验的过程中逐渐的去体会。很多的公式和想法读起来没有任何感觉,因为看不到实际的效果,如果在读的过程中去编程实现的或者在草稿纸上找个例子实践下,看到效果后反而毫不犹豫地相信了,根本没有怀疑什么数学上的推导过程是不是应该这么推了。本文的算法看完后感觉也不是很难,却得