Skip to content

Repository files navigation

VarSplat: Uncertainty-aware 3D Gaussian Splatting for Robust RGB-D SLAM

Anh Thuan Tran · Jana Košecká

CVPR 2026

Department of Computer Science, George Mason University

arXiv ProjectPage Checkpoints License: MIT

Setup

The code has been tested on Rocky Linux 8.10, Python 3.10.1, CUDA 12.6, A100 80GB

Repository

Clone the repo with --recursive because we have submodules:

git clone --recursive git@github.com:anhthuan1999/varsplat.git
cd VarSplat

Installation

Make sure that gcc and g++ paths on your system are exported:

export CC=<gcc path>
export CXX=<g++ path>

To find the gcc and g++ paths on your machine you can use which gcc.

Then setup environment from the provided conda environment file:

conda create -n varsplat python=3.10
conda activate varsplat
pip install -r requirements.txt

You will also need to install hloc for loop detection and 3DGS registration:

cd thirdparty/Hierarchical-Localization
python -m pip install -e .
cd ../..

Usage

Downloading the Datasets

We evaluate on Replica, TUM-RGBD, ScanNet, and ScanNet++ datasets. We also provide scripts for downloading Replica and TUM-RGBD in the scripts folder. Install git lfs before using the scripts by running git lfs install.

For reconstruction evaluation on Replica, we follow Co-SLAM mesh culling protocol. Please use their code to process the mesh first.

For downloading ScanNet, follow the procedure described here. Note: There are some frames in ScanNet with inf poses. We filter them out using the notebook scripts/scannet_preprocess.ipynb. Please change the path to your ScanNet data and run the cells.

For downloading ScanNet++, follow the procedure described here.

The config files are named after the sequences used in our experiments.

Checkpoints

Pre-trained checkpoints for all evaluated scenes are available for download:

Dataset Link
Replica Download
TUM-RGBD Download
ScanNet Download
ScanNet++ Download

Quick Start

Run VarSplat on a single scene:

# Replica
python run_slam.py configs/Replica/office0.yaml \
  --input_path <path_to_replica>/office0 \
  --output_path output/replica/office0

# TUM-RGBD
python run_slam.py configs/TUM_RGBD/rgbd_dataset_freiburg1_desk.yaml \
  --input_path <path_to_tum>/rgbd_dataset_freiburg1_desk \
  --output_path output/tum/freiburg1_desk

# ScanNet
python run_slam.py configs/ScanNet/scene0000_00.yaml \
  --input_path <path_to_scannet>/scene0000_00 \
  --output_path output/scannet/scene0000_00

# ScanNet++
python run_slam.py configs/scannetpp/8b5caf3398.yaml \
  --input_path <path_to_scannetpp>/8b5caf3398 \
  --output_path output/scannetpp/8b5caf3398

You can also configure input and output paths directly in the config YAML file.

SLURM scripts

If you are running on SLURM cluster, you can run for all scenes in a dataset by running the corresponding script in the scripts folder.

Please note the evaluation of depth_L1 metric requires reconstruction of the mesh, which in turn requires headless installation of open3d if you are running on a cluster.

Acknowledgement

Our implementation builds upon LoopSplat, Gaussian-SLAM, and MonoGS. We thank the authors for their open-source contributions.

Citation

If you find our paper and code useful, please cite us:

@inproceedings{tran2026varsplat,
  title   = {VarSplat: Uncertainty-aware 3D Gaussian Splatting for Robust RGB-D SLAM},
  author  = {Tran, Anh Thuan and Kosecka, Jana},
  booktitle = {CVPR},
  year    = {2026}
}

About

[CVPR 2026] VarSplat: Uncertainty-aware 3D Gaussian Splatting for Robust RGB-D SLAM

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages