ReFlowSET / baselines /README.md
JeonghyeokDo's picture
Add the arXiv id: 2609.00968
d38604f verified
|
Raw
History Blame Contribute Delete
17.1 kB
metadata
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; 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). 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:

Cite by DOI.

Citation

If you use this benchmark or any of these weights, please cite ReFlowSET:

@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.