这篇论文是人脸检测上的经典之作。 作者是PAUL VIOLA。相较于其他的人脸检测算法, 该篇论文中提到的算法的主要有点就是在保证较高的人脸检测率的前提下, 实现了超高的检测速度。 真正做到了实时性(Real Time), 当之无愧。 可以说之前的各种人脸检测算法均无法达到实时性应用的要求。 这篇论文的发表可以说是奠定人脸检测走向实时的工程应用的基石。 说是开山之作一点也不过分。 下面主要学习拜读一下牛人的论文, 并实现稳中的算法。
在这篇文章的摘要中, PAUL VIOLA 主要介绍了这篇论文Robust Real-Time Face Detection在人脸检测领域主要有三大贡献:
(1) 首先引入了积分图(Integral Image)的概念。这一概念至关重要。 虽然积分图并不是由Viola 首先提出的, 但是真正将积分图推广, 并被大家广泛认识的一定是PAUL VIOLA了。 对给定的于任何一幅图像, 我们都可以计算出与之对应的一个唯一积分图像。 可以说积分图是原始图像的新的图像表示(a new image representation )。 后面我们会知道, 正是因为我们提前计算出了积分图像, 所以在后面极其迅速(O(1), 也就是常数的时间内)计算出我们的检测器(detector)所需要的特征(Haar-like features)。 可以说, 没有积分图的存在, 文章中的实时性(real-time)将会是空谈。
(2)第二个贡献是通过使用AdaBoost学习算法, 从大量的潜在的候选特征(Haar-like features)集合中选出需要的, 少量的关键视觉特征(critical visual features)。 这样, 我们的分类器就变得简单而高效。关键视觉特征由于数量少, 从而我们的训练的速度也很快, 这又从另一个方面保证了实时性(Real - Time)。 为什么需要Adaboost 学习算法?? 原因是我们通过滑动我们的图像子窗口, 计算出的Haar-like features(类似Haar特征)的总的特征个数是相当的巨大, 会远远的超过原图像本身的像素的总数。 所以为了达到实时性的目的, 我们必须需要借助于Adaboost 学习算法, 从这么大的特征集合中选出少量的关键特征集。 也就是说, 在每一阶段的自举(boosting的过程中), 我们都会选择一个新的弱分类器(a new weak classifier,)。 这一个阶段也可以视为特征选择的过程。
(3)第三个贡献就是通过采用将弱分类器级联的方法, 组合出一个强分类器。 也就是说每一级的分类器都将本级分类器认为是图像的背景区域(无人脸区域)丢弃掉, 以便下一级的分类器能够将主要的计算力和精力放在更像是人脸的区域(promising face-like regions)上去。这一步, 实时性体现在减小分类器的复杂性, 一级一级的提练图像, 减少无关的图象中的数据。 值得一提的是, 通过在数据库上学习, 我们在这里采用学习得到的一个face detection attentional operator, 该算子能够滤除掉图像中50%的部分, 但是却可以保存下99% 的人脸区域。 相当可观。 这些子窗口(sub-windows)不会被最开始的那个分类器(initial classifier)拒绝, 但是却会被后面级联的分类器处理。 每一级分类器都比其前一级复杂。 所以凡是被某一级的分类器拒绝掉的子窗口都不会被后面的分类器处理。 不难看出, 该级联分类器检测过程其实是一个退化的决策树的过程(a degenerate decision tree)。 作者在论文中采用的分类器的个数为38个。 尽管分类器的数目很多, 但是由于采用了这种级联的结构却导致检测速度的提升。
通过上面的简要介绍, 我们不难发现, 我们自始至终通过一些方法来提高我们的检测速度。 实际上该算法的精度也是相当好的。据论文所说, 即使是在一个普通的笔记本上, 我们的检测速度能够达到每秒15帧图像(文中提到运行在700 MHz Intel Pentium III的笔记本上, 图像大小为384 by 288 pixel images,检测的是a frontal face detection,也就是正脸), 当时实现的false positive rates能够达到最新的发表成果达到的标准, 但是其检测的速度却是后者难以望其项背的)。 更何况论文发表于2004年, 距离现在将近10年了, 考虑到摩尔定律带来的计算机运行速度的提升, 即使论文发表10年后的今天, 我们依然能够惊叹于算法的简约, 优雅之处。 在接下来的几天, 将重点介绍这篇人脸检测领域走向实用的开山之作。