SeetaFace2是中科视拓在2019年发布的开源人脸识别引擎,使用c++编写,支持windows、linux系统,支持arm、x86平台,功能包含人脸检测、关键点定位、人脸识别,相比于2016开源的SeetaFace在性能上有很大提升,并在2020开源了SeetaFace6,增加了活体检测、质量评估、年龄性别估计、口罩检测。
本文主要讲解SeetaFace2的人脸识别功能,人脸识别主要包括人脸检测、关键点定位、人脸区域特征提取、特征相似度比对。
1 算法理论
1.1 人脸检测算法 Cascate CNN 架构
该模型将人脸识别的图像分为三个阶段,每个阶段进行一次识别,并通过级联的方式将每一阶段的图像特征和上一阶段学习到的特征级联后进行softmax。分别使用了 12x12、24x24 和 48x48 的网络,对人脸图像进行三阶段的识别
1.2 面部关键点定位 FEC-CNN 网络架构
前向卷积神经网络将多个残差学习块串联在一起,利用模型的深度学习图像的深层表征。
1.3 人脸特征提取 ResNet50
2 源码分析
2.1 结构图
整体框架比较清晰,核心算法处理集中在SeetaNet库
2.2 各模块介绍
2.2.1 人脸检测 FaceDetector
根据肤色等特征定位人脸区域
LoadModelBuffer
分别构建12x12、24x24 和 48x48 三阶段网络模型
detect检测
2.2.2 关键点定位 FaceLandmarker
根据人脸图像获取面部关键点位置
key=Common/EltwiseOP,获取数据
2.2.3 人脸区域特征提取、特征相似度比对 FaceRecognizer
特征提取
根据人脸图像获取人脸特征向量。
相似度比对
对比人脸特征向量
CalcSimilarity 余弦相似度
2.2.4 质量评估 QualityAssessor
检测图像亮度、人脸框大小、头部姿态,图像清晰度
2.2.5 人脸追踪 FaceTracker
实时追踪人脸框
调用人脸检测计算出人脸框,通过对比前后两帧人脸框的重叠面积比来判断是否跟丢人脸,当跟踪人脸时更新人脸PID。
github地址: seetafaceengine/SeetaFace2github.com