上一步直接对FaceNet进行测试使用,但是还不是很明白其原理,看一看论文内容。
FaceNet: A Unified Embedding for Face Recognition and Clustering
要点:“In this paper we present asystem, called FaceNet, that directly learns a mapping fromface images to a compact Euclidean space where distancesdirectly correspond to a measure of face similarity.”
使用深度卷积网络来训练直接优化嵌入本身;
训练时,使用 triplets(三联体)大致匹配匹配/不匹配的脸部贴片,这些贴片使用新颖的在线triplets数据挖掘方法生成。 这种方法带来的好处是更高的效率:只使用每个人脸128字节的最新面孔识别性能。
1.介绍
Present a unified system for:
face verification(is this the same person);
recognition (who is thisperson) ;
and clustering (find common people among thesefaces).
该方法基于使用深度卷积网络学习每个图像的欧几里得嵌入。 训练网络使得嵌入空间中的L2距离的平方直接对应于面部相似性:面部相似则距离小,面部相异则距离大。一旦产生了这种嵌入,上述任务变得直截了当:面部验证简单地涉及对两个嵌入之间的距离进行阈值化; 识别成为k-NN分类问题; 并且可以使用诸如k均值或凝聚聚类之类的现成技术来实现聚类。
FaceNet directly trainsits output to be a compact 128-D embedding using a tripletbasedloss function based on LMNN。
该方法的triplets由两张匹配的脸部缩略图和一张不匹配的脸部缩略图组成,loss的目的是将正对与负距离隔开一段距离。 缩略图是脸部区域的紧凑作物,除了执行缩放和平移之外,没有2D或3D对齐。
选择使用哪个triplets对于实现良好性能非常重要,并且受到 curriculum learning的启发,作者提出了一种新的在线负面范例挖掘策略,可确保网络训练持续增加triplets难度。 为了提高聚类的准确性,作者还探索了积极的挖掘技术,鼓励spherical clusters嵌入单人。
余下部分结构:在第2节中,作者回顾了这方面的文献; 第3.1节定义了triplets loss,第3.2节描述了作者的新triplets选择和训练过程; 在3.3节作者描述了所用的模型体系结构。 最后在第4节和第5节中,作者给出了我们嵌入的一些定量结果,并定性地探讨了一些聚类结果。
2. 相关工作(此处不再叙述)
3. Method
先介绍 triplets loss的作用:作者采用直接反映想要在脸部验证,识别和聚类中实现的triplets loss,即,争取从图像x到特征空间Rd的嵌入f(x),使得平方距离在所有人脸之间与成像条件无关,同一身份的距离很小,而来自不同身份的一对人脸图像之间的平方距离很大。
3.1 Triplets Loss
注意:Generating all possible triplets would result in manytriplets that are easily satisfied(即满足方程(1)中的约束条件)。 这些triplets对训练没有贡献,并导致收敛速度变慢,因为它们仍然会通过网络。 选择 hard triplets是非常重要的,它们是active的,并且可以有助于改善模型。 以下部分将讨论作者用于选择triplets的不同方法。
3.2 Triplet Selection
- 每隔n步离线生成triplets,使用最新的checkpoint并计算数据子集上的argmin和argmax。
- 在线生成triplets。 这可以通过从一个小批量中选择硬正/负范例来完成。
在文章中,作者使用第二种方法,在线生成triplets。为了有效地表示anchor positive distances,需要确保每个小批量中存在最少数量的任何一个身份的示例。在实验中,作者对训练数据进行采样,以便每个小批次的每个身份选择大约40张面孔。 此外,随机采样的负面人脸将被添加到每个小批量。
在使用所有的anchor positive pairs的同时,仍然选择 hard negatives,而不是选择the hardest positive。 作者没有在一个小批次内对hard anchor-positive pairs 和 所有 anchor-positive pairs 进行并排比较,但在实践中发现,the all anchor positive方法在training开始时更稳定并稍微收敛一些。
选择 the hardest negatives 可能会导致训练早期的局部极小,特别是可能导致一个崩溃的模型(即f(x)= 0)。 为了减轻这一点,选择如下的xni是有利的:
!!!!!!插入公式!!!!!
我们称这些负面示例为semi-hard的,因为它们比正面示例更远离anchor,但仍然很hard,因为平方距离接近anchor positive距离。 那些负面影响在边际α内。 如前所述,正确的triplets选择对于快速收敛至关重要。 一方面,我们希望使用小的小批量,因为这些小批量在随机梯度下降(SGD)期间倾向于改善收敛性。 另一方面, implementation details使数十到数百个样本的批次更加高效。 然而,关于批量大小的主要限制是我们从小批量中选择hard relevant triplets的方式。 在大多数实验中,我们使用大约1800个样本的批量大小。
3.3 Deep Convolutional Networks
实验步骤见论文。
4. Datasets and Evaluation
5. Experiments
5.1. Computation Accuracy Trade-off
在深入探讨更具体的实验细节之前,我们将讨论精度与特定模型所需的FLOPS数量的权衡。 图显示了x轴上的FLOPS以及我们用户标记为4.2节的测试数据集的0.001误接受率(FAR)的准确度。 有趣的是,模型需要的计算与其达到的准确度之间的强相关性。 该图强调了我们在实验中更详细讨论的五种模型(NN1,NN2,NN3,NNS1,NNS2)。
我们还研究了关于模型参数数量的精度折衷。 但是,在这种情况下,情况并不明显。 例如,基于初始的模型NN2实现了与NN1相当的性能,但只有20个参数。 虽然FLOPS的数量是可比的。 很显然,如果参数的数量进一步减少,性能预计会下降。 其他模型架构可以进一步降低精度,就像Inception 在这种情况下所做的那样。
5.2. Effect of CNN Model
我们现在更详细地讨论我们的四个选定模型的性能。 一方面,我们有传统的基于Zeiler和Fergus的架构,具有1×1的卷积(见表1)。 另一方面,我们有基于Inception 的模型,可以显着减少模型的大小(note: Inception模型较小)。 总的来说,在最终的性能上,两种架构的顶级型号的性能相当。 但是,我们的一些基于Inception的模型(如NN3)仍然实现了良好的性能,同时显着降低了FLOPS和模型大小。
作者从几方面测试了影响
5.3. Sensitivity to Image Quality
图片质量越好正确率越高
5.4. Embedding Dimensionality
一定程度上嵌入维度越大效果越好,但是太大了反而性能会下降
5.5. Amount of Training Data
数量级倍的增加效果越好,同级增加效果不明显