畅所欲言第1期 - 从Viola&Jones的人脸检测说起

简介: 转载自http://c.blog.sina.com.cn/profile.php?blogid=ab0aa22c890006v0不少人认识我或者听说我的名字都是因为我过去做的关于人脸检测的工作,那么第一篇帖子就简单谈谈对我影响至深的这项工作的源起吧。

转载自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

目录
相关文章
|
2月前
|
算法 安全 搜索推荐
深入浅出:使用Python实现人脸识别系统
在当今数字化时代,人脸识别技术已成为安全验证、个性化服务等领域的关键技术。本文将引导读者从零开始,逐步探索如何利用Python和开源库OpenCV来构建一个基础的人脸识别系统。本文不仅会详细介绍环境搭建、关键算法理解,还会提供完整的代码示例,帮助读者理解人脸识别的工作原理,并在实际项目中快速应用。通过本文,您将能够掌握人脸识别的基本概念、关键技术和实现方法,为进一步深入学习和研究打下坚实的基础。
|
机器学习/深度学习 搜索推荐 算法
计算机视觉教程6-1:图解双目视觉系统与立体校正原理
计算机视觉教程6-1:图解双目视觉系统与立体校正原理
617 0
计算机视觉教程6-1:图解双目视觉系统与立体校正原理
|
2月前
|
机器学习/深度学习 vr&ar 算法框架/工具
表情识别(从原理到代码安装)
表情识别(从原理到代码安装)
39 0
|
4月前
|
机器学习/深度学习 人工智能 计算机视觉
【计算机视觉】不来试试图片轮廓提取?
🚩 前言 最近学到了深度学习的卷积操作,在卷积神经网络出现之前,就已经有使用卷积核 (也叫滤波器),但那时的卷积核依靠人工的经验和知识来进行设计,而不能像卷积神经网络中那样让机器自己学习出合适的卷积核参数。 下面就介绍通过卷积来获取图像轮廓图的操作。
50 1
|
8月前
|
机器学习/深度学习 算法 计算机视觉
CV面试题目总结(三) - 传统图像算法
CV面试题目总结(三) - 传统图像算法
140 0
|
8月前
|
机器学习/深度学习 算法 决策智能
计算机视觉实战(十二)全景图像拼接(附完整代码)
计算机视觉实战(十二)全景图像拼接(附完整代码)
226 0
|
8月前
|
机器学习/深度学习 算法 决策智能
计算机视觉实战(十五)背景建模 (附完整代码)
计算机视觉实战(十五)背景建模 (附完整代码)
109 0
|
8月前
|
机器学习/深度学习 决策智能 计算机视觉
计算机视觉实战(十四)答题卡识别 (附完整代码)
计算机视觉实战(十四)答题卡识别 (附完整代码)
164 0
|
机器学习/深度学习 监控 算法
门禁系统中人脸检测技术的原理剖析和使用教程
人脸检测 API 是一种基于深度学习技术的图像处理API,可以快速地检测出一张图片中的人脸,并返回人脸的位置和关键点坐标,在人脸识别系统、人脸情绪识别等多种场景下都有极大的应用。 本文将从人脸检测的发展历程、原理、特点等角度出发,一文带你看透人脸检测 API 。
165 0
|
传感器 人工智能 JSON
史上最全 | 计算机视觉2D/3D标注工具汇总!
标注工具是处理原始数据的第一关,无论是检测任务、分割任务还是3D感知、点云等,都需要制作真值来监督网络学习。企业级的标注方案一般通过内部的自研工具或专业标注团队完成,而对于个人或小的团队来说,一款开源好用的标注工具则至关重要,自动驾驶之心为大家汇总了领域常用到的标注工具,涉及2D检测分割/3D检测分割以及多传感器的标定同步。
史上最全 | 计算机视觉2D/3D标注工具汇总!