Hongruixuan Chen1 #, Jian Song1,2 #, Chengxi Han3, Junshi Xia2, Naoto Yokoya1,2 *
1 东京大学, 2 理化学研究所先进智能研究中心, 3 武汉大学.
# 共同第一作者, * 通讯作者
通知🐍🐍
: ChangeMamba已经被 IEEE TGRS 接收!仓库的代码已更新完毕!如果对您的研究有所帮助,请考虑给该仓库一个⭐️star⭐️!2024年11月14日
: ChangeMamba入选为🔥ESI 热点论文🔥!!2024年09月14日
: ChangeMamba入选为🏆ESI 高被引论文🏆!!2024年07月19日
: ChangeMamba入选为 IEEE TGRS 热点论文!!2024年07月19日
: ChangeMamba入选为 IEEE GRSS 周推荐论文!!2024年06月17日
: ChangeMamba被 IEEE TGRS 接收!2024年06月08日
: 中文版文档已上线!!2024年04月18日
: 我们已经发布了 ChangeMamba 模型在 BCD 任务中的所有权重。欢迎使用!!2024年04年05日
: MambaBCD、MambaSCD 和 MambaBDA 的模型和训练代码已经整理并上传。欢迎使用!!
- ChangeMamba系列模型包括三种有效的变化检测任务的基准模型,分别为二元变化检测模型MambaBCD、语义变化检测模型MambaSCD和建筑物损坏评估模型MambaBDA。
- ChangeMamba中的三种时空关系学习机制
此仓库的代码是在 Linux 系统下运行的。我们尚未测试是否能在其他操作系统下运行。
首先需要安装VMama仓库。以下安装顺序取自VMama仓库。
步骤 1 —— 克隆仓库:
克隆该版本库并导航至项目目录:
git clone https://github.com/ChenHongruixuan/MambaCD.git
cd MambaCD
步骤 2 —— 环境设置:
建议设置 conda 环境并通过 pip 安装依赖项。使用以下命令设置环境:
创建并激活新的 conda 环境
conda create -n changemamba
conda activate changemamba
安装依赖项
pip install -r requirements.txt
cd kernels/selective_scan && pip install .
检测和分割任务的依赖库(在 VMamba 中为可选项)
pip install mmengine==0.10.1 mmcv==2.1.0 opencv-python-headless ftfy regex
pip install mmdet==3.3.0 mmsegmentation==1.2.2 mmpretrain==1.2.0
另外,请下载VMamba-Tiny, VMamba-Small, and VMamba-Base在ImageNet上的预训练权重并把它们放在下述文件夹中
project_path/MambaCD/pretrained_weight/
二元变化检测
论文使用了三个基准数据集 SYSU、LEVIR-CD+ 和 WHU-CD 用于评估模型的二元变化检测的性能。请下载这些数据集,并将其组织成下述文件夹/文件结构:
${DATASET_ROOT} # 数据集根目录,例如: /home/username/data/SYSU
├── train
│ ├── T1
│ │ ├──00001.png
│ │ ├──00002.png
│ │ ├──00003.png
│ │ ...
│ │
│ ├── T2
│ │ ├──00001.png
│ │ ...
│ │
│ └── GT
│ ├──00001.png
│ ...
│
├── val
│ ├── ...
│ ...
│
├── test
│ ├── ...
│ ...
│
├── train.txt # 数据名称列表,记录所有训练数据的名称
├── val.txt # 数据名称列表,记录所有验证数据的名称
└── test.txt # 数据名称列表,记录所有测试数据的名称
语义变化检测
语义变化检测任务的数据集为SECOND数据集。 请下载该数据集,并使其具有以下文件夹/文件结构。请注意,原始 SECOND 数据集中的土地覆盖图为 RGB 图像。您需要将其转换为单通道图像。另外,二元变化图需要您自行生成,并将其放入文件夹 [GT_CD
]。
或者,欢迎您直接下载并使用经过我们预处理后的SECOND 数据集。
${DATASET_ROOT} # 数据集根目录,例如 /home/username/data/SECOND
├── train
│ ├── T1
│ │ ├──00001.png
│ │ ├──00002.png
│ │ ├──00003.png
│ │ ...
│ │
│ ├── T2
│ │ ├──00001.png
│ │ ...
│ │
│ ├── GT_CD # 二元变化图
│ │ ├──00001.png
│ │ ...
│ │
│ ├── GT_T1 # T1时相的土地覆盖图
│ │ ├──00001.png
│ │ ...
│ │
│ └── GT_T2 # T2时相的土地覆盖图
│ ├──00001.png
│ ...
│
├── test
│ ├── ...
│ ...
│
├── train.txt
└── test.txt
建筑物损坏评估
xBD 数据集可从 xView 2 挑战赛网站 下载。下载后,请按以下结构进行组织:
${DATASET_ROOT} # 数据集根目录,例如:/home/username/data/xBD
├── train
│ ├── images
│ │ ├──guatemala-volcano_00000000_pre_disaster.png
│ │ ├──guatemala-volcano_00000000_post_disaster.png
│ │ ...
│ │
│ └── targets
│ ├──guatemala-volcano_00000003_pre_disaster_target.png
│ ├──guatemala-volcano_00000003_post_disaster_target.png
│ ...
│
├── test
│ ├── ...
│ ...
│
├── holdout
│ ├── ...
│ ...
│
├── train.txt # 数据名称列表,记录所有训练数据的名称
├── test.txt # 数据名称列表,记录所有测试数据的名称
└── holdout.txt # 数据名称列表,记录所有留出集数据的名称
在训练模型之前,请进入 [changedetection
]文件夹,其中包含网络定义、训练和测试的所有代码。
cd <project_path>/MambaCD/changedetection
二元变化检测
运行以下命令在 SYSU 数据集上训练和评估 MambaBCD-Small模型:
python script/train_MambaBCD.py --dataset 'SYSU' \
--batch_size 16 \
--crop_size 256 \
--max_iters 320000 \
--model_type MambaBCD_Small \
--model_param_path '<project_path>/MambaCD/changedetection/saved_models' \
--train_dataset_path '<dataset_path>/SYSU/train' \
--train_data_list_path '<dataset_path>/SYSU/train_list.txt' \
--test_dataset_path '<dataset_path>/SYSU/test' \
--test_data_list_path '<dataset_path>/SYSU/test_list.txt'
--cfg '<project_path>/MambaCD/changedetection/configs/vssm1/vssm_small_224.yaml' \
--pretrained_weight_path '<project_path>/MambaCD/pretrained_weight/vssm_small_0229_ckpt_epoch_222.pth'
语义变化检测
运行以下命令在 SECOND 数据集上训练和评估 MambaSCD-Small模型:
python script/train_MambaSCD.py --dataset 'SECOND' \
--batch_size 16 \
--crop_size 256 \
--max_iters 800000 \
--model_type MambaSCD_Small \
--model_param_path '<project_path>/MambaCD/changedetection/saved_models' \
--train_dataset_path '<dataset_path>/SECOND/train' \
--train_data_list_path '<dataset_path>/SECOND/train_list.txt' \
--test_dataset_path '<dataset_path>/SECOND/test' \
--test_data_list_path '<dataset_path>/SECOND/test_list.txt'
--cfg '<project_path>/MambaCD/changedetection/configs/vssm1/vssm_small_224.yaml' \
--pretrained_weight_path '<project_path>/MambaCD/pretrained_weight/vssm_small_0229_ckpt_epoch_222.pth'
Building Damge Assessment
运行以下命令在 xBD 数据集上训练和评估 MambaBDA-Small:
python script/train_MambaBDA.py --dataset 'xBD' \
--batch_size 16 \
--crop_size 256 \
--max_iters 800000 \
--model_type MambaBDA_Small \
--model_param_path '<project_path>/MambaCD/changedetection/saved_models' \
--train_dataset_path '<dataset_path>/xBD/train' \
--train_data_list_path '<dataset_path>/xBD/train_list.txt' \
--test_dataset_path '<dataset_path>/xBD/test' \
--test_data_list_path '<dataset_path>/xBD/test_list.txt'
--cfg '<project_path>/MambaCD/changedetection/configs/vssm1/vssm_small_224.yaml' \
--pretrained_weight_path '<project_path>/MambaCD/pretrained_weight/vssm_small_0229_ckpt_epoch_222.pth'
推理前,请先通过命令行进入 [changedetection
]文件夹。
cd <project_path>/MambaCD/changedetection
二元变化检测
以下命令展示了如何在 LEVIR-CD+ 数据集上使用训练完成的 MambaBCD-Tiny 推断二元变化图:
提示
: 请使用 [--resume] 来加载训练过的模型,而不要使用 [--pretrained_weight_path]。
python script/infer_MambaBCD.py --dataset 'LEVIR-CD+' \
--model_type 'MambaBCD_Tiny' \
--test_dataset_path '<dataset_path>/LEVIR-CD+/test' \
--test_data_list_path '<dataset_path>/LEVIR-CD+/test_list.txt' \
--cfg '<project_path>/MambaCD/changedetection/configs/vssm1/vssm_tiny_224_0229flex.yaml' \
--resume '<saved_model_path>/MambaBCD_Tiny_LEVIRCD+_F1_0.8803.pth'
语义变化检测
以下命令展示了如何在 SECOND 数据集上使用训练完成的 MambaSCD-Tiny 推断语义变化图:
python script/infer_MambaBCD.py --dataset 'SECOND' \
--model_type 'MambaSCD_Tiny' \
--test_dataset_path '<dataset_path>/SECOND/test' \
--test_data_list_path '<dataset_path>/SECOND/test_list.txt' \
--cfg '<project_path>/MambaCD/changedetection/configs/vssm1/vssm_tiny_224_0229flex.yaml' \
--resume '<saved_model_path>/[your_trained_model].pth'
建筑物损害评估
以下命令展示了如何在 xBD 数据集上使用训练完成的 MambaBDA-Tiny 推断语义变化图:
python script/infer_MambaBDA.py --dataset 'SECOND' \
--model_type 'MambaBDA_Tiny' \
--test_dataset_path '<dataset_path>/xBD/test' \
--test_data_list_path '<dataset_path>/xBD/test_list.txt' \
--cfg '<project_path>/MambaCD/changedetection/configs/vssm1/vssm_tiny_224_0229flex.yaml' \
--resume '<saved_model_path>/[your_trained_model].pth'
-
我们上传到Github的代码是经过重新组织整理的。下面提供的模型权重也是采用重新组织整理后的代码训练得到的。因此精度可能会和原始论文不完全一致(大多数情况都高于论文中报告的精度)。
-
我们还上传了 ChangeMamba的预测结果。您可以下载并直接在论文中使用它们 [Zenodo][GDrive][BaiduYun].
方法 | ImageNet (ckpt) |
---|---|
VMamba-Tiny | [Zenodo][GDrive][BaiduYun] |
VMamba-Small | [Zenodo][GDrive][BaiduYun] |
VMamba-Base | [Zenodo][GDrive][BaiduYun] |
方法 | SYSU (ckpt) | LEVIR-CD+ (ckpt) | WHU-CD (ckpt) |
---|---|---|---|
MambaBCD-Tiny | [Zenodo][GDrive][BaiduYun] | [Zenodo][GDrive][BaiduYun] | [Zenodo][GDrive][BaiduYun] |
MambaBCD-Small | [Zenodo][GDrive][BaiduYun] | [Zenodo][GDrive][BaiduYun] | [Zenodo][GDrive][BaiduYun] |
MambaBCD-Base | [Zenodo][GDrive][BaiduYun] | [Zenodo][GDrive] [BaiduYun] | [Zenodo][GDrive][BaiduYun] |
方法 | SECOND (ckpt) | SECOND (results) |
---|---|---|
MambaSCD-Tiny | [Zenodo][GDrive][BaiduYun] | |
MambaSCD-Small | -- | |
MambaSCD-Base | [Zenodo][GDrive][BaiduYun] |
方法 | xBD (ckpt) | xBD (results) |
---|---|---|
MambaBDA-Tiny | -- | -- |
MambaBDA-Small | -- | -- |
MambaBDA-Base | -- | -- |
下面列出了一些常见问题的快速、简便的解决方案。
问题 | 解决方案 |
---|---|
关于SECOND数据集的问题 | 请参考 Issue #13 / #22 / #45 |
CUDA out of memory issue | 请降低训练和评估的batch size |
修改模型结构 | 请参考 Issue #44 |
关于iteration、epoch和batch size之间的关系 | 请参考 Issue #32 / #48 |
NameError: name 'selective_scan_cuda_oflex' is not defined | 请参考 Issue #9 |
推理阶段精度很低 | 请用 --resume 加载模型,而不是用 --pretrained_weight_path 加载模型 |
如果我们的代码有助于您的研究,请考虑引用我们的论文,并给我们一个⭐️star⭐️ :)
@article{chen2024changemamba,
author={Hongruixuan Chen and Jian Song and Chengxi Han and Junshi Xia and Naoto Yokoya},
journal={IEEE Transactions on Geoscience and Remote Sensing},
title={ChangeMamba: Remote Sensing Change Detection with Spatiotemporal State Space Model},
year={2024},
volume={62},
number={},
pages={1-20},
doi={10.1109/TGRS.2024.3417253}
}
本项目采用和借鉴了(paper, code), ScanNet (paper, code), BDANet (paper, code)等仓库。感谢他们的优秀工作!
如有任何问题,请随时联系我们。