天天看点

【ICCV2019 reid】Self-training with progressive augmentation for unsupervised cross-domain person reid前言介绍方法实验

论文地址

官方代码代码还没完全放出来

一篇解决无监督domain adaption reid的文章,发表在了ICCV2019上面。

前言

实际上无监督domain adaptive reid主要解决的是源数据集有标签,目标数据集无标签,我们用这样两个数据集训出来的模型要在源数据集和目标数据集上都表现得好,是一件有挑战性的工作。

在这篇论文中,作者提出了一种递进增强的自训练方法(progressive augmentation framework (PAST))来逐步提高模型在目标域上的表现。包含两个stages,一个是保守stage(conservative stage),一个是促进stage(promoting stage)。conservative stage 用triplet-based loss捕捉目标域数据点的局部结构,来提高特征表示。promoting stage在网络的最后一层增加一个可更改的分类层,连续不断地优化网络,使其可以使用关于数据分布的全局信息。更重要的,提出了一个全新的自训练策略,可选择地采用conservative和promoting stage,来递进地增强模型的表现力。此外,为了提高选择的triplet 样本的可靠性,我们在保守阶段引入了ranking-based triplet loss,这是一个基于数据对之间相似性的无标记目标函数。

介绍

通常来说,直接用source domain训好的模型去测试target domain的模型效果不好,因为源域和目标域之间的模型有domain shift的问题。在无监督跨域reid中,这个问题就变成了如何将在source domain上预训练训好的模型通过无监督有效地转换到目标域。

一些domain transfer用打伪标签的方法,比如用k-means或者DBSCAN聚类,每类当作是一个人。缺点就是效果很依赖于聚类的质量。

PAST:

  1. 在训练早期生成伪标签质量较差时抑制错误放大。
  2. 当标签质量更好后,逐步加入高置信度的标签样本,用于自训练
    【ICCV2019 reid】Self-training with progressive augmentation for unsupervised cross-domain person reid前言介绍方法实验

conservative stage

图1里面我们可以看到,正确标签的数据在一开始时很低的,因为domain shift。所以我们需要筛选出confidently的标签的样本来减少label noise。通常用图像相似度来当作confidence度量,常用的clustering-based triplet loss (CTL)对伪标签的质量很敏感,所以作者提出了一个label-free的loss,叫做ranking-based triplet loss(RTL)。

具体来说,我们为整个target dataset计算一个ranking 分数矩阵,然后产生triplets(从top n和(n,2n】positive加negative样本)。然后用所提出的RTL来计算loss。

conservative stage主要是在训练早期时用来防止模型坍塌(早期label质量低)

Promoting stage

训练的triplets在大数据集训练时动态增长,如果值用triplet loss,很容易陷入局部最优(可以看图1CTL和CTL+RTL的对比)。解决:把每个cluster当作一个类,然后把学习过程当作一个分类问题(就是用了交叉熵)。因为如果label一开始质量低的话,对分类会造成很大影响,所以promoting stage放在了conservative stage后面。

方法

【ICCV2019 reid】Self-training with progressive augmentation for unsupervised cross-domain person reid前言介绍方法实验

整体框架如上图所示。主要是包含两个模块:conservative stage 和promoting stage。

首先,模型在源域上进行预训练,然后用这个模型对target domain T的所有图像进行特征提取,得到F,当作我们框架的输入。在conservative stage中,基于ranking score matrix,我们通过HDBSCAN聚类的方法产生更可靠的训练样本 T U T_U TU​。 T U T_U TU​是T的一个子集。结合clustring-based triplet loss 和提出的ranking-based triplet loss,当前更新训练集的局部结构被用来模型优化。接着,我们就可以用优化了的新模型来提取特征 F U F_U FU​。在promoting stage,用分类的思想,用交叉熵loss来进一步的优化网络。最终,模型交替的训练conser stage’和promoting stage。

conservative stage

triplet loss 被证明是可以用来生成目标数据可靠triplets的方法,探索潜在的有意义的局部结构。

但不同于监督训练,伪标签很难构建高质量的triplets。

在本文中, 对于训练数据集T,我们首先提取每个样本的特征F,然后采用k倒排编码,引入Jaccard 距离,得到距离矩阵 D J ( x i ) D_J(x_i) DJ​(xi​)

【ICCV2019 reid】Self-training with progressive augmentation for unsupervised cross-domain person reid前言介绍方法实验

里面存放每个样本与其他样本的jaccard 距离。

接着,对 D J ( x i ) D_J(x_i) DJ​(xi​)从小到大排序,然后再每个样本的排序后的距离矩阵存入 D R D_R DR​里面:

【ICCV2019 reid】Self-training with progressive augmentation for unsupervised cross-domain person reid前言介绍方法实验

这里面 D R ( x i ) D_R(x_i) DR​(xi​)表示的是排序后的 D J ( x i ) D_J(x_i) DJ​(xi​)。

再者,对 D R D_R DR​用HDBSCAN聚类的方法将整个训练图像分成不同的类。HDBSCAN之后,有一些图片没有进入任一类,直接丢弃。因而我们用有分配标签的图片当作更新后的训练集 T U T_U TU​来对模型进行优化。

Clustering-based Triplet Loss (CTL)

我们使用的一个loss是基于batch的hard mining triplet loss。我们随机采样P个clusters,每个类里面K个图片,所以我们的minibatch是PK。对于每张anchor image x a x_a xa​,对应的hardest 正样本 x p x_p xp​和最难的负样本 x n x_n xn​被挑选出来形成一个triplet。

随着伪标签来自于聚类方法,我们重命名为CTL:

【ICCV2019 reid】Self-training with progressive augmentation for unsupervised cross-domain person reid前言介绍方法实验

其中 x i , j x_{i,j} xi,j​表示第i个类的第j个图。

Ranking-based Triplet Loss (RTL)

显而易见,CTL的效果很取决于聚类的效果,我们很难去决定哪个聚类结果是对的,哪个是错的。

所以我们充分利用 D R D_R DR​,提出了RTL。对于一个训练anchor x a x_a xa​,正样本从top η \eta η 最近邻里面挑选,负样本从 ( η , 2 η ] (\eta,2\eta] (η,2η]里面挑选。另外,对于CTL里面的固定margin,我们基于 x p x_p xp​和 x n x_n xn​的ranking位置引入了soft margin。

RTL表示为:

【ICCV2019 reid】Self-training with progressive augmentation for unsupervised cross-domain person reid前言介绍方法实验

选择样本的数量和CTL一致。 η \eta η是正样本的最大选择位置。

总的来说,对于CTL和RTL,总的loss为:

【ICCV2019 reid】Self-training with progressive augmentation for unsupervised cross-domain person reid前言介绍方法实验

λ \lambda λ用来平衡两个loss。

Promoting Stage

光用triplet loss很容易陷入局部最优。对于聚类结果,我们还用了分类loss,来提高模型的泛化能力。

用的是Softmax cross-entropy loss。

【ICCV2019 reid】Self-training with progressive augmentation for unsupervised cross-domain person reid前言介绍方法实验

Feature-based Weight Initialization for Classifier

因为聚类数量C每次都可能有差异,新增加的分类层 C L CL CL在每次HDMSCAN之后都要初始化。相比于随机初始化,我们使用了每次聚类的均值特征来作为初始化参数。具体地,对于每个cluster C C C,我们计算均值特征 F c F_c Fc​,然后 C L CL CL的参数 W W W被初始化为:

【ICCV2019 reid】Self-training with progressive augmentation for unsupervised cross-domain person reid前言介绍方法实验

W ∈ R d × C W\in R^{d\times C} W∈Rd×C。d表示的是特征维度。

通过这种初始化可以避免由于随机初始化带来的性能急剧损失。

Alternate Training

learning的过程希望能够递进地提高模型的泛化能力。本论文中我们提出了一种有效且简单的自训练策略,也就是conservative stage和promoting stage交替地训练。

本文的伪代码如下:

【ICCV2019 reid】Self-training with progressive augmentation for unsupervised cross-domain person reid前言介绍方法实验
【ICCV2019 reid】Self-training with progressive augmentation for unsupervised cross-domain person reid前言介绍方法实验

实验

用了marknet,duke和cuhk。

backbone用了PCB(ECCV18),个人感觉这个backbone有点太强了,可以看下面这个表格,单纯的PCB在duke和marknet上面就有二十几的mAP了,记得其他的无监督domain adaption的方法都是直接一个resnet50.

【ICCV2019 reid】Self-training with progressive augmentation for unsupervised cross-domain person reid前言介绍方法实验

然后对于聚类方法的比较

【ICCV2019 reid】Self-training with progressive augmentation for unsupervised cross-domain person reid前言介绍方法实验

和SOFT的比较

【ICCV2019 reid】Self-training with progressive augmentation for unsupervised cross-domain person reid前言介绍方法实验

总体来说,在聚类的基础上加入了分类loss和triplet loss。然后提出了交替训练的方法。感觉唯一有争议的就是用的PCB作为backbone。

继续阅读