维奥拉-琼斯人脸检测方法是如何工作的?

22
请简要解释一下维奥拉-琼斯人脸检测方法的工作原理。

2
这是答案:http://en.wikipedia.org/wiki/Viola-Jones_object_detection_framework 有什么不清楚的地方可以问。 - Andrey Sboev
2个回答

77
Viola-Jones检测器是由多个弱检测器构建的强二元分类器。
Each weak detector is an extremely simple binary classifier

在学习阶段,通过Adaboost训练一系列弱检测器以获得所需的命中率/漏报率(或精度/召回率)。为了检测物体,原始图像被分成多个矩形补丁,每个补丁都被提交到级联中。如果一个矩形图像补丁通过了所有级联阶段,则被分类为“正面”。该过程在不同的尺度上重复进行。

enter image description here

实际上,在低层次上,对象检测器的基本组件只是某些内容,用于判断原始图像的某个子区域是否包含感兴趣的对象实例。这就是二进制分类器的作用。基本的、弱分类器基于非常简单的视觉特征(这种特征通常被称为“Haar-like特征”)。Haar-like特征由一类局部特征组成,通过从特征的子区域中减去剩余区域的总和来计算。这些特征的特点是易于计算,并且使用积分图非常高效。Lienhart引入了一个扭曲的Haar-like特征的扩展集合(见图像)。
这些是标准的Haar-like特征,它们被旋转了45度。Lienhart最初没有使用扭曲的棋盘状Haar-like特征(x2y2),因为它们代表的对角元素可以使用扭曲特征简单地表示,但是显然这个特征的扭曲版本也可以实现并使用。
这些扭曲的Haar-like特征也可以使用被旋转45度的积分图快速高效地计算。唯一的实现问题是,必须将扭曲的特征舍入为整数值,以便与像素边界对齐。这个过程类似于在缩放Haar-like特征以适应更大或更小的窗口时使用的舍入方法,但是一个不同之处是,在45度扭曲特征中,用于高度和宽度的整数像素数量意味着像素的对角线坐标将始终位于相同对角线像素集上。
这意味着可用的不同大小的45度扭曲特征数量明显比标准的垂直和水平对齐特征少。

所以我们有类似于这样的东西:

enter image description here

关于公式,使用积分图像快速计算Haar-like特征看起来像:

enter image description here

最后,这里有一个C++实现,使用了Ivan Kusalic的ViolaJones.h
要查看完整的C++ 项目,请前往此处

你能更好地解释一下什么是视觉特征(图片中方块的含义)以及你回答中的最终公式是什么意思吗? - BlackShadow
好的,非常感谢。我有最后一个问题(关于JCooper的回答):如果我们有一个白人,他有蓝色或绿色的眼睛(因此鼻子和眼睛之间的光线差异不明显),如何使用haar特征进行面部检测? - BlackShadow
1
@BlackShadow它仍然运作得非常好,因为眼睛设置在头部后面。自上而下的光线阴影可以触发该功能。 - JCooper
@cMinor,你的解释非常好,能否请您告诉我什么是积分图像? - ARG
积分图像计算每个像素点(x,y)处的值,该值是包括(x,y)在内的上方和左侧像素值的总和(可以通过对图像进行一次遍历来快速计算)。Robert Fergus在这里解释了它http://cs.nyu.edu/courses/fall12/CSCI-GA.2560-001/FaceRecognitionBoosting.pdf。 - edgarmtze

4

Viola-Jones检测器是由多个弱检测器构建的强二元分类器。每个弱检测器都是一个非常简单的二元分类器。

检测包括以下部分:

Haar滤波器:从图像中提取特征以进行分类(特征用于编码专业领域知识)。

积分图像:允许非常快速地评估特征。

级联分类器:级联分类器由多个过滤器阶段组成,用于将图像(图像的滑动窗口)分类为人脸。

以下是如何在图像中检测人脸的概述。

enter image description here

一个检测窗口在整个图像中移动,提取由积分图计算的haar滤波器特征,然后将提取的特征发送到级联分类器以判断是否为脸部。滑动窗口逐像素移动。每次窗口移动时,窗口内的图像区域将经过级联分类器。
Haar滤波器:您可以理解为该滤波器可以提取眼睛、鼻梁等特征。

enter image description here

积分图像: 可以实现非常快速的特征评估

enter image description here

级联分类器

级联分类器由多个过滤器级联组成,如下图所示。每次滑动窗口移动时,新的滑动窗口区域将逐级通过级联分类器。如果输入区域未能通过某个阶段的阈值,则级联分类器将立即将该区域拒绝为人脸。如果一个区域成功通过所有阶段,则它将被分类为人脸候选区域,并可能通过进一步处理进行精炼。

enter image description here

更多细节:

首先,建议您阅读源论文使用简单特征的增强级联快速目标检测,以了解该方法的概述。

如果您无法清楚地理解它,可以查看Viola-Jones人脸检测实现Viola-Jones人脸检测算法Viola-Jones实时人脸检测研究以获取更多详细信息。

这里是一个Python代码Paul Viola和Michael J. Jones的人脸检测算法的Python实现

matlab代码 在这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接