ChangeMamba
[IEEE TGRS 2024] ChangeMamba: Remote Sensing Change Detection Based on Spatio-Temporal State Space Model
Install / Use
/learn @ChenHongruixuan/ChangeMambaREADME
Hongruixuan Chen<sup>1 #</sup>, Jian Song<sup>1,2 #</sup>, Chengxi Han<sup>3</sup>, Junshi Xia<sup>2</sup>, Naoto Yokoya<sup>1,2 *</sup>
<sup>1</sup> The University of Tokyo, <sup>2</sup> RIKEN AIP, <sup>3</sup> Wuhan University.
<sup>#</sup> Equal contribution, <sup>*</sup> Corresponding author
Overview | Get Started | Taken Away | Common Issues | Others | 简体中文版
</div>🛎️Updates
Notice🐍🐍: ChangeMamba has been accepted by IEEE TGRS! We'd appreciate it if you could give this repo a ⭐️star⭐️ and stay tuned!!May. 21th, 2025: We have updated the script to train ChangeMamba on BRIGHT dataset and released model's checkpoints!!Nov. 13th, 2025: ChangeMamba has been selected as 🔥ESI Hot Paper and Highly Cited Paper🏆 for 12 consecutive months!!Nov. 14th, 2024: ChangeMamba has been selected as 🔥ESI Hot Paper🔥!!Sept. 14th, 2024: ChangeMamba has been selected as 🏆ESI Highly Cited Paper🏆!!Aug. 05th, 2024: ChangeMamab has been selected as IEEE TGRS Popular Paper!!July 19th, 2024: ChangeMamab has been selected as IEEE GRSS Weekly Paper!!June 17th, 2024: ChangeMamba has been accepted by IEEE TGRS!!June 08th, 2024: Simplified Chinese version of the README file is avaiable!!April 18th, 2024: We have released all weights of ChangeMamba models on BCD tasks. You are welcome use them!!April 05th, 2024: The models and training code for MambaBCD, MambaSCD, and MambaBDA have been organized and uploaded. You are welcome to use them!!
🔭Overview
- ChangeMamba serves as a strong benchmark for change detection tasks, including binary change detection (MambaBCD), semantic change detection (MambaSCD), and building damage assessment (MambaBDA).
- Spatio-temporal relationship learning methods of ChangeMamba
🗝️Let's Get Started!
A. Installation
Note that the code in this repo runs under Linux system. We have not tested whether it works under other OS.
The repo is based on the VMama repo, thus you need to install it first. The following installation sequence is taken from the VMamba repo.
Step 1: Clone the repository:
Clone this repository and navigate to the project directory:
git clone https://github.com/ChenHongruixuan/MambaCD.git
cd MambaCD
Step 2: Environment Setup:
It is recommended to set up a conda environment and installing dependencies via pip. Use the following commands to set up your environment:
Create and activate a new conda environment
conda create -n changemamba
conda activate changemamba
Install dependencies
pip install -r requirements.txt
cd kernels/selective_scan && pip install .
Dependencies for "Detection" and "Segmentation" (optional in 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
B. Download Pretrained Weight
Also, please download the pretrained weights of VMamba-Tiny, VMamba-Small, and VMamba-Base and put them under
project_path/MambaCD/pretrained_weight/
C. Data Preparation
Binary change detection
The three datasets SYSU, LEVIR-CD+ and WHU-CD are used for binary change detection experiments. Please download them and make them have the following folder/file structure:
${DATASET_ROOT} # Dataset root directory, for example: /home/username/data/SYSU
├── train
│ ├── T1
│ │ ├──00001.png
│ │ ├──00002.png
│ │ ├──00003.png
│ │ ...
│ │
│ ├── T2
│ │ ├──00001.png
│ │ ...
│ │
│ └── GT
│ ├──00001.png
│ ...
│
├── test
│ ├── ...
│ ...
│
├── train.txt # Data name list, recording all the names of training data
└── test.txt # Data name list, recording all the names of testing data
Semantic change detection
The SECOND dataset is used for semantic change detection experiments. Please download it and make it have the following folder/file structure. Note that the land-cover maps are RGB images in the original SECOND dataset for visualization, you need to transform them into single-channel. Also, the binary change maps should be generated by yourself and put them into folder [GT_CD].
Or you are welcome to directly download and use our preprocessed SECOND dataset.
${DATASET_ROOT} # Dataset root directory, for example: /home/username/data/SECOND
├── train
│ ├── T1
│ │ ├──00001.png
│ │ ├──00002.png
│ │ ├──00003.png
│ │ ...
│ │
│ ├── T2
│ │ ├──00001.png
│ │ ...
│ │
│ ├── GT_CD # Binary change map
│ │ ├──00001.png
│ │ ...
│ │
│ ├── GT_T1 # Land-cover map of T1
│ │ ├──00001.png
│ │ ...
│ │
│ └── GT_T2 # Land-cover map of T2
│ ├──00001.png
│ ...
│
├── test
│ ├── ...
│ ...
│
├── train.txt
└── test.txt
Building damage assessment
The xBD dataset can be downloaded from xView 2 Challenge website. After downloading it, please organize it into the following structure:
${DATASET_ROOT} # Dataset root directory, for example: /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 # Data name list, recording all the names of training data
├── test.txt # Data name list, recording all the names of testing data
└── holdout.txt # Data name list, recording all the names of holdout data
D. Model Training
Before training models, please enter into [changedetection] folder, which contains all the code for network definitions, training and testing.
cd <project_path>/MambaCD/changedetection
Binary change detection
The following commands show how to train and evaluate MambaBCD-Small on the SYSU dataset:
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'
Semantic change detection
The following commands show how to train and evaluate MambaSCD-Small on the SECOND dataset:
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' \
