CSSM

November 4, 2025 Β· View on GitHub

CSSM

Efficient Remote Sensing Change Detection with Change State Space Models

E.Ghazaei, E.Aptoula

Faculty of Engineering and Natural Sciences (VPALab), Sabanci University, Istanbul, Turkiye

[Paper Link]

πŸ›ŽοΈUpdates

  • 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!!

πŸš€ Overview

  • CSSM serves as an efficient and state-of-the-art (SOTA) benchmark for binary change detection.

Screenshot from 2025-11-03 16-28-31


πŸ“¦ Requirements


pip install torch torchvision 
pip install  pillow
pip install numpy scipy pandas
pip install matplotlib seaborn
pip install einops 
pip install torchinfo


πŸ“ Dataset Preparation

This project supports three main change detection datasets:


Dataset Structure

For LEVIR-CD:

your_dataset/
β”œβ”€β”€ train/
β”‚   β”œβ”€β”€ A/          # Pre-change images
β”‚   β”œβ”€β”€ B/          # Post-change images
β”‚   └── label/      # Ground truth masks
β”œβ”€β”€ test/
β”‚   β”œβ”€β”€ A/
β”‚   β”œβ”€β”€ B/
β”‚   └── label/
└── val/
    β”œβ”€β”€ A/
    β”œβ”€β”€ B/
    └── label/

For SYSU-CD:

your_dataset/
β”œβ”€β”€ train/
β”‚   β”œβ”€β”€ time1/          # Pre-change images
β”‚   β”œβ”€β”€ time2/          # Post-change images
β”‚   └── label/      # Ground truth masks
β”œβ”€β”€ test/
β”‚   β”œβ”€β”€ time1/
β”‚   β”œβ”€β”€ time2/
β”‚   └── label/
└── val/
    β”œβ”€β”€ time1/
    β”œβ”€β”€ time2/
    └── label/

For WHU-CD:

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

The text files should contain image names (one per line):

image_001.png
image_002.png
image_003.png
...

πŸš‚ Training

LEVIR-CD Dataset

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

SYSU-CD Dataset

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

WHU-CD Dataset

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

βš™οΈ Arguments

Required Arguments

ArgumentDescriptionExample
--datasetDataset type: levir, sysu, or whu--dataset levir
--train_pathPath to training data--train_path /data/train
--test_pathPath to test data (not for WHU)--test_path /data/test
--val_pathPath to validation data (not for WHU)--val_path /data/val

WHU-CD Specific Arguments

ArgumentDescriptionExample
--train_txtTraining sample list file--train_txt train_list.txt
--test_txtTest sample list file--test_txt test_list.txt
--val_txtValidation sample list file--val_txt val_list.txt

Optional Arguments

ArgumentDefaultDescription
--batch_size64Batch size for training
--epochs50Number of training epochs
--lr0.001Learning rate
--step_size10Learning rate scheduler step size
--save_dir./checkpointsDirectory to save model checkpoints
--model_namebest_model.pthFilename for saved model
--seed42Random seed for reproducibility
--num_workers4Number of data loading workers

πŸ”§ Advanced Usage Examples

Custom Save Directory and Model Name

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

Different Learning Rate Schedule

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

Smaller Batch Size (for limited GPU memory)

python main.py \
    --dataset levir \
    --train_path /data/train \
    --test_path /data/test \
    --val_path /data/val \
    --batch_size 16 \
    --num_workers 2

πŸ“€ Output

During training, the script will:

  • Display training loss for each batch
  • Show validation metrics (IoU, confusion matrix) after each epoch
  • Save the best model based on validation IoU
  • Display learning rate and epoch time

Model Checkpoint

The best model is automatically saved to:

{save_dir}/{model_name}

Default: ./checkpoints/best_model.pth


πŸ” Troubleshooting

Paths with Spaces

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"

CUDA Out of Memory

Reduce batch size:

python main.py --dataset levir ... --batch_size 16

Missing WHU Text Files

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

πŸ’‘ Getting Help

View all available arguments:

python main.py --help

πŸ“§ Contact

If you have any questions, please contact Elman Ghazaei at elman.ghazaei@sabanciuniv.edu


Qualitative Analysis:

Screenshot from 2025-11-03 16-38-52


Results

Screenshot from 2025-11-03 18-02-18