Giter Site home page Giter Site logo

cvg / nerf-on-the-go Goto Github PK

View Code? Open in Web Editor NEW
107.0 14.0 5.0 16.08 MB

[CVPR'24] NeRF On-the-go: Exploiting Uncertainty for Distractor-free NeRFs in the Wild

Home Page: https://rwn17.github.io/nerf-on-the-go/

License: Apache License 2.0

Python 96.63% Shell 3.37%
dinov2 dynamic-scenes in-the-wild nerf neural-fields neural-implicit-representations neural-radiance-fields uncertainty

nerf-on-the-go's Introduction

NeRF On-the-go: Exploiting Uncertainty for Distractor-free NeRFs in the Wild

Weining Ren* · Zihan Zhu* · Boyang Sun · Julia Chen · Marc Pollefeys · Songyou Peng

(* Equal Contribution)

CVPR 2024

Logo


Table of Contents
  1. Description
  2. Setup
  3. Dataset Preparation
  4. Running
  5. Citation
  6. Contact

Description

This repository hosts the official Jax implementation of the paper "NeRF on-the-go: Exploiting Uncertainty for Distractor-free NeRFs in the Wild" (CVPR 2024). For more details, please visit our project webpage.

This Repo is built upon Multinerf codebase.

Setup

# Clone the repo.
git clone https://github.com/cvg/nerf-on-the-go
cd nerf-on-the-go

# Make a conda environment.
conda create --name on-the-go python=3.9
conda activate on-the-go

# Prepare pip.
conda install pip
pip install --upgrade pip


# Install requirements.
pip install -r requirements.txt

# Manually install rmbrualla's `pycolmap` (don't use pip's! It's different).
git clone https://github.com/rmbrualla/pycolmap.git ./internal/pycolmap

# Confirm that all the unit tests pass.
./scripts/run_all_unit_tests.sh

You'll also need to update your JAX installation to support GPUs or TPUs.

pip install  jax==0.4.26 -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html
pip install  jaxlib==0.4.26+cuda12.cudnn89 -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html

Instructions for ETH Euler

Click to expand

on ETH Euler, to support for GPU jax, you need to apply for a debug mode gpu and then upgrade the gcc and cuda

srun -n 4 --mem-per-cpu=12000 --gpus=rtx_3090:1 --gres=gpumem:20g --time=4:00:00 --pty bash
conda activate on-the-go
module load eth_proxy gcc/8.2.0 cuda/12.1.1 cudnn/8.9.2.26

After loading the modules, verify their activation by executing module list. Occasionally, modules may not load correctly, requiring you to load each one individually. Following this, proceed with the Jax installation:

# Installs the wheel compatible with CUDA 12 and cuDNN 8.9 or newer.
pip install  jax==0.4.26 -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html
pip install  jaxlib==0.4.26+cuda12.cudnn89 -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html

After successful installation, please rerun ./scripts/run_all_unit_tests.sh.

The installation process outlined above has been verified on the Euler system using an RTX 3090. You may get a warning

The NVIDIA driver's CUDA version is 12.0 which is older than the ptxas CUDA version (12.4.131). Because the driver is older than the ptxas version, XLA is disabling parallel compilation, which may slow down compilation. You should update your NVIDIA driver or use the NVIDIA-provided CUDA forward compatibility packages.

But it's fine. The Euler supports up to CUDA 12.1, while JAX now requires a minimum of CUDA 12.3. As discussed in the JAX Issue #18032, this discrepancy primarily impacts compilation speed rather than overall functionality.

Dataset Preparation

Downloading the Dataset

To download the "On-the-go" dataset, execute the following command:

bash ./scripts/download_on-the-go.sh

This script not only downloads the dataset but also downsamples the images as required.

Feature Extraction with DINOv2

For extracting features using the DINOv2, use the command below:

bash ./scripts/feature_extract.sh

After feature extraction, the dataset should be organized as

on-the-go
├── arcdetriomphe
│   ├── images
│   ├── images_{DOWNSAMPLE_RATE}
│   ├── features_{DOWNSAMPLE_RATE}
│   ├── split.json
│   ├── transforms.json
├── ....
│
└── tree
    ├── images_{DOWNSAMPLE_RATE}
    ├── ....
    └── transforms.json

Dataset Structure and Configuration Files

  • split.json: This file outlines the train and evaluation splits, following the naming conventions used in the RobustNeRF dataset, categorized as 'clutter' and 'clean'.
  • transforms.json: Contains pose and intrinsic information, formatted according to the Blender dataset format, derived from COLMAP files. Refer to the Instant-NGP script for more details.

Future Updates

We plan to expand support to include custom datasets in future updates.

Running

Example scripts for training, evaluating, and rendering can be found in scripts/. You'll need to change the paths to point to wherever the datasets are located. Gin configuration files for our model and some ablations can be found in configs/.

  1. Training on-the-go:
bash scripts/train_on-the-go.sh 
  1. Evaluating on-the-go:
bash scripts/eval_on-the-go.sh
  1. Rendering on-the-go:
bash scirpts/render_on-the-go.sh

Tensorboard is supported for logging.

Note

Since we use a different recording device for arc de triomphe and patio scene, the image downsample rate(4 instead of 8) and feature downsample rate(2 instead of 4) is different. Please use a separate script to train them by

bash scripts/train_on-the-go_HD.sh

OOM errors

About 80G gpu memory is needed to run current version.You may need to reduce the batch size (Config.batch_size) to avoid out of memory errors. If you do this, but want to preserve quality, be sure to increase the number of training iterations and decrease the learning rate by whatever scale factor you decrease batch size by.

Todo

  • Custom dataset tutorial
  • Support LPIPS calculation

Citation

If you use NeRF on-the-go, please cite

@InProceedings{Ren2024NeRF,
    title={NeRF on-the-go: Exploiting Uncertainty for Distractor-free NeRFs in the Wild},
    author={Ren, Weining and Zhu, Zihan and Sun, Boyang and Chen, Jiaqi and Pollefeys, Marc and Peng, Songyou},
    booktitle={IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
    year={2024}
}

Also, this code is built upon multinerf, feel free to cite this entire codebase as:

@misc{multinerf2022,
      title={{MultiNeRF}: {A} {Code} {Release} for {Mip-NeRF} 360, {Ref-NeRF}, and {RawNeRF}},
      author={Ben Mildenhall and Dor Verbin and Pratul P. Srinivasan and Peter Hedman and Ricardo Martin-Brualla and Jonathan T. Barron},
      year={2022},
      url={https://github.com/google-research/multinerf},
}

Contact

If there is any problem, please contact Weining by [email protected]

nerf-on-the-go's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.