人脸识别技术如今已经广泛应用于我们的日常生活中,为了防止有人利用假脸、照片或视频等手段冒充他人进行欺骗,许多领域都引入了这一技术。例如,手机解锁、在线支付、银行开户、机场安检、智能门禁、酒店入住甚至APP登录等场景,人脸识别已经成为数字身份认证的重要基础。这不仅提高了安全性,还提升了用户体验,使得身份验证更加便捷和可靠。本文将focus到金融风控领域,来看一下有哪些基于人脸的反欺诈技术和应用场景。
一、人脸反欺诈在金融领域应用场景
▌应用1: 基于人脸识别的身份鉴定(人脸核身服务)
通过人脸识别技术进行身份鉴定和身份证明核验,可以组合不同的方案:
1. 活体检测与预留照片比对(无源比对):
通过活体检测拍摄视频或照片,然后检测用户的人脸并提取特征。
将检测到的人脸特征与用户预留的人脸照片进行比对,以判断是否为同一人,并确认出用户身份信息。
2. 活体检测与权威数据比对(有源比对):
通过活体检测拍摄视频或照片,然后检测用户的人脸并提取特征。
将检测到的人脸特征与权威数据中心(如ga、银行、zf等)留存的人脸照片进行比对,以核验用户身份。
(人脸核身流程)
此外,还可以结合OCR识别身份证,从权威数据库核验身份证信息,获取身份证留存人脸信息与活体人脸比对,进一步达到多重交叉验证的目的。
技术关键词:活体检测,人脸检测,人脸对比,人脸搜索,人脸核身
▌应用2: 基于人脸对比的欺诈检测
在伪造身份证的场景中,攻击者可能使用Deepfake技术生成伪造的身份证照片和手持身份证的自拍照片,以达到欺诈的目的。为了有效防范这种欺诈行为,可以采用基于人脸对比的多重交叉验证方法。通过对比身份证照片、手持身份证自拍以及活体检测拍摄的照片,判断这些照片中的人脸是否为同一人。这种多重验证方法可以有效识别伪造的证件照,并确认是否为证照本人。
(证照人脸比对)
当然,活体检测在实际应用中也面临多种攻防手段的挑战,因此需要综合考虑多种检测技术,以提高防御效果。
技术关键词:活体检测,人脸检测,人脸对比,Deepfake
▌应用3: 基于人脸搜索的反欺诈应用
通过在历史人脸数据库中搜索相似的人脸,系统会返回与之相关的历史信息。如果发现历史信息与当前信息不符,例如使用了不同的身份证,则可认定存在欺诈嫌疑。如果未能搜索到相似的人脸,则会将当前人脸及其相关数据存储并累积到数据库中。
(人脸搜索检测反欺诈流程)
东南亚一些国家更换手机号和身份证成本较低,且缺少有源比对,市场上黑产利用身份证贴图(真的身份证件贴假的头像)来绕过身份证验证进行撸贷。使用该服务可有效预防此类欺诈行为。
技术关键词:人脸检测,人脸搜索
▌应用4: 构建人脸反欺诈数据库(黑名单数据库)
构建并积累人脸欺诈数据库或人脸黑名单库,将涉及欺诈行为的用户或黑名单用户的人脸信息录入其中。通常采用向量库来存储人脸特征,同时结合关系数据库保存历史欺诈信息。
在实际应用中,通过传入人脸照片(人脸照片建议通过活体检测采集,以防伪造),进行人脸搜索操作。系统将返回欺诈命中结果以及相关的历史欺诈信息。
(欺诈人脸数据库)
技术关键词:人脸检测,人脸搜索,人脸数据库, 向量数据库,人脸黑名单
二、人脸相关技术与模型
这些人脸相关的名词你知道它们的区别吗? 人脸识别,人脸检测,人脸特征,人脸属性,人脸对齐,人脸比对,人脸验证,人脸搜索,活体人脸。
不同名词背后的技术可能不尽相同,相互组合,盘根交错,让人迷惑。为了让大家更清楚地认知每一个名词及背后技术的差异,这里就人脸的核心关键技术和模型算法给出分析与解释。
▌人脸识别 Face Recognition
人脸识别是一个广义的概念,涵盖了多个相关技术,是人脸检测、比对、搜索等各技术应用的结合。狭义上,人脸识别指的是通过照片或视频流中的人脸,识别出这张脸属于谁。进一步来说,还可以基于识别到的人脸,找出相同或相似的面孔,判断是否为同一个人,并通过大数据获取该人的历史信息及核验身份。此外,人脸识别技术还能够通过人脸照片判断一些属性信息,如性别、年龄、当前情绪和颜值等等。
(人脸识别出属性信息,图片来自Mxface)
▌人脸检测 Face Detection
人脸检测是指检测图像中是否存在人脸,该人脸位于图像中的什么位置。人脸检测是所有其他人脸技术的基础。人脸检测后可以进一步根据人脸位置提取出人脸的关键特征,然后用于人脸身份识别,人脸比对和人脸搜索等其他操作。
人脸检测效果如下图所示,从图片中找到人脸给出置信度,并返回人脸的上下左右边界,可以在图上用框标识出头像。
# Face Check API response
{
"faces": [
{
"confidence": 99.371,
"face_rectangle": {
"x": 230,
"y": 169,
"height": 546,
"width": 376
}
}
]
}
(人脸检测效果图)
当然人脸检测也可以检出多个人脸,目前常见的活动现场照片找人,集体照标记,出席签到,现场人数统计等场景都是基于该技术。
(多张人脸检测效果图)
人脸检测目前使用最广泛的检测器(模型)主要是MTCNN和RetinaFace。
(1) MTCNN
MTCNN(Multi-task Cascaded Convolutional Networks,多任务级联卷积神经网络)是由(Zhang等, 2016)[1]提出的一种用于人脸检测和对齐的深度学习方法。这种方法通过级联三个卷积神经网络(CNN)来实现高效准确的面部识别。
(three-stage multitask deep convolutional networks)
第一阶段,称为P-Net的网络通过浅层卷积神经网络快速生成候选窗口。这一步骤的主要目的是快速筛选出可能包含人脸的区域,确保后续步骤的计算效率。接下来第二阶段,R-Net网络通过更复杂的卷积神经网络进一步处理这些候选窗口,拒绝许多非人脸的边界框。最后,第三阶段的O-Net网络使用更强大的卷积神经网络再次细化结果,并输出五个面部特征点的位置(如眼睛、鼻子和嘴角)。
MTCNN架构的优点在于它的高效性和准确性。通过分阶段处理图像数据,MTCNN能够在保证速度的同时实现高精度的人脸检测和对齐。然而,MTCNN也有一些缺点,它不是端到端的整体训练,因此在训练、使用上都较为复杂。由于其包含多个级联网络,计算资源的需求较高,特别是在处理高分辨率图像时。
(2) RetinaFace
RetinaFace 是(Deng等, 2019)[2]提出的一种人脸检测的深度学习方法,它通过单级卷积神经网络(CNN)实现高效、精确的人脸定位,并在各种复杂环境下展现出色的性能。RetinaFace的核心思想是利用单级网络架构直接在图像中生成密集的人脸检测结果。与传统的多阶段检测方法不同,RetinaFace通过一个单一的卷积神经网络完成所有检测任务。这种设计简化了模型结构,并显著提高了检测速度。
(RetinaFace标识出 5个 facial landmarks)
RetinaFace的网络架构包括一个主干网络和多个检测头。主干网络负责提取图像的特征信息,通常使用预训练模型如ResNet或MobileNet,根据主干网络选择不同,RetinaFace可分为RetinaFace-MobileNet和RetinaFace-Resnet50两种架构。检测头则在不同尺度的特征图上生成人脸候选框和面部特征点位置。
RetinaFace具有高效性和高精度:单级网络架构使得模型能够在保持高检测速度的同时,生成精确的人脸位置和特征点。鲁棒性:通过大量的训练数据和数据增强技术,RetinaFace在各种复杂环境下(如不同光照条件、遮挡和背景复杂度)依然能够保持出色的检测性能。适用于需要高效、实时检测的应用场景,特别是在硬件资源充足的情况下。
目前,工业级使用仍以MTCNN和RetinaFace两种检测方案为主。RetinaFace整体表现更好,在某Benchmark数据集的平均检测精度可以达到99.4%。此外,国内的YuNet项目也值得关注。
人脸检测技术的挑战:有很多因素干扰了人脸检测器的性能,比如遮挡(半边脸),光照,肤色,姿势,面部表情,配饰,妆容(四大神术),口罩,面部比例和图像质量都影响了检测的结果。
▌人脸关键点 Face Landmarks
Face Landmarks(面部特征点检测)主要目标是定位人脸上的关键点,如眼睛(左右眼),鼻子,嘴巴(左右角)5个关键点。一些精细化训练模型可以返回人脸的100+个特征点,进而可以用来做美颜、人脸属性等其他精细化任务。
(Face Landmarks效果图)
# Face Landmark API response
{
"faces": [
{
"confidence": 99.371,
"face_landmark": {
"nose": {
"X": 338.0,
"Y": 329.0
},
"eye_left": {
"X": 377.0,
"Y": 285.0
},
"eye_right": {
"X": 302.0,
"Y": 290.0
}
},
"points": [
{
"X": 266.0,
"Y": 195.0
},
{
"X": 414.0,
"Y": 195.0
},
{
"X": 414.0,
"Y": 420.0
},
{
"X": 266.0,
"Y": 420.0
}
],
"face_rectangle": {
"x": 266,
"y": 195,
"height": 225,
"width": 148
}
}
]
常用的人脸关键点算法有:
· MTCNN、RetinaFace:这两个算法一般检测出5个关键点。
· Dlib’s 68点模型[3] :68点人脸关键点检测模型,基于回归树的集合(Ensemble of Regression Trees)。
· HRNet (High-Resolution Network)[4]: 支持128及以上人脸关键点,在保持高分辨率特征图的同时,逐步增加网络深度,适合高精度人脸关键点检测。
▌人脸对齐 Face Alignment
人脸对齐(Face Alignment)是指在图像中找到人脸的关键点(如眼睛、鼻子、嘴巴等),然后通过几何变换(如仿射变换)使得这些关键点与预定义的标准位置对齐的过程。你去拍证件照,人家要你站在固定位置摆出固定pose,然后拍出的1寸照片中,眼睛,鼻子,嘴巴也都在照片中的固定位置:)
对齐后的图像具有统一的姿态和尺度,便于后续处理。这个过程对于后续的人脸识别、表情识别等任务非常重要,因为它能消除由于人脸姿态、表情和光照变化带来的影响,提高模型的准确性和鲁棒性。
技术实现上,一般来说人脸5个关键特征点,取值已成为业界公认数据,可以直接拿来使用。参考值如下:
#112x112大小头像
std_landmarks = np.array([
[30.2946, 51.6963], # left_eye
[65.5318, 51.5014], # right_eye
[48.0252, 71.7366], # nose
[33.5493, 92.3655], # mouth_left
[62.7299, 92.2041] # mouth_right
], dtype=np.float32)
▌人脸特征提取 Face Feature Extraction
人脸特征提取是从人脸图像中提取出能够唯一表示个体身份的特征向量的过程。与传统机器学习方法提取的具备可解释性的特征(如人脸的边缘形状、皮肤颜色、纹理、大小和眼睛颜色等)不同,现代技术更多地依赖于深度神经网络自动提取出具有深层次关联关系的特征向量。这些深层次特征虽然无法理解,但在身份验证、识别、存储、特征比对和相似度计算等任务中表现出更高的准确性和鲁棒性。
(深度神经网络人脸特征示意,图片来自网络)
常用的特征提取算法包括FaceNet[5]和ArcFace[6] 等。目前工业级应用最好的是ArcFace算法。
(1) ArcFace算法
ArcFace (Deng, et al., 2019)是一种基于深度学习的人脸特征提取算法,具有高精度和高鲁棒性的特点。其核心思想是通过加性角度间隔损失(Additive Angular Margin Loss)来优化特征向量的分布,使得同一身份的特征向量更加集中,不同身份的特征向量更加分散,从而提高识别准确率。
(2) 特征提取流程
人脸检测:使用人脸检测算法(如MTCNN、RetinaFace)在输入图像中检测出人脸区域。这些算法可以精确地定位人脸的位置,并输出人脸的边界框。
图像裁剪:根据检测结果进行图像裁剪,裁剪出人脸图像。裁剪后的图像只包含人脸部分,去除了背景和其他不相关的信息。
人脸对齐:利用人脸特征点(如眼睛、鼻子、嘴巴)进行几何变换,使得人脸在图像中的位置和角度一致。
人脸归一化:对图像进行标准化处理,如调整图像大小、灰度归一化等,以适应模型的输入要求。
特征向量提取:将处理后的图片输入ArcFace模型中,通过前向传播得到特征向量。ArcFace模型通过深度卷积神经网络提取人脸特征,并通过加性角度间隔损失优化特征向量的分布。
后续操作:利用提取出的人脸特征向量进行身份识别、存储、特征比对、相似度计算等进一步操作。
▌人脸比对 Face Comparing
人脸比对是判断两张人脸的相似程度,给出相似度,取值范围是[0,1]。根据相似度设定阈值,来判断是否是同一个人并给出结论,也叫人脸验证。
(人脸比对相似度)
# Face Compare API response
{
"matched_faces": [
{
"match_result": 1, #1 match,0 not match
"similarity": 96.0, #相似度
"image1_face": { #图1人脸检测结果
"confidence": 94.0,
"face_rectangle": {
"x": 284,
"y": 174,
"height": 143,
"width": 107
}
},
"image2_face": { #图2人脸检测结果
"confidence": 95.0,
"face_rectangle": {
"x": 266,
"y": 195,
"height": 225,
"width": 148
}
}
}
]
}
技术实现,首先进行人脸检测,分别提取出两张人脸特征向量,然后基于人脸特征向量进行相似度计算。相似度计算包括 内积,欧式距离,余弦相似度 3种不同算法。一般使用 余弦相似度 来做人脸相似度的计算。
1.内积(Dot Product)
# 计算内积
def euclidean_distance(A, B):
return np.dot(A, B)
2.欧式距离(Euclidean Distance)
# 计算欧式距离
def euclidean_distance(A, B):
return np.linalg.norm(A - B)
3.余弦相似度(Cosine Similarity)
# 计算余弦相似度
def cosine_similarity(A, B):
dot_product = np.dot(A, B)
norm_A = np.linalg.norm(A)
norm_B = np.linalg.norm(B)
return dot_product / (norm_A * norm_B)
▌人脸搜索 Face Searching
人脸搜索是指将当前人脸照片在一个已有的人脸向量库中搜索,找出与目标人脸最相似的一张或多张人脸。通常会涉及一个相似度搜索阈值,范围在(0.5, 1]。
# Face Search API response
{
"count": 1, #搜到结果数
"results": [{
"similarity": 96.46, #相似度
"face_id": "hp2332a7a4awe", #人脸id
"user_id": "123456", #对应用户
"user_info": {}, #用户信息
"order_list": [] #订单历史
}]
}
技术实现上首先要使用向量数据库构建一个人脸向量库,将所有提取出的人脸特征“录入”数据库。向量数据库可以高效地存储和检索这些高维度的数据,并解决相似度检索TopK问题,常用的开源向量数据库为Faiss。
Faiss的全称是Facebook AI Similarity Search,是FaceBook的AI团队针对大规模相似度检索问题开发的一个工具,使用C++编写,有python接口,对10亿量级的索引可以做到毫秒级检索的性能。
使用时,首先经过人脸检测,人脸特征提取获取到人脸特征向量,使用人脸特征向量在Faiss进行搜索TopK,并按相似度阈值进行过滤。如果搜到结果则返回相似人脸,如果未搜到则插入到向量库。
▌总结
以上介绍了所有人脸相关的核心技术及背后的算法,而实现人脸应用是多个技术的组合,总结一般的流程:
step1:人脸检测(MTCNN,RetinaFace)检测出人脸和5个关键点
step2:人脸对齐(固定标准值)
step3:人脸特征提取(ArcFace)
step4:人脸比对(余弦相似度),人脸搜索(Faiss)
本文主要介绍了人脸在金融风控场景的一些应用以及其背后涉及到的技术理论,后面我将用几篇文章通过实践来手把手教你如何训练模型,有哪些Benchmark数据集,模型又是如何部署和在生产环境中使用的。敬请持续关注公众号“技术岁月”。
[1] Zhang K, Zhang Z, Li Z, et al. Joint face detection and alignment using multitask cascaded convolutional networks[J]. IEEE signal processing letters, 2016, 23(10): 1499-1503.
[2] Deng J, Guo J, Zhou Y, et al. Retinaface: Single-stage dense face localisation in the wild[J]. arXiv preprint arXiv:1905.00641, 2019.
[3] Kazemi V, Sullivan J. One millisecond face alignment with an ensemble of regression trees[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2014: 1867-1874.
[4] Sun K, Xiao B, Liu D, et al. Deep high-resolution representation learning for human pose estimation[C]//Proceedings of the IEEE/CVF conference on computer vision and pattern recognition. 2019: 5693-5703.
[5] Schroff F, Kalenichenko D, Philbin J. Facenet: A unified embedding for face recognition and clustering[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2015: 815-823.
[6] Deng J, Guo J, Xue N, et al. Arcface: Additive angular margin loss for deep face recognition[C]//Proceedings of the IEEE/CVF conference on computer vision and pattern recognition. 2019: 4690-4699.
[7] Minaee S, Luo P, Lin Z, et al. Going deeper into face detection: A survey[J]. arXiv preprint arXiv:2103.14983, 2021.
[8] Gong L Y, Li X J. A contemporary survey on deepfake detection: datasets, algorithms, and challenges[J]. Electronics, 2024, 13(3): 585.
[9] Wang F, Chen L, Li C, et al. The devil of face recognition is in the noise[C]//Proceedings of the European Conference on Computer Vision (ECCV). 2018: 765-780.
[10] Zhang S, Wang X, Liu A, et al. A dataset and benchmark for large-scale multi-modal face anti-spoofing[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2019: 919-928.
[11] Cao Q, Shen L, Xie W, et al. Vggface2: A dataset for recognising faces across pose and age[C]//2018 13th IEEE international conference on automatic face & gesture recognition (FG 2018). IEEE, 2018: 67-74.
[12] Yang S, Luo P, Loy C C, et al. Wider face: A face detection benchmark[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 5525-5533.