以往人脸识别主要包括人脸图像获取、人脸识别预处理、身份确认、身份搜索等技术和系统。现在人脸识别已经慢慢扩展到驾驶员检测、行人跟踪,甚至是ADAS中的动态物体跟踪。由此可见,人脸识别系统已经从简单的图像处理发展到实时视频处理。而且算法也从Adaboots、PCA等传统统计方法转变为CNN、RCNN等深度学习及其变形方法。现在已经有相当一部分人开始研究3D人脸识别,这种项目目前得到了学术界、工业界和国家的支持。首先看研究现状。从以上发展趋势可以看出,目前主要的研究方向是利用深度学习的方法来解决视频人脸识别。主要研究人员如下:中国科学院计算技术研究所单世光教授、中国科学院生物识别研究所李子清教授、清华大学苏光大教授、中国大学汤晓鸥教授香港的RossB.Girshick等。主要开源项目:SeetaFace人脸识别引擎。该引擎由中科院计算所单世光研究员带领的人脸识别课题组研发。代码基于C++实现,不依赖任何第三方库函数。开源协议为BSD-2,学术界和工业界均可自由使用。主要软件API/SDK:face++。人脸++网是一个免费提供人脸检测、人脸识别、人脸属性分析等服务的云服务平台。Face++是北京旷视科技旗下全新的人脸技术云平台,在黑马竞赛中,Face++获得年度总冠军,获得联想之星投资。skybiometry..主要包括人脸检测,人脸识别,人脸分组。主要的人脸识别图像数据库:目前比较好的人脸图像数据库有LFW(LabelledFacesintheWild)和YFW(YoutubeFacesintheWild)。目前的实验数据集基本来源于LFW,目前图像人脸识别的准确率已经达到了99%,基本上已经把现有的图像数据库刷爆了。以下是对现有人脸图像数据库的总结:国内做人脸识别的公司越来越多,应用也非常广泛。其中,汉王科技的市场占有率最高。主要公司的研究方向和现状如下:汉王科技:汉王科技主要从事人脸识别的身份验证,主要应用于门禁系统、考勤系统等。科大讯飞:在香港中文大学汤晓鸥教授团队的支持下,科大讯飞研发了一种基于高斯过程的人脸识别技术——Gussianface。该技术在LFW上的识别率为98.52%。目前,该公司的DEEPID2在LFW上的识别率已达到99.4%。川大智胜:目前公司的研究重点是3D人脸识别,并且已经扩展到3D全脸摄像头的产业化等。商汤科技:主要是一家致力于引领人工智能核心“深度学习”技术的突破,构建人工智能和大数据分析行业解决方案的公司。、图像处理等方向具有很强的竞争力。在人脸识别中,需要识别的人脸关键点有106个。人脸识别的流程人脸识别主要分为四个部分:人脸检测、人脸对齐、人脸验证、人脸识别。人脸检测:检测图像中的人脸,并用矩形框框住结果。有一个Harr分类器可以直接在openCV中使用。人脸对齐:对检测到的人脸进行姿态校正,使人脸尽可能“正”,通过校正可以提高人脸识别的准确率。校正方法包括2D校正和3D校正。3D校正方法可以使侧面更好地识别。在进行人脸校正时,会有检测特征点位置的步骤。这些特征点的位置主要是比如鼻翼左侧、鼻孔下侧、瞳孔位置、上唇下侧等,知道了这些特征点的位置后定位,做一个位置驱动的变形,脸就可以“矫正”了。如下图所示:这里是2014年的一个MSRA技术:JointCascadeFaceDetectionandAlignment(ECCV14)。这篇文章在30ms内直接把detection和alignment都做了。Faceverification(人脸验证):Faceverification,人脸验证是基于对匹配的,所以它得到的答案是“yes”或“no”。具体操作时,给出一张测试图像,然后一对一进行配对。如果找到匹配,则说明测试图像和匹配的人脸是同一个人的脸。一般这种方式是(应该)用在小型办公的刷脸签到系统中。具体操作方法大致如下流程:离线一张一张录入员工人脸照片(一个员工一般录入多张人脸),员工刷脸签到后,摄像头抓拍后,人脸先进行检测,再进行人脸校正,再进行人脸验证。一旦匹配结果为“是”,则说明该员工人脸属于办公室,至此完成人脸验证。离线录入员工人脸的时候,我们可以将人脸与人名进行匹配,这样一旦人脸验证成功,我们就可以知道这个人是谁。上面提到的这种系统的优点是开发成本低,适用于小型办公室。缺点是抓拍时没有遮挡,也需要比较正的人脸姿势(我们有这个系统,但没体验过)。下图给出了示意图说明:人脸识别(faceidentification/recognition):Faceidentification或Facerecognition,如下图所示,人脸识别就是回答“我是谁?”与人脸验证中使用的配对匹配相比,更多的是识别阶段的一种分类方法。它实际上是对经过前两步的图像(人脸)进行分类,即人脸检测和人脸校正。根据以上四个概念的介绍,我们可以了解到,人脸识别主要包括三个独立的大模块:我们将以上步骤进行详细拆分,得到如下流程图:人脸识别分类现在随着人脸识别技术的发展,人脸识别技术主要分为三类:一是基于图像的识别方法,二是基于视频的识别方法,三是三维人脸识别方法。基于图像的识别方法:这个过程是一个静态的图像识别过程,主要使用图像处理。主要算法包括PCA、EP、核方法、BayesianFramwork、SVM、HMM、Adaboot等算法。但在2014年,人脸识别利用Deeplearning技术取得了重大突破,以97.25%的deepface和97.27%的face++为代表。人脸的训练集为2w。基于视频的实时识别方法:这个过程可以看出,人脸识别的跟踪过程不仅需要找到人脸在视频中的位置和大小,还需要确定帧与帧之间不同人脸的对应关系。DeepFace参考论文(资料):1.DeepFace论文。DeepFace:缩小人脸验证中与人类水平性能的差距2。卷积神经网络理解博客。http://blog.csdn.net/zouxy09/article/details/87815433。卷积神经网络推导博客。http://blog.csdn.net/zouxy09/article/details/9993371/4.卷积神经网络注意事项。5.NeuralNetworkforRecognitionofHandwrittenDigits6.DeepFace博文:http://blog.csdn.net/Hao_Zhang_Vision/article/details/52831399?locationNum=2&fps=1DeepFace是由FaceBook提出的,其次是DeepID和FaceNet。而且DeepFace可以体现在DeepID和FaceNet中,所以DeepFace可以称得上是CNN在人脸识别上的基础。目前,深度学习在人脸识别方面也取得了很好的效果。所以这里我们开始向DeepFace学习。在DeepFace的学习过程中,不仅会介绍DeepFace使用的方法,还会介绍当前步骤的其他主要算法,并对现有的图像人脸识别技术进行简单全面的描述。DeepFace的基本框架1.人脸识别的基本流程facedetection->facealignment->faceverification->faceidentification2.Facedetection(人脸检测)2.1现有技术:haar分类器:人脸检测(detection)中有一直是opencv中可以直接使用的haar分类器,基于Viola-Jones算法。Adaboost算法(级联分类器):1.参考论文:RobustReal-Timefacedetection。2、参考中文博客:http://blog.csdn.net/cyh_24/article/details/397556613。博客:http://blog.sina.com.cn/s/blog_7769660f01019ep0.html2.2本文使用的方法本文采用了一种基于检测点(fiducialPointDetector)的人脸检测方法。首先选择6个参考点,2个眼睛中心,1个鼻子点,3个嘴巴点。使用SVR通过LBP特征学习参考点。效果如下:3.Facealignment(人脸对齐)2Dalignment:对检测到的图像进行二维裁剪,将图像缩放、旋转和平移到六个锚点位置。剪掉脸部部分。3D对齐:找一个3D模型,用这个3D模型把2D人脸裁剪成3D人脸。67bps,然后是Delaunay三角剖分,在轮廓上添加三角形以避免不连续。将三角面转换为3D形状。三角面变成了深度3D三角网络。三角网偏斜,使脸的正面朝前。最终人脸效果如下:上述2D对齐对应(b),3D对齐对应(c)~(h)。4人脸验证4.1现有技术LBP&&联合贝叶斯:通过高维LBP和联合贝叶斯的结合。论文:BayesianFaceRevisited:AJointFormulationDeepID系列:FusionofsevenjointBayesianmodelsusingSVM,withaccuracyof99.15%论文:DeepLearningFaceRepresentationbyJointIdentification-Verification4.2论文中的方法是通过multi-A训练深度神经网络(DNN)的人脸识别任务。网络结构如上图所示。结构参数:经过3D对齐后,形成的图像均为152×152的图像,输入到上述网络结构中。结构参数如下:Conv:32个11×11×3卷积核max-pooling:3×3,stride=2Conv:16个9×9卷积核Local-Conv:16个9×9卷积核,Local表示卷积核的参数不共享Local-Conv:16个7×7卷积核,参数不共享Local-Conv:16个5×5卷积核,参数不共享Fully-connected:4096维Softmax:4030维提取低级特征:过程如下:预处理阶段:输入3通道人脸,进行3D校正,归一化为152*152像素大小——152*152*3。通过卷积层C1:C1包含32个11*11*3的过滤器(即卷积核),得到32个特征图——32*142*142*3。通过max-polling层M2:M2的滑动窗口大小为3*3,滑动步长为2,三个通道独立轮询。通过另一个卷积层C3:C3包含16个9*9*16的3D卷积核。上面的3层网络是提取低级特征,比如简单的边缘特征和纹理特征。Max-polling层使卷积网络对局部变换更加鲁棒。如果输入是经过矫正的人脸,它会使网络对小的标签错误更加鲁棒。然而,这样的轮询层会导致网络丢失一些关于面部细节结构和微小纹理精确位置的信息。因此,本文在第一个卷积层之后只连接了Max-polling层。这些前面的层称为前端自适应预处理层。但是,对于很多计算来说,这是必须的,这些层的参数其实很少。它们只是将输入图像扩充为一组简单的局部特征。后续层:L4、L5、L6都是局部连接层,就像卷积层使用过滤器一样,在特征图像的每个位置训练学习一组不同的过滤器。由于校正后不同区域的统计特性不同,卷积网络的空间稳定性假设无法成立。例如,眼睛和眉毛之间的区域表现出非常不同的外观,与鼻子和嘴巴之间的区域相比具有很高的辨别力。换句话说,通过利用输入的校正图像,定制DNN的结构。使用局部连接层不会影响特征提取的计算负担,但会影响训练参数的数量。仅仅因为拥有如此庞大的标记人脸库,我们就可以负担得起三个大型局部连接层。局部连接层的输出单元受到大输入图像的影响,可以相应调整局部连接层的使用(参数)(不共享权重)。例如,L6层的输出受一个74*74*3的输入图影响校正后的人脸,这么大的块之间很难有任何统计参数共享。顶层:最后,网络的顶层两层(F7、F8)是完全连接的:每个输出单元都连接到所有输入。这两层可以捕获人脸图像中远距离区域特征之间的相关性。比如眼睛的位置和形状与嘴巴的位置和形状的关系(这部分也包含信息)可以通过这两个层得到。第一个全连接层F7的输出就是我们原来的人脸特征表达向量。在特征表达方面,这个特征向量与传统的基于LBP的特征描述有很大的不同。传统方法通常使用局部特征描述(计算直方图)并将它们用作分类器的输入。最后一个全连接层F8的输出进入一个K-waysoftmax(K为类别数),可以生成类别标签的概率分布。用Ok表示输入图像经过网络后的第k个输出,输出类别标签k的概率可以用下式表示:训练的目标是最大化正确输出类别的概率(id的脸)。这是通过最小化每个训练示例的交叉熵损失来实现的。用k表示给定输入的正确类别的标签,交叉熵损失是:通过计算交叉熵损失L相对于参数的梯度并使用随机梯度下降来最小化交叉熵损失。梯度是通过标准的误差反向传播计算的。非常有趣的是,这个网络产生的特征非常稀疏。超过75%的顶层特征元素为0。这主要是由于使用了ReLU激活函数。所有的卷积层、局部连接层和全连接层(最后一层F8除外)都使用了这种软阈值非线性函数,导致整体级联后具有高度非线性和稀疏特征。稀疏性还与使用dropout正则化有关,即在训练期间将随机特征元素设置为0。我们只在F7全连接层上使用了dropout。由于训练集很大,我们在训练过程中没有发现明显的过度拟合。给定图像I,其特征表达式G(I)通过前馈网络计算。每个L层的前馈网络可以看成是一系列的函数:归一化:在最后一层,我们将特征元素归一化为0到1,以降低特征对光照变化的敏感度。特征向量中的每个元素除以训练集中对应的最大值。然后进行L2归一化。由于我们使用了ReLU激活函数,我们的系统对图像的尺度不变性较低。对于输出的4096维向量:首先,对每个维度进行归一化处理,即对于结果向量中的每个维度,都要除以整个训练集上该维度的最大值。每个向量都经过L2归一化。2.验证2.1卡方距离在本系统中,归一化的DeepFace特征向量与传统的基于直方图的特征(如LBP)有以下相似之处:所有的值都是负的并且非常的值稀疏特征元素在区间[0,1]之间的卡方距离计算公式如下:2.2Siamese网络文章中也提到了端到端的度量学习方法。一旦学习(训练)完成,人脸识别网络(到F7)就会在两张图片上复用,得到的两个特征向量直接用于预测两张输入图片是否属于同一个人。这分为以下步骤:计算两个特征之间的绝对差异;b.映射到单个逻辑单元(相同/不同输出)的全连接层。3.实验评估3.1SocialFaceClassificationDataset(SFC):4.4Mfaces/4030peopleLFW:13323faces/5749peoplerestricted:onlyyes/nomarksunrestricted:othertrainingpairscanalsogetunsupervised:DonottrainYoutubeFaceonLFW(YTF):3425videos/1595peopleresultonLFW:resultonYTF:DeepFace和后续方法最大的区别是DeepFace在训练神经网络之前使用了对齐的方法。论文认为,神经网络之所以能够起作用,是因为一旦人脸对齐,人脸区域的特征就固定在了某些像素上。这时候可以使用卷积神经网络来学习特征。本文模型采用了C++工具箱dlib中最新的基于深度学习的人脸识别方法。基于室外人脸数据测试库LabeledFacesintheWild的基准水平,准确率达到99.38%。更多算法http://www.gycc.com/trends/face%20recognition/overview/dlib:http://dlib.net/数据测试库LabeledFacesintheWild:http://vis-www.cs.umass.edu/lfw/model提供了一个简单的face_recognition命令行工具,可以让用户通过命令直接使用image文件夹进行人脸识别操作。捕捉图片中的人脸特征捕捉图片中的所有人脸查找并处理图片中的人脸特征查找每个人的眼睛、鼻子、嘴巴和下巴的位置和轮廓。importface_recognitionimage=face_recognition.load_image_file("your_file.jpg")face_locations=face_recognition.face_locations(image)抓取面部特征很重要,当然也可以用于图片的数码补妆(比如美图秀秀)digitalmake-up:https://github.com/ageitgey/face_recognition/blob/master/examples/digital_makeup.pyRecognizefacesinpictures识别照片中出现的人物安装步骤此方法支持Python3/python2,我们只测试过在macOS和Linux中,不知道它是否可以在Windows上运行。使用来自pypi的pip3(或用于Python2的pip2)安装此模块重要提示:编译dlib可能会出现问题,您可以通过从源安装dlib(而不是pip)来修复错误,请参阅安装手册如何从源安装dlibhttps://gist.github.com/ageitgey/629d75c1baac34dfa5ca2a1928a7aeaf手动安装dlib,运行pip3installface_recognition完成安装。如何使用命令行界面当您安装face_recognition时,您会得到一个名为face_recognition的简洁命令行程序,它可以帮助您识别照片或照片文件夹中的所有面孔。首先,你需要提供一个包含照片的文件夹,并且你已经知道照片中的人是谁,每个人必须有一个照片文件,文件名需要以人名命名;然后你需要准备另外一个文件夹,里面是你要识别的人脸照片;那么只需要运行face_recognition命令,程序就可以通过已知人脸文件夹识别出未知人脸照片中的人;foreachface到一行输出,数据是文件名加上识别的名字,用逗号隔开。如果只想知道每张照片中的人名,不需要文件名,可以这样做:Python模块引入face_recognition即可完成人脸识别操作:API文档:https://face-recognition.readthedocs.io。自动识别图片中的所有人脸,请参考这个例子:https://github.com/ageitgey/face_recognition/blob/master/examples/find_faces_in_picture.py识别图片中的人脸并告诉他们名字,请参考这个案例这个例子:https://github.com/ageitgey/face_recognition/blob/master/examples/recognize_faces_in_pictures.pyPython代码案例所有例子都在这里。https://github.com/ageitgey/face_recognition/tree/master/示例在照片中查找人脸在照片中查找人脸https://github.com/ageitgey/face_recognition/blob/master/examples/find_faces_in_picture.py识别照片中的面部特征识别照片中的特定面部特征https://github.com/ageitgey/face_recognition/blob/master/examples/find_facial_features_in_picture.py·使用数字美容应用(丑陋得可怕)数字化妆https://github.com/ageitgey/face_recognition/blob/master/examples/digital_makeup.py查找并根据照片识别未知面孔on个认识的人的照片https://github.com/ageitgey/face_recognition/blob/master/examples/recognize_faces_in_pictures.python人脸好看,今天的分享就到这里啦~
