ChangeDINO [[paper]](https://arxiv.org/abs/2511.16322)

November 27, 2025 · View on GitHub

Ching-Heng Cheng, Chih-Chung Hsu

Advanced Computer Vision LAB, National Cheng Kung University and National Yang Ming Chiao Tung University.

This is a PyTorch implementation for "ChangeDINO: DINOv3-Driven Building Change Detection in Optical Remote Sensing Imagery." This document summarizes the environment requirements, dataset layout, and common commands you need to run the project.

Arch.

ChangeDINO

Quick Guide

Setup

Recommended: Python 3.10, PyTorch 2.4.0 (CUDA 11.8)

cd ChangeDINO
conda create -n changedino python=3.10
conda activate changedino
# recommendation (torch <= 2.4.0 and cuda <= 12.1 for mmcv installation)
pip install torch==2.4.0 torchvision==0.19.0 torchaudio==2.4.0 --index-url https://download.pytorch.org/whl/cu118
# mmcv need to fit torch and cuda version
pip install mmcv==2.2.0 -f https://download.openmmlab.com/mmcv/dist/cu118/torch2.4/index.html
pip install -r requirements.txt

Dataset

Place all datasets under --dataroot (ex. /path/to/CD-Dataset).

Expect the data structure:

/path/to/CD-Dataset/
└── WHU-CD/                      # matches --dataset
    ├── train/
    │   ├── A/                   # T1 images (pre-change)
    │   ├── B/                   # T2 images (post-change)
    │   └── label/               # binary masks (0 or 255 / 0 or 1)
    ├── val/
    │   ├── A/
    │   ├── B/
    │   └── label/
    └── test/
        ├── A/
        ├── B/
        └── label/

Pre-trained Weights (Google Drive)

For the DINOv3 pre-trained weight, please download here and place it under dinov3/weights/.

For the full ChangeDINO's pre-trained weights, which can be obtained from the following links:

Train / Validate

cd dinov3/ChangeDINO
python trainval.py \
  --name WHU-ChangeDINO \
  --dataset WHU-CD \
  --dataroot /path/to/CD-Dataset \
  --gpu_ids 0 \
  --batch_size 16 \
  --num_epochs 100 \
  --lr 5e-4

Important flags live in option.py (datasets, GPUs, checkpoints, backbone/FPN choices, learning rate, etc.). Results are saved to checkpoints/<name>; the best checkpoint is <name>_<backbone>_best.pth.

Test

python test.py \
  --name WHU-ChangeDINO \
  --dataset WHU-CD \
  --dataroot /path/to/CD-Dataset \
  --gpu_ids 0 \
  --save_test

This loads the best checkpoint, runs on the test split, prints metrics, and saves predictions (if --save_test) under checkpoints/<name>/pred/.

Adjust --gpu_ids, --num_workers, and other options as needed, and use trainval.sh for ready-made command examples.

Comparison

levir_whu_table
levir_whu_plot
adapt_dino_feats

Citation

If you use this code for your research, please cite our papers.

@misc{cheng2025changedinodinov3drivenbuildingchange,
      title={ChangeDINO: DINOv3-Driven Building Change Detection in Optical Remote Sensing Imagery}, 
      author={Ching-Heng Cheng and Chih-Chung Hsu},
      year={2025},
      eprint={2511.16322},
      archivePrefix={arXiv},
      primaryClass={cs.CV},
      url={https://arxiv.org/abs/2511.16322}, 
}