CPU 实时人脸检测,各种朝向都逃不过

鉴于一般的 CNN 难以处理旋转的图像,中国科学院计算技术研究所的研究者采用一种渐进的方法校准人脸朝向,并精确检测其位置与角度。他们最近放出了该项研究的源代码,并表示这种人脸检测模型可以在 CPU 上快速进行实时推断。本文介绍了这种具有旋转不变性的神经网络,并展示了对应的 CPU 实时人脸检测项目。

作为 CV 重要的组成部分,人脸检测旨在利用卷积神经网络从人脸图像中抽取足够的信息。然而虽然 CNN 能高效处理图像数据,但大多数情况下它的设计都是针对一般图像处理任务。卷积网络本身并不会太考虑旋转等情况,即使考虑也只是通过数据增强稍微优化一点。在这个项目及对应的论文中,作者提出并实现了一种完全旋转平面(RIP)不变的人脸检测。如下图所示它能检测出人脸的正确朝向,并从任何 RIP 角度捕获面部检测框。

如上所示很多计算机视觉任务或目标检测需要处理不同的旋转方向,而为了解决这样的问题,Xuepeng Shi 等研究者提出了一种用于旋转不变性人脸检测的 PCN(progressive calibration networks)。这种 PCN 能逐步校准每个候选面部的 PIP 方向为垂直方向,并更好地从非面部图像中区分出面部图像。

  • 论文:Real-Time Rotation-Invariant Face Detection with Progressive Calibration Networks 

  • 论文地址:https://arxiv.org/pdf/1804.06039.pdf

具体而言,PCN 会抽选识别候选面部图像块,并将朝下的图像块翻转至正向,这样就会减半 RIP 的角度范围,即从 [−180° , 180°] 到 [−90° , 90° ]。然后旋转过的面部图像块会进一步区分朝向并校准到垂直向的 [−45° , 45° ] 范围,这样又会减半 RIP 的角度范围。最后,PCN 会分辨到底这些候选图像块是不是人脸,并预测出精确的 RIP 角度。

通过将校准过程分割为几个渐进的步骤,且在早期校准步骤只预测粗略的朝向,PCN 最后能实现精确的校准。此外,每一个校准步骤可以简单地旋转 - 90°、90° 和 180°,因此额外的计算量非常低,这也就是为什么该检测项目能在 CPU 上实时运行的重要原因。通过在逐渐降低的 RIP 范围内执行二元分类(是人脸或不是人脸),PCN 能在 360° RIP 旋转角度内准确地检测到人脸,而本项目重点就是实现这样旋转不变的人脸检测器。

原论文图 3:uepeng Shi 等研究者提出的 PCN 概览,它会逐渐降低旋转的角度范围,并最终预测人脸及其旋转的角度。

 这种能处理不同旋转方向的人脸检测器有非常高的准确率,因为它会先将候选人脸旋转至正向再预测。此外,这种方法同样有非常小的计算量,该 GitHub 项目表示它甚至可以在 CPU 上实时检测人脸。

PCN 多角度实时人脸检测项目地址:https://github.com/Jack-CV/PCN-FaceDetection

下图展示了 PCN 项目在不同情境下的检测效果,我们会发现即使面部的朝向多种多样,它也能非常准确地检测出来。

PCN 的目标是在准确地检测人脸及朝向的情况下尽可能降低计算力。Xuepeng Shi 等研究者同样在标准 VGA 图像(640x480)上对比了 PCN 与其它旋转不变的人脸检测器。这些检测器分别在带有 3.4GHz CPU 和 GTX Titan X GPU 的台式电脑上进行测试,速度测试结果与召回率都展示在下表,更详细的内容请查看原论文。值得注意的是,将方形结果转换为矩形或椭圆型有助于更好地拟合标注值,因此能实现更高的准确率,不过下表并没有做这样的转换。

项目使用方法

根据 GitHub 项目所示,目前该项目所测试的环境主要在 Linux,且需要 Caffe 和 OpenCV(2.4.10 或其它兼容版本)的支持。因为该项目采用的是 Caffe 框架,所以小编放弃测试了~

以下是一些简要的配置,首先可以设置人脸的最小检测尺寸(size >= 20):

  • detector.SetMinFaceSize(size);

配置图像金字塔的缩放因子(1.4 <= factor <= 1.6):

  • detector.SetImagePyramidScaleFactor(factor);

配置人脸检测的置信度阈值(0 <= thresh1, thresh2, thresh3 <= 1):

  • detector.SetScoreThresh(thresh1, thresh2, thresh3);

是否平滑人脸检测框(smooth = true or false),推荐在视频中使用,它可以获得更加稳定的人脸检测框。

  • detector.SetVideoSmooth(smooth);

读者可查看 picture.cpp 和 video.cpp 查看细节,如果你们想在 FDDB 上复现结果,可以直接运行 fddb.cpp。我们可以在 FDDB 中旋转图像以获得 FDDB-left、FDDB-right 和 FDDB-down,然后分别测试它们。具体而编译并运行:

cd $PCN_ROOT/code# You should set "CAFFEROOT" in lib.sh, compile.sh, and run.sh first. 
sh lib.sh
sh compile.sh picture/video/fddb
sh run.sh picture/video/fddb
工程人脸检测计算机视觉卷积神经网络
2
相关数据
计算机视觉技术
Computer Vision

计算机视觉(CV)是指机器感知环境的能力。这一技术类别中的经典任务有图像形成、图像处理、图像提取和图像的三维推理。目标识别和面部识别也是很重要的研究领域。

卷积神经网络技术
Convolutional neural network

卷积神经网路(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。卷积神经网路由一个或多个卷积层和顶端的全连通层(对应经典的神经网路)组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网路能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网路在图像和语音识别方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他深度、前馈神经网路,卷积神经网路需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。 卷积网络是一种专门用于处理具有已知的、网格状拓扑的数据的神经网络。例如时间序列数据,它可以被认为是以一定时间间隔采样的一维网格,又如图像数据,其可以被认为是二维像素网格。

图像处理技术
Image processing

图像处理是指对图像进行分析、加工和处理,使其满足视觉、心理或其他要求的技术。 图像处理是信号处理在图像领域上的一个应用。 目前大多数的图像均是以数字形式存储,因而图像处理很多情况下指数字图像处理。

OpenCV技术
OpenCV

OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库。OpenCV是由英特尔公司发起并参与开发,以BSD许可证授权发行,可以在商业和研究领域中免费使用。OpenCV可用于开发实时的图像处理、计算机视觉以及模式识别程序。

准确率技术
Accuracy

分类模型的正确预测所占的比例。在多类别分类中,准确率的定义为:正确的预测数/样本总数。 在二元分类中,准确率的定义为:(真正例数+真负例数)/样本总数

推荐文章