您的位置:首页 > 其它

论文《Joint Cascade Face Detection and Alignment》笔记

2016-10-10 18:52 387 查看
转自:http://blog.csdn.net/u010333076/article/details/50637342

论文:Joint
Cascade Face Detection and Alignment.pdf

实现:https://github.com/FaceDetect/jointCascade_py

部分内容引用自:http://www.cnblogs.com/sciencefans/p/4394861.html#!comments


首先是简介:

论文首先介绍了一些当今人脸检测的技术发展状况,首先阐述了V-J算法的奠基性以及它所提出的两大原理:1)boosted的级连结构;2)提取简单的特征。这种检测器虽然在工业界和学术界得到了普遍认可,并且有着不错的检测效果,但是在一些复杂的情况下(光照、表情、遮挡),简单的特征会使检测能力会大大下降。一些人尝试离散的训练出各种角度的识别器来增强鲁棒性,但是用这种离散的方式来估计人脸角度本身就带来了很大的困难,训练出的模型往往速度过慢或准确率不高。最近又提出了一种不使用V-J框架的人脸检测算法:DPM,它可以做到人脸检测和关键点定位的一气呵成,但是其计算量太大导致时间消耗过高。

论文采用了一种新的算法来检测人脸,仍遵循V-J的经典框架,采用像素差作为特征,有着杰出的速度(28.6 ms for a VGA image )与实现效果(achieves the best accuracy on the challenging datasets)。

论文的突破点在于采用了人脸检测点作为人脸检测的一种指标,过去的工作中人们大多数将关键点检测与人脸检测分成两部分,然后论文通过实验指出,关键点检测可以作为人脸检测的一个重要评价标准,其实我们想一下也能知道,假如关键点检测到鼻子在嘴巴下面,那么这张脸想必不会是人脸。关键在于如何有效的利用这种特征。

最后,本文与另一篇论文密不可分,《Face Alignment at 3000 FPS via Regressing Local Binary Features 》,只有理解好这篇论文,才能理解其利用回归树做的关键点定位算法,能够理解其关键点定位算法,才能理解本篇论文提出的分类回归树算法。建议理解分类树与回归树和随机森林之后,再阅读上面给出的论文,之后再阅读下面的内容。


作者关于关键点定位对人脸检测作用的验证:

该段引用自http://www.cnblogs.com/sciencefans/p/4394861.html#!comments

作者建立了一个叫post classifier的分类器,方法如下:

1.样本准备:首先作者调用opencv的Viola-Jones分类器,将recal阀值设到99%,这样能够尽可能地检测出所有的脸,但是同时也会有非常多的不是脸的东东被检测出来。于是,检测出来的框框们被分成了两类:是脸和不是脸。这些图片被resize到96*96。

2.特征提取:接下来是特征提取,怎么提取呢?作者采用了三种方法:

第一种:把window划分成6*6个小windows,分别提取SIFT特征,然后连接着36个sift特征向量成为图像的特征。

第二种:先求出一个固定的脸的平均shape(27个特征点的位置,比如眼睛左边,嘴唇右边等等),然后以这27个特征点为中心提取sift特征,然后连接后作为特征。

第三种:用他们组去年的另一个成果Face Alignment at 3000 FPS via Regressing Local Binary Features (CVPR14) ,也就是图中的3000FPS方法,回归出每张脸的shape,然后再以每张脸自己的27个shape points为中心做sift,然后连接得到特征。

3.分类:将上述的三种特征分别扔到线性SVM中做分类,训练出一个能分辨一张图是不是脸的SVM模型。

紧接着作者将以上三种方法做出的分类器和初始分类器进行比对,画了一个样本分布的图:



这个图从左到右依次是原始级联分类器得到的样本分类分布和第一种到第三种方法提取的特征得到的样本分类分布。可见做一下shape alignment可以得到一个更好的分类效果。但是问题来了:如果把所有的windows都做一下alignment,即使是3000 faces per second的速度一张图可能也要处理上1秒,这无法满足一般一秒30帧的实时需求。作者也说,用opencv分类器,参数设成99%的recall率将会带来很严重的效率灾难——一张图能找出来3000个框,处理一张图都要好几秒。

这么渣的效率可咋办呢?以上内容已经证明了alignment确实对detection的preciseness有帮助,这就够啦。


关键点用于人脸检测的初步结合尝试:

这里提出了两个算法,分别是:Cascade Detection 和 Cascade Alignment  ,这两个算法都是现成的,前面讲的pico用的其实就是一个Cascade Detection ,想了解的看前面pico讲解或V-J框架都可以,我们不再多说。Cascade Alignment相比来说是个较新的方法,主要是用回归的方法,将关键点不断回归到正确的位置。

实现的方法是在做检测的时候引入关键点参数,然后在一层检测过后更新关键点参数,具体做法就是在训练检测过程的弱分类器时加入关键点参数,算法流程如下:



参数含义参考论文,此处不再贴出,算法很容易理解,其实就是在每一层内,先做检测,检测完在做关键点校准,缺点也很明显,一来是效率不高,二来是两套模型训练和测试起来很麻烦,别急,下面是改进。


关键点用于人脸检测的完全形态:

这一部分是本篇论文的核心精髓,作者开创性的将前面提到的用于关键点校准的回归树结合上用于检测的弱分类器重建为一棵新的决策树,并命名为 classification/regression decision tree (分类回归决策树),为方便我们简称其为CRDT(我自己乱取的名字别当真),CRDT输出一个用于判决人脸得分的同时还会输出关键点的增量,可以说这两步是完全同步的,并且采用的是相同的特征。

关于CRDT的构建方式参考 霍夫森林(HoughForest):在一棵CRDT的所有结点上,一部分结点用于分类,原则就是选择使信息增益最大的点划分(这里多说一句什么是使信息增益最大的点,假如选择某个特征,使得划分后结果越混乱,那么它的信息熵也就越小,那么在将其按照标签重新划分为两部分后,此时信息熵最大,那么该点也就是信息增益最大,这块我也是弄了好一会才明白为什么选使结果最混乱的特征划分);另一部分结点用于回归关键点。

通过一个参数ρ来决定其职责,分类结点的权重为ρ,回归结点权重为(1-ρ),在一棵树里,分类结点更靠近根结点,回归结点更靠近于叶结点。

ρ(t) = 1 − 0.1t, t = 1, ..., T . 

也就是说,越靠前的层里,较多的结点用于分类,较少的结点用于回归;越靠后的层里,较少的结点用于分类,较多的结点用于回归。

贴出检测算法流程如下:

 


这里的CRtk就是一棵CRDT,θtk 是其阈值,算法过程也很明了,不再多说。

贴出训练过程算法如下:



看起来很长很复杂有木有!我们逐行来看:

8-10 初始化所有训练数据的权值,依据公式

,y等于-1表示其为人脸,+1表示其非人脸,只可取这两个值,f为其当前分类的值。

w用来表示其熵,也就是说,分类越明显,所有w的值会趋向两端,越不明显,那么所有w的值会趋向中间。

11 确定当前的CRDT树回归哪个人脸关键点,由当前 k mod L决定。/*local learning in Section 4.1*/ 

12 开始训练CDRT树

13-15 依据下面的公式确定其叶子结点的输出值。



该公式可以这么理解,定义域为这个叶子结点的所有输出,值域为负无穷到正无穷,其值越大,说明通过该叶子结点的数据多为负例,其值越小,则多为正例。

16-18 依据刚才训练的CRDT树,测试所有数据,更新所有数据的分类得分。

19 根据现在所有分类的得分,预设的召回率,误检率,确定当前CRDT树的阈值。

20 把所有得分小于该阈值的训练数据移除。

21 如果负例数据不足就perform hard negative sample mining(这个是什么我也不知道,待补充) 补充负例数据。

上面这些就是一棵CRDT 的完整训练过程。

23 依据所有叶子结点的结果获得∆S 。 /* global learning in Section 4.1 */ 

24 更新当前所有训练数据的S。


关键点检测算法:

论文:Face
Alignment at 3000 FPS via Regressing Local Binary Features.pdf


特征提取:

the shape indexed pixel difference features 


总结与启发:

这篇论文的干货非常多,总结起来有以下几点:

1、这篇论文并没有深入其关键点检测算法,但是其关键点检测算法目前来说应该是state-of-the-art的,该算法值得深入学习。

2、论文中设计了一种CRDT树,将分类和回归结合到一棵决策树上,十分有借鉴意义。

整篇论文给人最大的启发在于其CRDT树的设计,将关键点检测回归树与人脸检测分类树结合起来,在实验中取得优异的结果,而pico同样为分类树,不同之处是两者采用的特征不同,假如pico的特征能够用于关键点检测算法,或是我们能够提出一种新的特征能够同时用于关键点检测和人脸检测,那么就可以按照文中提供的方法,实现人脸检测与关键点检测的结合,实现准确率的一次突破。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  人脸
相关文章推荐