论文地址:FaceNet:A Unified Embedding for Face Recognition and Clustering
摘要
本文提出FaceNet算法,它直接学习从人脸图像到一个欧几里德空间的映射,这其中的距离则对应于人脸的相似程度。
这种映射关系也可以称之为嵌入(embedding),即将原特征映射到一个新的特征空间,新的特征就被看作是一种嵌入。
在LFW(Labeled Faces in the Wild)数据集上,准确率达99.63%
简介
人脸验证 face verification (is this the same person)
人脸识别 face recognition(who is this person)
人脸聚类 face clustering (find common people among these faces)
只要生成了上文所说的嵌入,那么以上三种任务就会变得简单明了
人脸验证–对两个嵌入间的距离进行阈值判断
人脸识别–K-NN分类问题
人脸聚类–使用k-means等聚类问题
姿态和光照是人脸识别中长期存在的一个问题,上图显示了在不同姿势和光照的组合下,相同的和不同的人脸之间的 FaceNet的输出距离。可见,阈值为1.1可以正确地判断身份是否相同。
模型结构
可见,网络由批处理输入层和深度CNN组成,然后经过L2正则化后得到人脸嵌入,紧接着的就是三元组损失。
Triplet Loss
三元组(Triplet)即由Anchor(A),Negative(N),Positive(P)组成。
三元组损失(Triplet Loss)
使Anchor(A)和Positive(P)之间的距离最小,
使Anchor(A)和Positive(P)之间的距离最大。
即在学习过程中,A、P的欧式距离逐渐减小,A、N的欧式距离增大,使类间距离大于类内距离。
上式中,第一个二范数表示类内距离,第二个二范数表示类间距离,α是一个常量。学习过程就是使用梯度下降法使Loss不断下降,即对应于类内距离不断下降,类间距离不断提升。
需要注意的是,生成所有可能的三元组会产生许多满足约束的三元组,但是这些三元组对训练没有帮助,收敛速度较慢,所以选择适合训练的三元组是一个非常重要的问题。
三元组的选择
在给定anchor的条件下,我们会选择
hard positive——
和hard negative——
但是,选择‘the hardest negatives’会导致局部最小值的问题,甚至会导致模型崩溃。
为了缓解上述问题,我们可以使用下面的做法(semi-hard):
深度卷积神经网络
Tabel 1. NN1.——Zeiler&Fergus
Tabel 2. NN2.(基于GoogLeNet style Inception models)
实验
1.不同的网络配置下的VAL(validation rate)
2.不同的训练数据集的大小
3.不同嵌入层特征维度下的VAL(validation rate)
4.不同的图像质量下的VAL(validation rate)
5.错误情况
6.人脸聚类
以上图片均出自论文。
学习记录,不足之处还请指出。