DG-Net++快速理解

简介: reid相关DG-Net++算法快速理解。

Joint Disentangling and Adaptation for Cross-Domain Person Re-Identification


论文快速理解

论文地址:https://arxiv.org/pdf/2007.10315.pdf
代码地址:https://github.com/NVlabs/DG-Net-PP


这篇论文是在DG-Net上面的扩展,主要解决的是跨域问题。用到了unsupervised domain adaptation无监督的域适应,同时使用了有监督的带标签的来自source domain和无监督的不带标签的target domain的数据。因此设计的核心思想是:align the feature distribution。本身来自不同域的数据可能在某些地方差距很大,具体到ReID问题上,这些差异表现在:季节、背景、视角、光照等。所以需要对齐两类数据的分布,从而提高模型复用效果。

以往的常用方法主要可以分为两大类:

  1. 在input level层面的,比如使用GAN进行风格转换。
  2. 在feature level层面的,比如self-training和distribution distance minimization等。

主要还是减少不同域的数据集的差异。

但是作者认为现有的方法都存在一个问题,就是在同时包含了id相关性和id相关的特征空间上完成adaptation,这个混杂的特征空间反而会削弱最终的效果。

所以作者提出解耦特征空间分成id相关和id不相关的部分,然后在id相关的部分进行适应。两个部分的效果是可以相互促进激励的。

论文主要包括以下三个贡献

  1. 用于无监督跨域学习的联合框架,并且能对特征进行解耦。
  2. 引入跨域的cycle-consistency来实现目标的解耦效果。
  3. 解耦过程和适应过程是co-designed的。

DG-Net++结成了DG-Net中的两个appearance encoder和structure encoder,但是解决的是不同的问题:

  1. DG-Net++解决的是无监督跨域问题。
  2. DG-Net++在无监督情况下进行了对id相关和非相关特征的解耦。
  3. DG-Net++的解耦过程和适应过程连结在一起,彼此受益。

作者将自己提出的框架分为两个模块,一个是Disentangling Module,主要作用是分离出id相关的特征。在该部分使用了一个cycle-consistency generation的结构,来自两个域的图生成的新的图可以还原为各自的原始图像。Adaptation module则专注于id相关的特征来完成adaptation。两个模块通过共享的appearance encoder组合在一起。

image.png

Disentangling Moduel

给定一个source domain中的图像$x_{s(i)}$和一个target domain中的图像$x_{t(j)}$,交换它们的appearance code或structure code就可以生成一个新的图像。
disentangling 模块包括以下几个部件:

  1. 一个共享的appearance encoder。$E_{app}:x \rightarrow v$
  2. 一个用于source domain图像的structure encoder。$E^s_{str}:x_{s(i)} \rightarrow \tau_{s(i)}$
  3. 一个用于target domain图像的structure encoder。$E^t_{str}:x_{t(j)} \rightarrow \tau_{t(j)}$
  4. 一个用于source domain的decoder。$G^s:(v_{t(j)},\tau_{s(i)}) \rightarrow x^{t(j)}_{s(i)}$
  5. 一个用于target domain的decoder。$G^t:(v_{s(i)},\tau_{t(j)}) \rightarrow x^{s(i)}_{t(j)}$
  6. 一个用于判断真实图像和生成图像的判别器$D_{img}$。
  7. 一个用于判断图像来自哪个域的判别器$D_{dom}$。

真实图像都只有一个表明域和编号的下标,而生成图像则既有表示appearance来源的上标,也有表示structure来源的下标。

Cross-domain generation

给定一组source图像和target图像,通过交换他们的appearance code和structure code可以生成新的图像。由于这里没有生成图像的ground-truth label作为监督,作者使用cycle-consistency self-supervision的方法来保证效果,从生成图像中提取出appearance和structure来还原输出图像。
$$L_{cyc}=E[||x_{s(i)}-G^s(E_{app}(x^{s(i)}_{t(j)}),E^s_{str}(x^{t(j)}_{s(i)}))||_1]+\\E[||x_{t(j)}-G^t(E_{app}(x^{t(j)}_{s(i)}),E^t_{str}(x^{s(i)}_{t(j)}))||_1] $$
其中$x_{s(i)}$为source domain的图像,$x_{t(j)}$为target domain的图像,$x^{s(i)}_{t(j)}=G^t(v_{s(i)},\tau_{t(j)})$和$x^{t(j)}_{s(i)}=G^s(v_{t(j)},\tau_{s(i)})$为交换appearance和structure后的生成图像。
为了保证appearance encoder能精准提取出id相关的信息,作者还使用了identification loss:
$$L^{s_1}_{id}=E[-log(p(y_{s(i)}|x_{s(i)}))] $$
这部分的主要保证原始的来自source domain的图像(带label的)分类不出错。同时也要保证生成图像保留了id相关的特征(appearance code)信息。
$$L^{s_2}_{id}=E[-log(p(y_{s(i)}|x^{s(i)}_{t(j)}))] $$
可以理解成appearance code决定了人的类别,structure code代表图像来自哪个域。上面这个loss就是保证使用行人a的appearance生成的新图像,仍然是行人a。
为了保证生成效果,作者也使用了一个对抗损失来拟合真假图像。
$$L^{img}_{adv}=E[logD_{img}(x_{s(i)})+log(1-D_{img}(x^{s(i)}_{t(j)})]+\\ E[logD_{img}(x_{t(j)})+log(1-D_{img}(x^{t(j)}_{s(i)})] $$
判断图像真假的判别器,不考虑图像来自哪个域。这样就可以间接性地引导appearance encoder去学习domain-invariant特征。

Adaptation Module

Adversarial alignment 虽然appearance encoder的部分是两个域共享的,但是仍然不能保证特征表达具有相似的分布。因此作者引入了domain判别器,对appearance encoder提取出的特征$v_{s(i)}$和$v_{t(j)}$进行区分。在对抗训练过程中appearance编码器会持续学习生成判别器$D_{dom}$无法区分的特征,跨域的appearance特征分布之间的差距会逐渐减小。
domain appearance adversarial alignment loss:
$$L^{dom}_{adv}=E[logD_{dom}(v_{s(i)})+log(1-D_{dom}(v_{t(j)})]+\\ E[logD_{dom}(v_{t(j)})+log(1-D_{dom}(v_{s(i)})] $$
Self-training作者在adaatation模块中包括了self-training的部分。它跨域减少跨域特征分布之间的差距,同时也鼓励了判别式得appearance特征的学习。
对于来自target domain的数据,迭代性的生成一组伪标签。并且使用这组伪标签改善网络。伪标签是通过对从appearance encoder提取出的target features进行聚类的道德,对于每个cluster中的样本都分配同一个标签。每两个epoch更新一次伪标签。
$$L^{t_1}_{id}=E[-log(p(\hat{y}_{t(j)}|x_{t(j)}))]\\ L^{t_2}_{id}=E[-log(p(\hat{y}_{t(j)}|x^{t(j)}_{s(i)}))]$$
在伪标签上也应有identification loss,保证分类正确和appearance encoder的提取效果。
带self-training的adaptation可以促进共享的appearance encoder同时学习域不变性特征和判别得特征。

Optimization

对share appearance encoder、image discriminator、domain discriminator和source structure encoders,target structure encoders, source decoders, target decoders进行联合训练,来优化最终目标。
$$L_{total}(E_{app},D_{img},D_{dom},E^s_{str},E^t_{str},G^s,G^t)=\lambda_{cyc}L_{cyc}+L^{s1}_{id}+L^{t1}_{id}+\lambda_{id}L^{s2}_{id}+\lambda_{id}L^{t2}_{id}+L^{img}_{adv}+L^{dom}_{adv} $$
作者使用的权重是$\lambda_{cyc}=2,\lambda_{id}=0.5$。

相关文章
|
9月前
|
机器学习/深度学习 人工智能 IDE
DG-Net快速理解
reid相关DG-Net算法快速理解。
|
开发框架 .NET 数据库
.NET6新东西---TryGetNonEnumeratedCount
.NET6新东西---TryGetNonEnumeratedCount
115 0
|
API
.NET6新东西--ConfigurationManager
.NET6新东西--ConfigurationManager
229 0
.NET6新东西--CallerArgumentExpression
.NET6新东西--CallerArgumentExpression
179 0
.NET6新东西--CallerArgumentExpression
.NET 6新东西--PeriodicTimer
.NET 6新东西--PeriodicTimer
160 0
|
Oracle 网络协议 关系型数据库
Oracle Net Manager使用
本文目录 1. 简介 2. 服务名的原理 3. 服务名配置的具体步骤 4. 总结
399 0
Oracle Net Manager使用
|
监控 C#
VS2012 C#使用/配置Log4Net
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来。 十年河东十年河西,莫欺少年穷 学无止境,精益求精   本节探讨如何在VS2012中使用Log4Net 1、首先在项目中添加Nuget程序包.
1510 0
|
Oracle 网络协议 关系型数据库