Advertisement

【Person Re-ID】In Defense of the Triplet Loss for Person Re-Identification

阅读量:

paper下载地址:https://arxiv.org/abs/1703.07737

代码仓库访问链接https://github.com/VisualComputingInstitute/triplet-reid

Introduction

本文主要针对triplet loss进行优化改进:其中 hardest mining 是其核心环节,在 hard-example 的选取过程中存在若干问题:

  1. 该方法耗时较长且难以明确界定"good"类型的difficult triplets。
  2. 选取过于复杂的例子可能导致训练过程不稳定。
  3. 当训练数据规模较大时, 系统可能无法充分覆盖所有潜在的triplets。

Learning Metric Embeddings

这一节主要介绍集中metric learning方法

Large Margin Nearest Neighbor loss

其中 L_{pull} 负责将属于同类别的样本进行聚拢,而 L_{push} 则致力于将不同类别间的样本拉开距离.基于所采用的是最近邻方法,因此在同类别中可能存在多个聚类区域.

Triplet loss

Triplet loss是人脸识别与认证中最常用的loss,其形式为

其中D_{a,p}D_{a,n}分别代表锚点与positive样本以及negative样本之间的距离。通过triplet loss机制,锚点与同类样本的距离应显著小于异类样本的距离。其主要缺点在于,当训练数据规模极大时,几乎难以实现有效的学习效果.这是因为大量简单的(易区分)样例掩盖了具有挑战性的(半硬)样例的存在。

在典型的triplet loss架构中,在实际应用中通常会将一个三元组输入至网络进行处理。当batchsize设为3B时,则每个batch能生成B个有效的triplets。然而这种方式往往会导致资源的过度消耗。因为理论上来讲最多能达到6B^{2}-4B个triplets(当所有可能的正样本和负样本都被穷尽地组合时),而实际上由于算法设计和计算效率的限制,并非都能被合理利用)。因此这种做法在实际应用中往往会导致资源的巨大浪费

Batch Hard Triplet loss

其中一种改进方法是在批次中随机选择P个类别,在每个类别中随机选取K张图片并按类别顺序排列。对于每个样本,在其同类中的最远邻居作为正样本,在异类中最近邻居作为负样本形成三元组用于损失计算。从而生成PK个有效的损失项

Batch All Triplet loss

另外一种改进方法是将一个batch中的每一个positive pair都纳入考虑范围,在此基础上生成相应的triplets数量为PK(PK-K)(K-1)

但是该改进方案涉及每一个batch中的所有锚点-正样本对(anchor-positive pair),因此计算量极大。随着训练进入后期阶段后,在已有大量样本被准确分类的情况下(虽然这些样本已经达到了预期目标),会导致产生大量'冗余'的数据(redundant data),从而掩盖了大量重要的hard exam样本。

Lifted Embedding loss

该损失函数通过考虑到所有不属于positive pair的负样本来计算,并通过优化损失函数边界使其更加平滑

可想而知,这个loss的计算也是非常耗时的。

作者对这个loss的推广是

该损失不仅包含了所有反例,在同一类别中的每个锚-正对都会被包含。

Distance Measure

在本文所述的方法中,在作者所采用的所有度量方式中(即全部),这些均未进行平方处理,并且都被视为距离;具体而言,在数学表达上表现为\left | a-b \right |_{2}的形式。

Soft-margin

在hinge loss函数中,在于\begin{bmatrix} m+D \end{bmatrix}_{+}这一项设计能够有效防止修正那些‘已经被正确识别’的triplet组(即实施硬截止策略)。然而作者采用了软加性函数(softplus function)ln(1+exp(D))这一更平滑的版本。其目的是使‘已经被正确识别’的triplet组更接近真实类别,并且消除了超参数margin设置对模型性能的影响。该方法被称为soft-margin损失函数。

Experiments

作者的实验分为两个阶段:首先是对各类triplet loss架构进行性能考察;其次是在person-ReID场景下挑选表现优异的triplet loss架构展开测试。其中一部分采用了预训练模型与从零开始训练的方法。

Training

该研究团队采用了在ImageNet上经过训练的ResNet-50模型,并对其顶层进行了替换;随后接入了BN归一化层和平移激活函数;该研究团队采用了在ImageNet上经过训练的ResNet-50模型,并对其顶层进行了替换;随后接入了BN归一化层和平移激活函数;并将其命名为TriNet.

Trained from Scratch : 作者称之为LuNet。

  1. 基于 L_{tri} 的硬负样本未被有效挖掘时(即没有Hard Mining),模型的整体表现较差。当引入简单的离线硬负采样方法(OHM)后,在多数情况下能够提升性能但也会偶尔出现不稳定的情况。
  2. 在对比实验中发现Batch Hard形式(BH)的整体表现优于Batch All形式(BA)。通过观察发现,在训练后期阶段很多三元组损失值为零的情况会显著影响整体效果。为了验证这一假设(即大部分损失值为零会稀释有用信息),作者采用了仅计算非零损失值的方法重新评估,并观察到这种修正确实能提高性能。
  3. 在作者设计的重识别实验中使用批 hard 加工并结合软边距策略取得了最优效果(即Batch Hard + soft-margin表现最好)。然而该结论仅适用于当前研究场景下的实验验证,在其他潜在的任务应用中仍需进一步验证其适用性。

在 Market-1501 数据集上, pritrained model 取得了 rank-1=84.92% 的优异成绩, 经过 re-ranking 处理后, 进一步提升了至 86.67%. 相比而言, pretrained 的性能略高于 trained from scratch, 具体数值相差约 2%至3%. 需要注意的是, pretrained 模型在输入尺寸方面存在一定的限制, 如果对其进行修改可能会产生相反的效果(如表所示). 训练自_scratch 则无需此类限制, 因此其通用性更强

参考

【1】<>

全部评论 (0)

还没有任何评论哟~