基于Python的人脸识别技术综述

2021-09-18 02:57杜小甫黄兴晗刘沂杰
电子测试 2021年16期
关键词:人脸人脸识别卷积

杜小甫,黄兴晗,刘沂杰

(厦门大学嘉庚学院信息科学与技术学院,福建漳州,363105)

0 引言

早期人脸识别技术主要为基于特征检测的传统方法,包括基于几何特征、基于特征脸、基于统计理论的方法。近年来随着深度学习的成功,人脸识别技术的技术路线也转移到基于卷积神经网络的深度学习方法上来。目前使用python 语言进行机器学习开发比较流行,主要是因为python 支持很多机器学习库。

1 基于python 的机器学习库

1.1 机器学习库PyTorch

PyTorch 是一个开源的Python 机器学习库(基于Torch),具有强大的GPU 加速的张量计算功能与包含自动求导系统的深度神经网络(支持动态神经网络)。PyTorch 具有很多优点。(1)简洁:PyTorch 设计追求的就是最小封装,且最大程度的减少了重新编写函数的必要。 PyTorch 中的逻辑为从低到高三个级别的抽象:张量→变量(autograd)→层(nn.Module),三个抽象分别代表为:高维数组,自动推导和神经网络,三者互相联系密切。(2)速度:上述PyTorch 的灵活简洁性并不会因此而降低速度,PyTorch 的速度表现优于Tensorlow 和Keras,使用PyTorch 与其他框架实现相同的算法时,PyTorch 的速度总是比其他的框架更快。(3)易用:PyTorch 是面向对象的所有框架中最容易上手的。PyTorch是Torch 在Python 上的衍生(基于Torch),而Torch 接口的设计以其灵活性和易用性而闻名。

孟令军[1]等人设计一种卷积神经网络,在深度学习Pytorch 框架下使用Youtube face 数据集经过训练得到模型分类器,且测试集上错误率达到0.139%,结合Opencv 的级联人脸检测器和训练好的Pytorch 模型可定位任意图片的人脸框以及68 个关键点的位置。测试结果表明,人脸及人脸关键点检测识别准确度较高,且该方法简单高效,可用于现实应用场景的模块构建。孔爽[2]设计了基于Pytorch的人脸识别系统,其硬件系统设计包括显示屏、图像采集器件;软件系统组成有人脸检测节点设计、人脸属性识别节点的设计。该文对基于Pytorch 的人脸识别系统进行分析,依托Pytorch 语言库的优势,根据传统人脸识别系统的缺陷,实现本文设计。实验论证表明,该文设计的方法具备极高的有效性。该文的研究能够为基于Pytorch 的人脸识别系统的构建和应用提供理论依据。

1.2 机器学习库TensorFlow

TensorFlow 是一个基于数据流编程的开源软件库。使用TensorFlow 的程序在运行中具备一定的鲁棒性和准确性。TensorFlow 还具备完全开源性,并拥有多层级结构,能够部署在服务器,手机端,PC 终端等(并支持GPU 与TPU 计算)。

相比于PyTorch,他的优点包括:(1)可视化方面:TensorFlow 中包含的 TensorBoard 库功能非常强大,能够展示网络图、张量的指标变化、张量的分布情况等功能;能够直观的帮助我们进行参数选择。(PyTorch 能够使用的Visdom,但功能简单且有限).(2)训练模式方面:使用 TensorFlow 时,须手动编写代码,并微调要在特定设备上运行的每个操作,以实现分布式训练。PyTorch 利用异步执行的本地支持实现,分布式训练方面较为欠缺。(3)生产力方面:TensorFlow 在此方面具有相比于其他框架的绝对优势,可直接使用 TensorFlow Serving。而PyTorch 没有能够直接在网络上部署模型的框架。(4)资源方面:TensorFlow 作为较早进行开源的机器学习库,TensorFlow 拥有更丰富的模型,在社区中所拥有的资料与支持程度也是较为优秀。

程丹婷[3]等人设计了一种基于Google 人工智能架构Tensorflow,采用深度神经网络方法进行人脸识别的系统,系统通过人工智能,训练大量的样本图片,在样本训练过程中进行自主学习,保证了人脸识别功能的高准确性。该文设计并实现了基于人工智能的人脸识别系统,系统包括视频流数据帧解析、多任务卷积神经网络人脸检测、Facenet 卷积神经网络人脸识别、KNN 人脸分类等模块,对系统进行了多种场景的识别测试,测试结果表明,系统可以准确地检测到人脸关键部位,并对人脸图片进行检测判别,输出识别结果,识别准确率高,可以应用到实际认证场景中。杨金达[4]等人设计了基于Tensorflow 的人脸识别系统,并研究了其在智能安防领域的应用。黄侃等人研究了安卓系统下利用Tensorflow 进行人脸识别的系统,并将其应用于教学考勤中。李慧颖[5]等人结合Tensorflow 和OpenCV,实现了视频截图中的人脸识别。

1.3 Inception 系列网络

Inception 网络又叫GoogLeNet,Inception 网络很好的解决了两个问题:(1)网络容易发生过拟合的现象(训练数据较少时)。(2)均匀的增加网络的大小,会导致计算量的剧烈增大。解决方法:引入稀疏特性和将全连接层转换成稀疏连接。

Inception 网络是通过许多模块组成的,其中一个关键的模块如图1 所示。Inception 网络引入了一个关键的点去解决海量参数的问题:使用1×1 的卷积核来降低维度,通过推导的数据,数据量大约减少了四倍左右。通过使用1×1的卷积核还能够引入更多非线性,提高泛化能力(需要使用ReLU 激活函数)。

图1 Inception 网络模块组成

雷雨婷[6]等人实现了一种基于Inception-v3 卷积神经网络的人脸识别方法。该方法通过修改pool3 以上的结构来改变网络深度,从而使卷积神经网络模型能自动提取人脸特征并进行分类。利用OpenCV 自建人脸数据库进行训练,通过批量梯度下降法不断优化参数,利用Dropout 方法解决过拟合问题。结果表明:该方法在自建人脸数据库上的图像识别率达到98%,并且对光照强度、面部表情变化等干扰具有鲁棒性。李楠等人提出了一种基于Tensorflow 平台的多Inception 模型,通过将多个Inception 结构进行串联,再通过分解卷积核的方式减少输入参数,实现了多维度同时卷积再聚合,提高了人脸识别的精度。

2 目前人脸识别技术中存在的问题

2.1 光线干扰问题

由于人脸为3D 结构,光照投射后会形成阴影,会对原有的特征进行干扰。目前的解决方法包括如下算法:(1)Retinex 算法,(2)Gamma 函数校正算法。

常云翔对复杂光线条件下人脸识别问题进行深入研究,首先构建了一个复杂光照条件下的人脸数据集;第二,在对不同结构神经网络的性能进行了分析;第三,研究了光照数据增强技术;第四,针对神经网络训练时间长、难以调整的问题,研究了集成批规范化算法。

2.2 姿态干扰问题

姿态的变化会导致面部特征发生改变,可能会造成一部分的信息丢失,较为先进的算法中使用深度较高的神经网络,能够扩大数据集的方法较好的解决这个问题。

邹国锋等人针对近年来国内外出现的多姿态人脸识别技术和方法进行简单介绍和系统分类,分析各种方法的优缺点,并做出简要评价。周凯汀等人提出基于改进的ORB 局部特征以及每位个体多个模板样本的多姿态人脸识别方法。谢鹏程首先对单角度多姿态人脸图像进行融合,然后消除人脸修复后的像素缺失。

2.3 低分辨率问题

由于拍摄距离,角度以及摄像头的问题导致人脸图片分辨率低,常见解决方法包括:(1)基于重构超分辨率图像的LR 人脸识别方法,(2)基于公共特征子空间的LR 人脸识别方法。

张凯兵等人全面综述了低分辨人脸识别技术的研究进展,并对相关亟需解决的关键问题进行了讨论。罗皓等人研究了一种半对偶投影字典学习方法。该方法可分为训练和测试两个阶段。石正宇等人提出了一种轻型判别自归一化神经网络,能够从高分辨率及其对应的低分辨率图像中提取具有判别性的特征,并将特征耦合映射到共同的子空间。

3 总结

本文总结了基于Python 的两个机器学习库,和目前较为流行的Inception 网络。接着对现今人脸识别领域遇到的几个问题进行列举,并将较为先进的解决方法进行阐述,对解决方法中的优缺点进行分析,将算法的缺陷进行提出。

猜你喜欢
人脸人脸识别卷积
人脸识别 等
基于3D-Winograd的快速卷积算法设计及FPGA实现
有特点的人脸
一起学画人脸
揭开人脸识别的神秘面纱
人脸识别技术的基本原理与应用
从滤波器理解卷积
三国漫——人脸解锁
基于傅里叶域卷积表示的目标跟踪算法
长得象人脸的十种动物