《Unsupervised Intra-domain Adaptation for Semantic Segmentation through Self-Supervision》论文笔记

参考代码:IntraDA

1. 概述

导读:在分割分割模型的训练往往需要较多的人工标注数据,但是获取这些标注的成本是较为昂贵的,一种较为廉价的方式就是使用图形生成器去生成虚拟的训练数据,之后通过DA(Domain Adapting)的方式进行域迁移,从而使得在真实数据上的效果得到提升。但是这种生成(仿真)数据与真实数据(包含了运用/光照/天气/阴影等多种因素影响)之间是存在domain gap的,之前的一些工作着力于缩小仿真数据与真实数据集的差异(也就是文章说的inter-domain),但是却很少考虑到真实数据内部的难易数据分布(intra-domain),对此文章提出了一种新的域迁移方法:首先完成inter-domain的迁移,之后按照文章提出的熵排序规则将真实数据的分割结果划分为难易两部分(不同的域),之后完成上述两部分的intra-domain迁移。

文章的方法是UDA(unsupervised domain adaption)类型的,其中对DA的流程进行了分析,将其分割为域间与域内两个部分的迁移,其流程见下图所示:
在这里插入图片描述

2. 方法设计

2.1 网络结构

这篇文章提出的方法具体流程见下图所示:
在这里插入图片描述

文章设 S S S为源域(合成图像), T T T为目标域(真实的图像),上图中的 G i n t e r , D i n t e r G_{inter},D_{inter} Ginter,Dinter分别为类间domain的生成器和判别器, G i n t r a G_{intra} Gintra D i n t r a D_{intra} Dintra分别为类内domain的生成器和判别器。

2.2 Inter-domain Adaptation

这部分工作是完成合成数据与真实数据之间的domain adaptation,合成数据的输入表示为 X s ∈ R H ∗ W ∗ 3 X_s\in R^{H*W*3} XsRHW3,其对应的训练标注描述为: Y s = Y s ( h , w ) ∈ [ Y s ( h , w , c ) ] c Y_s=Y_s^{(h,w)}\in [Y_s^{(h,w,c)}]_c Ys=Ys(h,w)[Ys(h,w,c)]c,由合成数据的输入通过生成器得到对应的概率图为 P s = G i n t e r ( X s ) ∈ [ P s ( h , w , c ) ] c P_s=G_{inter}(X_s)\in [P_s^{(h,w,c)}]_c Ps=Ginter(Xs)[Ps(h,w,c)]c(one-hot), 那么合成数据的回归损失函数就可以描述为:
L i n t e r s e g ( X s , Y s ) = − ∑ h , w ∑ c Y s ( h , w , c ) l o g ( P s h , w , c ) L_{inter}^{seg}(X_s,Y_s)=-\sum_{h,w}\sum_cY_s^{(h,w,c)}log(P_s^{h,w,c}) Linterseg(Xs,Ys)=h,wcYs(h,w,c)log(Psh,w,c)
对于生成数据与真实数据的分布是使用GAN的形式进行两者分布近似的。不过这里并没有使用 G i n t e r G_{inter} Ginter输出的概率图二是使用了entropy maps(这里假设与合成数据类似的数据表现为low-entropy,而真实数据则表现为high-entropy),所以文章是在这个映射之后的域里面拉进两个数据分布之间的距离。这里由真实数据通过生成器得到的分割概率图为 P t = G i n t e r ( X t ) P_t=G_{inter}(X_t) Pt=Ginter(Xt),那么对应的entropy maps计算描述为:
I t h , w = ∑ c − P t ( h , w , c ) l o g ( P t ( h , w , c ) ) I_t^{h,w}=\sum_c-P_t^{(h,w,c)}log(P_t^{(h,w,c)}) Ith,w=cPt(h,w,c)log(Pt(h,w,c))
对于GAN的判别器表示为 D i n t e r D_{inter} Dinter,则两者之间的分布损失可以描述为:
L i n t e r a d v = ∑ h , w l o g ( 1 − D i n t e r ( I t ( h , w ) ) ) + l o g ( D i n t e r ( I s ( h , w ) ) ) L_{inter}^{adv}=\sum_{h,w}log(1-D_{inter}(I_t^{(h,w)}))+log(D_{inter}(I_s^{(h,w)})) Linteradv=h,wlog(1Dinter(It(h,w)))+log(Dinter(Is(h,w)))

2.3 Entropy-based Ranking

在上面的内容中已经将真实数据和合成数据做了inter-domain adaptation,按照文章的思路就需要将真实数据划分为easy和hard数据,这里采用的度量为:
R ( X t ) = 1 H W ∑ h , w I t h , w R(X_t)=\frac{1}{HW}\sum_{h,w}I_t^{h,w} R(Xt)=HW1h,wIth,w
这里文章是按照一定的比例进行easy和hard的划分,而不是按照阈值,文中指出这样是为了提升方法的通用性,因而就引入了划分的比例超参数 λ = ∣ X t e ∣ ∣ X t ∣ \lambda=\frac{|X_{te}|}{|X_t|} λ=XtXte,也就是easy的样本占总体的比例,对此文章做了消融实验其超参数调试结果如下表:
在这里插入图片描述
此外,为了更加适应数据的分布情况,因而按照上面的条例进行划分并不是最优的,因为像CityScape数据集中存在一些rare calss(wall, fence, pole, traffic light, traf- fic sign, terrain, rider, truck, bus, train, motor)就会照成划分难易的时候存在歧义,因而文章引入了entropy normalization的策略进行平衡,也就是使用除以对应类别entropy均值的方式进行归一化,其对比结果件下表所示:
在这里插入图片描述

2.4 Intra-domain Adaptation

完成上述的真实难易数据划分之后,就需要完成intra-domain的adaptation,这里使用的方法可以参考之前inter-domain的方法,但是由于没有真实数据的标注,这里就直接使用 G i n t e r G_{inter} Ginter的结果 P t e = G i n t e r ( X t e ) P_{te}=G_{inter}(X_{te}) Pte=Ginter(Xte)作为easy
样本的分割GT,则对应的intra-domain部分的分割损失描述为:
L i n t r a s e g ( X t e ) = − ∑ h , w ∑ c P t e ( h , w , c ) l o g ( G i n t r a ( X t e ) ( h , w , c ) ) L_{intra}^{seg}(X_{te})=-\sum_{h,w}\sum_cP_{te}^{(h,w,c)}log(G_{intra}(X_{te})^{(h,w,c)}) Lintraseg(Xte)=h,wcPte(h,w,c)log(Gintra(Xte)(h,w,c))
而对应的hard部分数据经过intra的生成器得到生成的结果为: P t h = G i n t r a ( X t h ) P_{th}=G_{intra}(X_{th}) Pth=Gintra(Xth),类似的经过inter部分的GAN损失函数完成easy:
和hard部分的近似:
L i n t r a a d v ( X t e , X t h ) = ∑ h , w l o g ( 1 − D i n t r a ( I t h h , w ) ) + l o g ( D i n t r a ( I t e ( h , w ) ) ) L_{intra}^{adv}(X_{te},X_{th})=\sum_{h,w}log(1-D_{intra}(I_{th}^{h,w}))+log(D_{intra}(I_{te}^{(h,w)})) Lintraadv(Xte,Xth)=h,wlog(1Dintra(Ithh,w))+log(Dintra(Ite(h,w)))

2.5 损失函数

因而,文章整体的损失可以描述为多个部分相加的形式:
L = L i n t e r s e g + L i n t e r a d v + L i n t r a s e g + L i n t r a a d v L=L_{inter}^{seg}+L_{inter}^{adv}+L_{intra}^{seg}+L_{intra}^{adv} L=Linterseg+Linteradv+Lintraseg+Lintraadv
整体的优化过程描述为:
G ∗ = arg min ⁡ G i n t r a min ⁡ G i n t e r , G i n t r a max ⁡ D i n t e r , D i n t r a L G^{*}=\argmin_{G_{intra}}\min_{G_{inter},G_{intra}}\max_{D_{inter},D_{intra}}L G=GintraargminGinter,GintraminDinter,DintramaxL
具体流程可以描述为:

  • 1)优化inter-domain部分的 G i n t e r , D i n t e r G_{inter},D_{inter} Ginter,Dinter
  • 2)使用文章的easy和hard划分粗略得到两部分数据;
  • 3)优化intra-domain部分的 G i n t r a , D i n t r a G_{intra},D_{intra} Gintra,Dintra

3. 实验结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m_buddy/article/details/109018553