本篇文章3930字,读完约10分钟

引言:区分不同的人是许多智能系统的基本能力。所谓的人脸识别技术也是为此目的而开发的,它通过人脸的光学成像来感知和识别人。经过几十年的R&D和积累,特别是近年来深度学习技术的出现,人脸识别取得了很大的进步,并越来越多地应用于安全、金融、教育和社会保障等领域,成为计算机视觉领域最成功的分支之一。

如何判断人脸识别是否准确?SeetaFace助你一臂之力|AI科技评论

然而,人脸识别还不是一项完全成熟的技术,离公众期望的综合应用还很远,还需要学术界和工业界的共同努力。因此,整个人脸识别社区都需要一个基线系统,显然基线系统的水平将极大地影响该领域的发展水平。然而,令人尴尬的是,在这个领域还没有一套完全开源的基准人脸识别系统。最新的开源seetaface人脸识别引擎可能会改变这种情况。该引擎代码是由中国科学院计算技术研究所研究员山领导的人脸识别研究小组开发的。代码基于c++实现,不依赖任何第三方库函数。开源协议是bsd-2,它可以被学术界和工业界免费使用。

如何判断人脸识别是否准确?SeetaFace助你一臂之力|AI科技评论

Seetaface人脸识别引擎包括构建全自动人脸识别系统所需的三个核心模块,即:

人脸检测模块参见人脸检测

请参见面部特征点定位模块的表面对齐

人脸特征提取和比较模块,用于人脸识别

其中,人脸检测模块seetaface detection采用传统人工特征与mlp相结合的级联结构,在fddb中实现了84.4%的召回率(100个误检),并且可以在单个i7 cpu上实时处理vga分辨率图像。

如何判断人脸识别是否准确?SeetaFace助你一臂之力|AI科技评论

Seetaface alignment是一个面部特征点定位模块,它使用级联深度模型(堆栈自编码网络)来定位五个关键特征点(眼心、鼻尖和嘴角)的位置,并在aflw数据库上实现了最先进的精度。单个i7 cpu的定位速度超过200fps。

如何判断人脸识别是否准确?SeetaFace助你一臂之力|AI科技评论

人脸识别模块seetaface identification采用9层卷积神经网络(cnn)提取人脸特征,在lfw数据库上达到97.1%的准确率(注意:在自动识别的情况下,seet face人脸检测和seet face人脸特征点定位作为前端),特征提取速度为每幅图像120毫秒(在单个i7 cpu上)。

如何判断人脸识别是否准确?SeetaFace助你一臂之力|AI科技评论

让我们简要了解以上三个核心模块。更多详情,请参考相关阅读资料。

|人脸检测参见人脸检测

人脸检测模块seetaface检测是基于经典级联结构和多层神经网络相结合的人脸检测方法。漏斗结构级联(fust)是专门为多姿态人脸检测而设计的,它引入了从粗到细的设计概念,兼顾了速度和精度之间的平衡。如图1所示,fust级联结构在顶部由用于不同姿态的几个快速lab级联分类器组成,随后是基于surf特征的几个mlp级联结构,最后使用统一的mlp级联结构(也基于surf特征)来处理所有姿态的候选窗口,显示出具有宽上窄下的漏斗形状。自上而下,各级分类器及其所采用的特征逐渐变得复杂,从而可以保留人脸窗口,排除越来越难以从人脸中区分的非人脸候选窗口。

如何判断人脸识别是否准确?SeetaFace助你一臂之力|AI科技评论

图1。Seetaface人脸检测模块采用的fust漏斗级联结构

与seetaface检测的开源代码相匹配的是一个准正面人脸检测模型(用约20万张人脸图像训练),可以实现准正面人脸的精确检测(旋转角度在45度左右,但对姿态偏转较大的人脸也有一定的检测能力)。图2给出了一些检测结果的例子(注意:在测试期间,图像金字塔的下采样比率被设置为0.8,滑动步长被设置为4和2,并且最小面被设置为20x20)

如何判断人脸识别是否准确?SeetaFace助你一臂之力|AI科技评论

Seetaface检测器在人脸检测领域最重要的评价集fddb上进行评价,当输出100个错误检测时(fppi=0.035),召回率达到84.4%,当输出1000个错误检测时,召回率达到88.0%。图3显示了fddb上seetaface检测器离散分数的roc曲线,并将其与其他已发表的学术成果(从fddb官方网站获得)进行了比较。不难看出,尽管seetaface人脸检测器目前并不是最精确的,但它在学术成果上仍然具有很强的竞争力,完全可以满足大多数人脸识别系统的需求。

如何判断人脸识别是否准确?SeetaFace助你一臂之力|AI科技评论

图2。人脸检测结果示例

图3。fddb上Seetaface探测器的roc曲线

另外,与其他算法相比,seetaface检测器在速度上有一定的优势。对于640x480 vga图像,检测速度的比较如表1所示。seetaface的速度是在一个3.40ghz的i7-3770 cpu上测量的,而cascade cnn的速度是在一个2.0ghz的cpu上测量的(引自原文)。每种方法在gpu上的速度都是在nvidia titan黑色gpu上测量的。

如何判断人脸识别是否准确?SeetaFace助你一臂之力|AI科技评论

表1 .塞塔夫斯探测器的探测速度及其与其他方法的比较

注意:在测试过程中,表面检测器的滑动窗口步长设置为4,图像金字塔的下采样步长设置为0.8。而级联cnn中图像金字塔的下采样步长为0.7(对应的比例因子为1.414)。

如何判断人脸识别是否准确?SeetaFace助你一臂之力|AI科技评论

|定位要素点请参见平面对齐

人脸特征点定位(人脸对齐)在人脸识别、人脸表情识别、人脸动画合成等人脸分析任务中起着非常重要的作用。由于姿态、表情、光照和遮挡的影响,真实场景中的人脸对齐是一个非常困难的问题。从形式上来说,这个问题可以看作是一个复杂的非线性映射,从面部外观到面部形状。

如何判断人脸识别是否准确?SeetaFace助你一臂之力|AI科技评论

因此,seetaface对齐采用了我们提出的由粗到细的自动编码网络(cfan)来解决这一复杂的非线性映射过程。如图4所示,cfan级联多级堆叠自编码器网络,其中每一级描绘从面部外观到面部形状的部分非线性映射。具体而言,输入面部区域(由面部检测模块获得),并且第一级自编码网络从面部的低分辨率版本直接且快速地估计近似面部形状s0。

如何判断人脸识别是否准确?SeetaFace助你一臂之力|AI科技评论

然后,提高输入人脸图像的分辨率,提取当前人脸形状s0的每个特征点位置的局部特征(相应提高分辨率),并输入到下一个自编码网络中,进一步优化人脸对齐结果。类似地,通过级联多个堆栈自编码网络,人脸对齐结果在越来越高分辨率的人脸图像上逐渐优化。

如何判断人脸识别是否准确?SeetaFace助你一臂之力|AI科技评论

图4。基于粗到精自编码网络的实时人脸对齐方法

这种开源的seetaface对齐基于上述的cfan方法实现了五个面部关键特征点(眼睛中心、鼻尖和两个嘴角)的精确定位。该训练集包括23,000多张人脸图像(标记为5分)。应该注意的是,为了加速,在开源实现中cfan级联的数量减少到两个级别,而不损失准确性,因此在单个英特尔i7-3770 (3.4 ghz cpu)上每个人脸的处理速度可以达到5毫秒(不包括人脸检测时间)。

如何判断人脸识别是否准确?SeetaFace助你一臂之力|AI科技评论

图5给出了使用seetaface alignment开源引擎定位人脸五个点的效果示例,表明它对表情、姿势和肤色具有很好的鲁棒性。对aflw数据集的定量评估和比较如图6所示,其中平均定位误差根据双眼之间的距离进行归一化。不难看出,表面对准已经达到了最先进的定位效果

如何判断人脸识别是否准确?SeetaFace助你一臂之力|AI科技评论

图5。参见表面对齐定位结果示例

图6。一系列数据集上的定位误差和空间对准的比较

其中le:左眼,re:右眼,n:鼻尖,lm:左嘴角,rm:右嘴角

人脸识别中的特征提取和比较

人脸识别本质上是计算两幅图像中人脸的相似度,大致可以分为:

注册阶段(类比相识过程)输入系统

识别阶段(即再见时的识别过程)输入

因此,如图7所示,全自动人脸识别系统在完成人脸检测和人脸对齐两个步骤后,进入第三个核心步骤:人脸特征提取和比较。这一阶段也是经过深入学习后最高级的模块。目前,大多数优秀的人脸识别算法使用卷积神经网络来学习特征提取器(即图7中的函数f)。

如何判断人脸识别是否准确?SeetaFace助你一臂之力|AI科技评论

(1)人脸检测

(2)关键点定位和面对齐

(3)人脸特征提取、比较和判断

图7。人脸识别系统的核心流程

Seetaface的开源人脸特征提取模块也是基于卷积神经网络的。具体来说,它实现了深度卷积神经网络viplfacenet,如:具有7个卷积层和2个完全连接层的dcnn中所述。它是由辛顿教授的学生亚历克斯·克里热夫斯基(alex krizhevsky)直接修改的,相当于2012年设计的阿列克谢网(alexnet)。

如何判断人脸识别是否准确?SeetaFace助你一臂之力|AI科技评论

如表2所示,与alexnet相比,viplfacenet将5x5卷积核分成两层3x3卷积核,从而在不增加计算量的情况下增加了网络深度;Viplfacenet还减少了每个卷积层的内核数量和fc2层的节点数量。

如何判断人脸识别是否准确?SeetaFace助你一臂之力|AI科技评论

同时,通过引入快速归一化层(fnl),加快了viplfacenet的收敛速度,在一定程度上提高了模型的泛化能力。测试表明,在相同的训练集下,lfw测试集上viplfacenet的识别错误率比alexnet低40%,训练和测试时间分别是alexnet的20%和60%。

如何判断人脸识别是否准确?SeetaFace助你一臂之力|AI科技评论

表2 .Seetaface标识采用的viplfacenet和alexnet网络结构的比较

使用开源seetaface识别码发布的人脸识别模型是通过使用140万张人脸图像进行训练的,这些图像来自大约16000人,包括东方人也人和西方人。人脸特征直接从viplfacenet fc2层的2048个节点输出,相似度可以通过余弦计算,然后进行阈值比较(验证应用)或排序(识别应用)。

如何判断人脸识别是否准确?SeetaFace助你一臂之力|AI科技评论

该引擎在大多数人脸识别场景中具有良好的性能。例如,在lfw标准图像限制测试协议下,seet face检测器和seet face对齐用于检测和对齐人脸,seet face标识用于提取和比较特征。识别准确率可达97.1%(请注意:这是系统自动运行的结果。对于少数无法检测人脸的图像,请切掉中间区域并将其输入到人脸对齐模块)。就速度而言,在单个英特尔i7-3770 cpu上,通过开源代码提取人脸特征的时间约为120毫秒(不包括人脸检测和特征点定位的时间)。

如何判断人脸识别是否准确?SeetaFace助你一臂之力|AI科技评论

|相关阅读:

目前,seetaface开源人脸识别引擎已经在github上发布,供国内外同行和业界使用。该项目的网站是http://github/seet face

如何判断人脸识别是否准确?SeetaFace助你一臂之力|AI科技评论

图片来自矩阵

来源:罗盘报中文网

标题:如何判断人脸识别是否准确?SeetaFace助你一臂之力|AI科技评论

地址:http://www.lzn4.com/lpbxw/11401.html