• 查询稿件
  • 获取最新论文
  • 知晓行业信息
官方微信 欢迎关注

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

戴琳琳, 阎志远, 景辉

戴琳琳, 阎志远, 景辉. Insightface结合Faiss的高并发人脸识别技术研究[J]. 铁路计算机应用, 2020, 29(10): 16-20.
引用本文: 戴琳琳, 阎志远, 景辉. Insightface结合Faiss的高并发人脸识别技术研究[J]. 铁路计算机应用, 2020, 29(10): 16-20.
DAI Linlin, YAN Zhiyuan, JING Hui. Highly concurrent face recognition technology with Insightface and Faiss[J]. Railway Computer Application, 2020, 29(10): 16-20.
Citation: DAI Linlin, YAN Zhiyuan, JING Hui. Highly concurrent face recognition technology with Insightface and Faiss[J]. Railway Computer Application, 2020, 29(10): 16-20.

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

基金项目: 中国铁路总公司科技研究开发计划课题(J2018X009)
详细信息
    作者简介:

    戴琳琳,高级工程师

    阎志远,研究员

  • 中图分类号: U293.2 : TP39

Highly concurrent face recognition technology with Insightface and Faiss

  • 摘要: 在高并发、多实例等业务模拟场景下,测试人脸检测与对齐、特征提取、特征匹配检索过程,并进行人脸识别算法效率和精度的优化。利用MTCNN及改进的Insightface算法、Faiss框架,基于LFW数据集,以Face++提供的API做参照。分析结果表明,特征提取1v1比对精度达99.76%,1vN比对精度达95.23%,特征提取效率每秒事务处理量达7.84,特征匹配效率较传统算法提升2个数量级。该项人脸识别技术的研究为铁路未来实施超大规模人像库的动态安防布控提供技术支撑。
    Abstract: In highconcurrency, multiinstance and other business simulation scenarios,this paper tested the process of face detection, feature extraction, feature matching retrieval, and optimized the efficiency and accuracy of face recognition algorithm. The paper used MTCNN, improved Insightface algorithm and Faiss frame, based on LFW data set, compared the extracted features with the API provided by Face++. The analysis results show that the precision of feature extraction is 99.76% for 1v1 and 95.23% for 1v N. The efficiency of feature extraction is 7.84 per second. The efficiency of feature matching is two orders of magnitude higher than that of traditional algorithms. The research on this face recognition technology provides technical support for railway to carry out the dynamic security control of super scale person image database in the future.
  • 人脸识别是基于图像处理、模式识别等技术,利用人的脸部信息特征,来进行身份验证与鉴别的生物识别技术。人脸识别技术已在交通出行、手机解锁、资质认证等领域得到广泛应用。人脸识别过程一般分为人脸检测与对齐、特征提取、特征匹配检索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场景下的搜索匹配过程进行优化,提高模型的效率与适用性。

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

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

    图  2  MTCNN流程

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

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

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

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

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

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

    $$L_i^{\det } = y_i^{\det }\log ({p_i}) + (1 - y_i^{\det })(1 - \log ({p_i}))$$ (1)

    其中,${p_i}$表示第i个样本预测为人脸的概率;$y_i^{\det } \in {\rm{\{ 0,1\} }}$,表示第i个样本的真实值。

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

    $$L_{{i}}^{box} = \left\| {\hat y_i^{box} - y_i^{box}} \right\|_2^2$$ (2)

    其中,$\hat y_i^{box}$表示网络输出的回归目标值,$y_i^{box}$表示真实的回归目标值。

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

    $$L_i^{landmark} = \left\| {\hat y_i^{landmark} - y_i^{landmark}} \right\|_2^2$$ (3)

    其中,$\hat y_i^{landmark}$表示网络输出的面部关键点坐标值,$y_i^{landmark}$表示真实坐标值。

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

    $$\min \sum\nolimits_{i = 1}^N {\sum\nolimits_{j \in (\det ,box,landmark)} {{\alpha _j}\beta _i^jL_i^j} } $$ (4)

    其中,N表示样本的数量,${\alpha _j}$表示各层网络的权重,某个网络越重要则所对应的值越大,$\,\beta _i^j$表示样本的类型。

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

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

    图  3  残差单元修改前后

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

    $$L = - \dfrac{1}{b}\sum\limits_{i = 1}^b {\log \dfrac{{{e^{s(\cos ({\theta _{{y_i}}} + m))}}}}{{{e^{s(\cos ({\theta _{{y_i}}} + m))}} + \displaystyle\sum\nolimits_{j = 1,j \ne {y_i}}^n {{e^{s\cos ({\theta _j})}}} }}} $$ (5)

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

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

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

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

    (3)由 C++实现,提供了Python封装接口;

    (4)支持GPU。

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

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

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

    表  1  Insightface性能测试情况
    模拟线程
    (用户)数
    模拟
    连接数
    实例个数 TPS/个 平均响应时间/msCPU
    使用率
    1117.8412828
    1219.1921728
    1419.1943128
    1128.2412028
    12211.5417351
    14212.1932653
    110211.9981853
    1137.7912828
    12311.6417051
    1438.2947845
    下载: 导出CSV 
    | 显示表格
    表  2  Insightface与Face++的特征提取效率对比
    算法耗时/ms
    Insightface128
    Face++300~400
    下载: 导出CSV 
    | 显示表格

    精度测试基于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++测试结果对比
    算法精度
    Insightface0.99767±0.00281
    Face++[0.99283333, 0.99733333, 0.997, 0.99416667]
    下载: 导出CSV 
    | 显示表格

    (2)1vN比对测试

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

    表  4  1vN情况下Insightface与Face++测试结果对比
    算法阈值精度
    Insightface[0.24,0.44,0.64,0.84,1.04,
    1.24,1.44,1.64,1.84,2.04]
    [0.0305,0.3181,0.6927,0.8887,0.9383,
    0.9504,0.9523,0.9523,0.9523,0.9523]
    Face++[70,72,74,76,78,80,82,84,
    86,88]
    [0.9619,0.9619,0.9619,0.9619,0.9619,
    0.9619,0.9619,0.9619,0.9619,0.9595]
    下载: 导出CSV 
    | 显示表格

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

    表  5  Faiss与kd-tree搜索性能对比测试
    搜索方法底库大小搜索数量耗时/s
    kd-tree1000010008.35
    Faiss1000010000.05
    下载: 导出CSV 
    | 显示表格

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

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

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

  • 图  1   人脸识别流程

    图  2   MTCNN流程

    图  3   残差单元修改前后

    表  1   Insightface性能测试情况

    模拟线程
    (用户)数
    模拟
    连接数
    实例个数 TPS/个 平均响应时间/msCPU
    使用率
    1117.8412828
    1219.1921728
    1419.1943128
    1128.2412028
    12211.5417351
    14212.1932653
    110211.9981853
    1137.7912828
    12311.6417051
    1438.2947845
    下载: 导出CSV

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

    算法耗时/ms
    Insightface128
    Face++300~400
    下载: 导出CSV

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

    算法精度
    Insightface0.99767±0.00281
    Face++[0.99283333, 0.99733333, 0.997, 0.99416667]
    下载: 导出CSV

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

    算法阈值精度
    Insightface[0.24,0.44,0.64,0.84,1.04,
    1.24,1.44,1.64,1.84,2.04]
    [0.0305,0.3181,0.6927,0.8887,0.9383,
    0.9504,0.9523,0.9523,0.9523,0.9523]
    Face++[70,72,74,76,78,80,82,84,
    86,88]
    [0.9619,0.9619,0.9619,0.9619,0.9619,
    0.9619,0.9619,0.9619,0.9619,0.9595]
    下载: 导出CSV

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

    搜索方法底库大小搜索数量耗时/s
    kd-tree1000010008.35
    Faiss1000010000.05
    下载: 导出CSV
  • [1]

    K. Zhang, Z. Zhang, Z. Li, et al. Joint Face Detection and Alignment Using Multitask Cascaded Convolutional Networks [J]. IEEE Signal Processing Letters, 2016, 23(10): 1499-1503. DOI: 10.1109/LSP.2016.2603342

    [2]

    K. He, X. Zhang, S. Ren, et al. Deep residual learning for image recognition[C]// IEEE Conference on Computer Vision and Pattern Recognition (CVPR), Las Vegas. 2016:770-778.

    [3]

    Ouyang W, Zeng X, Wang X, et al. DeepID-Net: Object Detection with Deformable Part Based Convolutional Neural Networks [J]. IEEE Transactions on Pattern Analysis & Machine Intelligence, 2017, 39(7): 1320-1334.

    [4]

    F. Schroff, D. Kalenichenko, J. Philbin. FaceNet: A unified embedding for face recognition and clustering[C]//IEEE Conference on Computer Vision and Pattern Recognition (CVPR), Boston. 2015: 815-823.

    [5]

    W. Liu, Y. Wen, Z. Yu, et al. SphereFace: Deep Hypersphere Embedding for Face Recognition[C]// 2017 IEEE Conference on Computer Vision and Pattern Recognition (CVPR), Honolulu. 2017: 6738-6746.

    [6]

    J. Deng, J. Guo, N. Xue, S. Zafeiriou. ArcFace: Additive Angular Margin Loss for Deep Face Recognition[C]//2019 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR), Long Beach. 2019: 4685-4694.

    [7]

    W. Hunt, W. R. Mark, G. Stoll. Fast kd-tree Construction with an Adaptive Error-Bounded Heuristic[C]//2006 IEEE Symposium on Interactive Ray Tracing, Salt Lake City. 2006: 81-88.

    [8]

    D. Lowe. Distinctive image features from scale-invariant key points [J]. International Journal of Computer Vision, 2004, 60(2): 91-110. DOI: 10.1023/B:VISI.0000029664.99615.94

    [9]

    Bay H, Tuytelaars T, Van Gool L. Surf: Speeded up robust features[C]//European conference on computer vision. Springer, Berlin, Heidelberg, 2006: 404-417.

    [10]

    E. Rublee, V. Rabaud, K. Konolige, et al. ORB: An efficient alternative to SIFT or SURF[C]// 2011 International Conference on Computer Vision, Barcelona. 2011: 2564-2571.

    [11] 贾成强,戴琳琳,徐海涛,等. 基于人脸识别技术的铁路实名制进站核验系统研究及设计 [J]. 铁路计算机应用,2018,27(7):49-53, 63. DOI: 10.3969/j.issn.1005-8451.2018.07.012
  • 期刊类型引用(2)

    1. 全轲. 基于模糊综合评价法的铁路行车组织安全水平评价探讨. 铁道经济研究. 2024(02): 58-63 . 百度学术
    2. 徐威. LOPA分析在天然气压缩机站场项目风险管控中的应用. 项目管理技术. 2022(06): 128-132 . 百度学术

    其他类型引用(1)

图(3)  /  表(5)
计量
  • 文章访问数:  236
  • HTML全文浏览量:  1417
  • PDF下载量:  89
  • 被引次数: 3
出版历程
  • 收稿日期:  2020-01-26
  • 刊出日期:  2020-10-25

目录

/

返回文章
返回