这里以ISPRS Vaihingen数据集为目标域、ISPRS Potsdam数据集为源域,采用ColorMapGAN为语义分割域适应模型框架,向读者全面的展示了遥感图像语义分割域适应的意义、方法体系、模型训练流程,并直观的了解域适应前后语义分割的性能对比。使用GAN的思想进行遥感图像语义分割的域适应
代码地址:https://github.com/AI-Chen/ColorMapGAN
一、语义分割域适应可以做什么
其实语义分割域适应在自然影像和遥感影像中起到的作用其实是不完全一致的
语义分割域适应,除了上述的作用之外,还有一个比较实用的作用就是打比赛。你可以想象大赛发布的训练集就是你的源域,而测试集就是你的目标域。这样,域适应在比赛时的作用不言而喻。当然,前提是能够拿到测试集的图片。不过最近的比赛,因为怕参赛人员直接标注测试数据,所以好像测试集都拿不到了,域适应因此也行不通了。
二、语义分割域适应可以怎么做
关于怎么语义分割的方法体系我在语义分割中的无监督域自适应系列-AdaptSegNet。其实也有简要分类:
不过没有细说。这里详细的总结一下,也好对上“后续两周”就会带来的代表方法的总结:
1)基于对抗学习:实际上,前面提到的语义分割中的无监督域自适应系列-AdaptSegNet就是经典的基于对抗学习的域适应方法。这一类的方法使训练一个判别器来使得目标域的分布在像素空间或者特征空间上进行对齐(在像素空间上的对齐已经被证明对于语义分割任务而言优于特征空间),从而使得分割模型的性能能从源域泛化到目标域上。除了AdaptSeg之外,这一方向上的经典工作还有:
- Fully Convolutional Adaptation Networks for Semantic Segmentation(CVPR2018)
- ADVENT: Adversarial Entropy Minimization for Domain Adaptation in Semantic Segmentation(CVPR2019)
- Taking A Closer Look at Domain Shift: Category-level Adversaries for Semantics Consistent Domain Adaptation (CVPR2019)
- Differential Treatment for Stuff and Things: A Simple Unsupervised Domain Adaptation Method for Semantic Segmentation(CVPR2020)
- Unsupervised Intra-domain Adaptation for Semantic Segmentation through Self-Supervision(CVPR2020)
以上基于对抗学习的无监督域适应工作有感兴趣的读一下。
2)风格迁移:这个方向主要是本篇文章所需要讲述的。他的本质在于将源域的图片在视觉上转变成目标域的风格。这样,可以直接使用源域的数据训练模型,并且能够在目标域上实现比较好的分割性能。这个方向上除了本次复现的ColorMapGan之外,还有一些经典的论文可以阅读一下:
- CyCADA: Cycle-Consistent Adversarial Domain Adaptation(ICML2018)
- FDA: Fourier Domain Adaptation for Semantic Segmentation(CVPR2020)
- Learning Texture Invariant Representation for Domain Adaptation of Semantic Segmentation(CVPR2020)
而在本次总结的博客中我们将复现一篇遥感图像处理顶级期刊TGRS中的一篇文章ColorMapGAN。ColorMapGAN的原理将在之后的第三节中详细讲解。
3)自监督学习:显然,自监督学习就是设定某种方法为每一张目标域图片产生伪标签。这一类的方法的核心之处在于如何产生伪标签。因此也产生了一系列的方法,以下是一些值得一读的文章:
- Learning from Scale-Invariant Examples for Domain Adaptation in Semantic Segmentation(ECCV2020)
- Rectifying Pseudo Label Learning via Uncertainty Estimation for Domain Adaptive Semantic Segmentation(IJCV2020)
- Dual Path Learning for Domain Adaptation of Semantic Segmentation(ICCV2021)。对于这篇文章,之前也有过一个总结ICCV2021-语义分割无监督域适应:Dual Path Learning(DPL)
三、使用GAN进行语义分割域适应原理讲解
本次只要对来自遥感图像处理顶级期刊TGRS的工作ColorMapGAN(https://ieeexplore.ieee.org/document/9047180)进行总结简介。
总体流程如下图所示:
总体流程包含四个步骤:
1)预训练:将分割模型在源域数据上进行预训练。预训练后的模型可以在源域图像上很好的分割,但是在目标域上分割性能不佳。
2)风格迁移:这个阶段主要采用本文中所提出的colormapgan的模型来达到迁移的目的。该步骤之后,源域图像在视觉上与目标域相似。
3)微调阶段:使用转换后的源域数据对预训练后的模型性进行微调。该步骤后,能够提高模型在目标域图像上的分割性能。
4)测试阶段:在目标域图像上测试模型的性能。
这里所需要详细讲解的就是风格迁移阶段的colormapgan的结构。与GAN一致,colormapgan包含一个生成器和一个判别器。生成器将源域图像在视觉外观上转换到与目标域一致。判别器需要判别出输入的图片来自源域还是目标域。具体来说:
生成器G:
整个生成器的步骤在上图中描述的很清晰。对此有疑问的可以直接看原文。这里稍微描述一下步骤2、3。2的意义在于为图像中的每一个位置生成一个索引。对于一个位置的像素,它包含r,g,b三个值。他们的取值范围都在0-255之间。使用他们三个值生成的索引为:i = r*255*255 + g*255 + b。idx的取值在0-255*255*255之间。使用索引可以在权重矩阵中找到对应索引的的权重矩阵W[i].同理可以得到偏执项K[i]. 然后经过4、5、6、7步骤后可以得到转换后的图像。
判别器D
就是一个普通的卷积神经网络,输入为目标域图像,与转换后的源域图像。
整个训练过程为迭代的训练生成器和判别器:
定义源域图像的标签为1, 目标域的标签为0
1)训练判别器:我们希望判别器能尽可能的判别出图片来自目标域还是源域。对于源域图像s,记其经过生成器后的转换图像为G(s)。记目标域图像为t。训练判别器的损失函数为:
loss_d = (D( G(s) ) - 1)^2 + D(t)^2
Note: 此时不需要更新G的参数
2)训练生成器:生成器需要尽可能的将源域图像的风格转换为目标域,以使得判别器判别不出其来自哪个域。此时的损失函数为:
loss_g = D( G(s)) ^ 2
Note: 此时不需要更新D的参数
上述两个训练过程在一个训练迭代中先后进行。
训练结束之后就可以使用生成器G来产生转换后的源域图片。
四、使用GAN进行语义分割域适应代码剖析
具体看见github中的readme文件
五、使用GAN进行语义分割域适应效果展示
1)经过ColorMapGAN风格迁移前后,图像的视觉效果对比:
可以看到经过转换后的源域图片在视觉风格上与目标域图片变得一致。因此用转换后的源域图片去微调分割模型后,能够比微调前的分割模型在目标域的性能要好。2)分割效果可视化比较:
可以看到,在风格迁移后的数据上进行微调后模型在性能上要好于微调前的模型。具体来说OA从0.36上升至0.45。