Skip to content

Add GeoLangSplat: training-free open-vocabulary 3D segmentation for Geospatial Gaussian Splats#64

Open
amrik05 wants to merge 1 commit into
openvdb:mainfrom
amrik05:amrik/geolangsplat
Open

Add GeoLangSplat: training-free open-vocabulary 3D segmentation for Geospatial Gaussian Splats#64
amrik05 wants to merge 1 commit into
openvdb:mainfrom
amrik05:amrik/geolangsplat

Conversation

@amrik05

@amrik05 amrik05 commented Jul 1, 2026

Copy link
Copy Markdown

Summary:

GeoLangSplat segments a Gaussian splat from a text prompt with no per-scene training. It runs
SAM 3 over synthesized (or real) views of the splat and lifts the 2D scores into 3D with fVDB's
alpha-weighted back-projection, returning one label per Gaussian in input .ply order. A single
engine handles aerial (oblique drone), satellite (near-nadir), and object/interior (360° inward)
captures; an auto recipe reads the scene geometry and synthesizes its own views, so the common
case is gls segment scene.ply "thing" with no flags. Lives under
open_vocabulary_segmentation/geolangsplat/ alongside langsplatv2.

Key Components:

  • segment() / gls segment — prompt in, per-Gaussian selection out (segmented .ply, overlay, report).
  • build_catalog() / gls catalog — run a vocabulary in one pass, split each prompt into 3D objects
    (connected components), dedup across prompts by 3D IoU, and expose a pandas table + per-object
    .ply extraction; notebook-friendly via cat.browse().
  • assess_scene() / gls check / gls doctor — geometry-only readiness check (no weights needed).
  • Auto view synthesis + alpha-weighted lift, dual-head SAM 3 fusion, and an optional gls explore viewer.

Scope:

Reference implementation: single-GPU, VRAM-bound (no multi-GPU / tiling), best on site/block-scale
scenes. Exercised on SafetyPark (aerial drone) and the JAX_* WorldView-3 satellite scenes.

Test Plan:

  • pytest tests/ — ~120 tests, CPU-only, SAM 3 and fVDB mocked, no GPU
  • black --check --target-version=py311 --line-length=120 clean
  • End-to-end on a real aerial scene (SafetyPark): gls segment and gls catalog with per-object .ply export

…aussian splats

GeoLangSplat segments a Gaussian splat from a text prompt with no per-scene
training: it runs SAM 3 over views of the splat and lifts the 2D scores into 3D
with fVDB's alpha-weighted back-projection, returning one label per Gaussian in
input .ply order. A single engine handles aerial, satellite, and object/interior
captures; an `auto` recipe reads the scene geometry and synthesizes its own views.

  * segment() / `gls segment` -- prompt in, segmented .ply / overlay / report out
  * segment catalog -- run a vocabulary, cluster each prompt into objects, browse
    and extract them as per-object .ply (notebook-friendly; `gls catalog`)
  * one-shot low-VRAM streaming path plus an optional warm engine (`gls serve`)
  * CPU-only test suite (SAM 3 and fVDB mocked), black-formatted, Apache-2.0

Lives under open_vocabulary_segmentation/ alongside langsplatv2.

Signed-off-by: akrishnakuma <akrishnakuma@nvidia.com>
@amrik05 amrik05 requested a review from a team as a code owner July 1, 2026 06:31
@amrik05 amrik05 requested review from harrism and swahtz and removed request for a team July 1, 2026 06:31
@linux-foundation-easycla

Copy link
Copy Markdown

CLA Not Signed

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.

1 participant