Self-Training With Progressive Augmentation for Unsupervised Cross-Domain Person Re-Identification

论文:Self-Training With Progressive Augmentation for Unsupervised Cross-Domain Person Re-Identificationhttps://arxiv.org/abs/1907.13315
年份:2019ICCV
代码:https://github.com/zhangxinyu-xyz/PAST-ReID

总述

将在标记数据的源域中训练的模型调整为仅可用未标记数据的目标域仍然是一项艰巨的任务。在这项工作中,我们开发了一种具有渐进增强框架(PAST)的自训练方法,以在目标数据集上逐步提升模型性能。特别地,我们的PAST框架包括两个阶段,即保留阶段和提升阶段。保留阶段使用基于三元组的损失函数捕获目标域数据点的局部结构,从而改进了特征表示。提升阶段通过在模型的最后一层附加一个可变的分类层来连续优化网络,从而可以使用有关数据分布的全局信息。重要的是,我们提出了一种新的自我训练策略,该策略通过交替采用保守阶段和晋升阶段来逐步增强模型能力。此外,为了提高所选三元组样本的可靠性,我们在保守阶段引入了基于排名的三元组损失,这是一种基于数据对之间相似度的无标签目标函数。

简介

通常来说,直接用source domain训好的模型去测试target domain的模型效果不好,因为源域和目标域之间的模型有domain shift的问题。在无监督跨域reid中,这个问题就变成了如何将在source domain上预训练训好的模型通过无监督有效地转换到目标域。
一些domain transfer用打伪标签的方法,比如用k-means或者DBSCAN聚类,每类当作是一个人。缺点就是效果很依赖于聚类的质量。
PAST:

  1. 在训练早期生成伪标签质量较差时抑制错误放大。
  2. 当标签质量更好后,逐步加入高置信度的标签样本,用于自训练
    在这里插入图片描述

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后面

方法

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

conservative stage

triplet loss 被证明是可以用来生成目标数据可靠triplets的方法,探索潜在的有意义的局部结构。
但不同于监督训练,伪标签很难构建高质量的triplets。
在本文中, 对于训练数据集T,我们首先提取每个样本的特征F,然后采用k倒排编码,引入Jaccard 距离,得到距离矩阵DJ(xi)
在这里插入图片描述
表示二者的Jaccard距离。因此,我们可以得到一个相似性矩阵表示二者的Jaccard距离。因此,我们可以得到一个相似性矩阵DR
在这里插入图片描述
HDBSCAN聚类方法则可以通过图像之间的相似度,即二者的Jaccard距离来进行聚类,将整个数据集划分为不同的类别,也就可以认为是一个伪标签,这样就可以赋予样本一个伪标签来进行训练,这里用到了两个triplet loss函数即基于聚类的三元组损失(CTL)和基于排名的三元组损失(RTL)。

Clustering-based Triplet Loss (CTL)

我们使用的一个loss是基于batch的hard mining triplet loss。我们随机采样P个clusters,每个类里面K个图片,所以我们的minibatch是PK。对于每张anchor image xa,对应的hardest 正样本xp和最难的负样本xn 被挑选出来形成一个triplet。随着伪标签来自于聚类方法,我们重命名为CTL:

在这里插入图片描述

Ranking-based Triplet Loss (RTL)

显而易见,CTL的效果很取决于聚类的效果,我们很难去决定哪个聚类结果是对的,哪个是错的。所以我们充分利用DR,提出了RTL。对于一个训练anchor xa,正样本从top η最近邻里面挑选,负样本从(η,2η]里面挑选。另外,对于CTL里面的固定margin,我们基于xp和xn 的ranking位置引入了soft margin。RTL表示为:
在这里插入图片描述
保留阶段的最终损失值可以表示为
在这里插入图片描述

Promoting Stage

光用triplet loss很容易陷入局部最优。对于聚类结果,我们还用了分类loss,来提高模型的泛化能力。为了防止在使用triplet loss时模型容易陷入局部最优的情况,提升阶段则是在网络结构的最后加上一个全连接层来作为分类层,根据伪标签用softmax来作为损失函数
在这里插入图片描述

Feature-based Weight Initialization for Classifier

因为聚类数量C每次都可能有差异,新增加的分类层CLCLCL在每次HDMSCAN之后都要初始化。相比于随机初始化,我们使用了每次聚类的均值特征来作为初始化参数。具体地,对于每个cluster C,我们计算均值特征Fc,然后CL的参数W被初始化为:
在这里插入图片描述
d表示的是特征维度。通过这种初始化可以避免由于随机初始化带来的性能急剧损失

Alternate Training

learning的过程希望能够递进地提高模型的泛化能力。本论文中我们提出了一种有效且简单的自训练策略,也就是conservative stage和promoting stage交替地训练。
本文的伪代码如下:
在这里插入图片描述

实验

实验部分主要不同于其他方法的地方是使用了PCB为主干。
在这里插入图片描述
单纯的PCB在duke和marknet上面就有二十几的mAP了。
聚类方法的比较
在这里插入图片描述
SOFT的比较
在这里插入图片描述

参考:https://blog.csdn.net/m0_37615398/article/details/98040663
https://blog.csdn.net/jh97321/article/details/102725071

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值