Upload README.md with huggingface_hub
Browse files
README.md
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# EVS — Extrapolative Visual Sensing with Geometry-Aware Sensor Tokens
|
| 2 |
+
|
| 3 |
+
A generative **video diffusion** model for **posed scene extrapolation**: given a short observed video
|
| 4 |
+
and a target camera trajectory, generate the video along that trajectory — extrapolating into unobserved
|
| 5 |
+
regions while staying **consistent on revisit** (when the camera returns to previously-seen content).
|
| 6 |
+
|
| 7 |
+
Built on **Wan2.1-VACE-14B**, trained with **Diffusion Forcing**, and conditioned via **Plücker camera
|
| 8 |
+
control** + a **geometry-aware "sensor token"** design.
|
| 9 |
+
|
| 10 |
+
## Method
|
| 11 |
+
|
| 12 |
+
**Diffusion Forcing (in-context memory).** Independent per-frame noise levels; the observed frames sit in
|
| 13 |
+
the same latent sequence at noise ≈ 0 (clean) while target frames are denoised. Memory is *in-context* — the
|
| 14 |
+
model's self-attention reads the clean observed frames; no separate memory module.
|
| 15 |
+
|
| 16 |
+
**Sensor token (the contribution).** Each token carries, beyond its content latent:
|
| 17 |
+
1. **Ray position embedding** — the token's world-frame Plücker ray, added to self-attention Q/K, so tokens
|
| 18 |
+
that view the same content (e.g. a revisited camera pose) retrieve each other *by geometry*.
|
| 19 |
+
2. **Evidence weight** — a depth-free **depth-hypothesis co-visibility** count (how many frames observe the
|
| 20 |
+
token's content), injected as an attention key-boost + a content channel (and a knownness prior).
|
| 21 |
+
|
| 22 |
+
**Camera control.** PermaVid-style Plücker `SimpleAdapter`, additive at the patch embedding (not via the
|
| 23 |
+
VACE control branch). Per-frame timesteps require no architecture surgery (Wan `DiTBlock` already accepts
|
| 24 |
+
per-token modulation). All new modules are zero-init, so an untrained model equals the base Wan T2V model.
|
| 25 |
+
|
| 26 |
+
## Data
|
| 27 |
+
|
| 28 |
+
**RealEstate10K** (static real-estate walkthroughs, smooth cinematic camera). Clips are built as smooth
|
| 29 |
+
**out-and-back** trajectories over consecutive frames (forward then retrace) for a genuine revisit with real
|
| 30 |
+
GT, plus a **forward-split** eval mode (observe a prefix, extrapolate the forward continuation into unseen).
|
| 31 |
+
Geometry (ray codes + evidence) is a pure function of the poses and is precomputed/cached.
|
| 32 |
+
|
| 33 |
+
## Repo layout
|
| 34 |
+
|
| 35 |
+
```
|
| 36 |
+
code/
|
| 37 |
+
evs_model.py sensor-token model (ray-PE + evidence + camera + Diffusion Forcing)
|
| 38 |
+
cache_re10k.py RealEstate10K -> cached clips (latents + poses + ray + evidence)
|
| 39 |
+
cache_smooth.py DL3DV smooth out-and-back builder (earlier data source)
|
| 40 |
+
train_df.py FSDP trainer (per-frame DF noise, target-masked flow-matching, resume + safe save)
|
| 41 |
+
infer_df.py Diffusion-Forcing sampling (clean context + generated target)
|
| 42 |
+
make_*_viz.py qualitative viz (revisit / data / forward-split comparisons)
|
| 43 |
+
make_eval_metrics.py forward-split extrapolation metrics (PSNR/SSIM on generated frames)
|
| 44 |
+
*.sbatch, evs_fsdp*.yaml SLURM + accelerate-FSDP launch configs
|
| 45 |
+
docs/
|
| 46 |
+
DESIGN.md, BUILD_LOG.md design rationale + running build log
|
| 47 |
+
```
|
| 48 |
+
|
| 49 |
+
## Status
|
| 50 |
+
|
| 51 |
+
Work in progress. Model + pipeline implemented and verified; training on RealEstate10K. Checkpoints and
|
| 52 |
+
qualitative samples: see the companion HuggingFace repo.
|