Facenet:一个统一的嵌入特征用于人脸识别和聚类

3.Method

Deep架构一个黑盒:ZF和inception。学习一个端到端的网络,在末端,我们使用三元组损失直接映射到我们想要的人脸确认、识别、聚类。

Facenet:一个统一的嵌入特征用于人脸识别和聚类_第1张图片

我们要完成一个嵌入函数f(x),计算一张图片x到一个特征空间。在这个空间,所有人脸的平方距离,相同身份距离小,不同身份距离大。三元组损失,尝试增加一个margin对不同身份的人脸,允许一个身份的人脸处于一个量级,增加不同身份之间的距离。

3.1 Triplet Loss

embedding层通过f(x)\epsilon R^{d}表示,一张图片x到一个d维的欧式空间,anchor,hard-positive,negative:

      (1)

加上一个margin,使学习(1)式更有效,满足等式的同时,我们让左边平方距离尽可能大,右边的平方距离尽可能小,

d(A,P)\approx d(A,N),样本,还有margin。那么三元组损失函数为:

                      (2)

当满足(2)式时,损失函数就是0,当不满足(2)式时,通过最小化这部分通过梯度下降达到训练效果。

3.2Triplet selection

我们使用在线生成三元组,使用几千个样本的大批次,并且只计算批量中的argmin和argmax。确保每个批量中存在最少数量的任何一个身份的样本。在我们的实验中,训练数据每个批次中每个身份40张人脸。随机采样负样本加到每个批次中。

在一个批次中使用所有的anchor-positive对,仍然选择hard-negatives。但是我们在实践中发现,在训练开始时,所有的anchor-positive对都很稳定,收敛速度很快。满足这个d(A,P)\approx d(A,N),为semi-hard样本,再加一个margin。

正确选择3元组可以更快收敛。

我们在一个批次中选择难三元组得方式,使一个批次为1800样本。

3.3 Deep convolutional networks

inception 比ZF参数更少,输出L2:1*1*128;NNS1:26M参数,220M FLOPS,VAL:82%。NNS2:4.3M参数,20M FLOPS,验证集精度只有51%,网上只下载了NN3的模型,VAL88%,输入大小160*160,model:20170512-110547,内存大概90M,测试时调用时间较长,无法实时。现在GitHub上提供的是Resnet V1模型输入尺寸(160*160),pb文件91M、,在titanxp显卡上,导入模型需要2s,测试会话时也要2s,两个模型耗时接近,resnetv1低于inception,程序需要优化,将所有时间控制在2s内。

L2normalization

Normalization主要思想是对每个样本计算其p-范数,然后对该样本中每个元素除以该范数,这样处理的结果是使得每个处理后样本的p-范数(比如l1-norm,l2-norm)等于1。p-范数的计算公式: 

                                                            

4,论文训练部分,首先一个min-batch提取特征到L2,一张图片为1*1*128,对这一个batch中图片继续训练一个Ttiplet Loss,最小化,梯度反向传播,使得L2输出的embedding能很好的代表一张图片

 

 

你可能感兴趣的:(paper,comprehension)