基于神经网络的人脸识别演进:从 DeepFace 到 ArcFace 及更远
引言
人脸识别的目标,是根据人脸图像识别或验证一个人的身份。它是计算机视觉中最活跃、影响力也最大的方向之一。从 handcrafted features 迁移到深度神经网络之后,精度、鲁棒性与可扩展性都获得了巨大提升。
Deep Learning 之前
Eigenfaces 与 Fisherfaces(1990 年代)
早期人脸识别方法通常把人脸图像视为高维向量,并通过降维技术完成识别。Eigenfaces(基于 PCA)和 Fisherfaces(基于 LDA)具有开创性意义,但对光照、姿态和表情变化都较敏感。
局部特征描述子(2000 年代)
LBPH、Gabor features 等方法通过编码局部纹理信息提升了一定鲁棒性,但在开放环境下的人脸识别任务中,其表达能力仍显不足。
Deep Learning 革命
DeepFace (2014)
Facebook 提出的 DeepFace 是一个关键里程碑,在 LFW benchmark 上达到 97.35%,接近人类水平。其主要创新包括:
- 将 3D face alignment 作为预处理步骤
- 使用 400 万张图像进行训练
- 基于 softmax classification 的 deep CNN architecture
- 证明学习型特征远优于 handcrafted features
DeepID 系列(2014–2015)
香港中文大学提出的 DeepID 系列进一步提升了精度:
- 从不同脸部区域提取特征的 multi-patch 方法
- identification 与 verification 的 joint learning
- DeepID2+ 在 LFW 上达到 99.47%
FaceNet (2015)
Google 的 FaceNet 引入了 triplet loss:
- 在欧氏空间中直接学习 embedding
- 采用高效的 triplet selection 策略
- 生成适合大规模检索的 128 维 embedding
- 在 LFW 上达到 99.63%
ArcFace 革命
ArcFace:Additive Angular Margin Loss (CVPR 2019)
InsightFace 团队提出的 ArcFace,以简洁而高效的 loss function 重新定义了人脸识别训练范式,并逐步成为事实标准。
核心创新
ArcFace 在归一化 hypersphere 上,将特征向量与目标类别中心之间的角度加入 angular margin。其损失函数如下:
L = -log(e^(s·cos(θ_yi + m)) / (e^(s·cos(θ_yi + m)) + Σ e^(s·cos(θ_j))))
其中,m 表示 additive angular margin,s 表示 scaling factor。
ArcFace 有效的原因
- 几何解释清晰:角度间隔在 hypersphere 上有明确几何意义
- 训练稳定:相比其他 margin-based loss,ArcFace 更容易稳定收敛
- 泛化能力强:可同时增强类内紧凑性与类间可分性
影响与普及
ArcFace 已成为最广泛采用的人脸识别 loss function 之一:
- 引用超过 8,000 次
- 被集成到 InsightFace 及众多其他 framework 中
- 成为 NIST FRVT 顶级结果的重要基础
扩展到大规模训练:Partial FC (CVPR 2022)
面向超大规模分类层的优化
当人脸识别数据集扩展到数百万身份时,分类层会成为瓶颈。Partial FC 通过以下方式解决这一问题:
- 每次训练迭代仅随机采样一部分类中心
- 支持在单机上训练 10M+ identities
- 在保持精度的同时显著降低内存与计算成本
- 是现实生产级模型的重要组成部分
处理噪声:Sub-center ArcFace (ECCV 2020)
面向脏数据的稳健训练
真实世界训练数据往往包含错误标签。Sub-center ArcFace 的应对方式包括:
- 每个类别不只学习一个中心,而是学习 K 个 sub-center
- dominant sub-center 聚焦干净样本
- 非主导 sub-center 吸收噪声样本
- 有助于自动发现并清理噪声数据
当前的主流实践
InsightFace Recognition Pipeline
InsightFace 提供完整的人脸识别 pipeline:
from insightface.app import FaceAnalysis
import numpy as np
app = FaceAnalysis(name='buffalo_l')
app.prepare(ctx_id=0, det_size=(640, 640))
# Extract embeddings
face1 = app.get(img1)[0]
face2 = app.get(img2)[0]
# Compute similarity
sim = np.dot(face1.embedding, face2.embedding)
sim = sim / (np.linalg.norm(face1.embedding) * np.linalg.norm(face2.embedding))
print(f"Similarity: {sim:.4f}")
Model Zoo
InsightFace 的 model zoo 提供适用于不同部署需求的预训练模型:
| Model | Backbone | LFW | CFP-FP | AgeDB-30 |
|---|---|---|---|---|
| buffalo_s | MobileFaceNet | 99.33% | 95.51% | 95.13% |
| buffalo_l | ResNet-50 | 99.83% | 99.50% | 98.23% |
| antelopev2 | ResNet-100 | 99.80% | 99.47% | 98.10% |
未来方向
这一领域仍在持续演进:
- Masked face recognition:更好处理局部遮挡的人脸
- Cross-age recognition:提升跨年龄段识别稳定性
- Privacy-preserving recognition:结合同态加密与 Federated Learning
- 3D face recognition:借助深度信息进一步提升能力
结论
从 Eigenfaces 到 ArcFace,人脸识别经历了深刻变革。InsightFace 的 ArcFace、Partial FC 与 Sub-center ArcFace 都是这一演进中的关键成果,为研究与产业提供了高性能、可扩展的人脸识别基础设施。