aihot  2017-06-18 08:20:38  深度学习 |   查看评论   

人脸检测技术的突破:VJ人脸检测器及其发展
 
  人脸检测技术的突破发生在2001年,两位杰出的科研工作者Paul Viola和Michael Jones设计了出了一个快速而准确的人脸检测器:在获得相同甚至更好准确度的同时,速度提升了几十上百倍——在当时的硬件条件下达到了每秒处理15张图像的速度,已经接近实时速度25fps(即25帧每秒)。这不仅是人脸检测技术发展的一个里程碑,也标志着计算机视觉领域的研究成果开始具备投入实际应用的能力。为了纪念这一工作,人们将这个人脸检测器用两位科研工作者的名字命名,称之为Viola-Jones人脸检测器,或者简称为VJ人脸检测器。
 
  VJ人脸检测之所以器能够获得成功,极大地提高人脸检测速度,其中有三个关键要素:特征的快速计算方法——积分图,有效的分类器学习方法——AdaBoost,以及高效的分类策略——级联结构的设计。VJ人脸检测器采用Haar特征来描述每个窗口,所谓Haar特征,其实就是在窗口的某个位置取一个矩形的小块,然后将这个矩形小块划分为黑色和白色两部分,并分别对两部分所覆盖的像素点(图像上的每个点称为一个像素)的灰度值求和,最后用白色部分像素点灰度值的和减去黑色部分像素点灰度值的和,得到一个Haar特征的值。
Haar特征的值
  Haar特征反映了局部区域之间的相对明暗关系,能够为人脸和非人脸的区分提供有效的信息,例如眼睛区域比周围的皮肤区域要暗,通过Haar特征就可以将这一特点表示出来。但是由于提取Haar特征时每次都需要计算局部区域内多个像素点灰度值之和,因此在速度上其并不快,为此VJ人脸检测器引入了积分图来加速Haar特征的提取。
 
  积分图是一张和输入图像一样大的图,但其每个点上不再是存放这个点的灰度值,而是存放从图像左上角到该点所确定的矩形区域内全部点的灰度值之和。
积分图来加速Haar特征
  积分图所带来的好处是两方面的,一方面它使得每次计算局部区域像素点的灰度值之和仅需要做4次加减法,与局部区域的大小无关;另一方面它避免了在相同像素点上重复求和,只在最开始计算一次——相邻的窗口有很大的重叠部分,对应的Haar特征也会重叠,如果每次都重新计算像素点的灰度值之和,则重叠部分的计算是重复的。积分图极大地加速了Haar特征的提取,向快速的检测器迈出了第一步。
 
  除了特征提取,分类过程的速度对于检测的速度也至关重要。分类的速度取决于分类器的复杂程度,也即从特征向量变换到类别标签的计算过程的复杂程度。复杂的分类器往往具有更强的分类能力,能够获得更好的分类准确度,但是分类时的计算代价比较高,而简单的分类器虽然计算代价小,但是分类准确度也较低。那么有没有兼顾计算代价和分类准确度两方面的办法呢?当然有,这就是AdaBoost方法。希望计算代价小,所以只用简单的分类器,但是又希望分类准确度高,于是把多个简单的分类器组合起来——聚弱为强,将多个弱分类器组合成一个强分类器,这就是AdaBoost方法的核心理念。通过AdaBoost方法来学习分类器,达到了以更小的计算代价换取同样的分类准确度的目的。
 
  造成人脸检测速度慢的根本原因还在于输入规模过大,动辄需要处理几十上百万的窗口,如果这样的输入规模是不可避免的,那么有没有可能在处理的过程中尽快降低输入规模呢?如果能够通过粗略地观察快速排除掉大部分窗口,只剩下少部分窗口需要进行仔细的判别,则总体的时间开销也会极大地降低。从这样的想法出发,VJ人脸检测器采用了一种级联结构来达到逐步降低输入规模的目的。
人脸检测
  具体说来,VJ人脸检测器将多个分类器级联在一起,从前往后,分类器的复杂程度和计算代价逐渐增大,对于给定的一个窗口,先由排在最前面也最简单的分类器对其进行分类,如果这个窗口被分为非人脸窗口,那么就不再送到后面的分类器进行分类,直接排除,否则就送到下一级分类器继续进行判别,直到其被排除,或者被所有的分类器都分为人脸窗口。这样设计的好处是显而易见的,每经过一级分类器,下一级分类器所需要判别的窗口就会减少,使得只需要付出非常少的计算代价就能够排除大部分非人脸窗口。从另一个角度来看,这实际上也是根据一个窗口分类的难度动态地调整了分类器的复杂程度,这显然比所有的窗口都用一样的分类器要更加高效。
 
  VJ人脸检测器通过积分图、AdaBoost方法和级联结构取得的巨大成功对后续的人脸检测技术研究产生了深远的影响,大量的科研工作者开始基于VJ人脸检测器进行改进,这些改进也分别覆盖了VJ人脸检测器的三个关键要素。

 

除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自走近人脸检测:从 VJ 到深度学习(上)

留言与评论(共有 0 条评论)
   
验证码:
[lianlun]1[/lianlun]