《Rapid Object Detection using a Boosted Cascade of Simple Features》论文笔记

前言

最近几天效率低下,写了下毕设开题报告,为准备复试整理了之前的国创DMP轨迹规划算法,还有就是磨磨蹭蹭看完了传统人脸检测中具有里程碑性质的VJ 基于adaboost和cascaded人脸检测算法。本来还想看一篇关于这篇论文的分析,结果看英文看的头昏脑涨看一半实在看不下去了。
VJ人脸检测算法主要的效果是在保持较高检测率和低false negative率的同时,相比之前的算法大大提升了检测速度。
首先,目标检测的基本原理就是先通过训练集学习一个分类器,然后在测试图像中以不同scale的窗口滑动扫描整个图像;每次扫描做一下分类,判断一下当前的这个窗口是否为要检测的目标。
这篇论文提出了三个亮点:第一个是通过引入Harr-like的检测人脸特征子,并通过积分图的计算方法,大大减少了计算特征的时间。第二是使用adaboost结合多个很简单而又很有效率的单分支决策树分类器作为分类器;每个单分类器仅使用单个特征,且通过一个阈值实现正反类的分类。第三点是使用级联cascaded的结构,从简单到复杂把多个分类器级联起来,前几级分类器具有较高的检测率较低的false negative,从而把图片中大部分不含人脸的区域sub-windows过滤掉,而对可能包含人脸的区域重点检测,从而大大加快了检测速度。
论文的链接为:Rapid object detection using a boosted cascade of simple features
对于这篇文章的分析:An Analysis of the Viola-Jones Face Detection Algorithm
关于该算法的改进:An extended set of Haar-like features for rapid object detection

特征提取

作者使用harr-like方法提取特征,具体是使用下面四种类型的特征提取器在sub windows中提取标量特征,具体操作是白色区域中灰度值之和减去黑色区域中灰度值之和。
《Rapid Object Detection using a Boosted Cascade of Simple Features》论文笔记
通过估计,在24*24的sub windows中,可以得到约18000个上面的特征,这数量是很多,而且它们只能检测垂直或者水平或者对角线的特征,但是可以通过下面说到的积分图的计算方法大大简化这些特征的计算。
《Rapid Object Detection using a Boosted Cascade of Simple Features》论文笔记

adaboost

每个特征形成一个分类器,它们都是简单地基于阈值进行分类:
《Rapid Object Detection using a Boosted Cascade of Simple Features》论文笔记
然后通过adaboost集成学习,将多个子分类器结合成强分类器,同时也起到了从18000个特征中筛选特征的作用。
具体的流程如下:
《Rapid Object Detection using a Boosted Cascade of Simple Features》论文笔记
大致的做法是在每一轮集成中选择错误率最小的特征分类器,同时在计算error的时候更新每个训练样本的权重,提高分类错误的样本的代价,也就是更加关注上一轮分类错误的样本。
从adaboost筛选特征的结果来看,是很符合直观感受的:
《Rapid Object Detection using a Boosted Cascade of Simple Features》论文笔记
adaboost筛选出的前两个特征是检测眼睛处和眼睛下方的灰度差,以及眼睛处和鼻梁出的灰度差。

cascaded级联结构

这一结构很好地减少了检测计算时间,也被后来很多检测算法所借鉴。
《Rapid Object Detection using a Boosted Cascade of Simple Features》论文笔记
如图所示,在通过adaboost得到了强分类器之后,仍然不能达到很精确的检测效果,所以得通过多个强分类器进行检测,同时为了减少检测时间,作者使用了级联的结构,先把图片经过低false negative的分类器,对于分类预测为非人类的sub window直接抛弃掉,而对检测为含有人脸的sub windows输入下一层的分类器。由于前面两层分类器抛弃掉了80%的滑动窗口sub windows,从而大大缩减了检测时间。

预处理

作者在进行训练和检测的时候,在输入图片前先对图片进行归一化处理

不同尺度人脸的检测

在本文中作者不是通过对原图像的缩放进行多尺度检测,而是对滑动窗口进行缩放。

去除重复检测

对于重复检测,作者的做法很简单粗暴,之间将相接触的人脸检测框进行合并处理,然后取均值作为检测框,感觉这种做法还是比较粗糙的。

优缺点分析

VJ人脸检测算法的优点是使用很简单的易于计算的特征和分类器,同时使用cascaded级联结构快速抛弃不怎么可能存在人脸的区域,从而大大减少了检测的示教。
VJ人脸检测算法的缺点是由于用于检测的特征较为简单,对于非正脸的检测效果较差。

最后记录一下几篇人脸检测综述的博客:
一文综述人脸检测算法(附资源)
从传统方法到深度学习,人脸关键点检测方法综述
人脸检测(十九)–人脸检测综述(2018.2)