畅所欲言第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论坛上看到 ...
随机推荐
- MATLAB基本命令
eye(n)创建n阶单位矩阵 zeros(n)创建n阶0方阵 rand(m,n)创建m*n阶元素为从0到1的均匀分布的随机数矩阵 round(A)对矩阵A中所有元素进行四舍五入运算 A^-1用幂运算求 ...
- sql 入门经典(第五版) Ryan Stephens 学习笔记 (第六,七,八,九,十章,十一章,十二章)
第六章: 管理数据库事务 事务 是 由第五章 数据操作语言完成的 DML ,是对数据库锁做的一个操作或者修改. 所有事务都有开始和结束 事务可以被保存和撤销 如果事务在中途失败,事务中的任何部分都不 ...
- ehcache 一二事 - ssm 中ehcashe的简单配置应用
Ehcache是一个开源Java分布式缓存.可以配合mybatis来使用 首先,在资源文件夹中新建ehcache.xml 内容如下: <?xml version="1.0&qu ...
- 利用appscan进行自动化定期安全测试
Appscan的强大众所周知,如果可以自动执行定期安全测试,岂不是美事一件? 事实上,appscan提供了计划扫描的选项,配合windows的计划任务,可以按需设定. 1.打开appscan中的“工具 ...
- 每日一语:What is he getting at?
What is he getting at? 他讲这话是什么意思? 2015-1-12
- zabbix一件漂亮的外衣配置
http://www.cnblogs.com/yyhh/archive/2015/09/08/4792830.html
- 使用Uploadify实现上传图片生成缩略图例子,实时显示进度条
不了解Uploadify的,先看看前一篇详细说明 http://www.cnblogs.com/XuebinDing/archive/2012/04/26/2470995.html Uploadify ...
- [CareerCup] 3.2 Min Stack 最小栈
3.2 How would you design a stack which, in addition to push and pop, also has a function min which r ...
- linux内核分析 课程总结
Linux内核分析 链接汇总 Linux内核分析第一周学习总结--计算机是如何工作的 Linux内核分析第二周学习总结--操作系统是如何工作的 Linux内核分析第三周学习总结--构造一个简单的Lin ...
- 开始开发HoloLens应用吧 Start Developing HoloLens Apps Today
在经历数个月的期待与等待后,终于拿到了预订的 HoloLens 开发者版本套件.经过一个月的学习和研究,对于HoloLens开发有了更浓厚的兴趣. 根据积累的经验,特录制了一节HoloLens开发教程 ...