这是CVPR 2019的一片论文,讲语义分割中的域适应
摘要
域适应在语义分割中的关键问题在于 减少域漂移(domain shift)。一般,我们对齐两个域之间的分布来解决这个关键问题。问题是,这种全局性的对齐两个域的分布,并没有考虑类别级别的对齐。这种忽略会造成:目标域中 原本已经对齐的类别,经过训练后,映射到错误的类别。
基于以上问题,作者提出类别级别的对抗网络,目标是在全局对齐的过程中,保持局部的语义不变性
介绍
语义分割是指在一张图片上给每个像素都打上类别标签。要实现这样的模型,人工标注成本太高。为了省点钱,我们采用合成数据集训练。比如用游戏中的街景数据集训练街景的语义分割模型。问题在于,该模型在真实场景中并不好使。所以采用域适应的策略,解决标注数据缺少的问题。
域适应的关键问题在于减少源域和目标域之间的差异。目前主要有两类方法:
- 通过缩小某种距离 来减少源域和目标域特征之间的差异
- 通过gan学习域不变的特征
上述方法都有一个很明显的缺陷:
当生成器网络能完美地骗过判别器网络时,两个域的全局边缘分布几乎完全对齐了。但是此时,忽略了局部的联合分布差异。目标域有些类别的特征分布已经对齐了。但是最小化对抗损失函数之后,会将该特征映射到错误的类别。
作者为了解决该问题提出了一下算法:
算法
问题背景
源域:数据
X
S
X_S
XS,标签
Y
S
Y_S
YS
目标域:数据
X
T
X_T
XT,无标签
目标:训练一个模型G,能正确分类目标域的数据
网络架构
整个网络由生成器G 和判别器D组成。G是一个由任意FCN为基础的语义分割网络。D是一个以CNN为基础的二分类网络。其中G又可以细分为:特征提取器E和两个分类器
C
1
,
C
2
C_1 , C_2
C1,C2。结构示意图如图片所示,可简写为
- G : FCN
- E
- C 1 , C 2 C_1 , C_2 C1,C2
- D : CNN
相关工作
论文采用了两种思想:对抗(GAN)和协同训练(co-traning)
GAN
GAN在迁移学习中的应用形式:训练生成器和判别器。生成器用来产生域不变的特征。判别器用来判别 特征属于哪个域.
本文中,生成器是G,判别器是D
协同训练(co-traning)
协同训练是一种半监督模型,针对标注数据很少的情况。协同训练的基本假设:数据有两种特征表达,并且这两种表达都可以对数据进行分类。即可以从两个不同的视角(view)看待数据。
假设数据有两种视角: ( x 1 , y 1 )    ,    ( x 2 , y 2 ) (x_1,y_1)\;,\;(x_2,y_2) (x1,y1),(x2,y2),其中 x x x是特征, y y y是标签。
- 利用标注数据的不同视角 ( x 1 , y 1 )    ,    ( x 2 , y 2 ) (x_1,y_1)\;,\;(x_2,y_2) (x1,y1),(x2,y2),可以得到两个不同的模型 f 1    ,    f 2 f_1\;,\;f_2 f1,f2
- 训练完之后用F1、F2 为目标域未标注数据生成伪标签,并将置信度高的样本加入到对方的训练集中
在本篇论文中的网络架构中,分类器
C
1
,
C
2
C_1 , C_2
C1,C2充当协同训练的模型
f
1
  
,
  
f
2
f_1\;,\;f_2
f1,f2。
分类器
C
1
C_1
C1预测的语义分割图记为
p
1
p_1
p1,分类器
C
2
C_2
C2预测的语义分割图记为
p
2
p_2
p2。最终的语义分割图记为
p
=
p
1
+
p
2
p=p_1+p_2
p=p1+p2
训练流程
在训练中,一共包含三个 loss:语义损失函数 (segmentation loss),差异损失函数 (discrepancy loss),自适应的对抗损失函数 (self-adaptive adversarial loss)
首先是,源域图片经过生成器G,其中包括特征提取器E,和两个分类器
C
1
,
C
2
C_1 , C_2
C1,C2,得到预测结果——语义分割图
p
p
p。这里产生一个语义损失函数 (segmentation loss):
然后,我们考虑标准的协同训练流程。为了得到同一张图片的两种表达,我们需要对分类器
C
1
,
C
2
C_1 , C_2
C1,C2的参数进行约束。
特征提取器E,提取所需的所有参数,而两个分类器分别选取一部分,进行像素分类。为了使得两个分类器选取的特征尽可能不一样,这里采用最小化卷积层参数的余弦相似度函数,即差异损失函数 ( discrepancy loss)
其中,w是分类器的卷积层的参数展开
最后考虑对抗过程。源域和目标域的图像经过整个网络,产生一个自适应的对抗损失函数
所以最终的训练损失函数为
损失函数分析
在网络中, C 1 , C 2 C_1 , C_2 C1,C2的作用是:
- 期望两个分类器抓取不同的特征
- 对由E提取的任意特征,两个分类函数的输出一样
差异损失函数 ( discrepancy loss),即公式4的作用是第一项
语义损失函数 (segmentation loss)和自适应的对抗损失函数 (self-adaptive adversarial loss)的作用是第二项
本文最大的贡献点在于:在传统的对抗loss中加入了自适应的权重
如果这一项很大,则表明:该类别的特征在两个域上面并没有对齐。所以,我们鼓励生成器去忽悠判别器,从而减小该类别两个域之间的差异
如果这一项很小,则表明:该类别特征在两个域上面已经对齐了,我们不需要对生成器做过大的修改。
从而我们达到了类别级别的特征对齐