APP下载

基于卡尔曼滤波改进的MTCNN网络人脸检测算法

2020-02-27魏荣耀鲍士兼赵成林许方敏

无线电工程 2020年3期
关键词:中心点卡尔曼滤波人脸

魏荣耀,鲍士兼,赵成林,许方敏

(1.北京邮电大学 信息与通信工程学院,北京 100876;2.中国国际工程咨询有限公司,北京 100048)

0 引言

人脸检测的发展主要分为非深度学习和深度学习2个阶段。在非深度学习阶段针对特定目的提出经典检测算法。例如,2001年CVPR的Viola-Jones(VJ)[1-2]、CVPR 2005 HOG + SVM[3]和TPAMI 2010 DPM[4]。深度学习阶段经典检测算法被提出用于通用目的,例如Faster-RCNN[5]、R-FCN系列[6]、YOLO[7-8]和SSD[9-10]系列。其中RCNN系列的优点是在准确性方面具有高性能,缺点是速度低,不能满足GPU上的实时要求,而SSD和YOLO系列的优势在于GPU上快速而实时,缺点是密集和小目标的检测性能相对较差,而人脸在实际场景下属于小目标。

大多数当前的人脸检测算法是基于全图像扫描的单帧图像检测。视频中的人脸检测将视频分解为单帧图像,检测每帧中的人脸最后将所有帧合并为视频。然而,视频中帧与帧之间的人脸信息有很大的相关性。 在上述步骤中有许多冗余计算,因此正确地改进这些步骤已成为热门研究方向。

本文提出的算法基于多任务级联卷积网络(MTCNN)[11]和卡尔曼滤波算法。视频中的人脸运动可以被假设为线性运动,通过使用卡尔曼滤波器[12-13]来记录和预测人脸中心点位置。将卡尔曼滤波器校正的人脸中心点用作最终检测位置,边界框的长度和宽度仍然使用原始回归值。同时,根据卡尔曼滤波器的预测人脸中心点,截取原图像中以预测点为中心的一定区域作为下一帧检测的推荐区域,在下一帧中将该区域用MTCNN的R-net和O-net进行局部区域人脸检测,同时每隔一定时间使用MTCNN进行全图扫描来重置检测流程。

1 相关算法

1.1 MTCNN网络结构

MTCNN网络是常用的人脸检测网络,与非深度学习模型和诸如Faster-RCNN和YOLO之类的深度学习模型相比,该网络可以在仅有CPU的情况下实现实时性和准确性,是一个三级级联模型。给定输入图片,将预测图片分别依次输入P-net,R-net中对候选框进行粗选和微调,最后由O-net输出检测框位置的回归值和分类。其中3个子网络的特性如下:

① P-net:12×12,负责粗选得到候选框,功能有分类和回归。

② R-net:24×24,负责筛选P-Net的粗筛结果,并微调box使得更加准确和过滤虚警,功能有分类和回归。

③ O-net:48×48,负责最后的筛选判定,并微调box,回归得到关键点的位置,功能有分类、回归和关键点。

训练时输入图像大小为网络指定的大小,例如12×12,而因为P-net没有全连接层,是全卷积的网络,所以预测识别时没有尺寸要求,P-net可以对任意输入尺寸进行预测得到多个边界框和置信度,通过阈值过滤即可完成候选框提取过程,而该网络因为结构小,所以效率非常高,因此被工业界使用作为人脸检测的主流算法。

MTCNN网络的体系结构如图1所示。

其中2个任务如下:

① 人脸分类:学习目标被定为二分类问题。 使用每个样本xi的交叉熵损失:

(1)

② 边界框回归:对于每个候选窗口,预测它与最近的真实标注位置之间的偏移(即边界框的左上角和右下角)。 学习目标被表述为回归问题,对每个样本xi使用欧几里德损失:

(2)

1.2 卡尔曼滤波器原理

卡尔曼滤波器是一种广泛使用的跟踪算法,它基于先前的状态和当前的测量值给出预测值,与其他方法相比,卡尔曼滤波器用于在视频跟踪中对移动目标进行更好的位置估计,因此它非常适合跟踪视频中的移动人脸中心点。

实际情况下的人脸中心点运动通常是线性运动,而卡尔曼滤波是线性系统下具有良好预测性能的滤波器。假设nk是观测噪声,因此可以根据以下公式分别构造状态方程和系统的观测方程:

xk=Fkxk-1+vk-1,

(3)

zk=Hkxk+nk,

(4)

式中,xk∈n为时刻k下的系统状态向量;zk∈n为时刻k下的观测向量;vk-1为时刻k-1下的系统状态噪声;Fk为时刻k下的状态转移矩阵;Hk为时刻k下的观测矩阵。

根据实现过程中卡尔曼滤波器的特点,结合贝叶斯估计中的预测和更新,可以实现卡尔曼滤波器预测和更新模型。有2个预测方程和3个更新模型的方程:

(5)

(6)

(7)

(8)

(9)

式(7)、式(8)和式(9)分别是增益系数方程、状态更新方程和误差协方差更新方程。Rk为k时刻的测量噪声协方差矩阵。

观测更新过程首先计算卡尔曼的增益,然后导出观测向量zk,然后根据公式得到状态的后验估计,最后计算状态估计的后验协方差。

卡尔曼滤波器可以滤除运动目标环境中的一些干扰噪声,校正目标的位置和速度并预测下一时刻目标的位置,从而缩小目标的搜索区域。 基于此特征,本文算法将MTCNN网络与卡尔曼滤波器相结合,以提高噪声视频中人脸检测的准确性和速度。

2 联合卡尔曼滤波和MTCNN网络的人脸检测算法

本文基于卡尔曼滤波器,它被添加到MTCNN网络检测过程中,由卡尔曼滤波器[14]预测下一帧中最可能的人脸中心点位置,以该预测点作为中心按比例截取原图像区域,作为推荐区域输入MTCNN R-net和O-net网络中检测人脸,同时每隔一定时间利用MTCNN进行全图扫描来重置流程。结果表明,该算法可以提高噪声视频中人脸检测的准确性和速度[15]。

对于组合卡尔曼滤波的算法,目标检测的问题实际上成为从目标的当前帧中的位置信息获得运动信息的问题。运动信息包含移动目标的位置和速度之类的信息。因此,该信息可以被视为卡尔曼滤波器的状态向量。因此,只要假设合理的假设,就可以完全建立卡尔曼滤波器。

MTCNN网络检测图片并在时间k给出面部边界框的4个坐标值,将其定义为(left,top,right,bottom)。可以根据这4个值计算出人脸中心点的位置。xk是人脸中心点的横坐标,yk是面部中心点的纵坐标:

(10)

(11)

z(k)=[xck,yck]。

(12)

根据牛顿运动定理,可以得出:

(13)

(14)

因此,状态模型和观察模型可以建立如下:

① 状态模型:

xk=Fkxk-1+vk-1=

(15)

式中,t表示2个相邻帧之间的时间间隔。

② 观测模型:

zk=Hkxk+nk=

(16)

很容易看出系统的状态转移矩阵和系统的观测矩阵:

(17)

vk-1和nk实际上是上面提到的加速度at和高斯噪声。假设t的初始值是1,可以根据经验设置σv=σn=5。同时,将初始时间的状态向量设置为X0=[x0,y0,0,0]T,其中,x0,y0是初始位置人脸中心点的坐标。对于视频图像中的人脸运动,在成功建立相应的卡尔曼滤波器模型之后,卡尔曼滤波器预测和观测更新过程可以很好地集成到MTCNN算法中。具有卡尔曼滤波器融合的MTCNN算法的具体流程如图2所示。

图2 融合算法流程Fig.2 Fusion algorithm flow

算法的具体步骤如下:

① 使用MTCNN检测整个图像,找到人脸中心点并根据人脸中心点的位置信息创建卡尔曼滤波器。

② 使用卡尔曼滤波器矫正观测值,同时预测下一帧的人脸中心点的位置,并将预测点作为中心点,按比例截取24×24图片区域作为推荐区域,将推荐区域输入MTCNN R-net和O-net进行检测。

③ 使用MTCNN R-net和O-net检测到的人脸中心点位置作为新的观测值,更新卡尔曼滤波器,并使用卡尔曼滤波器输出校正后的人脸中心位置,在图像中画出人脸边界框。

④ 检查检测到的图像是否超过N帧,如果超过N帧,则删除卡尔曼滤波器并返回①,否则返回②。

⑤ 重复上述步骤,直到视频结束。

3 实验验证

基于上述算法,由于需要根据预测点生成推荐区域,而预测点的位置大大影响了后续再检测时人脸位置的准确率,所以首先需要验证算法在有噪声视频中人脸中心点位置的预测作用,模拟视频图像中人脸的运动,并将MTCNN直接检测到的人脸中心点轨迹与本文算法的轨迹进行比较。

在仿真场景,人脸以特定速度和随机角度偏转在图像中移动。在图3中,横坐标和纵坐标分别代表图像中的长和宽方向的像素值,实线表示由MTCNN网络检测到的人脸中心点的移动轨迹。长虚线表示由本算法输出的人脸中心点的运动轨迹。短虚线表示人脸中心点真实的运动轨迹。

图3 模拟人脸中心点在图像中的运动轨迹Fig.3 Simulate the movement of the center point of the face in the image

从图3可以看出,人脸的小角度抖动或者视频噪声干扰将导致MTCNN在面部中心点检测中产生非常大的抖动,从而在视频中的面部边界框中产生严重的抖动从而影响下一帧推荐区域的选取。但经过算法检测,脸部的中心点移动得非常平滑,接近真实的脸部中心点轨迹,可以利用该特性将预测点作为推荐区域的中心点,从而生成下一帧检测的推荐区域。这证明本文算法中卡尔曼滤波器在嘈杂视频中可以对脸部中心下一帧可能的位置进行很好的预测。

图4还模拟了视频中的静止中心点,横轴为帧数,纵轴表示偏差值,当然,这种偏差在实际场景中会更大。面部中心点的检测位置可能由于视频中的光变化和一些其他干扰因素(例如噪声)而改变。然而,在通过卡尔曼滤波器校正之后,在一定数量的帧之后,人脸中心点的位置趋于稳定。

图4 视频帧中静止人脸中心点检测的效果Fig.4 The effect of detecting the center point of still face in video frame

经过上述2个仿真实验,可以认为该融合算法由卡尔曼滤波器提供的预测中心点和以该预测点为中心推荐区域是可以作为后续推荐输入使用的。

本文算法也在实际视频中进行了测试,其中每过10帧重新进行全图检测。原始测试视频添加了不同强度的高斯噪声。实验计算了测试视频中的平均峰值信噪比(PSNR)[16-17]以及在不同噪声条件下记录的准确率和FPS。人脸检测的评价标准为人脸偏转小于90°认为存在人脸,在测试视频中,人脸进行移动并且进行随机的角度偏转。本实验的硬件条件为Intel CPU I7-7700HQ,配备NVidia 1050Ti,CUDA8.0,图像的宽和高分别为640和480。不同算法对视频的测试结果如图5和图6所示。

图5 算法FPS对比Fig.5 Algorithm FPS comparison

图6 算法准确率对比Fig.6 Algorithm accuracy comparison

实验测试了5种算法,并对测试视频中不同算法的准确度和FPS进行了统计。根据图4,可以获得以下结果:使用诸如yolov3-tiny[18]之类的模型可以实现非常高的FPS,但是在5种算法中,精度最低。虽然YOLOV3和SSD模型在高PSNR值下是准确的,但由于这2种模型需要更多的模型参数,因此FPS低于MTCNN和本文算法。相比于直接使用三级级联的MTCNN网络,本文算法在有噪声的环境中具有更高的FPS和准确率,当PSNR值越小时,算法的准确率高于其他算法,但随着PSNR值的增加(这意味着高质量的视频),算法和MTCNN原网络的精确度差异变小。从对比图中可以得出结论,算法可以在一定噪声的环境中平衡准确率和实时性。

4 结束语

本文结合卡尔曼滤波器,提供了一种改进的MTCNN检测算法,该算法在噪声测试视频中具有良好的性能。该算法以MTCNN为观测器,通过卡尔曼滤波器校正当前观测值并预测下一帧人脸中心点的位置,然后通过预测位置生成推荐区域,在下一帧中使用MTCNN R-net和O-net进行局部检测,避免全图检测的冗余计算,将原来的三级级联网络简化为卡尔曼滤波和二级级联网络的计算,通过实验测试在不同加噪情况下,该算法可有效平衡噪声视频人脸检测的准确率和速度性能。

猜你喜欢

中心点卡尔曼滤波人脸
基于深度强化学习与扩展卡尔曼滤波相结合的交通信号灯配时方法
有特点的人脸
一起学画人脸
脉冲星方位误差估计的两步卡尔曼滤波算法
一种基于标准差的K-medoids聚类算法
Scratch 3.9更新了什么?
如何设置造型中心点?
卡尔曼滤波在信号跟踪系统伺服控制中的应用设计
三国漫——人脸解锁
基于递推更新卡尔曼滤波的磁偶极子目标跟踪