Dong-Uk Seo · Jinwoo Jeon · Eungchang Mason Lee · Hyun Myung
Paper | Video | Project Page
Given a monocular video sequence, GaussianFlow SLAM tracks the camera trajectory and reconstructs a photorealistic 3DGS map by leveraging optical flow as geometric supervision, without any depth measurements.
git clone --recursive https://github.com/url-kaist/gaussianflow-slam.git
cd gaussianflow-slamSystem packages:
sudo apt install build-essential libeigen3-dev libopencv-dev python3-tk \
libgl1 libglib2.0-0 libsm6 libxext6 libxrender1Python environment:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtAdjust the torch, torchvision, torchaudio versions and the --extra-index-url in requirements.txt to match your CUDA version.
CUDA extensions (built locally from thirdparty/ and src/):
pip install thirdparty/lietorch
pip install thirdparty/pytorch_scatter
pip install thirdparty/simple-knn
pip install -e thirdparty/diff-gaussian-rasterization \
--use-pep517 --no-build-isolation --force-reinstall
pip install -e .Pre-trained weights:
./tools/download_model.shReference environment: Ubuntu 20.04, Python 3.10, CUDA 11.8, PyTorch 2.1.2+cu118.
Download the ASL-format sequences from the
EuRoC MAV page
and convert the ground truth to TUM format (gt_converted/<seq>_gt.txt).
./tools/download_tum.sh./tools/run_gaussianflow_slam.sh V101 # GUI
./tools/run_gaussianflow_slam_nogui.sh V101 # headless./tools/run_gaussianflow_mapping_only.sh V101 # GUI
./tools/run_gaussianflow_mapping_only_nogui.sh V101 # headlessSequences: V101, MH01, fr1/desk, fr2, fr3. Options and environment
variables: tools/run_gaussianflow_modes.sh --help.
Edit DATA_PATH at the top of each script to point to your local dataset, then:
./tools/run_euroc_gsflow.sh # EuRoC
./tools/run_tum_gsflow.sh # TUM-RGBDExtra demo.py flags can be appended to the script call, e.g.:
./tools/run_euroc_gsflow.sh --t1=600 --stride=2You only need (1) a folder of RGB frames named so they sort in capture order
and (2) a one-line calibration file fx fy cx cy [k1 k2 p1 p2 [k3 [k4 k5 k6]]].
Then:
python3 demo.py --imagedir=<path/to/rgb> --calib=<calib.txt> \
--gsconfig_path=configs/mono_slam.yaml --upsample --disable_vis \
--output=results/<run>/Passing --gt_path makes demo.py report ATE and write traj_full.txt /
traj_kf.txt to the output directory. To recompute ATE from a finished run:
python3 tools/compute_ate.py results/<run>/traj_full.txt <gt.txt>This work builds on many open-source projects. We extend our gratitude to the authors:
GaussianFlow SLAM is released under the GPL-3.0 License. For a list of code dependencies which are not property of the authors of GaussianFlow SLAM, please check Dependencies.md.
If you found this work useful in your own research, please consider citing:
@article{seo2026gaussianflow,
title={GaussianFlow SLAM: Monocular Gaussian Splatting SLAM Guided by GaussianFlow},
author={Seo, Dong-Uk and Jeon, Jinwoo and Lee, Eungchang Mason and Myung, Hyun},
journal={IEEE Robotics and Automation Letters},
year={2026},
publisher={IEEE}
}
