畅所欲言第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论坛上看到 ...
随机推荐
- java 21 - 13 IO流之 合并流
SequenceInputStream :表示其他输入流的逻辑串联. 构造方法摘要 SequenceInputStream(Enumeration<? extends InputStream&g ...
- Netty开发UDP协议
UdpServer package org.zln.netty.five.part07; import io.netty.bootstrap.Bootstrap; import io.netty.ch ...
- POJ 3461 Oulipo
E - Oulipo Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit ...
- 1976 Queen数列
1976 Queen数列 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 将1到N的整数数列(1 ...
- [资料收集]MySQL在线DDL工具pt-online-schema-change
MySQL在线DDL工具pt-online-schema-change pt-online-schema-change使用说明(未完待续) 官网
- dos常用命令
进入终端 首先具备一个控制台(命令行提示符窗口)用于输入dos命令: 打开一个控制台的方式: 方式一:开始-------> 所有程序--------->附件----------->命 ...
- ASP.NET中进行消息处理(MSMQ) 一
MSMQ是微软消息队列的英文缩写.那么什么是消息队列?这些介绍网上一大片这里就不多说了.本文对于大虾级的人物来说这只是小玩意而已,对于初学者来说这文章还是有一定的帮助,希望路过的大虾们别笑话我班门弄斧 ...
- Linux常用指令---tail | head(查看文件)
tail 命令从指定点开始将文件写到标准输出.使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不但刷新, ...
- LeetCode:Climbing Stairs(编程之美2.9-斐波那契数列)
题目链接 You are climbing a stair case. It takes n steps to reach to the top. Each time you can either c ...
- Linux c实现服务端与客户端聊天
主要利用socket通信实现,具体代码如下 客户端: #include <stdio.h> #include <stdlib.h> #include <string.h& ...