网上斗牛

2018届优秀毕业论文(三)

作者: 时间:2018-09-12 点击数:

基于视频的人脸检测方法研究与实现

电子信息工程 201410324 问海涛

指导教师 王履程(讲师)

摘要:

本文研究了视频人脸检测的方法:经典的VJ人脸检测算法和基于深度学习的MTCNN人脸检测算法。对比两种算法在不同应用场景中的优缺点,从而得出每个场景最适用的检测算法。主要内容如下:

研究VJ算法的流程,滑动窗口范式的基本原理,构建图像金字塔的方法,积分图计算的方法,HaarLBP特征的计算方法,Adaboost算法的原理以及级联分类器的组成。然后利用VS+OpenCV编写C++程序实现人脸检测。最后对比了VJ算法在3种应用场景:近距离、远距离、非限制性场景的性能表现。

研究图像卷积计算的方法、卷积神经网络的组成部分、MTCNN网络的结构与算法的流程。然后在Ubuntu系统下利用Caffe框架实现MTCNN算法。最后在同样的3种场景中测试MTCNN的性能表现。

最后得出各种场景适用的人脸检测算法:(1) 固定场景近距离人脸检测,硬件资源要求低,可以采用Haar特征或者LBP特征的人脸检测。(2) 固定场景远距离人脸检测,硬件资源要求低,可以采用Haar特征人脸检测。(3) 非限制性复杂场景,远近距离检测人脸,优先采用基于深度学习的人脸检测算法,如MTCNN方法。

关键词:人脸检测;VJ算法;MTCNN算法

1.引言

当今处于一个信息爆炸的时代,各种信息以文字、声音、图片、视频的形式传递给人们,极大的便利丰富了人们的生活。据统计人类从外界获得的信息约有75%来自视觉系统[1]得益于数据的存储、处理、传输技术的高速发展,作为各种信息的形式的综合,视频以其呈现信息的直观性、确定性、高效性、广泛性[2],在人们的生产生活中发挥着极其重要的作用。

大部分的视频应用中人脸检测通常作为第一步,因为只有机器检测到人脸了,才能将人脸提取出来做后续处理。人脸检测就像是人与机器之间沟通的桥梁,它性能好坏直接影响着后续处理的结果。所以下面将研究两种人脸检测算法:1.经典的VJ算法,2.基于深度学习的MTCNN算法的原理并编写程序来实现它们

2.VJ人脸检测算法

2001Paul ViolaMichael JonesCVPR上提出Viola-Jones算法,因其快速的检测被后续的科研工作者或项目广泛的采用与改进,为了深入研究人脸检测算法的基本原理,这里选择VJ算法作为研究对象,并编写相关代码实现。

(1) VJ算法流程

人脸检测是指对于任意一幅图像,采用一定的策略对其进行搜索以确定其中是否含有人脸,如果是则返回全部人脸的位置及其大小[3]。人脸检测通常需要3步:

在图像上选择某一个矩形区域作为观察窗口;

在选定的窗口上进行特征提取以描述该矩形窗口;

利用提取的特征对窗口进行判断是否是人脸区域。

以上3步为单次人脸检测,只能判断一幅图片上的一个窗口是否是人脸,而要找整幅图像上的人脸,需要不断的执行以上3个步骤。

(2) 人脸观察窗口的选择

人脸检测器需要检测出图像上的每一张人脸,因此需要观察窗口覆盖图像上的每一个位置,通常的做法是:在图像的左上角选择一个长为x,宽为y的矩形观察窗口,以1为步进,从左到右,从上到下,依次覆盖图像上的所有像素,这一种做法叫做滑动窗口范式。在VGA图像(640*480)上,观察窗口为80*80,那么观察窗口的数量为:(640-80*480-80= 22400022.4万个观察窗口,所以早期的人脸检测算法速度一般较慢。图2.1为滑动窗口范式的过程。

2.1 滑动窗口范式示意图

(3) 构建图像金字塔

在实际的图像中,受人与摄像头的距离变化的影响,图像中的人脸有大有小,那么如何让观察窗口自动的适应人脸的大小呢?一种方法是使用多个大小不同的矩形框,依次从图像的左上角滑动到右下角。还有一种方法是将图像放缩到不同的大小,用相同的矩形框不断的去扫描。但是第一种方法并不高效,实际处理过程中选择第二种方法。图像经过第二种方法处理后会有不同大小的图像输出,将图像由大到小依次往上堆叠,就组成了一个类似金字塔的结构,所以这一种操作构建图像金字塔。图像处理中最常见利用图像金字塔产生一系列不同分辨率的图像,在不同的尺度空间去寻找图像对应的特征,从而保证图像的特征一直存在。2.2为图像金字塔示意图。

2.2 图像金字塔

(4) 积分图与Haar特征

积分图像上某一点的值为原图对应位置上左上角所有像素之和。2.3为积分图计算过程。

2.3 积分图的计算

Haar特征在观察窗口的某个位置取一个矩形小块,然后将这个矩形小块划分为白色和黑色区域,Haar特征值就是用白色区域的像素值和减去黑色区域像素值和。积分图能够求图像中任意区域像素值的和,而与区域的大小无关。2.4以及式2.12.22.3是利用积分图来计算一个观察窗口中的一种形式的Haar特征值。

 2.4 Haar特征计算

                                  (2.1)

                                   (2.2)

                                                          (2.3)

(5) LBP特征

LBPLocal Binary Pattern),即局部二值模式。常用于人脸识别、纹理检测、对象检测等。图2.53*3 LBP的计算方法。以中心像素的灰度值为阈值,从3*3窗口的左上角开始将围绕中心像素的8个像素的灰度值按顺时针方向依次与中心像素作比较,若大于中心像素则对应位置赋值为1,否则赋值为0。围绕中心的8个像素的权重从左上角开始,顺时针方向,依次为:1248163264128,这样能够保证最后赋值的中心像素不超过255。那么中心像素经LBP计算后为:Pattern = 10001111LBP = 1+16+32+64+128=241C = (6+7+9+8+7)/5-(5+2+1)/3=4.7(对比度)。

2.5 LBP特征的计算

(6) Adaboost算法与级联分类器

强分类器是由多个弱分类器(一般为单层决策树类型)通过某种方式组合起来形成的(例如线性组合),这些强分类器由Adaboost算法训练得到,而级联分类器是由多个强分类器串联起来的。图2.6为级联分类器的结构框图。

2.6 级联分类器结构

(7) VJ算法的实现与检测结果

采用VS+OpenCV编写C++程序加载Haar/LBP模型可以进行人脸检测。检测结果如图2.72.82.92.102.112.12所示。

         

2.7 Haar近距离检测                 2.8 Haar远距离检测

         

2.9 LBP近距离检测                2.10 LBP远距离检测

       

2.11 Haar非限制性场景检测           2.12 LBP非限制性场景检测

3. MTCNN人脸检测算法

   20164月,中国科学院深圳先进技术研究院在arXiv上发表《Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks[4],该论文提出了MTCNN人脸检测算法。这里的Multi-task意思为将人脸检测(分类)和人脸框位置矫正(回归)以及人脸关键点定位、姿态等属性的检测相结合。Cascaded Convolutional Networks意为级联的卷积网络。Alignment意为人脸对齐。下面介绍一下该算法的基本思想。

(1) 图像的卷积

与一维信号卷积相类似,图像的卷积为二维信号的卷积,分为 方向,本质上是乘积和。3.1图像卷积计算公式。

                                                              (3.1)

其中 为图像的卷积值, 为原图像, 为图像上对应位置的系数(权重),若卷积核大小为3*3 为中心坐标,那么 。图3.1为图像卷积的示意图。

3.1 图像的卷积

那么中心像素经卷积运算后为:

0.05*1+0.08*2+0.12*3+0.15*4+0.2*5+0.15*6+0.12*7+0.08*8+0.05*9=5

如果需要计算整幅图像的卷积就需要不断的移动卷积核的位置,就像第二章所说的移动滑窗范式那样覆盖整个图像区域。而MTCNN就是利用卷积运算来替代传统的滑动窗口来获取观察窗口或者候选窗口的。

(2) 卷积神经网络

CNN(Convolutional Neural Networks),卷积神经网络的基本结构如图3.2所示

3.2 卷积神经网络

输入层(Input Layer):卷积神经网络的输入可以直接是一张图片。如果输入是一张32*32,通道数为3的彩色图片,那么CNN的输入层大小为3维矩阵32*32*3。如果是灰度图像,那么输入层大小为32*32*1

卷积层(Convolutional Layer):卷积层是卷积神经网络最重要的部分,最重要的特点是共享卷积参数,使得图像的内容不受位置的影响[5]。与全连接神经网络不同(每个节点都和上一层的节点相连,Full Connection,简称FC),卷积神经网路的一个节点只和上一层中的一块节点相连接,这个块的大小可以是3*3或者5*5。卷积层可以将输入抽象到更高的层次。一般来说,经过卷积层之后的矩阵数据的深度会加深。对于一个2*2*3的图像块经过卷积操作后输出为1*1*6的计算公式[5]3.2

                                              (3.2)

为输出矩阵, 为输出节点的深度数,这里范围为0-5 为图像的像素, 为第 层坐标 上的权重, 为第 层结果的偏置, 为激活函数,一般用来去线性化。激活函数一般有:ReLU函数 sigmoid函数 tanh函数 [5]

池化层(Pooling Layer):池化层的最大特点是不改变矩阵的深度,而缩小矩阵的大小[5]。通过池化层可以大幅度减少矩阵中的数据,本质上达到提取特征的目的,减少数据间的冗余。池化层一般采用与输出节点一样的深度,大小一般为2*23*3,步进为1或者2,类型一般为取区域最大值(max pooling)或者区域平均值(average pooling)[5]

全连接层(FullConnectionLayer):经过卷积层与池化层的高度抽象后,数据量大大减小。这时可以通过全连接层进行分类。

Softmax层:通过Softmax层,可以得到当前样本属于不同类别的概率情况。Softmax公式[5]3.3

                                                              (3.3)

其中 为神经网络的输出, 为神经网络输出的个数, 为神经网络输出的序号

(3) MTCNN网络结构与算法流程

3.3MTCNN网络结构。

3.3 MTCNN网络结构

MTCNN的基本流程

(a) 对图像进行放缩生成不同大小的图片,构建图像金字塔;

(b) 利用P-Net网络生成候选窗口和边框回归向量,通过利用边框回归的方法来矫正这些候选窗口,同时使用非极大值抑制合并重叠的窗口[6]

(c) 使用R-Net网络改善候选窗口。将通过P-Net的窗口输入到R-Net中拒绝掉大部分窗口,同时使用边框回归矫正窗口和非极大值抑制合并窗口[6]

(d) 使用O-Net网络输出人脸框和5个特征点的位置。

(4) MTCNN算法的实现与检测结果

软件测试环境:Ubuntu16.04+CUDA9.0+OpenCV3.4.0+Caffe+Python2.7

硬件测试环境:Intel i7 4710HQ+GTX860M(4G) +16G内存;

源码地址:https://github.com/DuinoDu/mtcnn

检测结果如图3.43.53.6

         

3.4 MTCNN近距离检测               3.5 MTCNN远距离检测

3.6 非限制性场景检测

4.VJMTCNN算法对比与总结

VJMTCNN测试结果可得:

基于Haar特征的人脸检测在远距离的环境下比LBP的人脸检测更容易检测出人脸,即召回率高于LBP的人脸检测。

尽管HaarLBP的召回率高,但是在误检数方面高于LBP

检测速度方面,LBP的检测速度要快于Haar的检测速度,但差距不大。

在测试非限制性场景视频时,发现HaarLBP的检测结果不太理想,几乎检测不出人脸,并且此时基于Haar的人脸检测有较高的误检数。

基于深度学习的MTCNN人脸检测在召回率方面要远远高于基于HaarLBP的人脸检测,无论是远近图像还是非限制性场景的图像。

在误检数方面,MTCNN存在一定的误检数,主要在于类似人脸的区域发生误检以及图像模糊的区域会发生边框重叠现象,但是低于Haar特征的误检数。

CPU模式下,MTCNN的人脸检测速度要低于HaarLBP的人脸检测的速度,但是差别不是特别明显。但是在GPU模式下,MTCNN的帧率是CPU模式下的5-7倍,也远远高于HaarLBP特征的人脸检测,表现出极高的人脸检测性能。

因此在实际应用中可以采用以下方案:

固定场景近距离人脸检测,硬件资源要求低,可以采用Haar特征或者LBP特征的人脸检测。

固定场景远距离人脸检测,硬件资源要求低,可以采用Haar特征人脸检测。

非限制性场景,复杂光线,远近距离检测人脸,优先采用基于深度学习的人脸检测算法,如MTCNN或者通用目标检测的Fast RCNNFaster RCNNYOLOSSD等方法。

需进一步研究的问题:

由于本文采用测试的样本为自制的视频与相关图片,没有采用FDDB或者WID斗牛R FAC斗牛这样的标准数据集,所以无法定量的评估人脸检测器的召回率、误检数等指标。所以下一步的研究需要利用标准数据集进行测试,从而给出更准确的结果。

HaarLBP的人脸检测使用的是OpenCV扩展模块提供的已经训练好的模型,该模型在实际使用过程中检测速度低、而且无法检测侧脸和一些遮挡脸的情况,所以下面还需要研究如何训练自己的分类模型以及裁剪模型使之效率更高。

基于深度学习的MTCNN算法采用论文作者提供的源代码,只有测试代码,没有训练学习的代码,下面还需要进一步研究如何自己编写Caffe或者Tensorflow的程序来实现测试功能,或者进一步编写训练学习代码训练自己的模型。

参考文献

[1] 毓晋.图像处理和分析技术(第三版)[M].北京:高等教育出版社,2014:1-2.

[2] 罗广涛. MP斗牛G-4/H.264视频转码关键技术研究[D].西安电子科技大学,2009.

[3] 邬书哲.长文干货!走近人脸检测:VJ到深度学习(上)[斗牛B/OL]. https://mp.weixin./s?__biz=MzI1NT斗牛4NTUwOQ==&mid=402840844&idx=1&sn=25cce8cdd0d6403943074bce18949b61&scene=4#wechat_redirect,2016-04-12.

[4] Zhang K, Zhang Z, Li Z, et al. Joint Face Detection and Alignment Using Multitask Cascaded Convolutional Networks[J]. I斗牛斗牛斗牛 Signal Processing Letters, 2016, 23(10):1499-1503.

[5] 才云科技Caicloud,郑泽宇,顾思宇.TensorFlow:实战Google深度学习框架[M].北京:电子工业出版社,2017:69-155.

[6] flyingzhao.人脸检测:MTCNN[斗牛B/OL].https://blog.csdn.net/tinyzhao/article/details/53236191,2016-11-19.

Research and Implementation of video-based face detection method

斗牛lectronic and Information 斗牛ngineering 201410324 HaiTao Wen

Instructor LvCheng Wang (Lecturer)

Abstract:

This paper does some research on the method of face detection: the classical VJ face detection algorithm and the MTCNN face detection algorithm which based on deep learning. To understand which algorithm is suitable for which scene, compare two algorithms’ advantages and disadvantages on 3 different scenes. The main contents are as follows:

Study on the process of VJ algorithm, the basic principle of sliding window paradigm, the method of constructing the image of pyramid, the method of computing integration diagram and the Haar and LBP features, the principle of Adaboost and the parts of the cascaded classifier. And use VS, OpenCV and C++ to realize the function of face detection. And then compare the performance of VJ algorithm on 3 scenes: close, far and the unrestricted scenes.

Study on the method of computing convolution on the image, the parts of convolutional neural networks and the structure and process of MTCNN. And then use Caffe to realize the function of face detection on Ubuntu system. Finally, test the MTCNN algorithm on the same 3 scenes.

Lastly, get the conclusion about which algorithm is suitable for which scene: (1) Haar and LBP features are suitable for face detection in a fixed and close scene, low hardware resource requirement. (2) Haar features is suitable for face detection in a fixed and far scene, low hardware resource requirement. (3) It is best to use MTCNN which is based on deep learning to detect face in unrestricted, complex, far and close scenes.

Key words: Face detection, VJ algorithm, MTCNN algorithm

Copyright ? 2017   Powered by    兰州交通大学网上斗牛   All Rightseserved.

地址:兰州交通大学电信学院办公楼    邮编:730070