Skip to content

VGGT Omega implementation#1116

Open
hkhanuja wants to merge 2 commits into
masterfrom
vggt-omega-implementation
Open

VGGT Omega implementation#1116
hkhanuja wants to merge 2 commits into
masterfrom
vggt-omega-implementation

Conversation

@hkhanuja

@hkhanuja hkhanuja commented Jun 23, 2026

Copy link
Copy Markdown
Collaborator

This PR adds the VGGT-Omega backend to the GTSfM pipeline.
Since the VGGT-Omega weights are protected under a license and cannot be distributed, the user needs to get access to the model and then download the weights using their hf_token using scripts/download_weights.sh --hf_token <your hf_token>

Since the VGGT-Omega poses can be considered accurate, we add a factor to the prior camera poses. (can be experimented with)
We also set the camera type to Cal3DS2 to incorporate different focal lengths (fx and fy) and include distortion parameters.

@hkhanuja hkhanuja marked this pull request as ready for review June 24, 2026 05:15
kathirgounder added a commit to kathirgounder/gtsfm that referenced this pull request Jun 27, 2026
Ports VGGT-Omega support from PR borglab#1116 (hkhanuja) — the VggtOmegaGeometryTransformer, the thirdparty/vggt-omega submodule (@39a0cb8), the gated-weights download flag, and the baseline omega optimizer/config — and runs omega geometry through OUR verified optimizer (ClusterVGGTWithFrontend, via its injected geometry_transformer) so it inherits global Fetzer focals, correspondence reuse, and the post-merge trackless-camera recovery (rather than Harneet's optimizer, which lacks those).

Code wiring (2 small fixes): (1) cluster_vggt_with_frontend.py guards the two transformer.config dereferences (__init__ loader_kwargs + __repr__ cache key) so a transformer without a .config (omega) instantiates and caches cleanly; (2) vggt_omega_geometry_transformer.py adds a per-worker model singleton so the 1B weights load once per worker when the optimizer drives predict() with model=None.

New config vggt_omega_sift_frontend_megaloc_phototourism_verified.yaml: the verified config with the geometry transformer swapped to omega and model_cache_key=false (forces omega self-load; null would silently load VANILLA VGGT). Controlled A/B vs the 0.6968/230-cam VGGT-verified run — only the geometry predictor changes. With omega's tighter poses, the trackless-recovery is the lever expected to finally recover 104/207.

Requires the gated cc-by-nc-4.0 omega weights (HF facebook/VGGT-Omega) + 'git submodule update --init --recursive'. CUDA-only. Omega module imports are lazy (registry + Hydra), so non-omega runs are unaffected.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@akshay-krishnan

Copy link
Copy Markdown
Collaborator

we should not need a new cluster_optimizer pipeline: gtsfm/cluster_optimizer/cluster_vggt_omega_with_frontend.py

we are adding a new model, which is a new geometry_transformer. this should be supported in the existing cluster_optimizer pipeline. if this needs some changes to the API of the geometry transformer class, or the existing cluster optimizer pipeline, that can be done.

let me know if that makes sense? If there is a logical reason why these cannot share the same cluster optimizer pipeline, please explain that here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants