文章

05 人脸验证与二分类

05 人脸验证与二分类

05 人脸验证与二分类

一、核心思想

人脸验证(Face Verification) 问题转化为一个 监督学习的二分类任务

  • 输入:一对人脸图像 $(x^{(1)}, x^{(2)})$
  • 输出:标签 $y \in {0, 1}$

    • $y = 1$:两张图是同一个人
    • $y = 0$:两张图是不同人

这与 Triplet Loss 方法不同,后者需要三元组(anchor, positive, negative),而本方法只需成对样本(pairwise data)。


二、Siamese 网络结构

  • 使用 两个共享权重的卷积神经网络(即 Siamese 网络)分别处理输入图像 $x^{(1)}$ 和 $x^{(2)}$。
  • 每个分支输出一个 嵌入向量(embedding) ,通常为 128 维(或更高维):

    \[f(x^{(1)}) \in \mathbb{R}^{128}, \quad f(x^{(2)}) \in \mathbb{R}^{128}\]
  • 由于网络参数共享,两个分支的函数 $f(\cdot)$ 完全相同。

三、相似度度量与分类器设计

为了判断两张图是否属于同一人,需将两个嵌入向量转换为一个标量相似度分数,再通过逻辑回归(Logistic Regression)输出概率。

1. 绝对差特征(Absolute Difference Features)

最常用的方法是取两个嵌入向量各维度的绝对差作为特征:

\[|f(x^{(1)})_i - f(x^{(2)})_i|, \quad i = 1, 2, \dots, 128\]

将这 128 个值作为逻辑回归的输入特征。

逻辑回归的预测为:

\[\hat{y} = \sigma\left( \sum_{i=1}^{128} w_i \cdot |f(x^{(1)})_i - f(x^{(2)})_i| + b \right)\]

其中:

  • $\sigma(z) = \frac{1}{1 + e^{-z}}$ 是 sigmoid 函数
  • $w_i$ 和 $b$ 是可学习参数

✅ 这种方式让模型自动学习哪些维度的差异对身份判别更重要。

2. 平方相似度(Squared Similarity / Chi-Squared Distance)

另一种常见度量来自 DeepFace 论文(Taigman et al., 2014):

\[\chi^2(f(x^{(1)}), f(x^{(2)})) = \sum_{i=1}^{128} \frac{(f(x^{(1)})_i - f(x^{(2)})_i)^2}{f(x^{(1)})_i + f(x^{(2)})_i + \epsilon}\]

其中 $\epsilon$ 是防止除零的小常数。

也可以直接使用 余弦相似度欧氏距离平方

\[d^2 = \| f(x^{(1)}) - f(x^{(2)}) \|^2_2\]

然后将其作为逻辑回归的单一输入特征。


四、训练方式

  • 训练数据:大量成对图像 $(x^{(1)}, x^{(2)})$ 及其标签 $y \in {0,1}$
  • 损失函数:标准的 二元交叉熵损失(Binary Cross-Entropy Loss)

    \[\mathcal{L} = - \left[ y \log(\hat{y}) + (1 - y) \log(1 - \hat{y}) \right]\]
  • 优化:通过反向传播联合训练 Siamese 网络和顶部的逻辑回归层。

🔁 注意:Siamese 网络的两个分支 参数绑定(tied weights) ,即更新时同步更新。


五、部署优化:预计算嵌入(Embedding Precomputation)

在实际应用中(如门禁系统):

  • 数据库中的员工图像:可预先计算并存储其嵌入向量 $f(x_{\text{db}})$
  • 新来人员图像:实时通过 CNN 提取嵌入 $f(x_{\text{new}})$
  • 然后与所有预存嵌入比较,计算相似度并分类

优势

  • 无需存储原始图像
  • 大幅减少在线计算量(只需一次前向传播 + 快速相似度计算)
  • 适用于大规模数据库

💡 此技巧不仅适用于二分类方法,也适用于 Triplet Loss 训练的模型。


六、与 Triplet Loss 方法对比

方法输入形式损失函数训练难度部署效率
Triplet Loss三元组 (A, P, N)$\max(|f(A)-f(P)|^2 - |f(A)-f(N)|^2 + \alpha, 0)$较高(需挖掘难负样本)高(可预计算嵌入)
二分类(Siamese + Logistic)成对图像二元交叉熵较低(标准监督学习)高(可预计算嵌入)

两者都能有效学习身份不变的人脸嵌入,可根据数据和工程需求选择。


七、关键参考文献

  • DeepFace:
    Yaniv Taigman, Ming Yang, Marc’Aurelio Ranzato, Lior Wolf (2014).
    DeepFace: Closing the Gap to Human-Level Performance in Face Verification
    → 提出使用 Siamese 架构 + 仿射变换对齐 + 逻辑分类器进行人脸验证。

✅ 总结要点

  1. 人脸验证 = 二分类问题:输入成对图像,输出是否同人。
  2. Siamese 网络:双分支、共享权重,输出嵌入向量。
  3. 相似度建模:可用绝对差、欧氏距离、卡方距离等作为特征。
  4. 逻辑回归:在嵌入差异上做最终判别。
  5. 部署高效:预计算数据库嵌入,仅实时计算新图像嵌入。
  6. 灵活替代 Triplet Loss:尤其适合有成对标注数据的场景。
本文由作者按照 CC BY 4.0 进行授权