【论文翻译】OpenFace: A general-purpose face recognition library with mobile applications

【翻译时间】2018.09.14

【完成时间】2018.09.15

【论文翻译】OpenFace: A general-purpose face recognition library with mobile applications

【原文链接】http://elijah.cs.cmu.edu/DOCS/CMU-CS-16-118.pdf

【中英对比】

                                   题目: OpenFaces:一个具有移动应用的通用人脸识别库。

Abstract

   

     相机在物联网(物联网)中无处不在,可以利用人脸识别技术来改善背景。当今公开提供的人脸识别系统和最先进的私人人脸识别系统之间存在着很大的精度差距。本文提出了一种弥补这一精度差距的人脸识别库。我们展示了openace在lfw基准上提供的接近人类( near-human accuracy)的准确性,并给出了一种新的移动场景分类基准。本文针对OpenFaces的使用感兴趣的非专家,并对我们使用的深层神经网络技术做了简单的介绍。

     2015年10月,我们在Apache2.0许可下作为开源库发布了OpenFaces。可在以下网址查阅:http://cmusatyalab.github.io/openface/

关键词:人脸识别,深度学习,机器学习,计算机视觉,神经网络,移动计算。

1 Introduction

    

      摄像机非常便宜,而且很容易集成到今天的移动和静态设备中,比如监控摄像机、自动摄像头、警用摄像头、笔记本电脑、智能手机、GoPro和谷歌眼镜。IDEO摄像机可以用来改善移动场景中的场景。一个人的身份在人类环境中占很大的比例,可以调节人们的说话方式和行为方式。同样,识别人是移动计算中的一种原始操作,它为诸如认知辅助、社交事件、会议中的说话人注释以及可穿戴设备中的感兴趣者识别等应用程序添加了上下文。

    

    最先进的人脸识别主要是由工业和政府规模的数据集控制。在这个空间中的示例应用程序包括通过安装的摄像机识别感兴趣的人,以及在图片中标记用户的朋友。培训通常是一种脱机的批处理操作,并生成一个可以在数百毫秒内预测的模型。在这些场景中训练新的分类模型的时间并不是一个主要的焦点,因为分类的人员集合不会经常变化。  

   

   移动场景跨越不同的问题空间,其中移动用户可能有执行实时人脸识别的设备。移动用户的上下文和他们周围的人提供关于他们可能看到的人的信息。如果用户参加会议,系统应迅速学会识别其他与会者。系统中的许多人都是短暂的,用户只需要在短时间内识别他们。训练新的分类模型的时间现在变得很重要,因为用户的上下文会发生变化,并且系统会添加和删除人员。

   

   为了探索瞬时人脸识别和移动人脸识别,我们创建了一个通用的人脸识别库-openfaces。我们的实验表明,OpenFaces比以前的开源项目提供了更高的准确性,并且非常适合于移动场景。本文讨论了OpenFaces的设计、实现和评估,并给出了与瞬态移动应用相关的实证结果。

2 Background and Related Work

  •  2.1 Face Recognition

          人脸识别自20世纪70年代以来一直是一个活跃的研究课题。给定具有多个人脸的输入图像,人脸识别系统通常首先运行人脸检测以隔离人脸。对每个人脸进行预处理,得到一个低维表示(或嵌入)。低维表示对于有效的分类是非常重要的。人脸识别面临挑战,因为人脸不是一个僵化的物体,并且可以从人脸的许多不同角度获取图像。人脸表示法在区分不同人之间的人际形象差异时,需要对年龄、表情和造型等个人内部形象的变化具有弹性。[Jeb95].

   

 

    Jafri和arabnia[JAR 09]提供了截至2009年的人脸识别技术的全面调查。综上所述,人脸识别研究可以分为基于特征和整体接近的研究。在人脸识别中最早的工作是基于特征的,并且寻求基于距离、面积和角度的比率来明确定义低维的人脸表示[kan73]。对于直观的特征空间和技术,显式定义的人脸表示是可取的。然而,在实践中,显式定义的表示并不准确。后来的工作试图使用从统计和人工智能(AI)产生的整体方法,从面部图像数据集中学习并取得良好效果。统计技术,如主成分分析(PCA)[HOT333 ]代表面部作为特征向量的组合[SK8]。特征脸[tp 91]和渔民脸[bhk 97]是基于PCA的人脸识别中具有里程碑意义的技术。Lawrence等人[lgtb 97]介绍了一种利用卷积神经网络对人脸图像进行分类的人工智能技术。

 

  当今表现最好的人脸识别技术是基于卷积神经网络的。 Facebook的DeepFace[TYRW14]和Google的FaceNet[SKP15]取得最好的准确率。然而,这些基于神经网络的深层技术是使用包含数百万张社交媒体图像的私有数据集进行培训的,这些数据集比现有的研究数据集大一个数量级。

   2.2 Face Recognition with Neural Networks

   

   本节更深入地介绍了在Facebook的DeepFace( TYRW14)和Google的FaceNet[skp 15]系统中使用的利用神经网络进行人脸识别的方法,这些技术使用在OpenFaces中。本节旨在概述这一领域中最具影响力的两项工作,而不是对基于神经网络的人脸识别的蓬勃发展的领域进行全面的概述。深层神经网络在人脸识别方面的其他显著成就包括视觉几何组(Vgg)人脸描述符[pvz 15]和减轻卷积神经网络(CNNS)[whs 15],它们也发布了代码。

  

  前馈神经网络由许多功能组合或层组成,后面是一个损失函数L,如图1所示。损失函数测量神经网络对数据的建模效果,例如神经网络对图像分类的准确性。每个层I都由θi参数化,它可以是向量或矩阵。常见的层操作是:

  •  在输入特征图上滑动内核的空间卷积

  • 所有输入单元的加权和的线性层或完全连通层,以及

  • 池化层在空间区域上取最大、平均或欧几里得范数。

    

   

   

    这些操作通常伴随着非线性激活函数,如整流线性单元(Relu),其由f(x)=max { 0,x}定义。神经网络训练是一个(非凸)优化问题,它找到一个最小化(或最大化)L的θ。对于可微层,∂l/∂θI可以用反向传播来计算,然后用一阶方法求解优化问题,该方法基于∂l/∂θI迭代地向最优值方向发展。更深入地介绍现代深层神经网络,请参阅[bgc 15]。

       

     

    图2显示了用神经网络进行人脸识别的逻辑流程。人脸检测方法有很多可供选择的方法,因为它是计算机视觉领域另一个活跃的研究课题。一旦检测到人脸,系统就会对图像中的每个人脸进行预处理,以创建一个归一化和固定大小的输入到神经网络。被预处理的图像是高维的,分类器无法直接接受输入。神经网络被用作特征提取器,用于生成一个表征一个人面部特征的低维表示。低维表示是关键,因此它可以有效地用于筛选器或聚类技术。

    DeepFace首先对人脸进行三维建模预处理,使输入图像规范化,即使图像是从另一个角度拍摄的,它也是作为正面人脸出现的。DeepFace将分类定义为一个具有Softmax函数的完全连接的神经网络层,这使得网络的输出成为一个归一化的概率分布。神经网络预测某些概率分布的ˆp,而损失函数L衡量ˆp如何很好地预测人的实际身份i(形式上,这是用交叉熵损失l(ˆp,i)=−logˆpi完成的。)。形式上,这是用交叉熵损失l(ˆp,i)=−logˆpi完成的。一旦神经网络这一大集合的人脸图像中训练完成,最终分类层被移除,并且输出的前一个完全连接的层作为一个低维人脸表示法。

        

    

    通常,人脸识别应用程序寻求一种理想的低维表示法,这种表示法可以很好地推广到神经网络没有训练过的新面孔。 DeepFace的方法是可行的,但是表示的结果是对他们的训练数据进行高精度分类训练的结果。这种方法的缺点是表示很难使用,因为同一人的脸不一定是聚类的,这是分类算法可以利用的。FaceNet的三重态损失函数直接定义在表示上。图3展示了FaceNet的训练过程如何学习聚类同一个人的面部表示。单位超球面是一个高维球面,使得每个点与原点有1的距离。将嵌入约束到单位超球面提供了一个空间的结构,否则是无界的。FaceNet的创新来自四个不同的因素:(A)三重态损失(B)三重态选择过程,(C)1亿到2亿标记图像的培训,(D)(不讨论)大规模实验,以找到网络架构。作为参考,我们在附录a中正式定义了FaceNet的三重态损失。

          

  • 2.3 Face Recognition in Mobile Computing

  

   移动计算社区研究并改进了移动场景中现成的人脸识别技术。由于缺乏可用性,这些研究通常使用的技术的精度比先进水平低数量级。大豆等人[SMF 12]研究如何在移动设备、Cloudlet和云之间划分基于特征脸的人脸识别系统。hsu等人[hc 15]研究基于云的人脸识别服务的准确性,因为无人机对人的距离和角度是不同的。此外,针对移动设备的高效GPU架构也在兴起,比如Nvidia的Jetsont TK1。

   

    这些研究和研究方向是对本文研究的补充。我们不研究执行技术对不同体系结构的影响,比如在嵌入式gpu上或卸载到代理上。相反,我们进行的性能实验表明,与其他技术相比,OpenFaces的执行时间非常适合移动场景。

3 Design and Implementation(设计与实现

   

       我们对构建OpenFaces感兴趣的是在移动场景中,用户的实时人脸识别系统会根据上下文进行调整。我们的关键设计考虑是一个精度高、训练和预测次数少的系统。

     

      OpenFaces提供了如图2所示的逻辑流程,以获得图像中人脸的低维人脸表示。图4突出显示了OpenFaces的实现。神经网络训练和推理部分使用TORCH[ckf 11]、Lua[idfcf 96]和luajit[pal08]。我们的python[vrdj 95]库使用numpy[oli06]用于数组和线性代数运算,OpenCV[b 00]用于计算机视觉原语,而Scikit-Learning[PVG 11]用于分类。我们还提供使用matplotlib[h 07]的绘图脚本。项目结构与神经网络体系结构无关,我们目前使用的是FaceNet的体系结构[skp 15]。我们使用dlib的[kin09]预先训练的人脸检测器,以获得比OpenCV检测器更高的精度。我们用gcc[sta89]编译本地c代码,用nvidia的livm编译cuda代码[la04]nvc。

  • 3.1 Preprocessing: Alignment with an Affine Transformation(预处理:用仿射变换对齐

     

      人脸检测部分返回在图像中可以在不同的姿态和光照条件下围绕面部的包围框的列表。直接使用包围盒作为神经网络输入的一个潜在问题是,人脸可能在不同的方向或在不同的光照条件下进行观察。FaceNet可以使用大型训练数据集来处理这一问题,但对于我们较小的数据集来说,一种启发式方法是通过标准化人脸来缩小输入空间的大小,使它们的眼睛、鼻子和嘴在每幅图像中的相似位置出现。人脸规范化是计算机视觉领域的一个活跃的研究课题。许多现代技术,如Deep-Face[TYRW14]将脸正面变成三维模型,因此图像看起来就像脸正直接朝摄像机看一样。OpenFaces采用简单的二维仿射变换,使眼睛和鼻子出现在神经网络输入的相似位置。

   

     图5演示了仿射变换是如何使人脸规范化的。这68个地标是用dlib的脸地标检测器[kin09]检测出来的,这是Kazemi等人[ks 14]的一个实现。给定输入的脸,我们的仿射变换使眼角和鼻子接近平均位置。仿射变换还可以调整图像大小,并将图像调整到地标边缘,因此神经网络的输入图像为96×96像素。

  

  • 3.2 Training the Face Representation Neural Network(人脸表示神经网络的训练

       

       训练神经网络需要大量的数据。FaceNet[skp 15]使用私有数据集(100 m-200 m图像),DeepFace[暴政14]使用440万张图像的私有数据集(DeepFace[TYRW14]。OpenFaces使用500 K图像训练,结合两个最大的标记人脸识别数据集Casia-WebFaces[ylll14]和facescrb[nw 14]。

    

        图2中的神经网络组件将预处理的(对齐的)图像映射到低维表示。任务的最佳神经网络结构是计算机视觉中一个尚未解决和蓬勃发展的研究课题。OpenFaces使用附录c中介绍的FaceNet的nn4网络的修改版本.nn4是基于GoogleNet[SLJ 15]的体系结构和我们改进的nn4。Small2变量减少了我们的较小数据集的参数。OpenFaces使用第2.2节中定义的FaceNet三重态损失,因此网络提供了单位超球面上的嵌入,欧几里得距离表示相似性。

     

       图6显示了我们如何训练网络。我们将单个网络中的独特图像映射为三元组。通过到唯一图像的映射,将三重态损耗的梯度反传回来。在每一次小批处理中,我们从数据集中的Q人中抽取每人最多p张的图像,并将所有m≈pq张图像通过网络发送到GPU上的一次前向传递,以获得m个嵌入。我们目前使用p=20和q=15。我们采用所有的锚-正对来获得三重态,计算三重态损失,并将导数映射回原始图像进行反向网络传递。如果在给定的锚-正对的α边距中找不到负图像,我们就不使用它。

       附录b提供了对我们最初的网络培训技术的描述,比这里介绍的技术(时间)要长一个数量级。

4 Evaluation(评估)

    

   

     我们的评价研究了OpenFace的准确性和性能,并与其他人脸识别技术进行了比较。LFW数据集[hrblm 07]是人脸识别研究中的一个标准基准,4.1节给出了LFW验证实验的 OpenFace精度。SEC-tion 4.2提出了一种新的分类基准,它使用LFW数据集来处理瞬态移动场景。

    在本节的所有实验都使用nn4.small2.v1OpenFace模型,它在附录C中进行描述。我们的神经网络训练数据中的身份与LFW恒等式不重叠。

  • 4.1 LFW Verification

       

       LFW验证实验[hrblm 07]预测图像对是否是同一个人。图7显示了示例对和精度。LFW有来自5 750人的13 233张图像,该实验提供了6 000对分割成10 folds的图像。 

          受限的协议的精度是通过对10个实验的平均精度来得到的。将数据分成10个等尺寸的fold,每个实验对9个folds进行训练,并在剩余的测试folds上计算精度。通过计算对和标号对的欧氏平方距离,将在阈值下的作为同一人,并将阈值以上的人作为不同的人,得到了OpenFace的结果。训练 fold上的最佳阈值作为其余 fold的阈值。在十分之九的实验中,最佳阈值为0.99。图7将OpenFaces的准确性与其他技术进行了比较,与现代的基于深层神经网络的技术不同,特征面的结果不需要外部数据。

            

      验证阈值可以更改并绘制为(接收机操作特性)Roc曲线,如图8所示。Roc曲线显示了TPR和FPR之间的权衡。完美的Roc曲线到处都有1的TPR,这就是当今最先进的工业技术接近的地方。曲线下面积(AUC)是分类器对同一人随机选择的人脸进行排序的概率高于不同人随机选择的人脸的概率。每条曲线都是通过对每一次数据进行阈值处理得到的曲线的平均值。为说明这些实验的可变性,还包括了OpenFace folds。OpenBR曲线来自它们的LFW脚本,其他的来自LFW结果页面。.Kumar等人[kbbn 09]提供了人类水平的绩效结果。裁剪版本围绕图像中的人脸对LFW图像进行裁剪,以减少上下文信息。FaceNet曲线尚未公布。

    这些结果表明,OpenFace的准确性接近于目前最先进的深度学习技术的准确性.

  • 4.2 LFW Classification

  

    许多使用人脸识别的场景都涉及到对一个人的身份进行分类,而不仅仅是两张脸是相同的。这一部分给出了一种在lfw图像子集上测量分类精度的实验。我们给出了OpenCV的[b00]人脸识别技术(特征脸[tp 91]、渔人脸[bhk 97]、局部二值模式直方图(Lbph)[ahp 04])与OpenFace的比较结果。

   

    图9概述了实验设置。Person i对应于LFW中具有第i多图像的人。然后,从第一个n个人中抽取20幅图像。如果一个人没有提供20张图片,他们所有的图像都会被使用。然后,通过将90%的图像放置在训练集中,10%的图像放置在测试集中,随机对采样数据进行10次分割。对于不同的实验,随机数种子应该初始化为相同的值。在训练集上训练分类器,并通过预测测试集中的身份来获得精度。

     

      测量训练分类器的运行时性能和预测新图像的归属是移动性的一个重要考虑因素。在可穿戴设备上,预测人脸归属的性能很重要,因此当用户看另一个人时不会出现明显的滞后。在我们的分析中,没有将人脸检测作为预测时间的一部分,因为所有技术都是相同的。预测时间包括预处理和预测时间。

     用户还可能希望在他们的识别系统中添加或删除身份,以应对短暂的情况。这个基准研究重新训练一个分类器需要多长时间。我们假设面部和身份数据是已经收集和预处理的数据,并且用户有能力选择一个身份子集进行分类。训练时间只反映训练分类器的时间。

  

    OpenCV的所有技术都具有相同的接口。预处理将图像转换为灰度。在这种背景下,OpenFaces的预处理意味着对齐的仿射变换,然后是为了获得128维表示而向前通过神经网络。OpenFace型分类采用的是正则化权为1的线性svm,与其它正则化权值和RBF核一致或优于其它正则化权值和RBF核。

    图10显示了我们在8核心英特尔Xeon e5-1630 [email protected] CPU和Nvidia Tesla K40 GPU上对10到100人进行分类的实验结果。图10a显示,增加更多的人会降低精确度,而OpenFace处总是有很大幅度的最高精度。图10b显示,增加更多的人会增加训练时间。OpenFaces的svm一直是训练时间最快的。这里只显示了OpenFaces的一个结果,因为这些数字不包括神经网络表示预处理时间,而svm库只使用CPU。图10c显示了每个图像的预测时间。特征脸、渔夫面和lbph的执行时间随着添加更多的脸而略有增加,而openfaces的预测时间则保持不变。OpenFaces的预处理涉及到一种神经网络向前传递,它比PCA和基于直方图的技术花费更多的时间。在GPU上执行而不是在CPU上执行提供了轻微的性能改进。

                             

                           

5 Conclusion

    

     本文提出了一种人脸识别库-OpenFaces。OpenFaces是在apache2.0license下开源的,可以从http://cmusatyalab.github.io/openface/获得。我们训练了一个关于可供研究的最大数据集的网络,它比DeepFace[暴政14]小一个数量级,比FaceNet[skp 15](已经出版的最先进的私人数据集)小两个数量级。尽管我们的训练数据集较小,但我们在LFW验证基准上显示了竞争的准确性和性能结果。介绍了一种LFW分类基准,并在此基础上给出了具有竞争力的性能测试结果。

    我们打算保持OpenFaces作为一个库,保持更新,使用最新的深层神经网络体系结构和技术的人脸识别技术。

Acknowledgments

   我们感谢有洞察力的讨论和强有力的贡献,使开放的面孔成为可能。HervéBredin帮助我们在仿射变换后去除多余的人脸检测。火炬生态系统和社区提供了许多神经网络组件,包括Alfredo Canziani对FaceNet丢失功能的实现5。Nicholas lèonard很快将我们对dpnn 6的请求合并为dpnn 6,它修改了FaceNet结构的初始层。钦塔拉提供了很有帮助的火炬建议,戴维斯·金帮助了民族解放运动。我们还感谢卓晨、基容哈、哈利德·埃尔加扎尔、扬·哈克斯、胡文鲁、J·济科·科尔特、帕德马纳汉·皮莱、沃尔夫冈·里克特、丹尼尔·西维奥雷克、拉胡尔·苏克谢·拉胡尔·苏克谢拉尔和王俊爵的深入讨论和反馈。

      这项研究得到了国家科学基金会(NSF)的资助,资助号为CNS-1518865。其他支持由皇冠城堡、Conklin Kistler家族基金、谷歌(Google)、英特尔公司(Intel Corporation)和伏特加公司提供。Nvidia的学术硬件赠款是我们所有实验中使用的Tesla K40 GPU。本材料中表达的任何意见、发现、结论或建议都是作者的意见、发现、结论或建议,不应归咎于他们的雇主或资金来源。

References

(详见原文)

附录:

A FaceNet’s Triplet Loss Formulation

     本节介绍了FaceNet[skp 15]三重态损失公式。设F θ(i)是一个由θ映射的神经网络,它将图像I映射到m维的单位超球面上。三元组由锚图像a、同一人p的正像和不同人n的负像组成。为了实现图3所示的聚类,锚点和正节点之间的距离应该小于锚点和负值之间的距离。添加一个阈值α,所有三元组都应该满足:

其中是z的平方欧几里得范数。使三元组满足这个条件的损失函数是:

其中,在本文中,我们使用了α=0.2和m=128,这是FaceNet论文中的建议。

B Original (Sub-Optimal) Network Training Technique

  

      我们的原始尝试去训练神经网络是使用类似于Siamesenetworks的结构。 图11演示了我们如何使用三个具有共享权重的独立神经网络来处理三胞胎。损失函数的梯度可取为锚、正、负的梯度,并通过每个网络分别反向传播。在训练完成后,由于权重是共享的,因此可以使用单个网络进行预测。

       虽然使用三个单独的网络是简单的,重复的图像被无效地处理多次。我们可以只在我们的Tesla K40 GPU(内存为12 GB)上一次通过三个网络发送100个三胞胎。在每一小批中,假设我们从数据集中的15个人中抽取了每人20张图像,然后从每个人中选择2幅图像作为锚和正图像,然后从其余的图像中选择

一个否定值,得到个三重奏。一次处理100个三胞胎需要29个前后传球,即使只有300个唯一的图像。为了去除多余的图像,我们最初的技术是从每个人中随机选取两张图像作为锚点和正面图像。

    第3.2节介绍了我们目前的培训技术,使网络培训的时间提高了一个数量级。

C OpenFace’s Neural Network Definition(定义)

   表1显示了我们的nn4.Small2神经网络模型,它是FaceNet[skp 15]手工调整的NN4模型的一个版本,其参数较少。我们在这里包括它的完整性和重现性。每一行是神经网络中的一个层,最后六列表示[SLJ 15]中的池或起始层的参数。集合后的维数降维为n维,表示为“NP”,归一化为局部响应归一化。除FaceNet的nn2和nn4模型外,openace对nn4的完整定义也可在https://github.com/cmusatyalab/openface/tree/master/models/openface获得。

   

    

猜你喜欢

转载自blog.csdn.net/C_chuxin/article/details/82710525
今日推荐