bruinxiong / SplaTAM

SplaTAM: Splat, Track & Map 3D Gaussians for Dense RGB-D SLAM

Home Page:https://spla-tam.github.io/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

SplaTAM: Splat, Track & Map 3D Gaussians for Dense RGB-D SLAM

Nikhil Keetha · Jay Karhade · Krishna Murthy Jatavallabhula · Gengshan Yang · Sebastian Scherer
Deva Ramanan · Jonathon Luiten

Logo


Coming Soon: Stay Tuned for Faster, Better and Stronger SplaTAM V2 Update!

Table of Contents
  1. Installation
  2. Online Demo
  3. Usage
  4. Downloads
  5. Benchmarking
  6. Acknowledgement
  7. Citation
  8. Developers

Installation

First, you have to make sure that you have all dependencies in place. The simplest way is to use anaconda.

You can create an anaconda environment called splatam.

conda env create -f environment.yml
conda activate splatam

Demo

Online

You can SplaTAM your own environment with an iPhone or LiDAR-equipped Apple device by downloading and using the NeRFCapture app.

Make sure that your iPhone and PC are connected to the same WiFi network, and then run the following command:

bash bash_scripts/online_demo.bash configs/iphone/online_demo.py

On the app, keep clicking send for successive frames. Once the capturing of frames is done, the app will disconnect from the PC and check out SplaTAM's interactive rendering of the reconstruction on your PC! Here are some cool example results:

Logo

Offline

You can also first capture the dataset and then run SplaTAM offline on the dataset with the following command:

bash bash_scripts/nerfcapture.bash configs/iphone/nerfcapture.py

Dataset Collection

If you would like to only capture your own iPhone dataset using the NeRFCapture app, please use the following command:

bash bash_scripts/nerfcapture2dataset.bash configs/iphone/dataset.py

Usage

We will use the iPhone dataset as an example to show how to use SplaTAM. The following steps are similar for other datasets.

To run SplaTAM, please use the following command:

python scripts/splatam.py configs/iphone/splatam.py

To visualize the final interactive SplaTAM reconstruction, please use the following command:

python viz_scripts/final_recon.py configs/iphone/splatam.py

To visualize the SplaTAM reconstruction in an online fashion, please use the following command:

python viz_scripts/online_recon.py configs/iphone/splatam.py

To run 3D Gaussian Splatting on the SplaTAM reconstruction, please use the following command:

python scripts/post_splatam_opt.pt configs/iphone/post_splatam_opt.py

To run 3D Gaussian Splatting on a dataset using ground truth poses, please use the following command:

python scripts/gaussian_splatting.py configs/iphone/gaussian_splatting.py

Downloads

DATAROOT is ./data by default. Please change the input_folder path in the scene-specific config files if datasets are stored somewhere else on your machine.

Replica

Download the data as below, and the data is saved into the ./data/Replica folder. Note that the Replica data is generated by the authors of iMAP (but hosted by the authors of NICE-SLAM). Please cite iMAP if you use the data.

bash bash_scripts/download_replica.sh

TUM-RGBD

bash bash_scripts/download_tum.sh

ScanNet

Please follow the data downloading procedure on the ScanNet website, and extract color/depth frames from the .sens file using this code.

[Directory structure of ScanNet (click to expand)]
  DATAROOT
  └── scannet
        └── scene0000_00
            └── frames
                ├── color
                │   ├── 0.jpg
                │   ├── 1.jpg
                │   ├── ...
                │   └── ...
                ├── depth
                │   ├── 0.png
                │   ├── 1.png
                │   ├── ...
                │   └── ...
                ├── intrinsic
                └── pose
                    ├── 0.txt
                    ├── 1.txt
                    ├── ...
                    └── ...

We use the following sequences:

scene0000_00
scene0059_00
scene0106_00
scene0181_00
scene0207_00

ScanNet++

Please follow the data downloading and image undistortion procedure on the ScanNet++ website. We use the following sequences:

8b5caf3398
b20a261fdf

For b20a261fdf, we use the first 360 frames, due to an abrupt jump/teleportation in the trajectory post frame 360. Please note that ScanNet++ was primarily intended as a NeRF Training & Novel View Synthesis dataset.

Replica-V2

We use the Replica-V2 dataset from vMAP to evaluate novel view synthesis. Please download the pre-generated replica sequences from vMAP.

Benchmarking

For running SplaTAM, we recommend using weights and biases for the logging. This can be turned on by setting the wandb flag to True in the configs file. Also make sure to specify the path wandb_folder. If you don't have a wandb account, first create one. Please make sure to change the entity config to your wandb account. Each scene has a config folder, where the input_folder and output paths need to be specified.

Below, we show some example run commands for one scene from each dataset. After SLAM, the trajectory error will be evaluated along with the rendering metrics. The results will be saved to ./experiments by default.

Replica

To run SplaTAM on the room0 scene, run the following command:

python scripts/splatam.py configs/replica/splatam.py

To run SplaTAM-S on the room0 scene, run the following command:

python scripts/splatam.py configs/replica/splatam_s.py

For other scenes, please modify the configs/replica/splatam.py file or use configs/replica/replica.bash.

TUM-RGBD

To run SplaTAM on the freiburg1_desk scene, run the following command:

python scripts/splatam.py configs/tum/splatam.py

For other scenes, please modify the configs/tum/splatam.py file or use configs/tum/tum.bash.

ScanNet

To run SplaTAM on the scene0000_00 scene, run the following command:

python scripts/splatam.py configs/scannet/splatam.py

For other scenes, please modify the configs/scannet/splatam.py file or use configs/scannet/scannet.bash.

ScanNet++

To run SplaTAM on the 8b5caf3398 scene, run the following command:

python scripts/splatam.py configs/scannetpp/splatam.py

To run Novel View Synthesis on the 8b5caf3398 scene, run the following command:

python scripts/eval_novel_view.py configs/scannetpp/eval_novel_view.py

For other scenes, please modify the configs/scannetpp/splatam.py file or use configs/scannetpp/scannetpp.bash.

ReplicaV2

To run SplaTAM on the room0 scene, run the following command:

python scripts/splatam.py configs/replica_v2/splatam.py

To run Novel View Synthesis on the room0 scene post SplaTAM, run the following command:

python scripts/eval_novel_view.py configs/replica_v2/eval_novel_view.py

For other scenes, please modify the config files.

Acknowledgement

We thank the authors of the following repositories for their open-source code:

Citation

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

@article{keetha2023splatam,
    author    = {Keetha, Nikhil and Karhade, Jay and Jatavallabhula, Krishna Murthy and Yang, Gengshan and Scherer, Sebastian and Ramanan, Deva and Luiten, Jonathan}
    title     = {SplaTAM: Splat, Track & Map 3D Gaussians for Dense RGB-D SLAM},
    journal   = {arXiv},
    year      = {2023},
}

Developers

About

SplaTAM: Splat, Track & Map 3D Gaussians for Dense RGB-D SLAM

https://spla-tam.github.io/

License:BSD 3-Clause "New" or "Revised" License


Languages

Language:Python 99.3%Language:Shell 0.7%