视觉 AI 作为一个已经发展成熟的技术领域,具有丰富的应用场景和商业化价值,全球 40% 的 AI 企业都集中在视觉 AI 领域。近年来,视觉 AI 除了在智能手机、智能汽车、智慧安防等典型行业中发挥重要作用外,更全面渗入细分的实体行业,催生了如车站人脸实名认证、人脸支付、小区人脸门禁管理、酒店自助人脸实名登记等视觉 AI 的应用。
人脸识别是视觉 AI 领域中技术成熟度、商业应用程度都比较高的一个技术。人脸识别又称为面部识别,是基于生物特征的识别方式。与指纹识别等传统的识别方式相比,人脸识别具有实时、准确、易于使用、稳定、难仿冒、无须接触等特点。
本文将介绍一个人脸识别项目。此项目基于开源的人脸检测算法 MTCNN、人脸识别库 InsightFace,以及向量相似度搜索引擎 Milvus 实现。
| 关键技术
人脸识别通常包括人脸检测、人脸特征提取、人脸特征比对这三个环节。
人脸检测
人脸检测是人脸识别完整流程中的一个环节。人脸识别系统首先用摄像头采集含有人脸的图像或视频流,然后用人脸检测技术检测人脸位置、定位五官关键点、提取人脸,随后才能进行人脸图像预处理及人脸特征提取。
在实际商业化方案中,人脸检测也可独立于人脸识别进行使用。比如近期被广泛应用的 AI 测温设备就是基于人脸检测技术迅速锁定人脸区域,从而实现红外热成像远距离自动测温。
人脸特征提取
主流的人脸识别算法在进行最核心的人脸比对时,主要依靠人脸特征值的比对。所谓特征值,即面部特征所组成的信息集。
人脸识别算法利用卷积神经网络对海量人脸图片进行学习。它从输入图像中提取出区分不同人脸的特征向量,以替代人工设计的特征。每张人脸在算法中都有一组对应的特征值,这也是人脸比对的依据。
人脸比对
人脸比对是对通过深度学习模型提取出的人脸特征向量进行相似度比对。从同一人的不同照片中提取出的特征值在特征空间里的距离很近;反之,从不同人的照片中提取出的特征值在特征空间里的距离较远。
人脸比对一般会设定一个阈值作为评判通过与否的标准,该阈值一般是用分数或者百分比来衡量。当人脸比对的相似度值大于此阈值时,则比对通过,否则比对失败。一般用拒真率和认假率两个指标来评估人脸比对的效果。
- 拒真率 FRR(False Rejection Rate):拒真率是指本人亲自比对但是比对失败了,把“真的”当成了“假的”。
- 认假率 FAR(False Accept Rate):认假率是指人脸比对通过了但其实并不是本人,把“假的”认成了“真的”。
设定的阈值越高,认假率越低,拒真率越高。尽管 FAR 和 FRR 都是越低越好,但两个指标中一个指标的降低会导致另一个指标的升高,所以实际设定的阈值需要根据具体场景去实现两者间的平衡[1]。
| 实现与应用
实现
人脸识别是对摄像头采集到的人脸图像信息进行分析,这一过程主要包括了人脸检测、特征提取和特征比对。本项目使用 MTCNN 完成人脸检测功能,InsightFace 完成人脸特征提取的功能,然后使用 Milvus 完成人脸特征向量的相似度检索。项目流程如图所示:
MTCNN
MTCNN (Multi-task Cascaded Convolutional Networks) 是目前比较流行的人脸检测算法,采用 TensorFlow 框架编写。MTCNN 模型是多任务网络,通过 PNet、RNet、ONet 三个网络级联。下图是三个网络结构:
在提取人脸特征前,通常需要对输入的图像进行中心裁剪。本项目用 MTCNN 对图像进行调整,提取图像中的人脸边界和人脸关键点(包括眼睛、鼻子、嘴角这五个关键点)。
InsightFace
InsightFace 是一个基于 MXNet 的开源的人脸识别库,也是对 Deng J[2] 等人提出的算法的实现。InsightFace 的网络主干包括 ResNet、MobilefaceNet、MobileNet、InceptionResNet_v2、DenseNet、DPN。损失函数包括了 Softmax、SphereFace、CosineFace、ArcFace and Triplet (Euclidean/Angular) Loss。
本项目用 InsightFace 提供的模型将 MTCNN 处理过的人脸图像提取为 512 维的特征向量。
Milvus
Milvus 支持使用多种 AI 模型向量化非结构化数据,并为向量数据提供搜索分析服务。它可处理的业务包括图像处理、机器视觉、自然语言处理、语音识别、推荐系统以及新药发现。具体实现方式是:
- 通过深度学习模型将非结构化数据转化为特征向量,并导入 Milvus 库。
- 对特征向量进行存储并建立索引。
- 接收到用户的向量搜索请求后,返回与输入向量相似的结果。
Milvus 充分利用现代处理器的并行计算能力,可以在单台通用服务器上完成对十亿级数据的毫秒级搜索。人脸库的数据量通常是非常庞大的,因此本项目选择使用 Milvus 来完成人脸比对。
本项目中,我们将 InsightFace 提取出的人脸特征向量导入 Milvus 中,Milvus 会对特征向量进行存储并建立索引。在进行比对时,我们在 Milvus 中查询要识别的人脸的特征向量,Milvus 将返回库中与该人脸向量最相似的向量和相似度。这里我们使用余弦距离来计算人脸相似度,当两张人脸图像的余弦距离大于 0.85 时判定为同一个人。
| 应用
上面介绍了如何通过 MTCNN、InsightFace 和 Milvus 实现一个人脸识别项目。在具体的应用中,我们通过结合人脸识别和声纹识别实现了一个生物多因子认证系统。所谓生物多因子认证,就是利用认证人所拥有的生物信息(包括指纹、人脸、声纹等)实现的一种更加安全的身份认证方式。我们实现的生物多因子认证系统具体搭建步骤可以参考:
https://github.com/milvus-io/bootcamp/tree/master/solutions/MFA。
关于声纹识别的介绍请参考本系列的第一篇文章:Milvus 实战|生物多因子认证系列 (一):声纹识别。
| 结语
本文介绍了 Milvus 在视觉 AI 领域的一个应用,通过对海量人脸特征向量的相似度匹配来实现人脸识别。Milvus 作为一款向量相似度检索引擎,在其他 AI 领域也有着丰富的应用场景,涉及自然语言处理、声音处理等领域。Milvus 的目标是成为 AI 领域中通用的数据处理平台,致力于加速 AI 技术在各个场景中的落地,更多应用场景请参考 https://tutorials.milvus.io/cn/。
参考文献
- https://www.zhihu.com/question/57515604/answer/1210825250
- Deng J, Guo J, Xue N, et al. Arcface: Additive angular margin loss for deep face recognition[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2019: 4690-4699.