基于度量学习的ReID方法
度量学习(Metric learning)是广泛用于图像检索领域的一种方法。不同于表征学习,度量学习是希望通过网络学习到两张图片的相似度。在行人重识别问题上,具体为一行人的不同图片的相似度大于不同行人的不同图片。最后的网络的损失函数使得相同行人图片(正样本对)的距离尽可能小,不同行人图片(负样本对)的距离尽可能大。常用的度量学习损失方法有对比损失(Contrastive loss)三元组损失(Triplet loss),四元组损失(Quadruplet loss)、难样本采样三元组损失(TriHard loss)、边界挖掘损失(Margin sample mining loss MSML)。
实现度量学习的代码可以有一下几个部分:
- sample.py: 采样P*K batch的迭代器
- loss.py: TriHard损失函数代码
- train_trihard.py:主文件,包含训练测试等代码
Sample.py
- TriHard loss的核心思想是:对于每一个训练batch,挑选P个ID的行人,每个行人随机挑选K张不同的图片,即一个batch含有P*K张图片。之后对于batch中的每一张图片a,我们可以挑选一个最难的正样本和一个最难的负样本和a组成一个三元组。首先我们定义和a相同ID的图片集为A,剩下不同ID的图片集为B,则TriHard损失表示为: