CD-Models / TRAINING_GUIDE.md
Dineth Perera
Publish tested dataset winners and benchmark rankings
ce209f5
|
Raw
History Blame Contribute Delete
5.92 kB
# CD-Models Training Guide
## Prerequisites
- Python 3.10 is recommended.
- CUDA/PyTorch requirements vary by model. Check each model directory or cloned repo requirements file before training:
- `BiFA/requirements.txt`
- `CDMamba/requirement.txt`
- `Change3D/requirements.txt`
- `ChangeFormer/requirements.txt`
- `RSM-CD/requirements.txt`
- Set `DATA_ROOT` before using central configs:
```bash
export DATA_ROOT=/path/to/datasets
```
All central configs use `${DATA_ROOT}` and avoid hardcoded absolute dataset paths.
## Dataset Setup
The shared loader expects split folders under each dataset root. Folder names are configured in `configs/datasets/*.yaml`.
LEVIR-CD+:
```text
$DATA_ROOT/LEVIR-CD-plus-256/
train/A train/B train/Mask
val/A val/B val/Mask
test/A test/B test/Mask
```
WHU-CD:
```text
$DATA_ROOT/WHU-CD/
train/A train/B train/OUT
val/A val/B val/OUT
test/A test/B test/OUT
```
WildFireS2:
```text
$DATA_ROOT/WildFireS2/
train/A train/B train/label
val/A val/B val/label
test/A test/B test/label
```
Download sources should be confirmed from the original dataset pages before publication. Keep raw data outside this repo and point `DATA_ROOT` at the prepared benchmark folders.
## Pretrained Weights
| Model | Backbone | Download URL | Local Path |
|---|---|---|---|
| change3d | X3D-L | Original Change3D README/model release | `Change3D/model/X3D_L.pyth` |
| ifnet / dsifn | VGG-16 | Torchvision or original DSIFN README | `model_repos/DSIFN/pretrained/vgg16.pth` |
| changemamba | VMamba | ChangeMamba README Zenodo/HuggingFace link | `model_repos/ChangeMamba/pretrained/vmamba_tiny.pth` |
| changer | ResNet-18 | open-cd / torchvision ResNet-18 | `model_repos/open-cd/pretrained/resnet18.pth` |
| tinycd | EfficientNet-B4 | TinyCD README | `model_repos/TinyCD/pretrained/efficientnet_b4.pth` |
Wrappers print a clear required-weight block when a required file is missing.
## Automatic Weight Downloads
All pretrained backbone weights are downloaded automatically on first training run. VMamba weights for ChangeMamba are downloaded from Zenodo record `14037770` by `utils/weight_downloader.py`.
| Model | Backbone | Download Source | Auto? | Est. Size |
|---|---|---|---|---|
| ChangeMamba | VMamba-Tiny | Zenodo records/14037770 | yes | ~86 MB |
| ChangeMamba | VMamba-Small | Zenodo records/14037770 | yes | ~178 MB |
| ChangeMamba | VMamba-Base | Zenodo records/14037770 | yes | ~391 MB |
| Changer | ResNet-18 | PyTorch Hub / torchvision | yes | ~45 MB |
| DSAMNet | ResNet-18 | PyTorch Hub / torchvision | yes | ~45 MB |
| TinyCD | EfficientNet-B4 | timm / torchvision backend | yes | ~75 MB |
| HANet | ResNet-50 | PyTorch Hub / torchvision | yes | ~98 MB |
| CGNet | ResNet-50 | PyTorch Hub / torchvision | yes | ~98 MB |
| DSIFN | VGG-16 | PyTorch Hub / torchvision | yes | ~528 MB |
| ELGC-Net | MiT-b0 | timm / HuggingFace | yes | ~15 MB |
| ChangeFormer | MiT-b1 | timm / HuggingFace | yes | ~28 MB |
To pre-download all managed weights before training:
```bash
python utils/weight_downloader.py --prefetch-all
```
## Quick Start
Train one model on one dataset:
```bash
python run_training.py --model bifa --dataset wildfire_s2
```
Train all models on one dataset:
```bash
python run_training.py --model all --dataset wildfire_s2 --dry-run
```
Run evaluation only:
```bash
python run_training.py --model bifa --dataset wildfire_s2 --eval-only
```
## Adding A New Model
1. Confirm the official GitHub URL and license.
2. Clone into `model_repos/<model_name>`.
3. Read the cloned README, configs, model code, and training code.
4. Add `configs/models/<model_name>.yaml`.
5. Add or update `train/train_<model_name>.py`.
6. Register the model in `configs/models/registry.yaml`.
7. Ensure the wrapper accepts `--dataset`, `--gpu`, `--resume`, `--eval-only`, and `--dry-run`.
8. Save final metrics with `utils.results_writer.save_metrics()`.
## Results
Per-run metrics are written to:
```text
results/<model>/<dataset>/metrics_test.json
```
The aggregate table is regenerated at:
```text
results/comparison_table.csv
```
Columns: `Model`, `Dataset`, `F1`, `IoU`, `OA`, `Precision`, `Recall`, `Kappa`.
## Known Issues
### Existing WildFire Wrappers
**Partially resolved.** Central wrappers now accept every configured dataset and validate the requested dataset through `CDDataset`. The original nested research scripts still contain their own model-specific data loops, so full non-WildFire training requires each upstream loop to be run against compatible prepared data or rewritten in detail.
### ChangeMamba
**Resolved for setup.** Cloned to `model_repos/ChangeMamba`. Requires running `python model_repos/ChangeMamba/install_deps.py` once before training. VMamba pretrained weights are downloaded automatically from Zenodo record `14037770` on first training run.
### Changer
**Resolved for setup.** Uses open-cd cloned to `model_repos/open-cd`. It requires the same mmengine/mmcv family of dependencies as open-cd. ResNet-18 weights download automatically through torchvision on first run.
### DSAMNet
**Resolved for setup.** Cloned from `liumency/DSAMNet`. The original repo exposes `loss/BCL.py` and `loss/DiceLoss.py`; wrappers must use that metric-learning loss path rather than replacing it with BCE+Dice. Labels are expected as binary 0/1 maps; `CDDataset` converts 255-valued masks to 1.
### TinyCD
**Resolved for setup.** Cloned from `AndreaCodegoni/Tiny_model_4_CD`. EfficientNet-B4 weights download automatically through the weight downloader/timm warmup. TinyCD is RGB-only; `run_training.py` skips `tinycd/wildfire_s2` by default.
### HANet / CGNet
**Resolved for setup.** Cloned from `ChengxiHAN/HANet-CD` and `ChengxiHAN/CGNet-CD`. Both repos use similar custom training utilities and include dataset helpers under `utils/`. ResNet-50 weights are warmed automatically through torchvision.