Remote Sensing Image Change Detection with Transformers
Here, we provide the pytorch implementation of the paper: Remote Sensing Image Change Detection with Transformers.
For more ore information, please see our published paper at IEEE TGRS or arxiv.
Requirements
Python 3.6
pytorch 1.6.0
torchvision 0.7.0
einops 0.3.0
Installation
Clone this repo:
git clone https://github.com/justchenhao/BIT_CD.git
cd BIT_CD
Quick Start
We have some samples from the LEVIR-CD dataset in the folder samples
for a quick start.
Firstly, you can download our BIT pretrained model——by baidu drive, code: 2lyz or google drive. After downloaded the pretrained model, you can put it in checkpoints/BIT_LEVIR/
.
Then, run a demo to get started as follows:
python demo.py
After that, you can find the prediction results in samples/predict
.
Train
You can find the training script run_cd.sh
in the folder scripts
. You can run the script file by sh scripts/run_cd.sh
in the command environment.
The detailed script file run_cd.sh
is as follows:
gpus=0
checkpoint_root=checkpoints
data_name=LEVIR # dataset name
img_size=256
batch_size=8
lr=0.01
max_epochs=200 #training epochs
net_G=base_transformer_pos_s4_dd8 # model name
#base_resnet18
#base_transformer_pos_s4_dd8
#base_transformer_pos_s4_dd8_dedim8
lr_policy=linear
split=train # training txt
split_val=val #validation txt
project_name=CD_${net_G}_${data_name}_b${batch_size}_lr${lr}_${split}_${split_val}_${max_epochs}_${lr_policy}
python main_cd.py --img_size ${img_size} --checkpoint_root ${checkpoint_root} --lr_policy ${lr_policy} --split ${split} --split_val ${split_val} --net_G ${net_G} --gpu_ids ${gpus} --max_epochs ${max_epochs} --project_name ${project_name} --batch_size ${batch_size} --data_name ${data_name} --lr ${lr}
Evaluate
You can find the evaluation script eval.sh
in the folder scripts
. You can run the script file by sh scripts/eval.sh
in the command environment.
The detailed script file eval.sh
is as follows:
gpus=0
data_name=LEVIR # dataset name
net_G=base_transformer_pos_s4_dd8_dedim8 # model name
split=test # test.txt
project_name=BIT_LEVIR # the name of the subfolder in the checkpoints folder
checkpoint_name=best_ckpt.pt # the name of evaluated model file
python eval_cd.py --split ${split} --net_G ${net_G} --checkpoint_name ${checkpoint_name} --gpu_ids ${gpus} --project_name ${project_name} --data_name ${data_name}
Dataset Preparation
Data structure
"""
Change detection data set with pixel-level binary labels;
├─A
├─B
├─label
└─list
"""
A
: images of t1 phase;
B
:images of t2 phase;
label
: label maps;
list
: contains train.txt, val.txt and test.txt
, each file records the image names (XXX.png) in the change detection dataset.
Data Download
LEVIR-CD: https://justchenhao.github.io/LEVIR/
WHU-CD: https://study.rsgis.whu.edu.cn/pages/download/building_dataset.html
License
Code is released for non-commercial and research purposes only. For commercial purposes, please contact the authors.
Citation
If you use this code for your research, please cite our paper:
@Article{chen2021a,
title={Remote Sensing Image Change Detection with Transformers},
author={Hao Chen, Zipeng Qi and Zhenwei Shi},
year={2021},
journal={IEEE Transactions on Geoscience and Remote Sensing},
volume={},
number={},
pages={1-14},
doi={10.1109/TGRS.2021.3095166}
}