人工智能大规模人脸识别一种快速准确的人脸检测,识别和验证系统

辽宁在线 2019-04-01

摘要 - 大量注释数据集的可用性和可承受的计算能力使CNN在各种物体检测和识别基准上的性能得到了显着改善。这些以及对深度学习方法的更好理解,也提高了机器对面部理解的能力。 CNN能够检测面部,定位面部地标,估计姿势,并识别无约束图像和视频中的面部。在本文中,我们描述了无约束人脸识别和验证的深度学习管道的细节,该管道在几个基准数据集上实现了最先进的性能。我们提出了一种新颖的人脸探测器,深金字塔单镜面探测器(DPSSD),它能够快速检测大尺度变化的面(特别是微小的面)。我们提供自动人脸识别中涉及的各种模块的设计细节:人脸检测,地标定位和对齐以及人脸识别/验证。我们提供了所提出的人脸探测器在具有挑战性的无约束人脸检测数据集上的评估结果。然后,我们提出了IARPA Janus基准测试A,B和C(IJB-A,IJB-B,IJB-C)和Janus Challenge Set 5(CS5)的实验结果。

索引术语 - 面部识别,面部识别/验证,面部检测,深度学习

简介,面部分析是一个活跃的研究领域。它涉及提取诸如地标,姿势,表情,性别,年龄,身份等信息。它有多种应用,包括执法,设备上的主动认证,付款的面部生物识别,自动驾驶车辆等。

面部识别和验证系统通常具有三个模块。首先,需要用于定位图像中的面部的面部检测器。人脸检测器的理想特性是对姿势,照明和比例变化的鲁棒性。此外,良好的人脸检测器应该能够输出一致且良好定位的边界框。第二个模块定位面部标志,如眼睛中心,鼻尖,嘴角,耳垂尖端等。这些标志用于对齐面部,减轻面内旋转和缩放的影响。第三,特征提取器在高维描述符中对身份信息进行编码。然后使用这些描述符来计算两个面之间的相似性得分。有效的特征提取器需要对管道中先前步骤引入的误差具有鲁棒性:面部检测,地标定位和面部对齐。

CNN已被证明对几种计算机视觉任务非常有效,如图像分类[1] - [3]和物体检测[4] - [6]。深度CNN(DCNN)是高度非线性回归量,因为存在具有非线性激活的分层卷积层。 DCNN已被用作所有三个自动面部识别模块的构建模块:人脸检测[7] - [10],面部关键点定位[8],[10],[11],以及面部验证/识别[12],[13]不断增加的计算能力和大数据集的可用性,如CASIA-WebFace [14],UMDFaces [15],[16],MegaFace [17],[18] ], 女士-Celeb-1M [19],VGGFace [20],[21]和WIDER Face [22]已经从DCNN中获得了显着的性能提升。这是因为这些数据集中存在的面部的姿势,光照和比例变化很大。

本文作出了两个主要贡献:1)我们提出了一种新颖的人脸检测器,它可以快速检测出大规模变化的人脸。 2)提出一种基于DCNN的自动人脸识别管道,该管道在最近的几个基准测试中取得了令人瞩目的成果。我们要求我们的面部检测器既快速又准确,以便构建有效的端到端人脸识别管道。因此,我们设计了一个面部检测器,它在网络的单次通过中提供输出。为了检测不同尺度的面部,我们利用DCNN中存在的内置金字塔层次结构,而不是创建图像金字塔。这进一步减少了处理时间。我们开发用于检测微小面孔的特定锚定滤波器我们应用自下而上的方法来合并上下文信息,方法是将较深层中的要素添加到较浅层中的要素中。所提出的面部检测器被称为深金字塔单发人脸检测器(DPSSD)。

一旦我们从DPSSD获得面部检测,我们就会遵循用于本地化地标并提取深层身份特征以进行人脸识别和验证的管道。所呈现的识别流水线的每个模块(面部检测,界标定位和特征提取)基于DCNN模型。我们使用CNN集合作为特征提取器,并将来自DCNN的特征组合成面部的最终特征表示。为了定位面部对齐的面部标志,我们使用[8]中提出的DCNN架构。我们详细描述了每个模块,并讨论了它们在具有挑战性的IJB-A,IJB-B,IJB-C(面部样本见图1)和IARPA Janus Challenge Set 5(CS5)数据集上的表现。我们还概述了该领域的最新方法,并讨论了它们的优缺点。

相关研究,我们简要概述了面部识别/验证管道的不同模块的最新工作。我们首先讨论最近的人脸检测方法。然后我们考虑第二个模块:面部关键点检测。最后,我们讨论了几个关于特征学习的最新着作,并总结了许多关于面部验证和识别的最新工作。

2.1面部检测

人脸检测是任何人脸识别/验证管道的第一步。面部检测算法通常以边界框的形式输出给定输入图像中所有面部的位置。面部检测器需要对姿势,照明,视点,表情,比例,肤色,某些视点,伪装,化妆等的变化具有鲁棒性。最近基于DCNN的人脸检测器受到一般情况的启发物体检测方法。 CNN检测器可以分为两个子类:1)基于区域,2)基于滑动窗口。

基于区域的方法首先生成集合对象提议并使用CNN分类器将每个提议分类为面部或非面部。第一步通常是现成的提议生成器,如选择性搜索[26]。最近使用这种方法的一些探测器是HyperFace [10]和All-in-One Face [8]。快速R-CNN [5]使用区域提议网络(RPN),而不是通过通用方法生成对象提议。 Jiang和Learned-Miller在[27]中使用了更快的R-CNN网络来检测人脸。同样,[28]提出了一种基于Faster-RCNN框架的多任务人脸检测器。陈等人。 [29]训练了一个多任务RPN用于面部检测和面部关键点定位。这使他们能够减少多余的面孔提案并提高面子提案的质量。单级无头人脸检测仪[7]也基于RPN。

基于滑动窗口的方法以给定比例输出特征图中的每个位置处的面部检测。这些检测由面部检测得分和边界框组成。该方法不依赖于单独的提议生成步骤,因此比基于区域的方法快得多。在一些方法[9],[30]中,通过在多个尺度上创建图像金字塔来完成多尺度检测。同样,李等人。 [31]使用级联架构来实现多种分辨率。单次检测器(SSD)[6]也是基于多尺度滑动窗口的物体检测器。然而,它不是使用对象金字塔进行多尺度处理,而是利用深度CNN的层次性质。像ScaleFace [32]和S3FD [33]这样的方法使用类似的技术进行人脸检测。

除了改进的检测算法的发展之外,大量注释数据集的可用性促进了人脸检测性能的快速进步。 FDDB[34]由2,845个图像组成,共包含5,171个面。 MALF [35]数据集在规模上类似,其包含5,250个具有11,931个面的图像。一个更大的数据集是WIDER Face [22]。它包含超过32,000个图像,其中包含表情,比例,姿势,光照等方面变化较大的面部。大多数状态 - 已经在WIDER Face数据集上训练了最先进的人脸检测器。此数据集包含许多小脸。上面提到的几个面部检测器仍然很难在图像中找到这些小面孔。胡尔等人[36]表明,背景对于检测这些面部非常重要。

2014年之前开发的面部检测方法的广泛调查可以在[37]中找到。陈等人。 [12]讨论了面部关联在视频中进行人脸识别的重要性。关联是在不同视频帧中找到不同面部之间的对应关系的过程。

2.2面部关键点检测和头部方向

面部关键点包括眼角,鼻尖,耳垂,嘴角等。这些是面部对齐所必需的,这对于面部识别/验证很重要[15]。头部姿势是另一个重要的信息。关键点定位方法的综合调查可以在[38]和[39]中找到。

面部关键点检测方法可分为两种类型:基于模型和基于回归。基于模型的方法在训练期间创建形状的表示,并在测试期间使用它来拟合面部。基于模型的方法包括PIFA [40]和3DDFA [41]。 Jourabloo等。 [42]认为面部对齐是一个密集的三维模型拟合问题,并使用一系列基于DCNN的回归量来估计相机投影矩阵和三维形状参数。 Antonakos等。 [43]使用补丁之间的多个基于图形的成对正态分布建模出现。

基于级联回归的方法直接将图像外观映射到目标输出。张等人。 [44]使用了几个连续堆叠的自动编码器网络的级联。该方法使用后续网络改进从前几个堆叠的自动编码器网络获得的粗略位置。 Bulat等人。还首先粗略地定位每个面部标志,然后细化检测结果。同样,Sun等人提出的方法。 [45]在级联的每个级别融合来自多个网络的输出。结合多个回归量的输出的另一种方法是级联组合学习(CCL)[46]。库马尔等人。 [47]提出了一种用于关键点估计和姿态预测的迭代方法。 Trigeorgis等[48]提出的方法联合训练了卷积递归神经网络结构。在另一项工作中,Kumar等人。 [11]开发了一个用于关键点定位的单一CNN。

300 Faces In-the-Wild数据库(300W)[49]是对不同面部检测方法进行公平比较的基准。它结合并扩展了以前可用的几个数据集,如LFPW,Helen,AFW,Ibug [38]和600个测试图像。

一些作品还使用通用3D人脸模型进行面部对齐/正面化[50]。然而,这些方法的优点是有限的,并且通过多任务学习(MTL)方法可以容易地改善它们的性能。

2.3面部识别和验证

在本节中,我们简要介绍了有关基于CNN的人脸识别和验证的最新工作。有兴趣的读者可以参考[51],了解在广泛采用CNN之前开发的方法的摘要。

面部识别/验证系统有两个主要部分:

1)健壮的面部表示; 2)分类器(在识别的情况下)或相似性度量(用于验证)。

2.3.1稳健的人脸表示

深度网络能够在使用大型数据集进行训练时学习判别性功能。黄等人。 [52]使用基于局部受限制的玻尔兹曼机器的卷积深度信念网络来学习人脸表征。他们的模型在LFW数据集上取得了良好的性能,而不需要大的带注释的面部数据集。

另一方面,Taigman等人。使用专有的面部数据集,由超过4,000个身份的四百万个面组成,以训练九层深度网络(DeepFace)[53]。他们没有使用标准卷积层,而是使用了几个本地连接的层而没有重量共享。同样,FaceNet [54]在大约2亿个身份的大约2亿张图像的数据集上进行了训练。它使用粗略对齐的匹配/非匹配面部补丁的三元组直接优化嵌入本身。

DeepID框架[55] - [57]利用了比DeepFace或FaceNet更小的深度卷积网络集合。每个DCNN由四个卷积层组成,并且训练有大约200,000个大约10,000个身份的图像。使用一组模型和大量不同的身份帮助DeepID学习辨别面部表示,使其能够在LFW数据集上实现超人脸验证性能。

CASIA-WebFace数据集[14]由约来自10,575名受试者的50万张面部图像用于训练具有500万参数的DCNN。该模型取得了令人满意的性能,该数据集被广泛用于培训CNN。已经遵循其他大规模数据集,例如VGGFace [20],VGGFace2 [21],UMDFaces [15],[16]等。

Parkhi等人。 [20]使用VGGFace数据集训练基于VGGNet [58]的CNN进行面部验证。该模型在LFW [59]和YTF [60]数据集上都取得了有竞争力的结果。

更大的数据集和更困难的评估指标需要表示不变的姿势,年龄,照明等.AbdAl- mageed等。 [61]训练单独的DCNN模型用于正面,半轮廓和填充轮廓面作为处理姿势变化的方法。在轮廓中添加更多面部图像到训练集是另一种思考鲁棒性的方法。 Masi等人。 使用3D变形模型来增强CASIA-WebFace数据集。 这具有不需要大规模人类注释努力的附加优点。最广泛使用的softmax-loss通常不会导致面部表示的集中聚类。 已经提出了若干修改和替换以实现增强的面部表示。 丁等人。 [62]提出了一种新的三重损失功能,它可以实现基于视频的人脸识别的最先进性能。 温等人。 [63]基于每个类的质心,对softmax损失添加了正则化约束。 刘等人。 [64]提出了基于修改的softmax的角度损失。 这导致了一种有辨别力的面部表示,其针对最常用的相似性度量进行了优化。

2.3.2严格的度量学习

学习分类器或相似性度量是获得强大的面部特征的下一步。对于面部验证,属于同一个人的两个面部的特征应该是相似的,而属于不同个体的面部的特征应该是不同的。最近的一些工作提出了在训练损失函数或网络设计中编码这一要求的方法。

第一种方法使用成对的图像来训练特征嵌入,其中正对更接近,而负对更远。胡等人。 [69]使用深度神经网络来学习判别度量。施罗夫等人。 [54],Parkhi等。 [20],和斯瓦米等人。 [25]使用三元组丢失将DCNN特征嵌入到判别子空间中。这导致了面部验证的性能改进。

另一种方法是修改常用的交叉熵损失以结合判别约束。温等人。 [63]介绍了学习判别性面部嵌入的中心损失。 Ranjan等。提出了晶体损耗[24],它在softmax损耗之前使用了特征归一化和缩放。类似地,DeepVisage [70]使用批量标准化的特殊情况对特征进行标准化。 SphereFace [64]提出角度softmax,它产生角度判别特征。 CosFace[71] L2对特征和权重进行归一化以去除径向变化并引入余弦边界项以最大化角空间中的决策余量。

2.3.3实施

获得有辨别力和强大的特征对于面部验证和识别都很重要。对于面部验证,给定一对面部,使用相似性度量来比较两个面部特征。 L2距离和余弦相似度是用于比较两个面部特征表示的两个最常用的度量。为了识别,将给定探头面的特征与大型画廊进行比较,并且最相似的画廊面给出探测面的身份。为了获得稳健的特征,可以使用DCNN的集合来提取不同的人脸表示,这些表示可以稍后融合成单个鲁棒表示[55] - [57],[68]。

深度网络非常耗费数据。有几个公开可用的面部数据集可用于训练深度网络以进行面部识别和验证。表1列出了其中一些数据集的详细信息。

结论:在本文中,我们概述了基于深度CNN的现代人脸识别系统。我们讨论了人脸识别管道的所有部分以及这些管道中的最新技术。我们还介绍了我们的人脸识别系统的细节,该系统使用两个网络的集合进行特征表示。我们的管道中的面部检测和关键点定位使用一体化CNN完成。我们讨论了培训和数据集

我们系统的详细信息以及它如何与现有的人脸识别工作相关联。我们为四个具有挑战性的数据集提供了我们系统的结果,即IJB-A,IJB-B,IJB-C和IARPA Janus Challenge Set 5(CS5)。我们展示了我们的基于集合的系统实现了近乎最先进的结果。

但是,即使是现在,仍有几个问题尚待解决。需要开发基于DCNN的人脸识别系统的理论理解。鉴于用于训练这些网络的众多损失函数,我们需要开发一个统一的框架,可以将所有这些函数放在彼此的上下文中。域适应和数据集偏差也是当前面部识别系统的问题。这些系统通常在数据集上进行训练,并且适用于类似的测试集。但是,在一个域上训练的网络对其他域的性能不佳。我们使用不同数据集的组合训练我们的系统。这使得训练有素的模型更加健壮。培训CNN目前需要几个小时到几天。需要开发更有效的CNN架构和实现,其可以更快地训练。