Abotw's Space

Back

1. 为什么关注人脸识别?#

最近在做工程实训时,对 **Computer Vision (CV)**领域的人脸识别(Face Recognition, FR)产生了一些兴趣。

2. 人脸识别的“四步走”#

很多外行以为人脸识别就是一个端到端的黑盒,输入照片,输出名字。但实际上,工业界主流的流程通常包含四个紧密耦合的模块:

  1. 人脸检测 (Face Detection): 先在图像中找到人脸的位置(Bounding Box)。
  2. 人脸对齐 (Face Alignment): 通过定位关键点(landmarks),把人脸“扶正”,解决角度偏移问题。
  3. 特征提取 (Feature Extraction): 核心环节。将像素信息转化为计算机能理解的向量(Embedding)。
  4. 特征比对 (Face Matching): 计算向量之间的距离,判断是不是同一个人。

3. 核心原理:从像素到向量的映射#

人脸识别的本质,是一个度量学习 (Metric Learning) 问题。

目标是训练一个神经网络 ff,将输入的人脸图像 xx 映射到一个 dd 维的特征空间(通常是 128维、512维或 1024维)。

在这个高维空间里,需要满足两个条件:

  • 类内紧凑 (Intra-class compactness): 同一个人的不同照片,特征向量要尽可能靠近。
  • 类间可分 (Inter-class separability): 不同人的照片,特征向量要尽可能远离。

判定两个人是否相似,通常计算两个特征向量 uuvv 之间的欧几里得距离或余弦相似度:

Cosine Similarity(u,v)=uvuv\text{Cosine Similarity}(u, v) = \frac{u \cdot v}{\|u\| \|v\|}

如果相似度超过设定的阈值 (Threshold),就认为是同一个人。

4. 技术演进:从特征工程到深度学习#

这部分的演进史非常精彩,完美体现了 AI 领域从“人工设计”到“数据驱动”的范式转移。

1.0 时代:传统几何与统计方法 (Pre-2012)#

早期的算法非常依赖数学直觉。

  • Eigenfaces (特征脸): 利用 PCA (主成分分析) 进行降维。
  • Haar / LBP 特征: 手工设计的特征算子。
  • 缺点: 对光照、遮挡、姿态非常敏感,鲁棒性很差。

2.0 时代:深度学习爆发 (2014 - Present)#

2014年 Facebook 提出的 DeepFace 是转折点,它首次将卷积神经网络 (CNN) 引入人脸识别,达到了接近人类的准确率(97.35% on LFW)。

随后的发展主要集中在 Loss Function (损失函数) 的改进上,这是最烧脑但也最精妙的部分:

  • Softmax Loss: 最基础的分类损失,但在特征分离上不够强。
  • Triplet Loss (三元组损失): Google 在 FaceNet 中提出。每次输入三张图(Anchor, Positive, Negative),强行拉近 Anchor 和 Positive,推开 Negative。
    • 难点: 数据挖掘(Mining)很难,训练收敛慢。
  • Center Loss: 像聚类一样,为每个类别学习一个中心,强迫特征向中心靠拢。
  • ArcFace / CosFace (SOTA): 目前最主流的方法。它们在角度空间(Angular Space)引入了 Margin(间隔),在超球面上把不同的人脸特征“挤”得更开。

划重点: 现在的 SOTA 模型(如 ArcFace)不再是在平面上区分人脸,而是把人脸映射到一个超球面上进行区分。

5. 工业界实战中的“坑”与挑战#

在实验室跑 Demo 和实际落地完全是两码事。工程落地主要面临以下挑战:

A. 活体检测 (Liveness Detection)#

如果有人拿高清人脸照片去刷脸支付怎么办?

为了防御这种 Presentation Attack (PA),需要活体检测:

  • 配合式: 眨眼、张嘴、摇头。
  • 静默式: 利用双目摄像头(深度信息)或 红外摄像头(IR)来区分真人的皮肤材质和纸张/屏幕的区别。

B. 遮挡与恶劣环境#

  • 口罩遮挡: 疫情期间的热点,只能靠眉眼特征识别,难度激增。
  • 侧脸与暗光: 当人脸偏转超过一定角度(如 60度),或者在全黑环境下,识别率会断崖式下跌。

6. 常用工具与数据集#

作为学生党,如果想动手实践,不需要从零造轮子,有很多优秀的开源库:

  • OpenCV: 计算机视觉的基础库,虽然自带的人脸识别较老,但处理图像必不可少。
  • dlib: 经典的 C++ 库(有 Python 接口),内置了基于 HOG 和 CNN 的人脸检测与识别,简单好用。
  • InsightFace: 基于 PyTorch/MXNet 的开源项目,汇集了目前最强的 ArcFace 等算法,非常适合作为 Baseline。

数据集 (Datasets):

  • LFW (Labeled Faces in the Wild): 学术界的“Hello World”基准。
  • MS-Celeb-1M / CASIA-WebFace: 训练用的海量数据集。

7. 关于隐私与伦理的思考#

最后,作为技术人员,不能忽视技术背后的阴影。人脸数据是生物特征隐私,一旦泄露无法更改(不能像换密码一样换脸)。

  • 数据歧视: 很多模型在白人男性上准确率高,但在有色人种或女性上表现较差(训练数据偏差导致)。
  • 滥用风险: 监控与追踪技术的边界在哪里?

在未来的开发中,GDPR 等法规的合规性以及端侧推理(数据不出设备)将是重要的技术方向。

8. 总结#

人脸识别虽然已经很成熟,但在极低算力设备上的部署、对抗攻击的防御(Adversarial Attack)等方向依然有很多可做的研究。

人脸识别技术概述
https://abotw.github.io/blog/face-recognition
Author Abotw
Published at December 9, 2025
Comment seems to stuck. Try to refresh?✨