CNN个人笔记4-人脸识别

face verification

人脸验证的任务是验证一张图片是不是与给出的 NAME/ID 对应

face recognition

人脸识别的任务是输入一张图片,和一个数据库,输出这张图片对应的数据库中的ID。这比人脸验证要复杂一些。

One-shot Learning

One-shot Learning问题指的是只对一个test data进行人脸识别。这实际运用中是经常出现的情况。
按照传统的神经网络的思想的话,当dataset里增加一个人时,输入和softmax的输出需要增加一个,所以必须重新训练神经网络,这实在太低效了。所以可以采用一个比较两张图的“相似度”的函数,来评价人脸的相似度:
CNN个人笔记4-人脸识别

d(x,y) = || x - y ||^2
具体的功能实现,是通过Siamese network

Siamese network

这种网络的原理是将卷积神经网络的输出看做f(x),两张图x1,x2对应的输出是f(x1)和f(x2),再计算d(f(x1),f(x2))来判断是否为同类图像。==我们需要做的是训练卷积神经网络,也就是f(x),使它能做到使同类间的d小,不同类间的d大。==这通过三元组损失函数(triplet loss function)实现。
CNN个人笔记4-人脸识别
三元组损失函数(triplet loss function) 的思路是,将数据集中的图片分成很多的三元组,每个组中有三张图片分别是Anchor, Positive, Negative。

CNN个人笔记4-人脸识别损失函数定义如下:
CNN个人笔记4-人脸识别

其中α是间隔(margin),这个数是为了使我们训练时d(A,P)和d(A,N)相差大一些。训练网络的过程是使上图中的损失函数最小化的过程。
**注意:**在组合三元组时,我们需要尽量组合出“难以训练”的组合,即d(A,P)和d(A,N)相差并不悬殊的组合,否则网络学习不到复杂的分类方法。

二分类思路实现人脸验证

输入两张图片,进行二分类学习,判断这两张图片“是”或者“不是”同一个人。两张图输入输出层之前的计算步骤可以理解为编码方式f(x),两张图片采用相同的编码方式,编码后的数据输入输出层,给出二分类结果。
其中database中已有的旧图可以预先进行编码,并将编码后的数据放入数据库,这样在实际运用时,只需要对新输入的图片进行编码即可。
CNN个人笔记4-人脸识别