In Defense of the Triplet Loss for Person Re-Identification
Git地址: https:// github.com/VisualComputingInstitute/triplet-reid
框架 theano
摘要
一般来说,在训练基于度量的网络的时候,使用的triple Loss要优先于其他,随着数据集合Market-1501以及MARS,使得重学习方向得到了很大发展。本文使用triple-loss方法进行重学习。
简介
triplet Loss之所以不流行主要是因为,错误的使用会导致极差的结果,在使用triplet Loss的时候一个重要的问题是挖掘triple 组合,挖掘难的triple组合是一件比较困难的事情。但是选择太难的triple组合又会导致不稳定。
目前的主要趋势主要是使用预训练模型,很多使用与训练模型也取得了较好的效果,但是与训练有很多的限制。就是不能改进网络结构。文中使用自己从头训练的模型,能够展示很好的效果。文中结构在预训练模型中也能去得很好的效果,但是我们自己训练的模型更加的轻量级能够在一些限制硬件上使用。
文中的贡献主要分成两个部分,第一 改进了triplet loss,第二 使用triplet loss与之前方法相比,具有较好的结果。
度量向量的学习,triplet Loss,挖掘重要性
度量嵌入式的学习是学习一个函数
将语义空间相近的点映射到度量空间相近的点,将语义相离的点映射到度量空间相离的点,其中函数的参数是theta, 从一个线性空间映射到一个非线性空间,函数是以神经网络的显示,
定义一个函数
这个函数为度量函数,主要衡量嵌入空间的距离。
W&S等人,研究了这个问题,其形式如下
其中pull表示相同类别之间的距离,push是不同类别之间的距离。 形式如下
之后FaceNet改进了这中函数,并命名为triplet loss如下
这个方法的要旨在于同类的距离近,异类的距离远。
如果仅仅随机选择triplet组合的话,会有各种各样的问题,所以需要挖掘难的积极的组合,难的消极组合。挖掘信息是一个与训练分离的步骤,并且增加了开销,因为这需要使用最近的模型来计算,大比例数据的所有配对的距离。
文中与传统的组合triplet 的方式不同,随机选择出P个种类,然后从每个种类中随机选择出K个图像,所以我们的batch是有PK个图片,对于每一batch中的图像a,从batch中选择最难的积极,以及最难的消极。来组合triplet。也就是统成为batch hard
其中Xij 表示第i个人的第j张图片。
按照这个规则,从PK batch中抽取难积极组合以及难消极组合。
那么组合的数量为PK(PK-K)(K-1), 那么batchall 如下
还有一点就是LBH以及LBA 和传统的triple Loss在训练的时候是息息相关的, 最大函数以及最小函数是连续的,可以使用梯度下降法的,因为已经在目前存在的机制中,比如最大pooling, Relu。
和batch hard相似,batch all 是左嵌入Loss,通过考虑积极和消极对来填充数据batch集合。
这里只使用了一个积极对,然后使用了所有的消极对。
将上述思维应用到整个batch上,那么其公式变成如下形式
距离衡量
文中与其他使用||a - b||2作为距离度量不同,使用的是真实的欧式距离。这样在文中的试验中表现更加的稳定。
Soft-margin
Margin是一个矫正函数,在人体重识别,可以将相同类别的实例放到一起,本文使用一个逼近函数来代替这个矫正函数,如下
文中所做的主要贡献是,batch hard以及soft-margin。经过试验证明这种改进是要优于以前的一些方法的。
试验
MARS数据集合试验结果对比图
网络结构
网络结构部分主要分成两个部分,第一个部分使用的是pretrained-model,第二个部分使用的是从头训练的model。
预训练模型使用的是,与训练好的ResNet50将全连接层去除后,增加了两个全连接层,大小分别是1024以及128。选择的batchsize是72,包含18个人,每个人有四张图片。 在任何数据集中都有较好的结果。参数是25.74M。这个模型称为TriNet
从头开始训练的model,模型的量级较小,只要5M的参数,训练的batchsize为128,72个人,每个人的照片是4个。这个模型称为LuNet