原文参照Paul_Viola的《Rapid object detection using a boosted cascade of simplefeatures》

本次翻译,包含简单的个人总结以方便理解文章。翻译内容可以主要关注前4节,以便于快速把握文章内容。具体的分类器如何训练如何级联,后续会有博文详细解读。  翻译理解如果有问题的话,大家可以提出来。

简单特征的优化级联在快速目标检测中的应用

【摘要】本文描述了一个视觉目标检测的机器学习法,它能够快速地处理图像并可以获得很高的检测率。这项工作包含3个关键成果。第一个是 “积分图像”,可以被用来快速计算特征;第二个是基于AdaBoost的学习算法,可以从很大的数据集中筛选出少量的关键视觉特征并形成更加高效的分类器;第三个是以“级联”形式不断合并分类器的方法,该方法使得图像的背景区域被很快丢弃,从而将更多的计算放在可能是目标的区域上。

1、引言

本文构筑了一个鲁棒性良好的快速目标检测框架,该框架主要完成人脸检测的任务,并且由于仅仅使用灰度图像信息从而实现了高帧速处理。

第一,我们引进了积分图。一幅图像中,每个像素经过很少操作便可以到积分图。得到积分图后,任何位置任何尺度的Haar特征都可以快速地被计算出来。

第二,我们通过使用AdaBoost算法选择少量重要特征来构建了一个分类器。由于尺度和位置多变,一幅图像的Haar特征的数量是十分巨大的,为了确保快速分类,学习过程中必须剔除大量无用特征而只关注一些关键特征。筛选程序是一个简单修改的AdaBoost程序:约束弱学习,使每一个弱分类器返回时仅可依赖1个特征。于是,每个改善过程的阶段,即选择一个新的弱分类器,可以被视作一个特征筛选的过程。 AdaBoost算法显示了一个有效的学习算法和良好的泛化性能。

第三,我们在一个级联结构中连续结合更复杂的分类器。通过尽可能地迅速确定目标可能出现在哪些区域,并且只在这些有希望的区域进行更复杂的处理,检测器的速度得以大幅提高。实现该方法的关键是注意力过程中的“负误视”(在模式识别中,将属于物体标注为不属于物体)的概率。在几乎所有的情况下,目标实例必须由注意力滤波器选择。

我们训练了一个非常简单又高效的分类器,用来作为注意力操作的“监督”中心。术语“监督”这里是指:注意力操作被训练用来检测特定分类的例子。在人脸检测领域,使用一个由两个类Haar特征构建的分类器,有可能达到1%不到的负误视和40%正误视。该滤波器的作用是把最终检测器必须进行评估的地方的数量降低一半。

那些没有被最初的分类器排除的子窗口,会由接下来的一系列分类器再处理,每个分类器都比其前一个稍有复杂。如果某个子窗口被任一个分类器排除,那它将不会被进一步处理。该级联检测基本上可看做是一个退化型决策树,这点可以参照German和其同事的工作。

快速人脸检测应用十分广泛。在无需高帧速的应用中,我们的系统还可提供额外的重要后处理和分析。另外,我们的系统能够在各种低功率的小型设备上实现,包括手持设备和嵌入式处理器。

本文接下来描述我们的研究成果和一些实验结果,包括我们实验方法的详尽描述。每章结尾会有对相关工作的讨论。

2、特征

         我们的目标检测程序是基于简单特征来分类图像的。基于特征的系统,不但可以解决从有限训练数据中很难获得专门知识的问题,同时它也比基于像素的系统运行的要快。

我们选择了特定的三类Haar特征:含2个矩形的特征、含3个矩形的特征、含4个矩形的特征。如下图:

检测器的基本分辨率设为24×24,则可得到数目巨大的矩形特征的完备集,超过了180000。需要注意的是,矩形特征的集与Haar基底不同,它是过完备的。

2.1 积分图

通过积分图,可以快速计算矩形特征。积分图像(x,y)处的值为原图(x,y)上边和左边的所有像素的和,即:

其中,ii(x,y)是积分图像,i(x,y)是原始图像。计算积分图可以使用下列一对循环:

其中,s(x,y)是行累积和,初始化s(x,-1)=0,ii(-1,y)=0。通过上述循环,只需对原图遍历一次便可以得到积分图。

使用积分图像可以把任意一个矩形用四个数组计算(见图2)。显然两个矩形和之差可以用八个数组。因为双矩形特征的定义是两个相邻矩形的和,所以仅用6个数组就可以计算出结果。同理三矩形特征用8个,四矩形特征用9个。

2.2 特征讨论

和一些替代方法,如导向滤波比较起来,矩形特征看似有些原始。导向滤波等类似方法,非常适合边界的详细分析,图像压缩,纹理分析。相比之下矩形特征,对于边缘、条纹以及其他简单的图像结构虽然较为敏感,但是相当粗糙的,它仅有的有效位置就是垂直、水平和对角线。但是结合积分图,特征的快速计算可以补偿特征灵活性的不足。

3、学习分类功能

给定一个特征集和一个包含正图像和负图像的训练集,很多机器学习方法都可以用来学习分类功能。我们使用的是AdaBoost的一种变种,既可以筛选出小规模特征集又可以训练分类器。在其原来的形式中,这种AdaBoost自学式算法是用来优化弱学习算法的。

前面提到,一幅图像矩形特征的数量会十分巨大,如果全部都进行处理,则也是一件很麻烦的事。实验证实了我们的假说:极少数的特征结合起来,也能形成有效的分类器。问题是,如何找到这些特征。

为实现这一目标,我们设计的弱学习算法,被用来选择可以使得正例和负例得到最佳分离的单一矩形特征。对于每一个特征,弱学习决定最优阈值分类功能,这样可以使错误分类的数目最少。每个弱分类器hj(x)包含:特征fj,阈值θj,以及一个正负校验pj来保证式子两边符号相同:

这里x是一个图像中24×24像素的子窗口。图3是优化过程的概述。

实际中,没有单个特征能在低错误的条件下完成分类任务。在优化过程的循环初期,被选中的特征错误率在0.1到0.3之间,在循环后期,由于任务变得更难,因此被选择的特征错误率在0.4和0.5之间。

3.1 学习讨论

我们最终需要的方法是一个非常积极的,能抛弃绝大多数特征的方法。对于类似的识别问题,Papageorgiou等人提出了一个基于特征差异的特征选择方法,他们从1734个特征中选出37个特征,实现了很好的结果。Roth等人提出了一种基于winnow指数感知器学习规则的特征选择过程。这种Winnow学习过程收敛了一个解决方法,其中有不少权重为零。然而却保留下来相当大一部分的特征(也许有好几百或几千)。

3.2 学习结果

分类器性能表现不错,但其计算时间直接与特征数量成正比。对于人脸检测的任务,由AdaBoost最先选择出的矩形特征是有意义的且容易理解。选定的第一个特征点是:眼睛区域往往比鼻子和脸颊区域更黑暗。此特征的检测子窗口相对较大,并且某种程度上不受面部大小和位置的影响。第二个特征选择依赖于眼睛的所在位置比鼻梁更暗。

4、注意力级联

本节描述了构建级联分类器的算法,它能减少计算时间改善检测性能。它的主要观点是分类器规模越小就越高效。这种分类器在检测几乎所有正例的同时剔除许多负子窗口(即,优化调整分类器阈值使得负误视率接近零)。在调用较复杂的分类器之前,我们先使用相对简单的分类器来剔除大多数子窗口,以实现低正误视率。

整个检测过程,整体形式是一个退化决策树,我们称之为“级联”(见图5)。

级联阶段的构成首先是利用AdaBoost训练分类器,然后调整阈值使得负误视率最小。注意,默认AdaBoost的阈值旨在数据过程中产生低错误率。一般而言,一个较低的阈值会产生更高的检测率和更高的正误视率。

例如,一个两特征强分类器通过降低阈值,达到最小的负误视后,可以构成一个优秀的第一阶段分类器。测量一个特定的训练集时,阈值可以进行调整,最后达到100%的人脸检测率和40%的正误视率。使用的两个特征如图四所示。

通过级联,尽可能在早的阶段剔除尽可能多的负例。但,后续的分类器所面临的任务要比前一个更难。这些通过第一阶段的例子比典型例子更“难”。这些例子推动整个受试者工作特征曲线(ROC)向下。在给定检测率的情况下,更深层次分类器有着相应较高的正误视率。

4.1 训练级联分类器

级联的训练过程有两个方面的权衡。多数情况下,具有更多特征的分类器可以达到较高的检测率和较低的正误视率,但同时也需要更多的时间来计算。

原则上可以定义一个优化框架,其中:i)分类器级数,ii)每级的特征数目,iii)每个阶段阈值,但难以实现。

实践中可以用一个非常简单的框架产生一个有效的分类器。级联中的每个阶段会降低正误视率并且减小了检测率,但我们目标旨在最小化正误视率和最大化检测率。于是,在训练每个阶段时,不断增加特征,直到检测率和正误视率的目标实现(这些比率是通过将探测器在验证设置上测试而得的)。同时添加阶段数,直到总体目标的正误视和检测率得到满足为止。

4.2检测器级联讨论

级联的训练过程有两个方面的权衡。多数情况下,具有更多特征的分类器可以达到较高的检测率和较低的正误视率,但同时也需要更多的时间来计算。

完整的人脸检测级联已经拥有超过6000个特征的38个阶段。尽管如此,级联结构还是能够缩短平均检测时间。在一个复杂的包含507张人脸和7500万个子窗口的数据集中,人脸检测是每个子窗口由平均10个特征来评估。

Rowley等人描述过一个类似于级联的概念。他们使用了两个检测网络,先用更快但相对不准确的网络筛选图像,这样做是为了使较慢但更准确的网络找到候选区域。虽然这很难准确判断,但是目前速度最快的脸部探测器。

检测过程中的级联结构基本上是退化决策树,因此涉及到了Amit和Geman的工作。,Amit和Geman建议不再使用固定一个探测器的技术,而他们提出一个不寻常的合作同现,即简单的图像特征用于触发评价一个更为复杂的检测过程。这样,完整的检测过程中不需要对潜在的图像位置和范围进行估计。

在最近的工作中Fleuret和Geman已经提交了一种人脸检测技术,它以“链测试”为主调,用来表示在某一特定范围和位置人脸是否存在。由Fleuret和Geman测量的图像属性,细尺度边界的分离,与简单存在于所有尺度且某种程度可辨别的矩阵特征有很大的不同。这两种方法的基本原理也存在根本上的差异。Fleuret和Geman的学习过程的目的是密度估计和密度辨别,而我们的探测器是单纯的辨别。最后,Fleuret和Geman的方法中的正误视率似乎也比以前的如Rowley等人的方法中的更高。

5、实验结果

我们训练一个38层级联分类器,用来检测正面直立人脸。为了训练分类器,我们使用了一系列包含人脸和不包含人脸的图片。人脸训练集由4916个手标的人脸组成,都缩放和对齐成24×24像素的基本块。提取人脸的图片是在使用随机爬虫在万维网上下载。一训练检测器的没有人脸的子窗口来自9544张图片,都已经进行人工检查,确定不包含任何人脸。在这些没有人脸的图片中,子窗口共有大概3.5亿个。

开始五层检测器中特征的数量分别为1、10、25、25和50。剩下的各层包含的特征数量急剧增多。特征总数是6061个。

在级联中的每个分类器都经过4916个受训人脸(加上它们的垂直镜像,一共有9832个受训人脸)和10000个无人脸的子窗口(同样它们的尺寸都是24×24),使用自适应增强训练程序训练。对于最初的含一个特征的分类器,无人脸训练实例从一系列9544张没有人脸的图片中随机选择出子窗口。用来训练随后的层的没有人脸实例是通过扫描部分级联的无人脸图像以及收集正误视率而得的。每一层收集的像这样无人脸的子窗口的最大值是10000。

最终检测器的速度

级联检测器的速度和子窗口中评估的特征数目有直接关联。在MIT+CMU测试集的评估中,平均6061个特征中有10个特征被挑出,用于评估每一个子窗口。这并非不可能,因为有大量子窗口被级联的第一层和第二层剔除。在700兆赫的奔腾3处理器上,该人脸检测可以约0.67秒的速度处理一幅384×288像素大小的图像(使用)。

图像处理

所有用来训练的子窗口实例都经过方差标准化达到最小值,尽量减少不同光照条件的影响。因此,在检测中也必须规范化。一个图像子窗口的方差可以使用一对积分图像快速计算。回忆

此处 左边是标准差, m是均值,而 x是在子窗口中的像素值。子窗口的均值可以由积分图像计算得出。像素的平方和可以由一个图像的积分图像的平方得出(即,两个积分图像在扫描进程中使用)。

在扫描图像中,图像的规范化可通过后乘特征值达到,而不是预先乘以像素值。

扫描检测器

检测器需要在多尺度和定位下对图像进行扫描。尺度缩放更多是由缩放检测器自身而不是缩放图像得到。这个进程的意义在于特征可以在任意尺度下评估。使用1.25的间隔的可以得到良好结果。

检测器也根据定位扫描。后续位置的获得是通过将窗口平移⊿个像素获得的。这个平移程序受检测器的尺度影响:若当前尺度是s,窗口将移动[s⊿],这里[]是指凑整操作。

⊿的选择不仅影响到检测器的速度还影响到检测精度。我们展示的结果是取了⊿=1.0。通过设定⊿=1.5,我们实现一个有意义的加速,而精度只有微弱降低。

多检测的整合

因为最终检测器对于传递和扫描中的微小变化都很敏感,在一幅扫描图像中每个人脸通常会得到多检测结果,一些类型的正误视率也是如此。在实际应用中每个人脸返回一个最终检测结果才显得比较有意义。

在这些试验中,我们用非常简便的模式合并检测结果。首先把一系列检测分割成许多不相交的子集。若两个检测结果的边界区重叠了,那么它们就是相同子集的。每个部分产生单个最终检测结果。最后的边界区的角落定义为一个集合中所有检测结果的角落平均值。

现实测试集实验……

简易完善计划……

6.结论

我们展示了一个目标检测的方法,既能使计算时间最小化,又能达到高检测精度。这个用该方法构建的一个人脸检测系统,达到检测速度约是以往方法的15倍。

本文结合了十分通用的新算法、表征和概念,可能会在机器视觉和图像处理方面实现广泛应用。

本文最后展示了的一系列详细的实验,是在一个已得到广泛研究的复杂人脸检测数据库中进行的。这个数据库中的人脸各式各样条件都广泛不同:照明、规模、构成及相机的变化。在这样一个庞大繁杂的数据库中实验难度很大,且十分耗时。然而,在这样的条件下工作的系统不易损坏或者受限于单一条件。从该数据库中取得的更多重要结论,都不可能是实验的人为产物.

Rapid object detection using a boosted cascade of simple features-简译相关推荐

  1. Rapid Object Detection using a Boosted Cascade of Simple Features

    转载自:Viola–Jones object detection framework–Rapid Object Detection using a Boosted Cascade of Simple ...

  2. Rapid Object Detection using a Boosted Cascade of Simple Features 部分翻译

    Rapid ObjectDetection using a Boosted Cascade of Simple Features 使用简单特征级联分类器的快速目标检测 注:部分翻译不准处以红色字体给出 ...

  3. Viola-Jones算法 Rapid Object Detection using a Boosted Cascade of Simple Features

    0:在24个像素的一维图像里面,由一左一右的结构生成的pattern数量为24除2=12个(2,4,6,8,10-) 1:要统计的是特征产生的数量,也就是所有可能的pattern和image一起卷了几 ...

  4. 什么是神经网络在object detection的应用?cascade classifier,卷积神经网络,迁移学习

    首先 输入,positive image:大黄蜂 negative image:大黄蜂的背景 输出,有多大的概率是大黄蜂 用的是卷积神经网络 卷积神经网络的分类器 在matlab里面是一个xml文件 ...

  5. Object Detection: Face Detection using Haar Cascades

    目录   利用基于Haar特征的级联分类器实现人脸检测:官方教程 目标 学习基于Haar特征的级联分类器(Cascade Callifiers)实现人脸检测: 扩展到人眼检测: 基础知识 Paul V ...

  6. 【论文阅读】 Object Detection in 20 Years: A Survey

    [论文阅读]Object Detection in 20 Years: A Survey 摘要 论文介绍 1.目标检测 2.目标检测的里程碑 3.数据集 4.性能度量 摘要 本篇博客参考Object ...

  7. Sparse R-CNN: End-to-End Object Detection with Learnable Proposals论文翻译

    Sparse R-CNN: End-to-End Object Detection with Learnable Proposals论文翻译 摘要 1.介绍 2.相关工作 3.Sparse R-CNN ...

  8. 目标检测--Focal Loss for Dense Object Detection

    Focal Loss for Dense Object Detection ICCV2017 https://arxiv.org/abs/1708.02002 本文算是用简单的方法解决复杂的问题了,好 ...

  9. 【翻译】Focal Loss for Dense Object Detection(RetinaNet)

    [翻译]Focal Loss for Dense Object Detection(RetinaNet) 目录 摘要 1.介绍 2.相关工作 3.Focal Loss 3.1 平衡的交叉熵损失 3.2 ...

最新文章

  1. 和lock一起学beego 博客系统开发为例(五)
  2. 唯一索引允许为空吗_一次 MySQL 索引面试,被面试官怼的体无完肤!
  3. JMeter 正则表达式提取器(二)
  4. 如何使用Mybatis-plus
  5. mysql8.0.4以后_mysql官方源从8.0.3直接通过yum源升级到8.0.4后启动不成功解决方法...
  6. 基于FPGA实现AD7609接口
  7. C、C++ 不得宠,微软正开发新的编程语言!
  8. tensorflow2.0五种机器学习算法对中文文本分类
  9. vue中select选择框的监听事件
  10. [Oracle] SQL*Loader 详细使用教程(5)- 典型例子
  11. linux SO文件
  12. python r语言 三种,python和r语言哪个入门容易 更适合新手
  13. html5中如何修改背景颜色,html5里颜色 关于html5背景颜色的问题
  14. 如何在计算机中增加字体,电脑如何添加字体?WinXP系统新增个性字体的方法
  15. Windows定时开机并开启工作软件
  16. ES6 模块化【暴露、引入、引入并暴露】
  17. Linux系统下查看dsdt table
  18. python系列笔记--耗子(巨细)
  19. amd cpu 型号大全
  20. java windows wifi密码_windows10 通过命令行来查看wifi密码

热门文章

  1. 什么是期权市场的PCR指标?
  2. C# WPF动画,时钟程序源码分享,闹钟程序源码分享
  3. 如臂使指——Dojo框架下让浮动窗口跟随鼠标而动
  4. dell灵越笔记本后盖怎么拆_dell笔记本拆机详解【图文教程】
  5. 《Small Memory Software:Patterns For System With Limited Memory》读书笔记
  6. 锁算力显卡影响深度学习吗?
  7. Android Telephony 9.0通话挂断连接处理机制(opt/Telephony)
  8. 随笔:linux系统修改root账户名
  9. matlab ob,Matlab 飞机航向INS仿真
  10. php 匹配图片加上域名,20170321_正则表达式:匹配图片地址,添加域名