APP下载

基于TensorFlow的人脸识别系统设计

2020-10-09李慧颖李薇邢艳芳何光威

计算机时代 2020年9期
关键词:特征向量人脸识别人脸

李慧颖 李薇 邢艳芳 何光威

摘要:介绍了基于TensorFlow的人脸识别系统的设计过程。该系统采用深度学习的理论以及Google开发的人工智能框架TensorFlow来实现人脸识别。系统调用OpenCV计算机视觉库中的功能函数从一段离线视频帧里截取人脸图像帧,用MTCNN模型进行人脸检测,再与通过数据集VGGface2里训练的Inception模型进行识别,输出特征向量,并与选好的图片库内图片对比。结果表明,该系统可较好的实现人脸识别功能。

关键词:人脸识别;深度学习;人工智能;TensorFlow; OpenCV计算机视觉库

中图分类号:TP311

文献标识码:A

文章编号:1006-8228(2020)09-61-03

Design of face recognition system based on TensorFlow

Li Huiying, Li Wei. Xing Yanfang, He Guangwei

(Com,nun.ication University of China, Aranjing, Jiang.su 211100. China)

Abstract: Developed a face recognition system based on TensorFlow. The system uses deep learning theory and artificialintelligence framework TensorFlow developed by Google to realize face recognition. The system calls the function in the OpenCVcomputer vision library to intercept the face image frame from an offline video frame, uses the MTCNN model for face detection.and identifies the face detected with the Inception model trained in the data set VGGface2, then outputs the feature vector andcompared it with pictures selected from the gallery. The results show that the system can realize the face recognition function.

Key words: face recognition; deep learning; artificial intelligence; TensorFlow; OpenCV computer vision library

0引言

许多早期普遍使用的身份验证方法随着时代演变已不具有完整的安全性,因为这类信息极易被伪造。本文研究基于TensorFlow的人脸识别技术,先应用一种较好的MTCNN模型进行人脸检测,它是一种既考虑面部关键点检测又考虑面部边界回归深度的学习模型[1]。从OpenCV库中调用函数进行面部检测并识别被输入图像信息,并从视频数据中截取图像帧数据。然后程序从MTCNN网络读取截取的人脸图像,并通过Inception框架对图像进行识别和确认。人脸检测和识别过程使用TensorFlow來构建网络完成系统设计。

1CNN的基本网络结构

CNN的基本网络结构由卷积层、池化层、全连接层、Softmax层组成。而计算机所理解的输入层就是由许多的输入矩阵组成。在这一层上是跟DNN有很大相同点的。它的第一个网络是CNN结构独有的卷积层,其后是池化层,它也是CNN的独特部分。卷积层和池化层的组合在结构中出现多次。卷积层和池化层的组合模型可灵活使用所需的任意组合。在这些组合层后面出现的是有着DNN结构的全连接层(Fully Connected Layer,简称FC)。而输出层主要是使用Softmax激活函数来做图像识别的分类。

2MTCNN的研究与应用

在执行到人脸检测和特征点定位的任务时,将会使用多任务级联的卷积神经网络(MTCNN)。该网络是实现人脸检测和五点校准的模型,主要通过CNN模型级联实现多任务学习网络。该模型利用检测和对齐之间的通用关系来提高其性能,并且从细致任务到粗糙任务的替换基本上是由三阶级联卷积神经网络完成的。这也是其特殊性能的体现。三阶段可大致分为:

(1)使用全卷积网络(P-Net)快速发布一系列候选窗口;

(2)通过使用更复杂的CNN网络(R-Net)过滤掉大多数非面部候选窗口;

(3)使用一个能力稍作加强的网络(O-Net)监测出人脸上面的五个标记点。

3TensorFlow系统结构

TensorFlow是一个可以使用数值类计算的开源软件库,它可以稳定在Python的语言环境中运行[2]。该程序在实施运行的基础上,兼顾一定的准确性和稳定性。TensorFlow还具备完全开源性,可在智能手机或数据服务中心集群上运行,重要的是基于数据流图(data flow graphs),并可以广泛的应用于语音或图像分类的机器学习和深度学习领域[3]。TensorFlow代表将张量从流程图的一个部分运动到另一端所需要进行的计算过程,分解来看就是Tensor表示着张量(由N维数组成),以及流表示了基于数据流程图的运算。

CAPI(Computer Assisted Personal Interviewing)即计算机辅助面访,是作为本系统的界线,分出两个子系统:前端系统和后端系统。前端系统主要工作是负责构造建成计算图并为其提供实现编程所需要的模型;后端系统主要负责执行(出计算图)并在系统运行时提供稳定的环境。本系统中需关注四个基本组件,因系统是采用分布式运行机制,那么这四个组件就是关键。①客户端是构成前端系统的重要部分,该系统可以支持多语言的客户端,不仅如此,还提供基于计算图上的编程模型,可为用户构建造出各种类的计算图而提供了便利,从而实现所需的模型没计。客户端以会话为桥梁连接后端的运行,同时启动计算图的运行过程。②在分布式的运行环境中,分布式Master承担从计算图中找到最小子图的责任,并将其分成多个子图,以便在多种进程和设备上运行。③TensorFlow将为每个不同的任务启动相应的工作者服务。Worker Service在计算图的节点之间存在依赖关系的前提下完成图的计算,然后在硬件环境(例如CPU/GPU)中移动OP内核,并且还需要接受其他工人服务或工序的计算结果将结果发送到其他工人服务。④OP(operator)以特殊方式在硬件设备上实现,以表示数据操作层。它负责执行OP操作,每个OP都有一个优化的内核实现,但要考虑设备的类型[4]。

4系统设计与分析

4.1获取被识别人脸特征向量

由于本设计并没用到摄像头获取人脸图像,而是自主构建图片库。初次系统识别公众人物周杰伦,建立出一个名为jaychou的文件夹。在该文件夹内保存为获取人脸特征向量进行对比而截取的三张图片。

为了与系统运行后从离线视频端检测到的人脸特征向量进行对比,首先要在图片库里已获取的图片上进行检测,获取特征向量。

4.2基于OpenCV读取视频

该程序使用OpenCV截取视频数据流中的图像帧数据来提供输入图像以供之后的面部检测和面部识别[5]。OpenCV,也就是计算机视觉接口可以用在许多类型的操作系统上实现运行,例如更常用的Windows,MacOS和Linux。OpenCV是使用C++类与C函数构成的,具有高效特性与轻量化优势,此外在架构上还规划了一些接口提供给Python、Ruby、MATLAB等使用。该程序调用OpenCV库中的函数从离线视频端截取到视频帧,它内部的视觉处理算法变化多端,且C语言编写占用它的绝大多数功能,可以说在DSP系统包括ARM嵌入式系统中的运行代码都会在OpenCV中简略的重写过,考虑其开源特性前提下处理稳妥,不加额外的非内部支持也是能完整的编译链接并产生运行程序的,可以极其方便的做算法的移植。该步骤会影响后面程序对人脸检测的效果,所以必须严谨,其实现流程图如1所示。

4.3MTCNN人脸检测

人脸检测首先必须检测图片中是否含有人脸,这是其主要工作。其次,确定是否存在人脸边界的关键点。该系统的面部检测模块是使用多任务级联卷积神经网络(MTCNN)深度学习模型实现的,该模型专注于对面部框架回归和面部关键点检测。MTCNN主要存在三层网络,分别是P-Net层、R-Net层和O-Net层。首先P-Net用在初步确认人脸的边框范围,使用R-Net层精准的确定人脸边框范围,最后用O-Net层检测并确认五个人脸关键点。首先将12*12尺寸的图像输入到P-Net网络层,然后使用在训练之前生成的训练数据将其转换为12*12*3的结构。然后,R-Net可以更准确地调整P-Net生成的边界框的坐标。由P-Net生成的回归帧和由其生成的面部轮廓关键点构成R-Net训练数据,其中R-Net生成的回归帧变为24*24大小,其面部轮廓关键点所用生成数据的方法与P-Net相比没有变化。在MTCNN中用作输出的最后一个网络是O-Net。与R-Net的训练数据生成方式相类似是O-Net网络的特点,其中包含面部轮廓关键点数据和通过P-Net和R-Net后检测出来的每个图片中的bounding boxes。

4.4 Inception人脸识别

人脸识别的步骤使用Inception模型,该模型在VGGface2数据集里进行了训练,在这里是形成了pb文件,直接进行使用。人脸识别是检测到人脸后的关键步骤,嵌入特征向量(embedding)是通过Inception网络识别获得的。获得到人脸特征向量的代码: embs=sess.run(embeddings, feed_dict=feed_dict)

从pb文件中找到模型的入口输入、出口输出并加载,其工作代码如下: images_placeholder=tf.get_default_graph()

.get_tensor_by_name("input:0") embeddings = tf.get_default_graph()

.get_tensor_by_name("embeddings:0") phase_train_placeholder = tf.get_default_graph()

.get_tensor_by_name("phase_train:0")

4.5特征向量的比对

以上步骤进行完,这时获得了两种人脸的特征向量,分别是自己创建的图片库里的人脸特征向量和离线视频里截取到的人脸特征向量,比较这两者,当特征向量之间比对的余弦距离较大时,就可以识别出人脸[6]。

4.6结果展示

在确认识别结果之后,用OpenCV画框将识别人的名字打上去,显示在视频中。这样,整个系统的操作完成。设计完成后,该系统的运行结果如图2所示。

这组图片中,第一、二张为设计所需的结果,在视频中识别周杰伦的脸,并显示名字jaychou在画框里。第三张为对比显示图,其中,程序中获得人脸特征向量的人物得到识别,而另一个人没有获取特征向量识别为unk无信息。最后一张也为未获取特征向量的人物,故识别为unk。

5结束语

该系统设计的完成,具有一定的实用价值。系统依赖深度学习的发展,其在人脸识别技术上的运用,使得在短时间内刷新了大众对传统识别方式的认知[7]。但同时也存在着不可忽略的问题,如在完成度上由于缺少大量的训练,造成一些环境下存在识别误差,这也是人脸识别技术未来需要攻克的难题。

参考文献(References):

[1]朱秀娟,卢琳,钟洪发,人脸识别技术在考试身份验证中的应用[J].激光杂志,2016.37(6):90-93

[2]章敏敏,徐和平,王晓洁,等.谷歌TensorFlow机器学习框架及应用.微型机与应用[J].2017,36(10):58-60.

[3]黄睿,陆许明,邬依林.基于TensorFlow深度学习手写体数字识别及应用[J].电子技术应用,2018.44(10):6-10

[4]严严,章毓晋.基于视频的人脸识别研究进展[J].清华大学电子工程系计算机学报,2009.32(5):879-885

[5]方玫.OpenCV技术在数字图像處理中的应用[J].北京教育学院学报(自然科学版),2011.6(1):7-11

[6]黄琳,蒋为,杨铁军.基于Caffe框架的人脸定位与识别系统的设计[J].计算机时代,2019.6:56-58,62

[7]陈果,周志锋,杨小波,王成,欧阳纯萍,基于人脸识别的商品推荐系统的设计与实现[J].计算机时代,2018.11:52-55

收稿日期:2020-05-26

基金项目:2019年江苏省大学生创新创业训练项目“基于深度学习的上班打卡系统”(201913687002Y)

作者简介:李慧颖(1998. 10-),女,江苏盐城人,本科在读,主要研究方向:深度学习。

通讯作者:邢艳芳(1981. 10-),女,江苏南京人,副教授,主要研究方向:人工智能。

猜你喜欢

特征向量人脸识别人脸
二年制职教本科线性代数课程的几何化教学设计——以特征值和特征向量为例
人脸识别 等
克罗内克积的特征向量
有特点的人脸
揭开人脸识别的神秘面纱
三国漫——人脸解锁
一类特殊矩阵特征向量的求法
EXCEL表格计算判断矩阵近似特征向量在AHP法检验上的应用
基于类独立核稀疏表示的鲁棒人脸识别
马面部与人脸相似度惊人