转载自http://c.blog.sina.com.cn/profile.php?blogid=ab0aa22c890006v0

不少人认识我或者听说我的名字都是因为我过去做的关于人脸检测的工作,那么第一篇帖子就简单谈谈对我影响至深的这项工作的源起吧。2001年Paul Viola和Michael Jones在CVPR上发表了一篇震惊计算机视觉界的文章,Rapid object detection using a boosted cascade of simple features。相信几乎所有做计算机视觉的同学都读过至少是听说过这篇关于人脸检测的文章。我是2002年开始接触计算机视觉这个领域的,所以这篇文章算是我早期的启蒙材料了。据说当时在大会现场,Paul拿出摄像头连接上自己的电脑,现场演示实时的人脸检测效果,真是技惊四座。因为在那之前,计算机视觉的问题给人的印象大多还是计算复杂,速度缓慢,效果时灵时不灵,总之实在很不靠谱的东西。这篇文章已经被应用了近九千次。2011年去科罗拉多开CVPR的时候,有一个奖是大会颁发给过去十年内影响最为深远的一篇文章。我记得大会主席在颁发这个奖的时候说了个俏皮话,大致意思是过去他们总是很头疼到底把这个奖发给谁(文无第一嘛),但是今年就轻松啦,因为Viola&Jones的这项工作实在是无可置疑的获奖者:)
八卦就不多扯了,还是聊聊这项工作吧。归纳起来,基于传统用于物体检测问题的扫描窗方法,这篇文章提出了三个要点:Haar-like特征,AdaBoost算法和Cascade结构。Haar-like特征利用积分图像(Integral Image)快速的计算矩形区域的差分信号;AdaBoost算法选择区分能力强的特征结合Stump函数做弱分类器,然后把若干这些弱分类器线性组合在一起增强分类性能;Cascade结构做Early decision快速抛弃明显不是人脸的扫描窗口。这些东西都不是Viola & Jones首先发明的,但却是他们第一个用这种方式巧妙的结合在一起,漂亮地解决了一个长期以来大家都很头疼的实际问题(所以Timing很重要啊)。另外,这篇文章还掀起了一股Boosting方法在计算机视觉领域中应用的热潮。我记得后来几年的CVPR ICCV会议里,乌泱乌泱的文章中标题含有各种各样的Boosting变种,仿佛不提一下这个词儿就落伍似的,其场面一点儿不比当下泛滥成灾的Deep Learning差。这也说明做计算机视觉的人还是实用主义加上拿来主义的风格居多J
Viola & Jones这套物体检测的体系简单易行,效果又好,所以跟风者甚多(我也算是其中之一啦),几年后已然被改得面目全非。特征上大家发现Haar-like特征太局限了,又弄出好多扩展版本的Haar-like特征,后来干脆把积分图像丢掉,直接对图像做一些简单的卷积类操作获取基础的特征——反正只要够快够丰富就行。基于Stump函数的弱分类器太弱了,改成了决策树。AdaBoost也被换成RealBoost,LogitBoost,GentleBoost还有WaldBoost(当然这个实际上应该归类到对模型的改变这个层面,因为其实质就是Soft Cascade。谁让Boosting那几年太火,摊上这个名字就容易发表呢,呵呵)。Cascade模型换成Soft Cascade, Pyramid,Tree等等等等。但是万变不离其宗,这些工作的核心思想还是:快速丰富的特征计算,预测时间复杂度可控的分类器学习算法(比如Boosting算法中的弱分类器个数),以及各种包含Early quiting的灵活的决策方法。但是,很多人其实忽视了一个支撑这套检测方法的前提条件,那就是,以扫描窗策略为基础的物体检测方法通常是一个rare event detection问题,也就是说,正例(比如人脸)在所有要处理的扫描窗中所占的比例是极低的。如果没有这个前提,这套方法就没那么好用了,尤其是Cascade模型的用武之地就不大了。
回想起来,这篇文章其实教给了我很多东西,不光是设计快速有效的特征有多么重要,Cascade模型对于大量反例样本通过重要性采样的有效的使用,以及Boosting算法有多么“简单”好用。我之后研究Boosting类算法也的确比较深入,而之所以要把简单二字画上引号,是因为后来发现,这个家伙其实远不是当时看上去的那么简单。我把改进后的方法用在很多不同类别的刚体类物体检测上,效果都很不错,包括这种视角的汽车、各种视角的行人(注意是pedestrian,站立或行走的人)、头肩、身体的各个部位等等。后来2008年Felzenszwalb等人搞出了deformable part based model之后,Viola&Jones这种弱分类器(或者说特征)之间位置不具有弹性的方法逐渐显示出在检测形变比较大的物体的不足,才慢慢退出了历史的舞台,这段计算机视觉研究历史上的传奇才算是画上句号:)

黄畅_smooth

畅所欲言第1期 - 从Viola&Jones的人脸检测说起的更多相关文章

  1. Viola Jones Face Detector

    Viola Jones Face Detector是Paul viola 和 Michael J Jones共同提出的一种人脸检测框架.它极大的提高了人脸检测的速度和准确率. 速度提升方面:利用积分图 ...

  2. Viola–Jones object detection framework--Rapid Object Detection using a Boosted Cascade of Simple Features中文翻译 及 matlab实现(见文末链接)

    ACCEPTED CONFERENCE ON COMPUTER VISION AND PATTERN RECOGNITION 2001 Rapid Object Detection using a B ...

  3. Adaboost算法结合Haar-like特征

    Adaboost算法结合Haar-like特征 一.Haar-like特征 目前通常使用的Haar-like特征主要包括Paul Viola和Michal Jones在人脸检测中使用的由Papageo ...

  4. cs231n学习笔记(一)计算机视觉及其发展史

    在网易云课堂上学习计算机视觉经典课程cs231n,觉得有必要做个笔记,因为自己的记性比较差,留待以后查看. 每一堂课都对应一个学习笔记,下面就开始第一堂课. 这堂课主要是回顾了计算机视觉的起源及其后来 ...

  5. 开源百宝箱《HelloGitHub》第 64 期

    兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. HelloGitHub 有实战.教程.黑科技.开源书籍.企业级开源项目,涵盖多种编程 ...

  6. 【机器学习Machine Learning】资料大全

    昨天总结了深度学习的资料,今天把机器学习的资料也总结一下(友情提示:有些网站需要"科学上网"^_^) 推荐几本好书: 1.Pattern Recognition and Machi ...

  7. 浅谈人脸检测之Haar分类器方法

    我们要探讨的Haar分类器实际上是Boosting算法(提升算法)的一个应用,Haar分类器用到了Boosting算法中的AdaBoost算法,只是把AdaBoost算法训练出的强分类器进行了级联,并 ...

  8. matlab工具箱之人眼检测+meanshift跟踪算法--人眼跟踪

    Viola-Jones 人眼检测算法+meanshift跟踪算法 这次的代码是对视频中的人眼部分进行检测加跟踪,检测用的是matlab自带的人眼检测工具箱 下面是matlab官网介绍这个算法的一些东西 ...

  9. CV界的明星人物们

    CV界的明星人物们 来自:http://blog.csdn.net/necrazy/article/details/9380151,另外根据自己关注的地方,加了点东西. 今天在cvchina论坛上看到 ...

随机推荐

  1. POJ 2001 Shortest Prefix

    字典树基本题. 代码: #include <iostream> #include <cstdio> #include <cstring> #include < ...

  2. 分层开发(MySchool总结)

    由于分层之间存在各层之间的关系窗体之间的方法跳转,故有需要者可以进行下载本地文件 MySchool.rar 3304KB 5/22/2016 9:43:28 AM ,代码中有注释, 上述代码,属个人所 ...

  3. ng-bind的使用

    由于JS是单线程的,当HTML页面执行alert的时候,会中断下面代码的运行,所以为了良好的用户体验,当需要在页面使用{{name}}的时候,通常不这样直接输出,而是用ng-bind绑定model数据 ...

  4. Sublime Text2 新建文件快速生成Html头部信息和炫酷的代码补全

    预备:安装emmet插件(previously known as Zen Coding) 方法一  package control法: 上一篇博客已经介绍了如何安装package control.打开 ...

  5. [WPF]资源字典——程序集之间的资源共享 简单换皮肤

    直接上代码,已便已后自己查况阅,新手也可以看! 1.新建一个资料类和一个WPF工程 2.APP.XAML应该资源字典,注意应Source格式,前面一定要有“/” <ResourceDiction ...

  6. linux64需要增加的依赖库

    sudo apt-get install git-core gnupg flex bison gperf build-essential \ zip curl zlib1g-dev gcc-multi ...

  7. Git之分支创建策略

    分支策略:git上始终保持两个分支,master分支与develop分支.master分支主要用于发布时使用,而develop分支主要用于开发使用. 创建master的分支developgit che ...

  8. CardboardCamera Prefab 中文笔记

    在Cardboard的预制体(Prefab)中, CardboardCamera是最简单的一个,仅有两个子物体,一个PostRender, 一个PreRender,以及分别带的Camera组件. Ca ...

  9. 史上最全Html与CSS布局技巧

    单列布局水平居中水平居中的页面布局中最为常见的一种布局形式,多出现于标题,以及内容区域的组织形式,下面介绍四种实现水平居中的方法(注:下面各个实例中实现的是child元素的对齐操作,child元素的父 ...

  10. Page Security

    参见开发文档 Overview This document describes how to build applications that grant selected access to indi ...