Skip to content

DeepLearning笔记(11)——人脸识别

1. 人脸验证和人脸识别

  • 人脸验证(Face Verification):1对1问题,即输入图片,判断图片是否是正确的那个人(即已经有了一个人的信息)
  • 人脸识别(Face Recognition):1对n问题,即输入图片,需要输出对应的那个人信息(即已经有了n个人的信息)

2. One-Shot 学习

对于图像的识别,通常需要大量的标注样本。对于一个企业的人脸识别系统,可能数据库中只有每个员工的一张照片,那么就需要通过这一个样本来进行学习,这就是one-shot learning,即单样本学习。

相似度函数,用 表示两张图片之间的不同程度(即两张图片的差异值)。如果两张图片是同一个人,则输出值会很小;如果两张图片是不同的人,则输出值会很大。定义一个阈值 ,如果 ,则认为是同一个人;否则认为是不同的人。

3. Siamese Network

即孪生网络。相关论文可以参考 DeepFace: Closing the Gap to Human-Level Performance in Face Verification

假设有两张人脸的图片 ,分别通过卷积网络来得到一个向量(即softmax之前的向量),认为是这张图片的encoding,则:

在训练的时候,要对训练样本中的任意一对 ,保证当两张图片是同一个人的时候, 很小;当两张图片是不同人的时候, 很大。

4. Triplet 损失

其中:

  • A (Anchor)
  • P (Positive):正样本,即和Anchor是同一个人
  • N (Negetive):负样本,即和Anchor是不同的人

需要满足:

即:

但是这种情况下,如果每张图片的encoding都是一个零向量,则上面的式子总是满足的。因此需要:

定义损失函数:

则整个网络的损失函数为:

那么如何选择这三元组呢?如果是随机选择的话,很有可能A和N的差异会很大,从而导致网络不需要过多学习就可以轻易地进行区分。为了避免这种情况,需要选取 的样本。更多细节可以参考论文 FaceNet: A Unified Embedding for Face Recognition and Clustering

5. 二分类

也可以将人脸识别当做一个二分类的问题。

如图所示,两张图片 分别经过同一个卷积网络得到编码 (假设编码是128维的向量),然后令:

即将人脸识别当做一个监督学习,将成对的图片作为训练样本。如果两张图片是同一个人,则标签为1;如果两张图片是不同的人,则标签为0。