Face Dectction 面部识别基础

来源:互联网 发布:搬瓦工和阿里云 编辑:程序博客网 时间:2024/04/26 20:39

今天内部讨论会,讲的是经典论文Robust Real-Time Face dectction和rapid object detection using a boosted cascade of simple features。不少之前似懂非懂的问题茅塞顿开了,终于理解了一些最基本的人脸识别问题。下面来整理一下今天讨论的一些问题,小弟新手上路,如果有什么理解不当,请各路大神多多指点!


脸部特征


对于一张人脸图像,我们想要找出相应的特征,使它与周围的环境区别开来。于是我们需要特征块进行匹配。

如上图B的特征的类型,可以用于人眉毛部分的匹配。

需要说明的是,即使是同一类型的特征,几何位置不同,也应算作不同特征。

于是,按照常用的实验图分辨率为640*480,人脸尺度约为24*24来计算 ,仅对于类型B的特征,一幅图片中就有307200种特征(即24*24的小窗遍历640*480的图像)。

文中提到,双矩形特征(如A,B)的值,为两个方框中总像素灰度值之差。

三矩形特征(如C)是用于计算旁边两个矩形方框的总像素灰度值减去中间方框的总像素灰度值。

四矩形特征(如D)是计算对角线上方框的总像素灰度值。

那么如果算上这里的四种特征,一幅640*480分辨率的图片中将会有4*307200=1,228,800种特征,其计算规模是非常庞大的。而只要经过简单的思考我们就会发现,其实有很多特征是明显不可能符合要求的,于是,作者提出了一套缩减特征的方法。

在此之前,我们先要详细说明白特征计算的问题。


积分图


采用积分图来计算矩形特征的速度非常快。在x,y点的积分图为在该点左上部分的所有像素灰度值之和。如图:



假如要计算上右图中D的积分图,只需要求4-1+2+3即可。

由此推算每一个积分图最多需要4个数组表示。

由于双矩形特征包含了相邻的矩形,它能够用6个数组表示。三矩形特征需要8个数组,4矩形数组需要9个数组。



计算加速


对于可逆线性算符f, g,存在以下性质,


作者证明了如果fg都是稀疏的,那么卷积计算将会被大大加速。

于是对于我们的图像,有如下性质:

i为图像,r为矩形窗口,即特征窗口。

学习分类器

采用AdaBoost算法进行在线监督学习。


1. 首先给定样例图像,yi=01,表示样例点为正或负。

2. 初始化权重,使yi=01的样例点权重相同,m为正样例点的个数,l为负样例点的个数。

这一步的意义在于:由于在一般的图像上,正样例点的个数明显少于负样例点。假如不平衡正负样例的权重,那么负样例点占据了很大部分的权重,在线学习的负担将大大增加。

3. 对于t=1,2,3,...T:

a) 首先把权重数值化

b) 选择关于权重错误率的最佳的弱分类器,使得下式成立:


c) 定义,其ft,pt,cita t都是使最小化的参数。

d) 更新权重


如果对于xi,分类正确,则,反之则反。且

4. 最终的强分类器表达方式为:


通过以上四步算法,可以从上百万的特征中选择出相对较重要的一些特征,按照论文作者的说法,此处学习出来的特征约有200个。




级联学习



对于AdaBoost算法学习出来的200个特征,假如我们在检测阶段采用穷举法遍历整幅图像进行匹配,仍然需要花费大量的时间。于是为了能够达到real-time,作者提出了级联检测方法。

其思想为:对于大多数图像区域,与人脸的差异非常大,只需要极少的几个特征便可以断定其并不是人脸区域,并不需要检测所有的200个特征。这样可以大大加速算法。

经过实验证明,大多数非人脸区域在前三个级便已经被判断出来,而若使错误率F达到我们所规定的数值,文中使用了37级分类器。

此处F为每一级分类的错误率,T为每一级分类的正确率,T的数值很高,在通过所有级之后仍然很高。而F错误率在通过很多级之后会降到很低很低。

每一级分类器都是采用AdaBoost算法训练出来的。

原创粉丝点击