← 返回博客
研究人脸识别ArcFace

基于神经网络的人脸识别演进:从 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 提供适用于不同部署需求的预训练模型:

ModelBackboneLFWCFP-FPAgeDB-30
buffalo_sMobileFaceNet99.33%95.51%95.13%
buffalo_lResNet-5099.83%99.50%98.23%
antelopev2ResNet-10099.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 都是这一演进中的关键成果,为研究与产业提供了高性能、可扩展的人脸识别基础设施。