【Face Detection】基于mtcnn的人脸框稳定算法

本文为博主Hans原创文章,未经博主Hans允许不得转载。http://blog.csdn.net/renhanchi https://blog.csdn.net/renhanchi/article/details/81668987

前言

基于深度卷积神经网络的人脸检测算法得到的人脸框一般普遍存在较大抖动的现象,在某些应用上这种抖动会带来很大的影响。这篇文章分享一下我对人脸框稳定的一些处理方法。

正文

现在移动端上十有八九都是在使用mtcnn做人脸检测,我也是基于这个网络结构做的。其实哪怕用其他方法,比如SSD、yolo,做人脸检测也可以,只需要将人脸框再过一遍mtcnn中的Onet输出人脸五个特征点就好。

具体思路很简单,Onet输出人脸五个特征点,取鼻头坐标,做N帧平均。然后基于鼻头坐标取固定长宽的人脸框,再对当前帧和上一帧人脸框做IOU,如果结果大于IOUrate,使用上一帧人脸框坐标为当前帧的人脸框坐标。再对人脸框坐标做N帧平均。这样最后得到的人脸框基本没有抖动,而且人脸移动后,框也会相对平滑的跟着移动。

解释一下,IOU可以有效抑制框的小幅度抖动,但人脸移动的时候,IOU会引起框的大步跨越式移动。所以后面又加了个N帧平均,就是为了让框能平滑的移动。前面对鼻头做N帧平均,我考虑的是为了尽量降低引起IOU跨越移动的情况。

代码地址:https://github.com/HandsomeHans/Stabilized-Face-Detection-Bbox

 

caffe+gpu+python组合,这个算法速度也一般般吧。我1080Ti也要100ms一帧。

C++、ncnn、cpu组合就快多了,一帧10ms左右。cpu是Intel® Xeon(R) CPU E5-2673 v3

你可能感兴趣的:(Face,Detection)