【论文笔记】In Defense of the Triplet Loss for Person Re-Identification

1、前言

Triplet loss是非常常用的一种deep metric learning方法,在图像检索领域有非常广泛的应用,比如人脸识别、行人重识别、商品检索等。传统的triplet loss训练需要一个三元组,包括三张图片:achor,positive,negative,分别简写为a,p,n。==Triplet loss的缺点在于随机从训练集中挑选出三张图片,那么可能会出现挑选出来的很可能是简单的样本,比如很像的正样本对和很不像的负样本对。作者认为,让网络一直学习简单的样本会限制网络的泛化能力,因此提出一种在线batch hard sample mining的改进版triplet loss,我喜欢简写为TriHard loss==。我复现了这种方法,并且大量实验表明,这种改进版的方法效果非常好。

2、方法

首先,假如有两张输入图片 I1 I2 ,通过网络的前馈我们可以得到它们归一化后的特征向量 fI1 fI2 。我们定义这两张图片特征向量的欧式距离为:

dI1,I2=||fI1fI2||2

(1)Triplet loss
图片 a 和图片 p 为一对正样本对,图片 a 和图片 n 为一对负样本对。则三元组损失表示为:

Lt=(da,pda,n+α)+

其中 (z)+ 表示 max(z,0) α 表示人工设置的阈值参数。如下图所示,triplet loss可以拉近正样本对之间的距离,推开负样本对之间的距离,从而达到图像检索的目的。

【论文笔记】In Defense of the Triplet Loss for Person Re-Identification_第1张图片

(2)TriHard loss
TriHard loss的核心思想是:对于每一个训练batch,随机挑选 P 个ID的行人,每个行人随机挑选 K 张不同的图片,即一个batch含有 P×K 张图片。之后对于batch中的每一张图片 a ,我们可以挑选一个最难的正样本和一个最难的负样本和 a 组成一个三元组。首先我们定义和 a 为相同ID的图片集为 A ,剩下不同ID的图片图片集为 B ,则TriHard损失表示为:

Lth=1P×Kabatch(maxpAda,pminnBda,n+α)+

其中 α 是人为设定的阈值参数。TriHard loss会计算 a 和batch中的每一张图片在特征空间的欧式距离,然后选出与 a 距离最远(最不像)的正样本 p 和距离最近(最像)的负样本 n 来计算三元组损失。通常TriHard损失效果比传统的三元组损失要好。

3、结果

TriHard的结果可以看原论文,为了进一步说明TriHard的效果,我这里给出我复现TriHard loss在行人重识别问题上的结果,结果发表在论文Margin Sample Mining Loss: A Deep Learning Based Method for Person Re-identification上,以下是结果:

【论文笔记】In Defense of the Triplet Loss for Person Re-Identification_第2张图片

可见TriHard相对于传统的Triplet loss大部分情况下还是进步很明显的。

4、简评

TriHard是一个非常不错的工作,在Triplet loss上稍微做了一点改进,代码复现起来工作量也不大,然而效果却很好。为什么work一眼就看得出,实验结果也证明确实work,这是一个非常值得赞赏的研究。

5、代码

我用keras复现了一版triplet loss和TriHard loss,代码没怎么整理但是能用,可供大家参考复现,代码链接:keras_reid

你可能感兴趣的:(论文笔记)