畅所欲言第1期 - 从Viola&Jones的人脸检测说起
转载自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的人脸检测说起的更多相关文章
- Viola Jones Face Detector
Viola Jones Face Detector是Paul viola 和 Michael J Jones共同提出的一种人脸检测框架.它极大的提高了人脸检测的速度和准确率. 速度提升方面:利用积分图 ...
- 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 ...
- Adaboost算法结合Haar-like特征
Adaboost算法结合Haar-like特征 一.Haar-like特征 目前通常使用的Haar-like特征主要包括Paul Viola和Michal Jones在人脸检测中使用的由Papageo ...
- cs231n学习笔记(一)计算机视觉及其发展史
在网易云课堂上学习计算机视觉经典课程cs231n,觉得有必要做个笔记,因为自己的记性比较差,留待以后查看. 每一堂课都对应一个学习笔记,下面就开始第一堂课. 这堂课主要是回顾了计算机视觉的起源及其后来 ...
- 开源百宝箱《HelloGitHub》第 64 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. HelloGitHub 有实战.教程.黑科技.开源书籍.企业级开源项目,涵盖多种编程 ...
- 【机器学习Machine Learning】资料大全
昨天总结了深度学习的资料,今天把机器学习的资料也总结一下(友情提示:有些网站需要"科学上网"^_^) 推荐几本好书: 1.Pattern Recognition and Machi ...
- 浅谈人脸检测之Haar分类器方法
我们要探讨的Haar分类器实际上是Boosting算法(提升算法)的一个应用,Haar分类器用到了Boosting算法中的AdaBoost算法,只是把AdaBoost算法训练出的强分类器进行了级联,并 ...
- matlab工具箱之人眼检测+meanshift跟踪算法--人眼跟踪
Viola-Jones 人眼检测算法+meanshift跟踪算法 这次的代码是对视频中的人眼部分进行检测加跟踪,检测用的是matlab自带的人眼检测工具箱 下面是matlab官网介绍这个算法的一些东西 ...
- CV界的明星人物们
CV界的明星人物们 来自:http://blog.csdn.net/necrazy/article/details/9380151,另外根据自己关注的地方,加了点东西. 今天在cvchina论坛上看到 ...
随机推荐
- centos6.5 redis3 开机自动启动命令设置
修改redis.conf,打开后台运行选项: # By default Redis does not run as a daemon. Use 'yes' if you need it. # Note ...
- C/C++学习----使用C语言代替cmd命令、cmd命令大全
[开发环境] 物理机版本:Win 7 旗舰版(64位) IDE版本:Visual Studio 2013简体中文旗舰版(cn_visual_studio_ultimate_2013_with_upda ...
- AC日记——codevs 1688 求逆序对
1688 求逆序对 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 给定一个序列a1,a2,…, ...
- 【CSS】css网页背景图片设置
刚学CSS,了解了下网页背景图设置,顺便记录下. 下面主要是实现背景图位置保持不变,即不随滚动条动而动的功能. body { background-image:url(images/bck.png); ...
- [TCPIP]代理arp
一 理论概述 \ 二 实验 实验一:代理arp在nat中的作用(实验发现一下是错的) 实验二.代理arp pc访问服务器想让走路由器(写32bit静态路由),右边的R arp server的时 ...
- Linux Shell编程一
交互模式 --当Shell收到用户输入命令后,就开始执行这项命令,并把结果显示到屏幕上,结束后Shell又会显示系统提示符,等待用户输入下一条命令. 后台运行 --后台运行的符号为"& ...
- php基础02:变量
1.创建变量 <?php $num1 = 15; $num2 = 15.5; echo $num1+$num2; echo "<br>"; ?> 2.Loc ...
- 2016动作短片《全境封锁:特工起源》HD720P.英语中字
导演: 德文·格雷厄姆主演: Matt Lynch / Sasha Andreev / Amanda Day类型: 动作 / 短片制片国家/地区: 美国语言: 英语上映日期: 2016-01-19片长 ...
- 20145324 20145325《信息安全系统设计基础》实验五 简单嵌入式WEB服务器实验
实验五报告链接为:http://www.cnblogs.com/SJZGM10/p/6106668.html
- Python数据可视化编程实战——导入数据
1.从csv文件导入数据 原理:with语句打开文件并绑定到对象f.不必担心在操作完资源后去关闭数据文件,with的上下文管理器会帮助处理.然后,csv.reader()方法返回reader对象,通过 ...