Part 1:人脸识别
4.1 什么是人脸识别?
- 人脸验证: 输入图片,验证是不是 A
- 人脸识别: 有一个库,输入图片,验证是不是库里的一员
人脸识别难度更大,要求准确率更高,因为1%的人脸验证错误在人脸识别中会被放大很多倍。
4.2 One-Shot 学习
对于人脸识别系统,通常我们数据库里仅存储着每个人的一张照片,我们需要用这一张照片来实现该人的识别,这个问题就是one shot 问题。
人脸识别系统需要识别出是否是库中K个人之一,或者不在库中。
对于one shot learning 问题:只有单个样本,不足以训练一个稳健的卷积神经网络来进行不同人的识别过程。而且,在有新的样本成员加入的时候,往往还需要对网络进行重新训练。所以我们不能以传统的方法来实现识别系统。
Similarity 函数:图片两两对比差异
- d(img1, img2):两幅图片之间的差异度
- 输入:两幅图片
- 输出:两者之间的差异度
- 如果 < 0.5 (阈值可调),则输出“same”;
- 如果 > 0.5(阈值可调),则输出“different”
将输入的人脸图片与数据库中所拥有的图片成对输入Similarity函数,两两对比,则可解决one shot problem。如果有新的人加入团队,则只需将其图片添加至数据库即可。
4.3 Siamese 网络
Siamese 可以实现上文的Similarity 函数
利用同样的卷积神经网络训练两种不同的图片x1, x2分别得到一个多维向量f(x1)和f(x2), 然后比较这两个向量的距离
||f(x1)−f(x2)||22 | | f ( x 1 ) − f ( x 2 ) | | 2 2

训练目标:训练神经网络满足相近图片距离小,相远图片距离远
4.4 Triplet 损失
如何通过学习神经网络的参数,得到优质的人脸图片的编码?方法之一就是定义 Triplet 损失函数,并在其之上运用梯度下降。
选取三张图片
- Anchor (A): 目标图片;
- Positive(P):与Anchor 属于同一个人的图片;
- Negative(N):与Anchor不属于同一个人的图片。
目标:同一个人的图片差距小,不同人的图片差距大
L(A,P,N)=max(||f(A)−f(P)||−||f(A)−f(