APP下载

Insightface 结合Faiss 的高并发人脸识别技术研究

2020-10-28戴琳琳阎志远

铁路计算机应用 2020年10期
关键词:特征提取人脸人脸识别

戴琳琳,阎志远,景 辉

(中国铁道科学研究院集团有限公司 电子计算技术研究所,北京 100081)

人脸识别是基于图像处理、模式识别等技术,利用人的脸部信息特征,来进行身份验证与鉴别的生物识别技术。人脸识别技术已在交通出行、手机解锁、资质认证等领域得到广泛应用。人脸识别过程一般分为人脸检测与对齐、特征提取、特征匹配检索3个阶段,具体流程如图1 所示。

图1 人脸识别流程

人脸检测与对齐方面,MTCNN[1]在人脸检测的基准数据集FDDB 和WIDERFACE,以及人脸对齐的基准数据集AFLW 上都取得了较好的测试结果。特征提取方面,2015年,ResNet[2]残差学习被提出后,网络深度不再限制网络性能,大部分特征提取网络都以ResNet 为基础做更新优化;DeepID[3]采用LeNet 结构对人脸多个关键区域分别做特征提取,将隐藏层特征拼接起来,降维得到最终特征,用于人脸描述和分类;Facenet[4]基于ResNet 网络,结合Tripletloss 函数,利用欧式嵌入,解决人脸比对验证的问题;SphereFace[5]首次关注特征的角度可分性,使得训练出的卷积神经网络(CNN,Convolutional Neural Networks)能学习具有角度判别力的特征;Insightface 算法[6]提出了附加角边距损失函数,直接在角度空间中最大化分类界限。特征匹配检索方面,kd-tree[7]是常用做特征点匹配的Sift[8]算法,Surf[9]算法和ORB[10]算法与SIFT 算法相比,特征点检测匹配速度有较大提升,但这些算法的效率均不及GPU 环境下为稠密向量提供高效相似度搜索和聚类的Faiss算法。

目前,实名制进站核验系统[11]的人脸识别率已达97%,旅客可以在5 s 内完成进站核验,但这只针对票、证、人一致性核验的1v1 场景。

综上,本文沿用MTCNN,基于Insightface 对原有的ResNet 残差单元进行优化,将Faiss 框架引入人脸的高维特征匹配过程,从算法的角度,对1vN 场景下的搜索匹配过程进行优化,提高模型的效率与适用性。

1 铁路车站人脸识别算法

铁路车站人流密度较大,环境场景复杂,有时需对场景下出现的所有人员进行识别监控。本文采用MTCNN 进行人脸检测与对齐,定位出人脸区域,找到脸部基准点之后,用改进的特征提取网络Insightface 结合损失函数优化进行人脸特征提取,并将Faiss 索引检索引入特征匹配过程,完成人脸识别。

1.1 人脸检测与对齐

1.1.1 MTCNN 流程

MTCNN 是一个深度级联的多任务CNN 框架,具有3 阶段深度卷积网络。以从粗略到精细的方式来预测人脸以及人脸关键点位置,可以同时完成人脸分类、边框回归和面部关键点的定位任务。在训练过程中采用困难样本挖掘策略,可以在无需手动选择样本的情况下提高性能。该框架流程如图2所示。

给定一张输入图片,将其缩放至不同比例,构建一个图像金字塔,作为以下3个阶段的网络输入:

(1)通过全卷积网络P-Net(Proposal Network)来获得候选边框和边框回归参数,用回归参数调整边框位置,再用非极大值抑制(NMS,Non-Maximum Suppression)合并重叠率较高的候选框;

(2)将P-Net 输出的候选框从输入图片对应位置剪裁出来,输入到R-Net(Refine Network)。该网络进一步过滤掉非人脸的候选框,同样,采用回归参数调整边框位置,再用NMS 合并重叠率较高的候选框;

图2 MTCNN 流程

(3)将R-Net 输出的候选框从输入图片对应位置剪裁出来,输入到O-Net(Output Network),找出面部的5个关键点,并输出检测到的人脸以及面部关键点的位置。

1.1.2 MTCNN 损失函数

训练时,框架的每个阶段都有3个输出:人脸分类,边框回归,面部关键点定位。

(1)人脸分类:是一个二分类问题,损失函数采用交叉熵来表示。

其中,pi表示第i个样本预测为人脸的概率;表示第i个样本的真实值。

(2)边框回归:对于每个候选框,预测其与最近标注框的偏移量,损失函数采用欧式距离损失进行计算。

(3)面部关键点定位:损失函数同样采用欧式距离损失进行计算。

(4)总体损失函数如下:

其中,N表示样本的数量, αj表示各层网络的权重,某个网络越重要则所对应的值越大,表示样本的类型。

(5)困难样本挖掘:本文在人脸分类的训练过程中,采用在线困难样本挖掘策略。将训练集中一部分数据集的所有样本,按前向传播中产生的损失大小进行降序排列,取前70%作为困难样本,在反向传播中仅用这些样本来更新参数。

1.2 人脸特征提取

1.2.1 特征值提取网络

将人脸对齐关键点坐标结合改进后的ResNet 网络进行深度特征提取。本文对网络原有的残差单元结构做了修改,将原ResNet 残差单元(图3a)中的第2个卷积层步长调整为2,并在每次卷积前后都增加批归一化处理(BatchNorm),激活函数在ReLu的基础上增加部分参数,修改小于0 的饱和区为非饱和区,称之为PReLu(图3b)。批归一化利于网络收敛,能更好地学习特征表达,非线性激活函数PReLu 相比ReLu,有更大范围的非饱和区,有效避免了随着网络深度增加、梯度衰减,引起参数不更新的问题。

图3 残差单元修改前后

1.2.2 特征值提取损失函数

利用Insightface 算法根据全连接层的情况确定不同类别的分类边界。在二分类场景下, θi(i=1,2)表示学习的特征向量和类Ci的权重向量之间的角度,假设有类别C1、C2,特征向量属于C1分类的需要满足余弦决策裕度cosθ1>cosθ2的要求,从而区分来自不同类的特性。同时,可通过在余弦空间中增加额外的边缘来加强对习得特征的识别,进一步要求cosθ1>cosθ2+m,m表示决策边界的边距,来控制余弦决策裕度的大小,这个约束对于分类来说更加严格,具有更好的几何解释性,适用于类别较多的人脸分类场景。同时,分类的条件对于角度来说也变得更为苛刻,拉大了类间距离,能够带来更好的区分效果。设b为批尺寸;n为类别区分的具体数量;s表示比例缩放的超参数,改进后的损失函数为:

其中,对特征向量与权重都做了归一化处理,在原本的余弦边距中,cosθ1>cosθ2+m代表分类正确,现在要求当θ2∈[0,π−m]时,cosθ1>cos(θ2+m) 才是分类正确。相当于决策边界由余弦空间延伸到了角度空间,增强了模型对人脸的表征能力。

1.3 人脸特征匹配

提取出的人脸图片高维特征向量无论是分类还是比对验证,都需要进行向量匹配搜索与相似度判断。Faiss 是为稠密向量提供高效相似度搜索和聚类的框架,包含对任意大小向量集的搜索算法,可以扩展到单个服务器上主存储器中的数十亿个向量。Faiss 是围绕索引展开的,不管运行搜索还是聚类,都要建立一个索引,其特点为:

(1)速度快,可存在内存和磁盘中;

(2)提供多种检索方法;

(3)由 C++实现,提供了Python 封装接口;(4)支持GPU。

2 实验验证

2.1 实验环境

本地服务器测试工具为Jmeters,远程服务器测试工具为wrk,两者均为开源性能测试工具

特征提取对比实验并发用户数量为1 ~ 10,实例数量为1 ~ 40,以Face++提供的API 测试效果为参照,测试Insightface 在并发条件下的效率与精度;特征匹配对比实验特征底库大小为1万,随机搜索数量为1000,比较传统的kd-tree 搜索和本文使用的Faiss 向量搜索的性能。

2.2 Insightface 特征提取实验

2.2.1 Insightface 特征提取效率

远程服务器区分为需要部署Nginx 的跳板机以及部署工程和多实例的主机。为消除网络的影响,需要在跳板机上安装wrk,进行性能测试。使用Gunicorn 单用户不并发时,每秒事务处理量(TPS,Transaction Per Second)约为7.84个,如表1 所示。平均响应时间约为128 ms,比Face++的extract_with_detect 接口效率提高1 倍以上,如表2 所示。在多用户并发情况下,受限于机器配置,同时启用的实例数不宜过多,每个用户的请求次数对TPS 没有明显影响,反而会增加延时。考虑到人脸识别核验系统应用都是基于远程重点人员特征库,远程特征提取的效率尤为重要。试验证明以Gunicorn 调用flask 的方式构建Insightface 特征提取服务器,与单用户请求相比性能没有明显损失。

表1 Insightface 性能测试情况

表2 Insightface 与Face++的特征提取效率对比

2.2.2 Insightface 特征提取精度

精度测试基于LFW(Labled Faces in the Wild)数据集,使用旷视Face++的API 接口做精度参照。1v1 测试按人物名取每相邻2 张图片特征组成一对,每张图只组对一次,共6000 对。1vN 测试选取数据集中图片数量在2 张以上的1680 人,共9064 张图片,每人随机抽取1 张作为后续对比图,其余作为底库特征集。测试结果如表3、表4 所示。

(1)1v1 比对测试

1v1 是指同一个特征底库图数量为1 的情况。Insightface 采取10 折交叉验证得到1个比对精度,Face++根据提供的4个置信度参考阈值[55.013874,62.088215,67.57555,71.71891]得到1 组比对精度,如表3 所示。由测试结果可知,Insightface 1v1 算法精度优于Face++。

表3 1v1 情况下Insightface 与Face++测试结果对比

(2)1vN 比对测试

1vN 是指同一个人特征底库图数量为N 的情况。Insightface 提供了1 组10个特征的距离阈值,1vN 的比对精度最佳可达95.23%,与Face++检索算法精度基本相同,如表4 所示。

表4 1vN 情况下Insightface 与Face++测试结果对比

2.2.3 Faiss 特征匹配

kd-ree 搜索将底库图片特征划分为多个特征空间,构成二叉树,然后将待对比图片的特征向量传入二叉树进行搜索,返回距离小、相似度高的底库标签。Faiss 搜索以向量或矩阵的形式准备好底库特征数据,然后构建底库索引并将特征数据映射至索引中,再通过索引搜索得到标签,两者的搜索性能测试结果对比如表5 所示。

kd-tree 在底库大小为1万张图片,随机搜索1000张图片的情况下,总耗时为8.35 s。Faiss 在相同情况下,总耗时为0.05 s。大部分人脸核验系统都是基于公安机关的远程重点人员特征库,远程特征匹配的效率尤为重要,本文以Gunicorn 调用flask 的方式构建Faiss 特征搜索服务,不仅在效率上提速了100 倍以上,且需要的CPU 资源更少。

表5 Faiss 与kd-tree 搜索性能对比测试

2.3 实验结论

实验结果表明:(1)以Gunicorn 调用flask 的方式构建Insightface 特征提取服务器,虽然在高并发、多实例的场景下,有较高的硬件资源要求,但是精度和效率都有所提高;(2)以Gunicorn 调用flask的方式构建Faiss 特征搜索服务器,相比传统的kdtree 搜索,效率上提高了100 倍以上,而且需要占用的CPU 资源更少。

3 结束语

Insightface 结合Faiss 的高并发人脸识别,通过对实际应用场景的模拟,结合具体的软硬件资源限制,优化了人脸识别特征提取和特征匹配流程的算法设计方案,为铁路客运高并发情况下的人脸识别、核验、搜索比对等安全保障业务提供了技术支撑。该方法在细粒度人脸检测、更高效率的人脸特征提取、比对、搜索以及多种站场复杂条件下的适用性等方面,有进一步优化空间。未来可通过复杂场景下人脸图片数据的积累,算法框架调优等方式,进一步提高适用性。

猜你喜欢

特征提取人脸人脸识别
人脸识别 等
有特点的人脸
一起学画人脸
揭开人脸识别的神秘面纱
空间目标的ISAR成像及轮廓特征提取
基于Gazebo仿真环境的ORB特征提取与比对的研究
基于特征提取的绘本阅读机器人设计方案
人脸识别技术的基本原理与应用
基于Daubechies(dbN)的飞行器音频特征提取
三国漫——人脸解锁