三元组损失“Deep Metric Learning via Lifted Structured Feature Embedding”

http://www.cnblogs.com/wangxiaocvpr/p/5921074.html

caffe实现解释:https://blog.csdn.net/zziahgf/article/details/78568696

tensorflow实现:http://10.1.2.209/lianjie/install-packages/blob/master/metric_loss_ops.py#L410

caffe实现:https://github.com/rksltnl/Deep-Metric-Learning-CVPR16/

将mini-batch中样本对距离向量(O(m) )提升到距离矩阵(O(m2) ),并基于此定义了一个新的结构化损失函数。

对比损失及triplet loss回归

略。

方法描述

使用训练集中的所有正样本对及负样本对定义结构化损失函数:

J=12Pi,jPmax0,Ji,j2

Ji,j=maxmaxi,kNα-Di,k,maxj,lNα-Dj,l+Di,j

其中P 是所有的正样本对,N 是所有的负样本对,这个函数有两个计算难点:(1)它是非平滑的,(2)计算梯度需要挖掘所有的样本对好几次。

 

使用两种方式解决上述问题:首先在函数上优化一个平滑的上边界,其次,对于大数据常用的方法类似,我们采用随机的方法(随机采样一部分正样本对),在选择困难样本对,使用mini-batch中所有样本的信息。

三元组损失“Deep Metric Learning via Lifted Structured Feature Embedding”_第1张图片

图2a,2b显示了batch_size = 6的对比和三元损失嵌入空间,增加额外的顶点比增加额外的边计算量大的多,增加顶点带来了额外的I/O、存储。

 

为使用batch的全部信息,使用batch中所有的样本对,即从O(m) 到Om2 ,图2c展示了将样本对转化成全连接的致密的矩阵距离。加入某batch具有c维特征X∈Rm×c ,batch所有特征平方范数组成的列向量为x=f(x1)22,…,f(xm)22T ,平方距离矩阵可以使用下式计算:

D2=x1T+1xT-2XXT

其中

Dij2=fxi-f(xj)22

 

三元组损失“Deep Metric Learning via Lifted Structured Feature Embedding”_第2张图片

随机样本对产生的负边含有的信息非常少,它们基本是easy样本,加入了采样策略,随机采样一小部分正样本对,然后增加困难的负样本。图3显示了一个正样本对困难负样本的挖掘过程,对于正样本对的每个样本,寻找困难负样本,这与triplet损失中只对anchor找负样本不同。这个过程可以使用平方距离矩阵D2 快速实现。

 

由于采用嵌套的max 函数来寻找单个 hardest negative 往往导致网络收敛到一个 bad 局部最优解,使用平滑上边界优化,每个batch的损失函数定义为:

Ji,j=logi,kNexp⁡{α-Di,k}+j,lNexp⁡{α-Dj,l}+Di,j

J=12Pi,jPmax0,Ji,j2

梯度后向传播的算法为:

三元组损失“Deep Metric Learning via Lifted Structured Feature Embedding”_第3张图片

损失函数对于距离的梯度为:

JDi,j=1PJi,j1Ji,j>0

JDi,k=1PJi,j1Ji,j>0-exp⁡{α-Di,k}exp⁡{Ji,j-Di,j}

JDj,l=1PJi,j1Ji,j>0-exp⁡{α-Dj,l}exp⁡{Ji,j-Di,j}

 

图4介绍了对比损失和triplet损失可能失败的几种情况,对于对比嵌入(图4a),当随机挑选的负样本与另外一类的某样本共线时,失败;对于triplet嵌入(图4b),当采样的负样本在采样的正样本和anchor的margin边界内时失败;这是对比损失和三元损失均将正样本xi推向了第三类。在提出的嵌入空间中(4c),给出了足够多的随机样本,在margin边界内的困难负样本xk将正样本xi推向了正确的方向。

三元组损失“Deep Metric Learning via Lifted Structured Feature Embedding”_第4张图片

 

实验结果

三元组损失“Deep Metric Learning via Lifted Structured Feature Embedding”_第5张图片

你可能感兴趣的:(人脸识别)