Change State Space Models for Remote Sensing Change Detection
Paper
β’
2504.11080
β’
Published
Efficient Remote Sensing Change Detection with Change State Space Models
Faculty of Engineering and Natural Sciences (VPALab), Sabanci University, Istanbul, Turkiye
Noticeππ: CSSM has been accepted by IEEE GRSL! We'd appreciate it if you could give this repo a βοΈstarβοΈ and stay tuned!! Nov 05th, 2025: The CSSM model and training code uploaded. You are welcome to use them!!
pip install torch torchvision torchaudio
pip install pillow
pip install numpy scipy pandas
pip install matplotlib seaborn
pip install einops
pip install torchinfo
This project supports three main change detection datasets:
your_dataset/
βββ train/
β βββ A/ # Pre-change images
β βββ B/ # Post-change images
β βββ label/ # Ground truth masks
βββ test/
β βββ A/
β βββ B/
β βββ label/
βββ val/
βββ A/
βββ B/
βββ label/
your_dataset/
βββ train/
β βββ time1/ # Pre-change images
β βββ time2/ # Post-change images
β βββ label/ # Ground truth masks
βββ test/
β βββ time1/
β βββ time2/
β βββ label/
βββ val/
βββ time1/
βββ time2/
βββ label/
WHU-CD/
βββ A/ # Pre-change images
βββ B/ # Post-change images
βββ label/ # Ground truth masks
βββ train_list.txt # List of training samples
βββ test_list.txt # List of test samples
βββ val_list.txt # List of validation samples
image_001.png image_002.png image_003.png ...
python main.py \
--dataset levir \
--train_path /path/to/LEVIR-CD/train \
--test_path /path/to/LEVIR-CD/test \
--val_path /path/to/LEVIR-CD/val \
--batch_size 64 \
--epochs 50 \
--lr 0.001
python main.py \
--dataset sysu \
--train_path /path/to/SYSU-CD/train \
--test_path /path/to/SYSU-CD/test \
--val_path /path/to/SYSU-CD/val \
--batch_size 32 \
--epochs 100 \
--lr 0.0001
python main.py \
--dataset whu \
--train_path /path/to/WHU-CD \
--train_txt /path/to/train_list.txt \
--test_txt /path/to/test_list.txt \
--val_txt /path/to/val_list.txt \
--batch_size 64 \
--epochs 50
| Argument | Description | Example |
|---|---|---|
--dataset |
Dataset type: levir, sysu, or whu |
--dataset levir |
--train_path |
Path to training data | --train_path /data/train |
--test_path |
Path to test data (not for WHU) | --test_path /data/test |
--val_path |
Path to validation data (not for WHU) | --val_path /data/val |
| Argument | Description | Example |
|---|---|---|
--train_txt |
Training sample list file | --train_txt train_list.txt |
--test_txt |
Test sample list file | --test_txt test_list.txt |
--val_txt |
Validation sample list file | --val_txt val_list.txt |
| Argument | Default | Description |
|---|---|---|
--batch_size |
64 | Batch size for training |
--epochs |
50 | Number of training epochs |
--lr |
0.001 | Learning rate |
--step_size |
10 | Learning rate scheduler step size |
--save_dir |
./checkpoints | Directory to save model checkpoints |
--model_name |
best_model.pth | Filename for saved model |
--seed |
42 | Random seed for reproducibility |
--num_workers |
4 | Number of data loading workers |
python main.py \
--dataset levir \
--train_path /data/LEVIR-CD/train \
--test_path /data/LEVIR-CD/test \
--val_path /data/LEVIR-CD/val \
--save_dir ./experiments/levir_exp1 \
--model_name levir_model.pth \
--epochs 100
python main.py \
--dataset sysu \
--train_path /data/SYSU-CD/train \
--test_path /data/SYSU-CD/test \
--val_path /data/SYSU-CD/val \
--lr 0.0005 \
--step_size 20 \
--epochs 150
python main.py \
--dataset levir \
--train_path /data/train \
--test_path /data/test \
--val_path /data/val \
--batch_size 16 \
--num_workers 2
During training, the script will:
The best model is automatically saved to:
{save_dir}/{model_name}
Default: ./checkpoints/best_model.pth
If your paths contain spaces, wrap them in quotes:
python main.py \
--dataset levir \
--train_path "/path/with spaces/train" \
--test_path "/path/with spaces/test" \
--val_path "/path/with spaces/val"
Reduce batch size:
python main.py --dataset levir ... --batch_size 16
For WHU dataset, ensure all three text files are provided:
python main.py \
--dataset whu \
--train_path /data/WHU-CD \
--train_txt train_list.txt \
--test_txt test_list.txt \
--val_txt val_list.txt
View all available arguments:
python main.py --help
If you have any questions, please contact Elman Ghazaei at [email protected]