ChangeMamba笔记

文末附上论文和代码网页链接

ChangeMamba 基于最近提出的 VMamba 架构


现有问题:

  1. CNN感受野受限,无法捕捉像素之间的长距离依赖关系
  2. Transformers计算量大,不利于大规模遥感数据集的密集预测任务

本文从以下三个方面首次探索Mamba在遥感领域CD任务上的潜力:

  1. 二进制变化检测(BCD)——框架 MambaBCD
  2. 语义变化检测(SCD)——框架 MambaSCD
  3. 建筑物损坏评估(BDA)——框架 MambaBDA

三个框架都采用
Visial Mamba
作为编码器,解码器部分分别提出三种时空关系建模机制,可以检测不同类别变化,包括二值变化、语义变化和建筑物损坏程度

本文重点任务:

  1. 二进制CD (BCD):BCD的目的仅仅是确定变化发生的“位置”
  2. 语义CD (SCD):SCD则进一步寻求确定变化是“什么”
  3. 建筑损害评估(BDA):不仅需要识别变化(损害)发生的“位置”,还需要识别相关对象(建筑)在事件发生前的状态。

数据集:

  1. SYSU:关注城市和沿海的变化
  2. LEVIR-CD+:记录了重大的建筑结构变化
  3. WHU-CD:特别专注于检测大型和稀疏建筑结构的变化
  4. SCD数据集SECOND:主要关注六个主要的土地覆盖类别:非植被地表、树木、低植被、水、建筑和游乐场,以捕捉广泛的地理变化
  5. BDA数据集xBD:封装了多个级别的损害,并涵盖了多种灾害类型(地震,海啸,风暴,野火,火山和洪水)

  • Transformer克服CNN不能将长时间依赖关系联系起来的问题,而状态空间模型SSM(尤其是S4)克服Transformer计算代价大的问题。
  • Mamba 进一步改进了 S4 模型得到S6,可以过滤掉无关信息,并调用相关信息,对输入数据进行因果处理,因此只能捕捉数据扫描部分的信息,与自然语言处理相吻合。而直接将图像数据沿空间的某一维度扩展并输入 S6 模型,会导致缺乏充分建模的空间上下文信息。
  • VMamba 通过提出一种二维交叉扫描机,如下图。在将tokens输入 S6 模型之前,交叉扫描机制会在空间维度上重新排列标记,即从左上到右下、从右下到左上、从右上到左下、从左下到右上。最后,合并得到的特征。与 Transformer 中的自注意操作相比,交叉扫描机制下 VMamba 模型的计算复杂度仍为 O (N)。

 


三种架构的网络模型:

  •  三种架构都有一个结构相同的变化检测器,用于从编码器提取的特征中学习时空关系
  • MambaSCD 还拥有用于土地覆盖物分类的语义解码器
  • MambaBDA拥有用于建筑物定位的语义解码器

三种架构编码器的网络结构:

  1. 分为四个阶段,每个阶段:
    1. 首先对输入数据进行降采样
    2. 利用若干视觉状态空间(VSS)块对空间上下文信息进行完全建模(流程在下幅图)
    3. 输出该阶段的特征
  2. 从四个阶段中提取的事件前和事件后图像特征将被用于后续负责特定任务的解码器中

VSS 块的结构:

  1. 输入经过归一化后,进入线性嵌入层
  2. 输出分成两个信息流
  3. 一个信息流通过 3 ×3 深度卷积(DWConv)层,通过 Silu 激活函数
  4. 进入核心 SS2D 模块(即 S6 模型与交叉扫描机制的整合)
    1. SS2D 模块的输出经过层归一化(LN)层
    2. 与经过 Silu 激活的其他流的输出相加,产生 VSS 模块的最终输出。 

特定解码器:

  • 三种时空关系建模:时空顺序建模(a)、时空交叉建模(b)和时空并行建模(c)

 

基于所提出的三种时空学习机制:

  • Change Decoder的具体结构如图,用于MambaBCD, MambaSCD,  MambaBDA

  1. 分四个阶段从提取的多时空特征中充分学习时空关系,并得到精确的二进制变化图
  2.  每个阶段的开始,首先使用时空状态空间(STSS)(图片如下)块对多时相特征的时空关系进行建模
    1. 一个时空标记生成器模块将重新排列输入的多时空特征
    2. 将其输入三个 VSS 模块,每个模块负责学习一种时空关系
  3. 通过Fusion block融合模块(图片如下),将当前阶段 STSS 模块的输出与上一阶段特征图的信息进行整合
    1. 通过 1×1 卷积层映射低层特征图的通道数,使其与高层特征图保持一致
    2. 将高层和低层特征图相加
    3. 通过残差层对得到的特征图进行平滑处理
  4. 通过Upsampling上采样层后,特征图被送入下一阶段

时空状态空间(STSS)如下:

融合模块Fusion block如下:

 

  • Semantic Decoder的具体结构如图,负责从编码器提取的相应多级特征中逐步恢复土地覆盖图,用于 MambaSCD 和 MambaBDA

  1. 分为四个阶段,前三个阶段:
    1. 在每个阶段的开始,使用 VSS 块对输入数据的全局空间上下文信息进行建模
    2. 对特征图进行上采样2×
    3. 通过Fusion block融合模块与分辨率更高的低层次特征图信息进行整合
  2. 最后一个阶段:将 VSS 模块输出的特征向上采样4×,用于预测相应的土地覆被图

损失函数

  • BCD:
  1. 交叉熵损失来优化网络
  2. 引入了 Lovasz-softmax 损失,以缓解变化和不变像素之间样本数量不平衡的问题

  • SCD:
  1. 优化后的交叉熵损失
  2. Lovasz-softmax 损失

  • BDA,包含建筑物定位任务 和 损坏分类任务:
  1. 交叉熵损失
  2.  Lovasz-softmax 损失


总结与未来方向

  • 开发了 MambaBCD、MambaSCD 和 MambaBDA 三种架构,分别用于二值变化检测、语义变化检测和建筑物损坏评估任务。对于Change Decoder,提出了三种时空关系建模方法充分学习时空特征。
  • 未来的工作包括但不限于开发更适合遥感数据特征的 Mamba 架构,将其应用于多模态和时间序列遥感任务,以及探索 Mamba 在遥感基础模型方面的潜力。

论文链接

代码链接

<think>好的,用户想要了解遥感变化检测论文的复现方法和代码实现。首先,我需要回忆一下相关的知识。遥感变化检测主要是通过分析不同时间段的遥感图像,识别出地表的变化,比如建筑物、植被等的变化。复现这类论文通常需要处理数据、搭建模型、训练和验证等步骤。 根据用户提供的引用,有三个相关的项目:ChangeMamba、LSNet和STANet。我需要结合这些引用的内容来给出具体的建议。例如,引用[2]提到了LSNet的数据加载器代码,这可能涉及如何读取和处理图像对及其标签。用户可能需要调整数据路径和预处理步骤,这部分需要注意文件目录的结构和图像格式的转换,比如将.tif转换为.png。 另外,引用[3]讨论了STANet复现中的问题,特别是特征距离的计算和维度调整。这说明在复现过程中可能会遇到张量维度不匹配的问题,需要仔细检查模型的每一层输入输出,并正确使用permute等函数调整维度顺序。 接下来,我应该分步骤来指导用户如何复现论文。首先是数据准备,需要确保数据集的格式与代码要求一致,可能需要调整数据加载器中的路径和图像处理方式。然后是模型搭建,根据论文的架构选择合适的框架,比如PyTorch,并注意模型组件的实现细节,比如特征提取和差异检测模块。 在训练过程中,超参数设置和损失函数的选择也很重要,可能需要参考论文中的优化器和学习率策略。同时,数据增强可以提高模型的泛化能力,需要根据代码中的train_transforms和test_transforms进行调整。 验证阶段,用户需要加载预训练模型,使用测试集评估性能,并生成变化检测结果图。可视化结果有助于直观检查模型效果,可能需要使用matplotlib等库。 最后,常见问题如张量维度错误、数据路径错误、梯度爆炸等,需要给出解决方案,比如检查数据路径、调整维度、使用梯度裁剪等。此外,推荐相关的论文和开源项目可以帮助用户进一步深入研究。 需要确保回答结构清晰,步骤明确,并且结合用户提供的引用内容,给出具体的代码示例和调整建议。同时,生成的相关问题要围绕用户的需求展开,比如数据准备、模型选择、调参技巧等,帮助用户全面了解复现过程中可能遇到的挑战和解决方法。</think>针对遥感变化检测论文复现的实现方法,结合提供的引用内容和实践经验,整理步骤如下: ### 一、数据准备与预处理 1. **数据集结构**需按论文要求组织: ```python # 引用[2]的目录结构示例 dataset/ ├── A/ # 时相1影像 ├── B/ # 时相2影像 └── label/ # 变化标签 ``` 需注意图像格式转换(如.tif转.png)[^2] 2. **数据加载器实现**参考: ```python # 引用[2]的dataloader核心代码 def cdd_loader(img_path, label_path, aug): img1 = Image.open(dir + 'A/' + name) img2 = Image.open(dir + 'B/' + name) label = Image.open(label_path.replace('.tif','.png')) sample = {'image': (img1, img2), 'label': label} # 应用数据增强 return sample['image'][0], sample['image'][1], sample['label'], name ``` ### 二、模型搭建要点 1. **双时相特征提取**: - 使用孪生网络结构处理两时相影像 - 推荐使用ResNet、ViT等作为backbone 2. **特征差异计算**: ```python # 引用[3]的特征距离计算实现 self.feat_A = feat_A.permute(0, 2, 3, 1) # 调整维度顺序 self.feat_B = feat_B.permute(0, 2, 3, 1) self.dist = F.pairwise_distance(feat_A, feat_B, keepdim=True) self.dist = dist.permute(0, 3, 1, 2) # 恢复原始维度[^3] ``` ### 三、训练配置 1. **损失函数选择**: - 常用交叉熵损失:`nn.CrossEntropyLoss()` - 针对类别不平衡可添加Dice Loss 2. **训练参数设置**: ```python optimizer = torch.optim.Adam(model.parameters(), lr=1e-4) scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, 'min') ``` ### 四、结果验证 1. **性能评估指标**: - 总体精度(OA) - Kappa系数 - F1-score(针对变化类) 2. **可视化实现**: ```python plt.imshow(pred_mask, cmap='jet') plt.title('Change Detection Result') ``` ### 五、常见问题解决 1. **张量维度错误**: - 检查特征图通道顺序(NCHW vs NHWC) - 使用`permute()`调整维度 2. **梯度爆炸**: - 添加梯度裁剪:`torch.nn.utils.clip_grad_norm_()` - 调整学习率至1e-5量级
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值