本报告系统地介绍人脸识别的通用流程,并对各环节主流算法/模型进行优缺点对比,以便更深入地了解和选型。
一、通用流程
人脸识别一般分为以下四个主要环节:
- 人脸检测(Face Detection):在输入图像中定位人脸区域,并(可选)检测关键点。
- 人脸对齐(Face Alignment):根据关键点对人脸进行仿射或三维变换,统一姿态、大小。
- 特征提取(Face Embedding):利用深度神经网络将对齐后人脸映射到低维向量空间。
- 人脸比对/识别(Comparison/Recognition):计算特征距离或使用分类器判断同人或识别身份。
二、人脸检测(Face Detection)
算法/模型 |
简介 |
优点 |
缺点 |
Haar Cascade |
OpenCV 经典级联分类器 |
速度快,易实现 |
准确率低,对角度和光照敏感 |
HOG + SVM |
Dlib 基于梯度方向直方图特征和线性分类器 |
轻量,对标准正脸效果好 |
对姿态、遮挡鲁棒性差 |
MTCNN |
多任务级联 CNN 同时输出 bbox 和五官关键点 |
准确高,支持对齐关键点 |
推理相对较慢 |
RetinaFace |
单阶段 Anchor-based 检测器,包含姿态估计关键点 |
检测精度高,支持大范围姿态 |
模型大,对算力要求高 |
YuNet |
OpenCV DNN 支持的轻量人脸检测器 |
推理快,边缘设备可用 |
侧脸、遮挡场景下鲁棒性一般 |
SCRFD |
轻量化 RetinaFace 替代方案 |
性能接近,速度更快 |
尚在发展,边缘案例效果待提升 |
三、人脸对齐(Face Alignment)
方法 |
简介 |
优点 |
缺点 |
仿射变换 |
基于五官关键点拟合仿射矩阵 |
简单稳健,效率高 |
强依赖关键点检测准确度 |
3D 对齐(PRNet) |
构建稠密 3D 模型进行姿态标准化 |
精度高,适应多姿态 |
计算开销大,推理慢 |
Dlib 68 点对齐 |
Dlib 内置 68 点模型检测并对齐 |
可视化良好,易用 |
模型较大,部分脸型失败率高 |
四、特征提取(Face Embedding)
模型 |
框架 |
特点 |
优点 |
缺点 |
FaceNet |
TensorFlow |
Triplet Loss,128D 输出 |
精度高,泛化性好 |
三元组采样策略复杂 |
ArcFace |
MXNet/PyTorch (InsightFace) |
ArcMargin Loss,提高判别性 |
精度领先,类别间距大 |
训练复杂,需大规模数据 |
SphereFace |
|
|
|
|
- |
角度损失变种 |
强判别能力 |
训练不稳定,难以收敛 |
|
CosFace |
- |
余弦间距损失 |
平衡性能与稳定性 |
对超参数敏感 |
Dlib ResNet |
Dlib |
预训练 ResNet,128D |
部署便捷,接口友好 |
与最新模型相比精度稍弱 |
VGGFace2 |
Keras/PyTorch |
大规模人脸训练集,上百层网络 |
可迁移学习,Fine-tune 灵活 |
计算量大,模型尺寸大 |
MobileFaceNet |
PyTorch |
轻量化网络,适配移动端 |
推理快,资源占用低 |
特征维度和准确率稍逊 |
五、人脸比对与识别(Comparison/Recognition)
方法 |
描述 |
优点 |
缺点 |
Cosine 相似度 |
计算向量间夹角,衡量相似度 |
易计算,常用 |
对向量归一化要求严格 |
欧氏距离 (L2) |
计算特征向量 L2 距离 |
简单直观 |
离群样本敏感 |
Siamese Network |
双输入端网络,训练时输出相似度 |
支持端到端学习 |
需要样本对,训练复杂 |
KNN/SVM 分类器 |
将特征向量当作输入进行分类识别 |
通用性强,可少样本学习 |
对特征分布假设依赖高 |
六、不同应用场景推荐
场景 |
检测模型 |
对齐方法 |
特征提取 |
比对/识别 |
移动端部署 |
YuNet / SCRFD |
仿射对齐 |
MobileFaceNet |
Cosine |
高精度识别 |
RetinaFace |
PRNet 或 仿射 |
ArcFace |
Cosine / Siamese |
快速原型 |
MTCNN |
仿射对齐 |
FaceNet |
Cosine |
多人场景 |
RetinaFace |
自动关键点对齐 |
ArcFace |
Siamese / Cosine |
七、实验建议与扩展