Unsupervised remote sensing image thin cloud removal method based on contrastive learning论文翻译

2024 IET 

论文名称 基于对比学习的无监督遥感图像薄云去除方法

摘要

去云算法是遥感图像预处理的关键步骤。当前主流的遥感图像去云算法都是基于深度学习实现的,并且大多数都是有监督的。训练需要大量的数据对来实现去云。然而,真实的有/无云图对数据集在现实世界中很难获得,通过在合成数据集上训练获得的模型通常需要更好地推广到自然场景。现有的基于Cycle-GAN框架的无监督薄云去除方法模型复杂且训练不稳定,无法很好地解决配对数据集不足的问题。基于此,本文提出了一种基于对比学习的无监督遥感图像薄云去除方法——GAN-UD方法。这是一个由频率-空间注意力生成器和鉴别器组成的网络。此外,作者还引入了局部对比损失和全局内容损失来约束生成图像的内容,以确保生成的无云图像在图像内容方面与输入云图像保持一致。实验结果表明,在没有成对训练数据集的情况下,本文提出的方法仍然可以有效地去除遥感图像中的薄云,优于当前的无监督去云方法,并达到与有监督方法相当的性能。

1导言

        随着卫星遥感技术的进步,光学遥感图像在林业等许多领域得到了广泛应用1】、农业【2】和资源勘探【3].然而,云污染导致遥感图像的大部分特征信息被遮挡,严重阻碍了遥感图像的应用和研究。据统计,在存档的光学卫星遥感图像中,约有三分之二的对地观测图像受到云层污染45].假设只有干净和清晰的图像用于处理和研究。在这种情况下,它将导致大多数遥感数据无法使用,特别是在受云层影响更严重的低纬度地区。因此,去云是许多遥感图像进一步研究的关键预处理步骤,具有重要的实用价值。

        在遥感图像中,厚云的严重遮挡通常会影响对特征信息的观察和分析。因此,经常需要使用像素替换来去除云。尽管可以去除云,但获得的云去除图像通常与厚云图像中的特征信息不同。相比之下,薄云图像中的特征信息是可以恢复的,因为薄云不会完全遮挡图像的特征信息,同时没有明确的边界,我们可以通过一些方法来确保去云图像的内容保持不变。

        在遥感图像中,厚厚的云层可以完全覆盖特征信息,影响对图像的观察和分析。因此,经常需要使用像素替换来去除云。并且以这种方式生成的云去除图像将经常不同于厚云图像中的特征信息。相比之下,薄云图像中的特征信息是可以恢复的,因为薄云不会完全遮挡图像的特征信息,并且没有清晰的边界,我们可以通过一些方法保持去云图像的内容不变。

        最近,深度学习已被引入薄云去除方法。基于深度学习的去云方法利用卷积神经网络强大的特征表示能力,从大量训练样本中学习遥感云图和无云图像之间的映射函数,这类方法大大提高了遥感图像去云的性能【6-113738].然而,大多数基于深度学习的去云方法都是基于监督学习的。这些方法严重依赖大量的成对训练数据来学习如何从遥感图像中去除云污染。然而,在现实世界中,缺乏成对的遥感云/无云图像数据,构建成对的遥感图像数据集需要耗费大量人力和资源。现有的成对遥感影像数据集大多由同一颗卫星在不同时期获取,获取完成后需要进一步筛选,然后进行影像配准,以精确构建成对遥感影像。由于成对的遥感图像数据集数量较少,并且其构建需要大量资源,因此对遥感图像的进一步研究受到限制。

        基于此,本文提出了一种针对不成对数据的薄云去除方法。在这项工作中,我们做出了以下三个方面的贡献:

1)本文建立了一种有效的非配对数据生成对抗网络(GAN-UD)来去除非配对遥感图像中的薄云,该网络即使在非配对数据集上也能实现薄云去除。

2)考虑到遥感图像通常包含各种具有复杂空间特征的地物。在没有成对样本的情况下,为了充分利用输入图像的信息,我们引入了频率-空间注意力模块(FSAM)来充分利用图像的空间和通道信息,并引导网络去除薄云;此外,为了约束生成图像的内容,我们还引入了局部对比损失和全局内容损失来保持生成图像和输入图像在内容方面的一致性。

3)在RICE1和Paris数据集上的实验结果表明,我们提出的GAN-UD优于当前的无监督去云方法,并获得了与有监督方法相当的性能。

2相关工作

2.1针对RSI的薄云移除

        遥感图像薄云去除技术是遥感图像处理中的一项重要技术。在遥感图像获取中,由于自然因素的影响,获取的遥感图像往往被带有地面信息的云层遮挡,对后续的图像信息提取和分析造成很大干扰。为此,人们提出了多种遥感图像薄云去除方法,包括基于传统图像处理和基于深度学习的薄云去除方法。

2.1.1基于传统图像处理的方法

        在传统的图像处理方法中,同态滤波12】,小波变换【1314】和暗通道先验(DCP)【15】是去除薄云的更经典的方法。其中,同态滤波和小波变换主要是将图像从空间域转换到频率域,然后在频率域中利用薄云的低频特性,通过设置带阈值的高通滤波器来抑制低频信息和增强高频信息,最后转换到空间域来实现图像去云。DCP最早用于图像去雾,主要利用图像中相应的非天空区域。具有非常低的灰度值先验信息的通道将用于实现图像去雾。后来它被用来解决遥感图像中薄云去除的问题。该方法可以快速有效地进行图像去云,但得到的去云图像较暗,对遥感云图并不普遍有效。

2.1.2基于深度学习的方法

基于深度学习的遥感图像薄云去除方法分为有监督(成对)和无监督(不成对)方法。

监督薄云去除方法,AoDNet【7】首先提出了一种基于卷积神经网络的端到端去云模型,将其输入到遥感云图中,并对模型进行训练以直接获得清晰的无云图像。网格网站【8提出了一种基于注意机制的多尺度网络模型。随着生成对抗网络(GAN)模型的提出,文献9,10使用GAN网络架构来实现遥感图像去云任务并取得了良好的效果。近年来,潘等将注意机制与GAN【16设计一个基于空间注意力机制的空间注意力生成对抗网络来实现去云11].它利用空间注意机制模拟人类视觉机制来实现去云,并与文献9,10进行了比较。与文献9,10相比,它生成了更高质量的无云图像。随着视觉转换器的提出,转换器的重要模型框架被引入图像处理任务。云移除【37】提出了一种基于Vision Transformer的编码器网络和多尺度特征融合网络来实现遥感图像的薄云去除。近日,WaveCNN-CR【38】提出了小波集成CNN来生成更真实和精细的薄云去除图像。然而,监督方法的成功依赖于大规模的成对训练数据集。并且在配对数据集难以获得的情况下,文献10通过物理模型模拟云层,合成有/无云的配对数据集,最后使用这些数据集训练去云模型。然而,通过在合成数据集上训练获得的模型通常难以推广到真实场景。

无监督薄云去除方法。CycleGAN17】是非成对图像到图像翻译最流行的框架。受Cycle-GAN的启发,文献1在不使用成对训练数据的情况下实现了遥感图像去云。子等【18】将物理模型与Cycle-GAN相结合,进一步提高精简云移除的性能。Cycle-GAN设计原理通过循环一致性来约束两个域之间的转换。然而,由于源域和目标域的知识不对称,Cycle-GAN无法保证生成的目标图像细节接近真实的清晰图像。铬-锰-磷合金【39首次提出通过输入Sentinel-2A多光谱

"双任务交互式学习对于遥感图像时空谱融合的无监督方法"是一种利用深度学习技术处理遥感数据的高级策略。这种代码通常涉及卷积神经网络(CNN)的联合训练,其中包含两个任务:一是对时空特征的学习,另一个是对光谱特征的分析。它通过让模型同时处理空间、时间序列和光谱信息来增强特征融合。 这类代码的核心通常包括以下几个步骤: 1. 数据预处理:加载并标准化遥感数据集,可能需要分割成时空片段。 2. 模型架构:设计一个包含空间流、时间流和光谱流的模块,比如U-Net、LSTM或其他适合处理时空序列的结构。 3. 双任务损失函数:定义一个综合考虑两个任务的损失函数,如交叉熵加权的总和。 4. 交互学习:通过梯度更新相互影响,空间流可以指导光谱流理解更丰富的上下文,反之亦然。 5. 无监督学习:因为没有标注数据,可能会使用自监督策略,如预测下一个时间步、重构输入等。 具体的Python代码库如PyTorch、TensorFlow或Keras中可能的样子会像这样: ```python import torch.nn as nn from unet import UNet #假设这是自定义的空间+光谱融合Unet class DSTSF(nn.Module): def __init__(self): super(DSTSF, self).__init__() self.spatial_unet = UNet(spatial_input_channels=... #空间通道数 self.temporal_lstm = LSTM( ... #定义时间序列部分 # 光谱分支可以类似地定义 def forward(self, x_spatiotemporal): spatial_out = self.spatial_unet(x_spatiotemporal[:, :, :, :]) temporal_out = self.temporal_lstm(x_spatiotemporal[:, :, :, -1]) #只取最后一维作为时间序列输入 # 进行融合操作(例如concatenation) fused_output = torch.cat([spatial_out, temporal_out], dim=-1) return fused_output # 使用交叉熵等损失函数 + 学习率衰减策略 optimizer = torch.optim.Adam(model.parameters(), lr=0.001) loss_fn = nn.CrossEntropyLoss() for epoch in range(num_epochs): # 训练循环 outputs = model(inputs) loss = loss_fn(outputs, targets) # 假设targets是无标签的目标输出 optimizer.zero_grad() loss.backward() optimizer.step() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值