ReFlowSET / baselines /README.md
JeonghyeokDo's picture
Add the arXiv id: 2609.00968
d38604f verified
|
Raw History Blame Contribute Delete
17.1 kB
---
license: other
license_name: per-method-see-below
library_name: pytorch
pipeline_tag: image-to-image
tags:
- sar-to-eo
- image-translation
- remote-sensing
- baselines
- benchmark
- reflowset
---
# ReFlowSET — retrained comparison-method checkpoints
The fifteen comparison methods of the **ReFlowSET** SAR-to-EO benchmark, on both
of its datasets: **QXS-SAROPT** (256 px) and **SAR2Opt** (512 px). Thirty
checkpoint cells in total.
**Every checkpoint here was retrained by us.** None is an original author's
released checkpoint. Each method was trained on the same official split, at the
same resolution, under a budget stated in optimizer updates, and every cell was
then scored through one evaluation pipeline with an identity-collapse and
ground-truth-leak audit. That is what makes the rows below comparable **to each
other** — and, for exactly the same reason, not comparable with the numbers in
the methods' own papers.
ReFlowSET itself is not in this repository. It lives at
[JeonghyeokDo/ReFlowSET](https://huggingface.co/JeonghyeokDo/ReFlowSET); code at https://github.com/KAIST-VICLab/ReFlowSET; project page
at https://kaist-viclab.github.io/ReFlowSET_site/.
## Results — all sixteen rows, both datasets
Our own measurements, on the images each checkpoint produced. No number below
is copied from any paper.
### QXS-SAROPT — n = 3,999, 256 px
| Method | Venue | FID↓ | DISTS↓ | LPIPS↓ | SSIM↑ | PSNR↑ |
|---|---|---|---|---|---|---|
| *General image-to-image* | | | | | | |
| pix2pix | CVPR'17 | 174.6 | 0.373 | 0.665 | 0.203 | 12.33 |
| CycleGAN ⚠ | ICCV'17 | 104.4 | 0.376 | 0.653 | 0.262 | 12.92 |
| pix2pixHD | CVPR'18 | 85.7 | 0.298 | 0.573 | 0.358 | 16.13 |
| SPADE | CVPR'19 | 90.7 | 0.292 | 0.599 | 0.320 | 14.53 |
| DDPM (SR3-class) | TPAMI'22 | 43.8 | 0.311 | 0.620 | 0.359 | 14.04 |
| SD2.1 fine-tune only | CVPR'22 | 19.1 | 0.257 | 0.561 | 0.348 | 15.40 |
| BBDM | CVPR'23 | 76.6 | 0.270 | 0.568 | 0.352 | 15.34 |
| ControlNet | ICCV'23 | 50.4 | 0.307 | 0.604 | 0.297 | 13.42 |
| HI-Diff | NeurIPS'23 | 324.3 | 0.539 | 0.692 | 0.457 | 17.10 |
| ResShift | NeurIPS'23 | 140.2 | 0.334 | 0.607 | 0.217 | 14.20 |
| StegoGAN ⚠ | CVPR'24 | 106.8 | 0.384 | 0.658 | 0.254 | 12.96 |
| *SAR-to-EO* | | | | | | |
| Conditional Diffusion | GRSL'24 | 88.6 | 0.355 | 0.730 | 0.213 | 11.55 |
| cBBDM | GRSL'25 | 50.6 | 0.246 | 0.539 | 0.372 | 16.02 |
| E3Diff | GRSL'25 | 47.8 | 0.278 | 0.530 | 0.302 | 16.44 |
| C-DiffSET | TCSVT'26 | 19.9 | 0.233 | 0.526 | 0.380 | 16.92 |
| *Ours* | | | | | | |
| **ReFlowSET (ours)** | — | 19.1 | 0.231 | 0.534 | 0.355 | 16.09 |
### SAR2Opt — n = 627, 512 px (centre crops of the 600 px tiles)
| Method | Venue | FID↓ | DISTS↓ | LPIPS↓ | SSIM↑ | PSNR↑ |
|---|---|---|---|---|---|---|
| *General image-to-image* | | | | | | |
| pix2pix | CVPR'17 | 261.9 | 0.347 | 0.657 | 0.199 | 13.39 |
| CycleGAN ⚠ | ICCV'17 | 143.5 | 0.330 | 0.650 | 0.178 | 12.90 |
| pix2pixHD | CVPR'18 | 146.3 | 0.283 | 0.567 | 0.268 | 15.95 |
| SPADE | CVPR'19 | 142.5 | 0.265 | 0.597 | 0.234 | 14.47 |
| DDPM (SR3-class) | TPAMI'22 | 122.5 | 0.295 | 0.610 | 0.313 | 13.65 |
| SD2.1 fine-tune only | CVPR'22 | 71.8 | 0.211 † | 0.541 | 0.293 | 16.24 |
| BBDM | CVPR'23 | 143.1 | 0.290 | 0.590 | 0.276 | 15.29 |
| ControlNet | ICCV'23 | 140.5 | 0.350 | 0.643 | 0.217 | 11.73 |
| HI-Diff | NeurIPS'23 | 319.8 | 0.473 | 0.692 | 0.384 | 17.36 |
| ResShift | NeurIPS'23 | 141.7 | 0.304 | 0.597 | 0.177 | 14.31 |
| StegoGAN ⚠ | CVPR'24 | 150.1 | 0.347 | 0.655 | 0.158 | 12.47 |
| *SAR-to-EO* | | | | | | |
| Conditional Diffusion | GRSL'24 | 211.8 | 0.415 | 0.686 | 0.248 | 12.48 |
| cBBDM | GRSL'25 | 222.3 | 0.377 | 0.571 | 0.361 | 17.05 |
| E3Diff | GRSL'25 | 104.7 | 0.232 | 0.529 | 0.249 | 16.09 |
| C-DiffSET | TCSVT'26 | 78.1 | 0.214 † | 0.529 | 0.314 | 16.81 |
| *Ours* | | | | | | |
| **ReFlowSET (ours)** | — | 66.3 | 0.185 | 0.522 | 0.287 | 16.06 |
⚠ **fails the input-copy audit** — see *Identity collapse* below.
† **these two DISTS values were re-measured.** The image dumps for these two
SAR2Opt cells were regenerated after their last extended-metrics pass, and that
pass's resume check keys on the number of images rather than on their content, so
it skipped them and their stored DISTS went stale. Both were re-measured on the
current dumps at full n=627 and the table prints the re-measurement (SD2.1-FT
0.212 -> **0.211**; C-DiffSET 0.2141 -> **0.2136**, unchanged at three decimals).
The harness was validated on a cell that is *not* stale, whose DISTS it
reproduces to 6e-6. FID, LPIPS, SSIM and PSNR come from a pass that rescores
every cell on every run and were never affected.
## Read before you compare these numbers with a paper
**These numbers are not comparable with the source papers, and are not meant to
be.** Three reasons, all deliberate:
1. **Budgets are matched across the benchmark, not to each method's own
recipe.** Several methods are trained here at a fraction of their published
schedule — HI-Diff, for instance, is trained for 50,000 updates against an
upstream recipe of 600,000, with progressive resizing disabled. Where we
departed from a published recipe, the method's own card says so and says by
how much.
2. **Budgets are quoted in optimizer updates, never epochs.** The two datasets
differ by more than tenfold in size (16,001 versus 1,450 training pairs), so
an epoch count means something completely different on each. Comparing
unpaired methods by epochs produced two successive wrong conclusions in our
own work before we changed the unit.
3. **One evaluation protocol for everyone.** Same test items, same resolution,
same metric implementations, same ground truth. SAR2Opt is **centre-cropped**
to 512 px and never resized, in training and in evaluation alike.
### The LPIPS convention
LPIPS here is **LPIPS-VGG on inputs mapped to `[-1, 1]`** before the network —
`lpips_vgg(x * 2 - 1, y * 2 - 1)` with the library's default `normalize=False`.
The other convention, which several released evaluators use, hands the network
`[0, 1]` inputs *unscaled* (still `normalize=False`) and produces a
**systematically lower number** — about 0.05 lower — on the same images. Note
that `[0, 1]` inputs with `normalize=True` is the *same* thing as ours, not the
other one; only the flag differs. Both are called "LPIPS" in the literature. If you compare a number from
this table against one from a paper, check which convention that paper used
first; otherwise the comparison is meaningless. The same care applies in reverse
to anyone quoting these numbers.
PSNR and SSIM are per-image torchmetrics with `data_range=1`. FID is
`pytorch-fid` against the size-matched ground-truth test set. DISTS is the
standard implementation on the same pairs. Where the generated size and the
ground-truth size differ, the ground truth is centre-cropped to match.
### Identity collapse
**Four of the thirty cells fail an input-copy audit**: CycleGAN and StegoGAN, on
both datasets. Their outputs are closer to the SAR image they were given than to
the EO image they were asked for — mean |output − SAR| < mean |output − ground
truth| — which is the signature of a model that has learned to pass its input
through rather than translate it.
| cell | ratio (SAR distance ÷ GT distance) | verdict |
|---|---|---|
| QXS-SAROPT CycleGAN | 0.847 | COLLAPSED |
| QXS-SAROPT StegoGAN | 0.919 | COLLAPSED |
| SAR2Opt CycleGAN | 0.795 | COLLAPSED |
| SAR2Opt StegoGAN | 0.758 | COLLAPSED |
**Their metric values are reported unchanged and marked in place.** They are what
the released implementation does at its own published protocol, and a benchmark
that quietly substitutes a better-behaved variant is not reporting the method.
But they should not be read as translation quality. No other cell on either
dataset collapses — in particular DDPM, Conditional Diffusion and BBDM do **not**
collapse here, whatever they may do elsewhere.
The companion leak audit is clean: no cell on either dataset shows a generation
that matches its own ground truth anomalously better than it matches other
images' ground truth. Per-cell numbers are on each method's card.
**One oracle you must not use.** StegoGAN's `fake_B` output is computed as
`netG_A(real_A, latent(real_B))` — conditioned on the ground truth, and
impossible to produce at deployment. Only `fake_B_clean = netG_A(real_A)` is a
prediction, and it is what the StegoGAN rows above report. Any published StegoGAN
number should say which of the two it is.
## Layout
```
<dataset>/<method>/<weight files> + README.md
dataset ∈ { qxs-saropt, sar2opt }
licenses/ third-party licence texts, one per method
```
Every one of the thirty folders carries its own `README.md` with that cell's
architecture, the file-by-file contents, the training budget in optimizer
updates, the measured metrics, a copy-pasteable load-and-translate snippet, the
traps specific to that method, and its licence stated factually.
| method | folder | files | upstream code |
|---|---|---|---|
| pix2pix | `pix2pix/` | `net_G.pth` | `junyanz/pytorch-CycleGAN-and-pix2pix` |
| CycleGAN | `cyclegan/` | `net_G_A.pth` (**SAR→EO**), `net_G_B.pth` | `junyanz/pytorch-CycleGAN-and-pix2pix` |
| pix2pixHD | `p2phd/` | `net_G.pth` | `NVIDIA/pix2pixHD` |
| SPADE | `spade/` | `net_G.pth` | `NVlabs/SPADE` |
| DDPM (SR3-class) | `ddpm/` | `gen.pth` | `DeepSARRS/E3Diff`, stage 1 |
| SD2.1 fine-tune only | `sd21ft/` | `diffusion_pytorch_model.safetensors`, `config.json` | `KAIST-VICLab/C-DiffSET`, stage 1, on SD 2.1-base |
| BBDM | `bbdm/` | `last_model.pth` | `xuekt98/BBDM` |
| ControlNet | `controlnet/` | `diffusion_pytorch_model.safetensors`, `config.json` | `huggingface/diffusers` `train_controlnet.py`, on SD 2.1-base |
| HI-Diff | `hidiff/` | `S1_*.pth` ×2, `S2_*.pth` ×3 (**only the three `S2_` files are needed at inference**) | `zhengchen1999/HI-Diff` |
| ResShift | `resshift/` | `ema_model.pth` | `zsyOAOA/ResShift` |
| StegoGAN | `stegogan/` | `net_G_A.pth` (**SAR→EO**), `net_G_B.pth` | `sian-wusidi/StegoGAN` |
| Conditional Diffusion | `conddiff/` | `ema_final.pt` | `Coordi777/Conditional-Diffusion-for-SAR-to-Optical-Image-Translation` |
| cBBDM | `cbbdm/` | `last_model.pth` | `egshkim/ConditionalBBDM-for-VHR-SAR-to-Optical` |
| E3Diff | `e3diff/` | `gen.pth` | `DeepSARRS/E3Diff`, stage 2 |
| C-DiffSET | `cdiffset/` | `diffusion_pytorch_model.safetensors`, `config.json` | `KAIST-VICLab/C-DiffSET`, stage 2 |
### Three checkpoints these weights need and this repository does not carry
* **BBDM and cBBDM** need the CompVis latent-diffusion **vq-f4 VQGAN**
(`model.ckpt`, 756,175,527 bytes) at the path named in their config — at
construction time, even though the same weights are also inside
`last_model.pth`. MIT.
* **ResShift** needs the CompVis **vq-f4 autoencoder** (221,364,711 bytes). MIT.
* **SD2.1-FT, ControlNet and C-DiffSET** need Stable Diffusion 2.1-base for the
frozen VAE, text encoder, tokenizer and scheduler. Their cards name the exact
repository we loaded.
* **DDPM and E3Diff** need no extra checkpoint, but do need **PPB-despeckled and
Canny condition images** computed from each SAR input; neither can be run from
a SAR file alone.
## Licences
**A single repository-wide licence tag would be wrong for this collection.** The
fifteen methods fall into three tiers, and the restrictive terms in tiers B and C
travel with the individual cells. Each method's card states its position in full;
the licence texts are in `licenses/`.
| method | upstream licence | redistribution | what propagates |
|---|---|---|---|
| pix2pix | multi-part BSD (CycleGAN / pix2pix / DCGAN notices) | ✅ with the notice | no-endorsement (DCGAN part) |
| CycleGAN | same file as pix2pix | ✅ with the notice | same |
| pix2pixHD | BSD (NVIDIA 2019) + bundled CycleGAN notice | ✅ with both notices | none |
| **SPADE** | **CC BY-NC-SA 4.0** | ⚠️ **non-commercial only** | **NonCommercial + ShareAlike** — this cell is itself distributed under CC BY-NC-SA 4.0 |
| **DDPM (SR3-class)** | **none declared** | ⚠️ **no express grant** — published by our decision | unknown; there is no licence to read |
| SD2.1 fine-tune only | MIT code (C-DiffSET) / **Open RAIL++-M** weights | ✅ under Open RAIL++-M | **Attachment A use restrictions** |
| BBDM | MIT | ✅ | none (needs the external vq-f4 VQGAN, MIT) |
| ControlNet | Apache-2.0 code (diffusers) / **Open RAIL++-M** weights | ✅ under Open RAIL++-M | **Attachment A use restrictions** |
| HI-Diff | Apache-2.0 | ✅ | ship the licence, keep notices, state your modifications |
| **ResShift** | **S-Lab License 1.0** | ⚠️ **non-commercial only** | **NonCommercial**; no-endorsement |
| **StegoGAN** | **none declared** | ⚠️ **no express grant** — published by our decision | unknown |
| **Conditional Diffusion** | **none declared** | ⚠️ **no express grant** — published by our decision | unknown (the guided-diffusion parts it forks are MIT) |
| cBBDM | MIT | ✅ | none (needs the external vq-f4 VQGAN, MIT) |
| **E3Diff** | **none declared** | ⚠️ **no express grant** — published by our decision | unknown |
| C-DiffSET | MIT code / **Open RAIL++-M** weights | ✅ under Open RAIL++-M | **Attachment A use restrictions** |
### The four with no upstream licence
**StegoGAN, E3Diff, DDPM (SR3-class) and Conditional Diffusion are derived from
upstream code that publishes no licence at all** — no LICENSE, LICENCE, COPYING
or NOTICE file, no licence section in the README, and no licence declared to
GitHub. Under default copyright, all rights remain reserved by those authors and
**no express permission to redistribute derived work has been granted** to us or
to you.
We publish these four anyway, so that the benchmark is reproducible end to end,
and we say so plainly rather than implying a permission that does not exist. If
you intend to redistribute them or build on them, assess that for yourself, and
consider asking the upstream authors directly.
`licenses/NO-UPSTREAM-LICENSE.md` records, per method, exactly what we checked
and exactly what we found.
### Files in `licenses/`
`LICENSE-pix2pix.txt`, `LICENSE-cyclegan.txt`, `LICENSE-p2phd.txt`,
`LICENSE-spade.txt`, `LICENSE-bbdm.txt`, `LICENSE-cbbdm.txt`,
`LICENSE-hidiff.txt`, `LICENSE-resshift.txt`, `LICENSE-cdiffset.txt`,
`LICENSE-sd21ft.txt` — one per method, copied verbatim from the upstream
repository we trained with. `LICENSE-SoftPool-MIT.txt` is a vendored dependency
of the E3Diff code base and is included because it is genuinely part of what
those two cells were trained with; it is **not** a licence for E3Diff.
`NO-UPSTREAM-LICENSE.md` covers the four methods with no grant.
`LICENSE-WEIGHTS.md` at the repository root is the CreativeML Open RAIL++-M
text, including Attachment A, which governs the three Stable-Diffusion-derived
cells.
## Datasets
Neither corpus is redistributed here, in any form, and neither may be
redistributed from here.
* **QXS-SAROPT** publishes no licence file; its one stated term is a citation
requirement — *"This paper must be cited when the dataset is used for research
purposes"* (Huang et al., [arXiv:2103.08259](https://arxiv.org/abs/2103.08259)).
Its distribution is request-gated by the authors. Obtain it from them.
* **SAR2Opt** ships an MIT LICENSE, `Copyright (c) 2021 MarsZhaoYT`. The MIT
text grants rights in "the Software"; the repository does not name the imagery
sources, so that file is best read as covering the authors' packaging and code.
Citation requested: Zhao, Celik, Liu and Li, *A Comparative Analysis of
GAN-based Methods for SAR-to-Optical Image Translation*, IEEE GRSL, 2022.
* **The optical side of both datasets is Google-Earth-derived.** Copyright in
that imagery is held by third parties, not by the dataset authors and not by
us. No such imagery appears in this repository.
## A note on two venue labels
The table above prints the venue strings as they appear in the ReFlowSET paper.
Two of them do not match the year in the upstream repositories' own citation
blocks, and both refer to the same paper under an early-access versus issue year:
* **Conditional Diffusion** — the authors' bibtex says **2023**,
[doi:10.1109/LGRS.2023.3337143](https://doi.org/10.1109/LGRS.2023.3337143).
* **E3Diff** — the authors' bibtex says **2024**,
[doi:10.1109/LGRS.2024.3506566](https://doi.org/10.1109/LGRS.2024.3506566).
Cite by DOI.
## Citation
If you use this benchmark or any of these weights, please cite ReFlowSET:
```bibtex
@article{do2026reflowset,
title = {ReFlowSET: Representation-Aligned Latent Flow Matching for SAR-to-EO Image Translation},
author = {Jeonghyeok Do<sup>1</sup>, Seungchul Lee<sup>2</sup>, Munchurl Kim<sup>1*</sup>},
journal = {arXiv preprint arXiv:2609.00968},
year = {2026}
}
```
**And please cite each method's original paper** — every model card carries the
reference — **and both dataset papers.** The QXS-SAROPT citation is required by
that dataset's own terms.