首页 > 编程知识 正文

facenet人脸识别,faceNet人脸识别算法解析

时间:2023-05-03 06:22:25 阅读:223704 作者:4287

FaceNet 3.Method

FaceNet使用深度卷积网络。我们讨论了两种不同的核心架构:Zeiler&Fergus[22]风格的网络和最近出现的[16]类型的网络。给定模型细节,并将其视为一个黑盒子(参见图2),我们的方法中最重要的部分在于整个系统的端到端学习。

图2。模型结构。我们的网络由一个批量输入层和一个深度CNN,然后L2归一化,得到了人脸嵌入。接下来是训练中的triplet loss。

3.1. Triplet Loss

嵌入由 f ( x ) ∈ R d f(x)in mathcal R^d f(x)∈Rd表示,它将图像x嵌入到d维称心的方盒空间中。另外,我们将这个嵌入限制在d维超球面上,即||f(x)||2=1。在这里,我们要确保特定人的图像 x i a x^a_i xia​(anchor)比任何其他人的图像 可爱的纸鹤 x^n_i xin​(负)更接近同一人的所有其他图像 x i p x^p_i xip​。如图3所示。

图3。Triplet Loss使anchor和positive之间的距离最小化,两者具有相同的特性,并使anchor和negative的距离最大化。

因此我们想要的,

其中a是强制在正负对之间的边距。 τ tau τ是训练集中所有可能的triplets的集合,具有基数N。

此时损失被最小化为L =

生成所有可能的三元组将导致许多容易满足的三元组(即满足等式(1)中的约束)。这些三元组将不会有助于训练,并导致较慢的收敛,因为他们仍然会通过网络。选择三元组是非常重要的,它们是活跃的,因此有助于改进模型。下一节将讨论用于三元组选择的不同方法。

3.2. Triplet Selection

为了保证快速收敛,在式(1)中选择违反三元约束的三元组是至关重要的。这意味着,给定一个 x i a x^a_i xia​,我们希望选择一个 x i p x^p_i xip​, a r g m a x x i p ∥ f ( x i a ) − f ( x i p ) ∥ 2 2 argmax _{x_i^p}parallel f(x_i^a)-f(x_i^p)parallel_2^2 argmaxxip​​∥f(xia​)−f(xip​)∥22​,类似的,希望选择一个 可爱的纸鹤 x^n_i xin​ ,

a r g m i n x i n ∥ f ( x i a ) − f ( 可爱的纸鹤 ) ∥ 2 2 argmin _{x_i^n}parallel f(x_i^a)-f(x_i^n)parallel_2^2 argminxin​​∥f(xia​)−f(xin​)∥22​。在整个训练集上计算argmin和argmax是不可行的。此外,这可能会导致糟糕的训练,因为错误的标签和低质量的人脸图片将主导hard positives and negatives。有两个明显的选择可以避免这个问题:

每n步离线生成三元组,使用最新的网络checkpoint并计算数据子集上的argmin和argmax。

在线生成三元组。这可以通过从小批量中选择hard positive/negatives样本来完成。

在这里,我们将重点放在在线生成上,并使用数千个样本的大型mini-batch,并且只计算mini-batch中的argmin和argmax。要有锚定正距离的有意义的表示,需要确保在每个小批中出现任意一个身份的最小数量的范例。在我们的实验中,我们对训练数据进行抽样,这样每个小批的每个身份大约选择40个面孔。此外,随机抽样的负面面孔被添加到每个小批。我们不是选择最难的正,而是在一个小批中使用所有的锚定正对,同时仍然选择最难的负。我们没有在一个小批量内对 hard anchor-positive pairs和 all anchor-positive pairs进行并行比较,但我们在实践中发现, all anchor-positive pairs方法更稳定,在训练开始时收敛速度稍快。我们还探索了offline generation of triplets与online generation相结合,这可能允许使用较小的批量,但实验没有结论。

在实践中,选择hardest negatives会导致在训练的早期出现糟糕的局部极小值,特别是它会导致一个崩溃的模型(即f(x) = 0)。为了缓解这种情况,可以这样选择 可爱的纸鹤 x^n_i xin​

我们称这些负样本为半硬样本,因为它们比正样本离锚更远,但仍然很硬,因为平方距离接近锚正距离。这些负样本在边距a以内。如前所述,正确的三元组选择对于快速收敛至关重要。一方面,我们希望使用小批量,因为在随机梯度下降(SGD)过程中,小批量有助于提高收敛性。另一方面,实现细节使得批量处理数十到数百个样本更加有效。然而,有关批大小的主要约束是我们从小批中选择硬相关三元组的方式。在大多数实验中,我们使用大约1800个样本。

3.3. Deep Convolutional Networks

在我们所有的实验中,我们使用随机梯度下降(SGD)和标准的backprop[8,11]和AdaGrad[5]来训练CNN。在大多数实验中,我们以0.05的学习率开始,为了最终确定模型,我们降低了学习率。这些模型是从随机(类似于[16])初始化的,并在CPU集群上训练1,000到2,000小时。在训练500小时后,损失的减少(和准确性的提高)会急剧减慢,但是额外的训练仍然可以显著提高性能。边距a设置为0.2。

我们使用了两种类型的架构,并在实验部分更详细地探讨了它们的优缺点。它们的实际区别在于参数和FLOPS的不同。最佳模型可能因应用程序而异。例如,在数据中心运行的模型可能有很多参数,需要大量的FLOPS,而在移动电话上运行的模型需要很少的参数,这样才能装入内存。我们所有的模型都使用校正线性单元(rectified linear units )作为非线性激活函数。

如表1所示,第一类在Zeiler&Fergus[22]体系结构的标准卷积层之间添加了1x1xd卷积层,如[9]所示,并形成了22层深的模型。它总共有1.4亿个参数,每幅图像需要16亿次浮点运算。

我们使用的第二类是基于谷歌风格的Inception模型[16]。这些模型的参数减少了20倍(大约6.6-7.5米),而浮点运算次数减少了5倍(500M-1.6B)。这些模型中的一些在尺寸(深度和过滤器的数量)上被显著地减少,因此它们可以在移动电话上运行。一个是NNS1,它有26M参数,每个图像只需要220M FLOPS。另一个是NNS2,参数为4.3M,浮点运算次数为20M。表2详细描述了我们最大的网络NN2。在架构上是相同的,但是减少了输入大小160 x160。NN4的输入大小只有96x96,因此大大降低了CPU需求(285M FLOPS vs NN2的1.6B)。除了输入尺寸的减小,它在更高层不使用5x5卷积,因为那时接收场已经太小了。一般来说,我们发现5x5卷积可以在整个过程中删除,只有一个小的准确性下降。图4比较了我们所有的模型。

4. Datasets and Evaluation

我们在四个数据集上评估我们的方法,除了在Labelled Faces in the Wild和YouTube上标记的人脸,我们在人脸验证任务上评估我们的方法。给定一对两个人脸图像,使用平方L2距离阈值D(xi,xj)来确定相同和不同的分类。同一身份的所有面孔对(i,j)用Psame表示,而不同身份的所有面孔对用Pdiff表示。

我们将所有true接受的集合定义为

这些是在阈值d正确分类为相同的脸对(i;j)

是被错误分类为相同(false accept)的所有对的集合。

然后,将给定面部距离d的验证率VAL(d)和假接受率FAR(d)定义为

4.1. Holdout Test Set

们保留了一组大约一百万张图片,它们的分布与我们的训练集相同,但身份不一致。为了进行评估,我们将其分为五个不相交的集合,每个集合包含200k个图像。然后在100k×100k图像对上计算FAR和VAL速率。在五个拆分中报告标准错误。

7. Appendix: Harmonic Embedding

在本节中,我们将介绍 harmonic embeddings的概念。通过这一点,我们表示由不同的模型v1和v2生成的一组嵌入,但它们是兼容的,因为它们可以相互比较。

这种兼容性极大地简化了升级路径。例如,在一个场景中,嵌入v1是在一组大型图像上计算的,并且正在推出一个新的嵌入模型v2,这种兼容性确保了平稳的转换,而不必担心版本不兼容。图8显示了3G数据集的结果。可以看出,改进后的模型NN2明显优于NN1,而NN2嵌入与NN1嵌入的比较则处于中间水平。

模型v2,这种兼容性确保了平稳的转换,而不必担心版本不兼容。图8显示了3G数据集的结果。可以看出,改进后的模型NN2明显优于NN1,而NN2嵌入与NN1嵌入的比较则处于中间水平。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。