This is the
Caption-Guided Zero-RGB version of Sat-JEPA-Diff. It advances the
original model by completely eliminating the 32×32 coarse RGB input, replacing it with a Triple-Captioning system that textually drives temporal changes.
The model predicts future satellite images (t → t+1) through a dual-stream mechanism:
This Zero-RGB paradigm bypasses physical sensor blindness — the model never sees past pixels during generation, relying entirely on semantic and latent representations.
Despite using zero optical inputs, the caption-guided model achieves 15% better perceptual realism (LPIPS) while maintaining topological integrity (GSSIM).
1git clone https://github.com/VU-AIML/SAT-JEPA-DIFF.git
2cd SAT-JEPA-DIFF
3git checkout caption-guided
4
5conda create -n satjepa python=3.12
6conda activate satjepa
7
8pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121
9pip install diffusers transformers peft accelerate
10pip install rasterio matplotlib pyyaml lpips
1from huggingface_hub import hf_hub_download
2
3checkpoint_path = hf_hub_download(
4 repo_id="kursatkomurcu/SAT-JEPA-DIFF-Caption-Guided",
5 filename="s2_future_jepa-best.pth.tar",
6)
1huggingface-cli download kursatkomurcu/SAT-JEPA-DIFF-Caption-Guided \
2 s2_future_jepa-best.pth.tar --local-dir ./checkpoints
1cd SAT-JEPA-DIFF/src
2
3python inference.py \
4 --checkpoint /path/to/s2_future_jepa-best.pth.tar \
5 --output_dir ./results \
6 --diffusion_steps 20 \
7 --noise_strength 0.35
1import torch
2from helper import init_model
3from sd_models import load_sd_model, encode_caption_batch
4from sd_joint_loss import diffusion_sample
5from caption_forecaster import CaptionForecaster
6
7device = torch.device("cuda")
8
9# Load all components from checkpoint
10encoder, predictor, sd_state, embed_dim = load_model(
11 checkpoint_path="path/to/s2_future_jepa-best.pth.tar",
12 device=device,
13)
14
15# Load caption forecaster
16caption_forecaster = CaptionForecaster(
17 ijepa_dim=768, text_dim=4096, hidden_dim=1024, num_layers=3
18).to(device)
19
20# Load a Sentinel-2 GeoTIFF
21rgb_t = load_and_resize_tif("path/to/sentinel2_image.tif", target_size=128)
22
23# Predict with caption conditioning
24rgb_t1_pred = predict_next_frame(
25 rgb_t=rgb_t,
26 encoder=encoder,
27 predictor=predictor,
28 sd_state=sd_state,
29 caption_forecaster=caption_forecaster,
30 device=device,
31 num_diffusion_steps=20,
32 noise_strength=0.35,
33)
34# rgb_t1_pred: (3, 128, 128) tensor in [0, 1]
The model requires precomputed caption embeddings. The full pipeline is documented in the
GitHub repository:
See the
GitHub repository for full training instructions. The model jointly optimizes three losses:
Training takes approximately 5 days on a single NVIDIA RTX 5090 (24GB).
Sentinel-2 RGB imagery (10m GSD) paired with Alpha Earth Foundation Model embeddings and EarthDial captions across 100 global Regions of Interest (2017–2024). Available on
Zenodo.
1@ARTICLE{11589351,
2 author={Kömürcü, Kürşat and Petkevicius, Linas},
3 journal={IEEE Geoscience and Remote Sensing Letters},
4 title={Sat-JEPA-Diff: Caption-Guided Zero-RGB Satellite Image Forecasting via Self-Supervised Diffusion},
5 year={2026},
6 volume={},
7 number={},
8 pages={1-1},
9 doi={10.1109/LGRS.2026.3708464}
10}
11@inproceedings{komurcu2026satjepadiff,
12 title={Sat-{JEPA}-Diff: Bridging Self-Supervised Learning and Generative Diffusion for Remote Sensing},
13 author={Kursat Komurcu and Linas Petkevicius},
14 booktitle={4th ICLR Workshop on Machine Learning for Remote Sensing (Main Track)},
15 year={2026},
16 url={https://openreview.net/forum?id=WBHfQLbgZR}
17}
This project was funded by the European Union (project No S-MIP-23-45) under the agreement with the Research Council of Lithuania (LMTLT). The I-JEPA implementation is based on
Meta's I-JEPA. Diffusion backbone:
SD 3.5 Medium. Captions:
EarthDial.