来源 https://blog.csdn.net/cp_oldy/article/details/83217291
1. 预备知识
1.1 域适应 (Domain Adaptation, DA)
1.2 语义分割 (Semantic Segmentation, SS)
语义分割介绍
An overview of semantic image segmentation
2. 相关论文
2.1 CVPR 18-Learning to Adapt Structured Output Space for Semantic Segmentation
算法概述:
1) 训练分割网络:
源域和目标域给出大小为H×W的图像,我们将它们输入分割网络以获得输出预测。 对于具有C类的源类预测,基于Ground Truth计算分割损失。
2)训练判别网络:
为了使目标类预测更接近源类预测,我们利用判别器来区分输入是来自源域还是目标域。
3)自适应过程:针对目标预测计算对抗损失,并将其反向传播到分割网络。 我们将此过程称为一个自适应模块,我们通过在两个不同层面采用两个自适应模块来说明我们提出的多层次对抗性学习。
体会:
如何理解分割任务上的域适应问题?
域适应的问题背景是两个同类的数据集,由于光照、角度等不同,存在域差异(分布不同)。今天,我们面对的是两个分割的数据集D1和D2。在D1上训练得到的模型,能不能直接用在D2上?显然这是可以的,但是因为存在域差异(分布差异),会导致域漂移。也就是D2的数据会更多的被判断成D1场景下的数据,会导致一些分割错误。那怎么来解决这个域漂移的问题呢?怎么让模型对D2的数据更具有判别力呢?怎么减少源域和目标域的差异呢?
为什么可以用GAN来实现DA?
本文的思想就是用对抗学习来缩小源域和目标域的域差异(分布差异)。减小分布之间的差异,是GAN擅长的事情。而在分割任务中,输出空间的分割输出结果,不同的数据集对应的分割输出结果,存在分布差异。我们猜测,作者就是通过实验来证明了,在分割结果上用GAN进行学习,可以缩小源域和目标域之间的差异。而直接在分割结果上进行对抗学习,是在比较高层的结果上减小域差异;而多层的DA其实就是融合了低层和高层的特征进行学习的一个过程。
本文和传统域适应的区别
从任务上看,传统DA在分类任务上提升分类任务的准确率。作用在特征上。
而本文是在分割任务上使用DA的策略来提升分割的效果。作用在分割输出结果上。
模型中判别器反传的是什么?
是目标域的分割结果和源域的分割结果之间的差异,反传到分割网络进行调参,目的就是让分割网络预测的目标域的分割结果更像源域。判别器的目的是获得源域和目标域,在输出空间也就是分割结果上的,分布差异,通过判别器将这个差异反传给分割网络,让分割网络将目标域的图片分割的刚好,也就是更像源域的分割结果。从而,实现减小域差异的目的。
关于任务关系的思考
在相同数据上,任务A(分类)的能不能迁移到任务B(分割)上?如何迁移?任务A和任务C的迁移效果怎么比较和度量?
关于在分割上继续做域适应的思考
本文是在分割的输出空间做对抗学习,来缩小源域和目标域的分布差异,提升分割的效果。分割任务的整个架构中,除了输入空间、输入空间,还有什么地方存在域适应的场景?或者还有什么信息可以使用?比如弱监督的分割能不能用迁移学习的思想?
两个点
1. 使用结构信息:如将街景分割成上下两部分,更细节的对抗学习
2. 使用不同的loss函数,传统的GAN的loss知判断真假。如perception loss让GAN关注与内容的对抗学习
2.2 CVPR 18-Fully Convolutional Adaptation Networks for Semantic Segmentation
架构概述:
1) AAN:进行一个风格迁移,使得两个域的图片从外观上具有域不变的性质。
2) RAN:进行对抗学习,使得判别器无法区分学到的表示来自源域还是目标域。
疑问:
- 对抗的部分是怎么对像素进行对抗训练的? 判别Loss是怎样的?
2.3 ECCV 18-Domain Adaptation for Semantic Segmentation via Class-Banlanced Self-Training
左图:自训练流程(类似于语义分割中的种子生成的方法),一次迭代过程,包括在源域上训练模型,对目标域预测得到伪标签,修改k值,继续迭代。
块坐标下降算法:
- a) 固定网络参数 w \rm w w,最小化公式(3)的Loss,优化 y ^ t , n \hat \mathrm{y}_{t,n} y^t,n
- b) 固定网络参数 y ^ t , n \hat \mathrm{y}_{t,n} y^t,n,最小化公式(3)的Loss,优化 w \rm w w
(3) min w , y ^ L S T ( w , y ^ ) = − ∑ s = 1 S ∑ n = 1 N y s , n ⊤ log ( p n ( w , I s ) ) − ∑ t = 1 T ∑ n = 1 N [ y ^ t , n ⊤ log ( p n ( w , I t ) ) + k ∣ y ^ t , n ∣ 1 ] s . t . y ^ t , n ∈ { { e ( i ) ∣ e ( i ) ∈ R C } ∪ 0 } , ∀ t , n , k > 0 \min_{\mathrm{w}, \hat\mathrm{y}} \mathcal {L}_{ST}(\mathrm{w}, \hat\mathrm{y}) = -\sum_{s=1}^S\sum_{n=1}^N \mathrm{y}_{s, n}^{\top} \log(p_n(\mathrm{w}, I_s)) \\ -\sum_{t=1}^{T} \sum_{n=1}^N [\hat\mathrm{y}_{t, n}^{\top} \log(p_n(\mathrm{w}, I_t)) + k|\hat\mathrm{y}_{t, n}|_1 ] \\ s.t. \hat\mathrm{y}_{t, n} \in \{ \{ e^{(i)} | e^{(i)} \in \mathbb R^C \} \cup 0 \}, \forall t, n, k>0 \tag{3} w,y^minLST(w,y^)=−s=1∑Sn=1∑Nys,n⊤log(pn(w,Is))−t=1∑Tn=1∑N[y^t,n⊤log(pn(w,It))+k∣y^t,n∣1]s.t.y^t,n∈{{e(i)∣e(i)∈RC}∪0},∀t,n,k>0(3)
右图:Cityscapes数据集的语义分割结果,域适应前vs域适应后
- 域适应中的分布不同是什么意思?
答:可以用流形解释。源域和目标域,在低维子流形空间中很近,但存在差异。- (迁移学习中)什么场景适合使用自训练的方法?
答:目标域数据量大,源域和目标域差异小。- 论文中是如何控制自训练的方向的?(种子是如何生长的)
答: 使用课程学习的策略,由易到难。- 惩罚项里的k,在实验中的变化?
答:k是根据经验值p计算得来的。实验中,一共进行了7次迭代,p的值从20%到50%。每一轮得到k之后,对新的预测结果进行伪标签标记。
3. 总结
- 自适应语义分割的域:域适应的域指的是一个领域,类似于聚类中的簇。通常,域适应的文章中的实验是针对分类任务的,某个类别就可以看作是一个领域。但是在分割任务中,一个域指的是一种分割场景,比如街道场景、游戏街道场景。这里的场景中包含多种类别的物体,但是就分割任务而言,一个领域指的是一个场景。
- 自适应语义分割的训练策略:对抗训练(Adversarial-Training)和自训练(Self-Training)。
- 自适应语义分割的基础架构修改策略:输入空间、输出空间的域适应。