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$。

相关文章
|
6月前
|
机器学习/深度学习 人工智能 知识图谱
从“看图说话”到“脑补世界”:多模态大模型的进化之路
从“看图说话”到“脑补世界”:多模态大模型的进化之路
354 63
|
监控 安全 开发工具
鸿蒙HarmonyOS应用开发 | HarmonyOS Next-从应用开发到上架全流程解析
HarmonyOS Next是华为推出的最新版本鸿蒙操作系统,强调多设备协同和分布式技术,提供丰富的开发工具和API接口。本文详细解析了从应用开发到上架的全流程,包括环境搭建、应用设计与开发、多设备适配、测试调试、应用上架及推广等环节,并介绍了鸿蒙原生应用开发者激励计划,帮助开发者更好地融入鸿蒙生态。通过DevEco Studio集成开发环境和华为提供的多种支持工具,开发者可以轻松创建并发布高质量的鸿蒙应用,享受技术和市场推广的双重支持。
1941 11
|
8月前
|
人工智能 Linux iOS开发
音乐人必看!OpenUtau:开源AI歌声合成神器,快速打造专业级虚拟歌手,中文日文无缝切换
OpenUtau是一款开源的歌声合成工具,兼容UTAU音源库和重采样器,支持多语言界面及预渲染功能,让音乐创作更加高效便捷。
2320 15
音乐人必看!OpenUtau:开源AI歌声合成神器,快速打造专业级虚拟歌手,中文日文无缝切换
|
消息中间件 存储 Java
MQ线上消息乱序问题处理及场景详解
【11月更文挑战第22天】在现代分布式系统中,消息队列(MQ)作为核心组件,承担着异步处理、削峰填谷和系统解耦的重任。
794 1
|
存储 关系型数据库 MySQL
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景比较
|
11月前
|
IDE Java API
Java游戏开发基础:从零开始制作一个简单的2D游戏
本文介绍了使用Java开发一个简单的2D避障游戏的基础流程。
1022 10
|
开发框架 前端开发 JavaScript
在Bootstrap开发框架基础上增加WebApi+Vue&Element的前端
在Bootstrap开发框架基础上增加WebApi+Vue&Element的前端
|
机器学习/深度学习 自动驾驶 数据可视化
【细粒度】由CUB_200_2011数据集展开讲解细粒度分类任务
【细粒度】由CUB_200_2011数据集展开讲解细粒度分类任务
1208 0
【细粒度】由CUB_200_2011数据集展开讲解细粒度分类任务
|
文件存储
一篇文章讲明白LTE中的各种ID含义
一篇文章讲明白LTE中的各种ID含义
996 0
|
NoSQL Linux C++
Linux下使用命令行调试Python程序
Linux下使用命令行调试Python程序
847 0
Linux下使用命令行调试Python程序

热门文章

最新文章