CVPR 2026
Department of Computer Science, George Mason University
The code has been tested on Rocky Linux 8.10, Python 3.10.1, CUDA 12.6, A100 80GB
Clone the repo with --recursive because we have submodules:
git clone --recursive git@github.com:anhthuan1999/varsplat.git
cd VarSplatMake 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.txtYou will also need to install hloc for loop detection and 3DGS registration:
cd thirdparty/Hierarchical-Localization
python -m pip install -e .
cd ../..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.
Pre-trained checkpoints for all evaluated scenes are available for download:
| Dataset | Link |
|---|---|
| Replica | Download |
| TUM-RGBD | Download |
| ScanNet | Download |
| ScanNet++ | Download |
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/8b5caf3398You can also configure input and output paths directly in the config YAML file.
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.
Our implementation builds upon LoopSplat, Gaussian-SLAM, and MonoGS. We thank the authors for their open-source contributions.
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}
}