Repository files navigation

Parallel Inversion NeRF

Overview

This repository is the official implementation of the paper Parallel Inversion of Neural Radiance Fields for Robust Pose Estimation by Lin et al., ICRA 2023 (full citation below). For videos, please visit the Parallel Inversion NeRF project site.

In this work, we present a parallelized optimization method based on fast Neural Radiance Fields (NeRF) for estimating 6-DoF pose of a camera with respect to an object or scene. Given a single observed RGB image of the target, we can predict the translation and rotation of the camera by minimizing the residual between pixels rendered from a fast NeRF model and pixels in the observed image. We integrate a momentum-based camera extrinsic optimization procedure into Instant Neural Graphics Primitives, a recent exceptionally fast NeRF implementation. By introducing parallel Monte Carlo sampling into the pose estimation task, our method overcomes local minima and improves efficiency in a more extensive search space. We also show the importance of adopting a more robust pixel-based loss function to reduce error. Experiments demonstrate that our method can achieve improved generalization and robustness on both synthetic and real-world benchmarks. The algorithm takes an average of 25 seconds on an NVIDIA GTX 3090 GPU.

Installation

The code was tested on Ubuntu 20.04, with Anaconda Python 3.9. Other versions should be possible with some accuracy difference. NVIDIA GPUs are needed for both training and testing.

  1. Preparation for Instant NGP
$ sudo apt-get install build-essential git python3-dev python3-pip libopenexr-dev libxi-dev \
libglfw3-dev libglew-dev libomp-dev libxinerama-dev libxcursor-dev
  1. Clone this repo:
$ REPO_ROOT=/path/to/clone/ParallelInversion
$ git clone --recursive https://github.com/NVlabs/ParallelInversion.git $REPO_ROOT
  1. Create an Anaconda environment or create your own virtual environment
$ conda create -n pinerf python=3.9
$ conda activate pinerf
$ pip install -r requirements.txt
  1. Build the project using CMake
$ cmake . -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo $ cmake --build build --config RelWithDebInfo -j 

Dataset

To play with scenes presented in the paper, download the data here. Place the downloaded dataset according to the following directory structure:

 ├── data/nerf │ ├── nerf_llff_data │ │ └── fern │ │ └── fortress | | └── ...
| ├── nerf_synthetic
| | └── chair
| | └── drums | | └── ...

Following NeRF-Pytorch and Instant-NGP, we further preprocess LLFF dataset by converting it to the NeRF format. We provide the script colmap2nerf.py to convert the specific dataset format to the NeRF format (saving a json file).

$ cd REPO_ROOT/scripts
$ export PYTHONPATH='../'
$ python preprocess_llff.py

For a sanity check, you can visualize the converted dataset by running the following command:

$ cd REPO_ROOT/scripts
$ export PYTHONPATH='../'
$ python run_debug.py --config config/debug/default.yaml

Evaluation

We evaluate our method on NeRF Synthetic and LLFF datasets.

$ cd REPO_ROOT/scripts
$ export PYTHONPATH='../'## Main# Evaluation on NeRF Synthetic dataset
$ python exp_nerf_synthetic.py --config config/exp/exp_nerf_synthetic.yaml
$ python exp_nerf_synthetic.py --config config/exp/exp_nerf_synthetic_multiGuess.yaml
# Evaluation on LLFF dataset
$ python exp_nerf_llff.py --config config/exp/exp_nerf_llff.yaml
$ python exp_nerf_llff.py --config config/exp/exp_nerf_llff_multiGuess.yaml
## Ablation study# Evaluation on NeRF Synthetic dataset with simulated noise
$ python exp_nerf_synthetic.py --config config/exp/exp_nerf_synthetic_noisy.yaml --eval_mode ablation_rgb_loss
# Evaluation on LLFF dataset
$ python exp_nerf_llff.py --config config/exp/exp_nerf_llff.yaml --eval_mode ablation_rgb_loss

We also provide the options to generate visualization results. An example is shown below:

$ cd REPO_ROOT/scripts
$ export PYTHONPATH='../'
$ python run_pose_refinement.py --config config/demo/nerf_synthetic_hotdog_multiGuess.yaml

You can get the following result:

Acknowledgements

In this repository, we have used codes or datasets from the following repositories. We thank all the authors for sharing great codes or datasets.

Citation

Please cite the following if you use this repository in your publications:

@inproceedings{lin2023icra:parallel,
title={Parallel Inversion of Neural Radiance Fields for Robust Pose Estimation},
author={Lin, Yunzhi and Müller, Thomas and Tremblay, Jonathan and Wen, Bowen and Tyree, Stephen and Evans, Alex and Vela, Patricio A. and Birchfield, Stan},
booktitle={IEEE International Conference on Robotics and Automation (ICRA)},
year={2023}
}

Licence

Parallel Inversion NeRF is licensed under the NVIDIA Source Code License - Non-commercial.

About

Parallel Inversion of Neural Radiance Fields for Robust Pose Estimation (ICRA 2023)

Topics

Resources

Stars

35 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Parallel Inversion NeRF

Overview

This repository is the official implementation of the paper Parallel Inversion of Neural Radiance Fields for Robust Pose Estimation by Lin et al., ICRA 2023 (full citation below). For videos, please visit the Parallel Inversion NeRF project site.

In this work, we present a parallelized optimization method based on fast Neural Radiance Fields (NeRF) for estimating 6-DoF pose of a camera with respect to an object or scene. Given a single observed RGB image of the target, we can predict the translation and rotation of the camera by minimizing the residual between pixels rendered from a fast NeRF model and pixels in the observed image. We integrate a momentum-based camera extrinsic optimization procedure into Instant Neural Graphics Primitives, a recent exceptionally fast NeRF implementation. By introducing parallel Monte Carlo sampling into the pose estimation task, our method overcomes local minima and improves efficiency in a more extensive search space. We also show the importance of adopting a more robust pixel-based loss function to reduce error. Experiments demonstrate that our method can achieve improved generalization and robustness on both synthetic and real-world benchmarks. The algorithm takes an average of 25 seconds on an NVIDIA GTX 3090 GPU.

Installation

The code was tested on Ubuntu 20.04, with Anaconda Python 3.9. Other versions should be possible with some accuracy difference. NVIDIA GPUs are needed for both training and testing.

  1. Preparation for Instant NGP
$ sudo apt-get install build-essential git python3-dev python3-pip libopenexr-dev libxi-dev \
libglfw3-dev libglew-dev libomp-dev libxinerama-dev libxcursor-dev
  1. Clone this repo:
$ REPO_ROOT=/path/to/clone/ParallelInversion
$ git clone --recursive https://github.com/NVlabs/ParallelInversion.git $REPO_ROOT
  1. Create an Anaconda environment or create your own virtual environment
$ conda create -n pinerf python=3.9
$ conda activate pinerf
$ pip install -r requirements.txt
  1. Build the project using CMake
$ cmake . -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo $ cmake --build build --config RelWithDebInfo -j 

Dataset

To play with scenes presented in the paper, download the data here. Place the downloaded dataset according to the following directory structure:

 ├── data/nerf │ ├── nerf_llff_data │ │ └── fern │ │ └── fortress | | └── ...
| ├── nerf_synthetic
| | └── chair
| | └── drums | | └── ...

Following NeRF-Pytorch and Instant-NGP, we further preprocess LLFF dataset by converting it to the NeRF format. We provide the script colmap2nerf.py to convert the specific dataset format to the NeRF format (saving a json file).

$ cd REPO_ROOT/scripts
$ export PYTHONPATH='../'
$ python preprocess_llff.py

For a sanity check, you can visualize the converted dataset by running the following command:

$ cd REPO_ROOT/scripts
$ export PYTHONPATH='../'
$ python run_debug.py --config config/debug/default.yaml

Evaluation

We evaluate our method on NeRF Synthetic and LLFF datasets.

$ cd REPO_ROOT/scripts
$ export PYTHONPATH='../'## Main# Evaluation on NeRF Synthetic dataset
$ python exp_nerf_synthetic.py --config config/exp/exp_nerf_synthetic.yaml
$ python exp_nerf_synthetic.py --config config/exp/exp_nerf_synthetic_multiGuess.yaml
# Evaluation on LLFF dataset
$ python exp_nerf_llff.py --config config/exp/exp_nerf_llff.yaml
$ python exp_nerf_llff.py --config config/exp/exp_nerf_llff_multiGuess.yaml
## Ablation study# Evaluation on NeRF Synthetic dataset with simulated noise
$ python exp_nerf_synthetic.py --config config/exp/exp_nerf_synthetic_noisy.yaml --eval_mode ablation_rgb_loss
# Evaluation on LLFF dataset
$ python exp_nerf_llff.py --config config/exp/exp_nerf_llff.yaml --eval_mode ablation_rgb_loss

We also provide the options to generate visualization results. An example is shown below:

$ cd REPO_ROOT/scripts
$ export PYTHONPATH='../'
$ python run_pose_refinement.py --config config/demo/nerf_synthetic_hotdog_multiGuess.yaml

You can get the following result:

Acknowledgements

In this repository, we have used codes or datasets from the following repositories. We thank all the authors for sharing great codes or datasets.

Citation

Please cite the following if you use this repository in your publications:

@inproceedings{lin2023icra:parallel,
title={Parallel Inversion of Neural Radiance Fields for Robust Pose Estimation},
author={Lin, Yunzhi and Müller, Thomas and Tremblay, Jonathan and Wen, Bowen and Tyree, Stephen and Evans, Alex and Vela, Patricio A. and Birchfield, Stan},
booktitle={IEEE International Conference on Robotics and Automation (ICRA)},
year={2023}
}

Licence

Parallel Inversion NeRF is licensed under the NVIDIA Source Code License - Non-commercial.

About

Parallel Inversion of Neural Radiance Fields for Robust Pose Estimation (ICRA 2023)

Topics

Resources

Stars

35 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Parallel Inversion NeRF

Overview

This repository is the official implementation of the paper Parallel Inversion of Neural Radiance Fields for Robust Pose Estimation by Lin et al., ICRA 2023 (full citation below). For videos, please visit the Parallel Inversion NeRF project site.

In this work, we present a parallelized optimization method based on fast Neural Radiance Fields (NeRF) for estimating 6-DoF pose of a camera with respect to an object or scene. Given a single observed RGB image of the target, we can predict the translation and rotation of the camera by minimizing the residual between pixels rendered from a fast NeRF model and pixels in the observed image. We integrate a momentum-based camera extrinsic optimization procedure into Instant Neural Graphics Primitives, a recent exceptionally fast NeRF implementation. By introducing parallel Monte Carlo sampling into the pose estimation task, our method overcomes local minima and improves efficiency in a more extensive search space. We also show the importance of adopting a more robust pixel-based loss function to reduce error. Experiments demonstrate that our method can achieve improved generalization and robustness on both synthetic and real-world benchmarks. The algorithm takes an average of 25 seconds on an NVIDIA GTX 3090 GPU.

Installation

The code was tested on Ubuntu 20.04, with Anaconda Python 3.9. Other versions should be possible with some accuracy difference. NVIDIA GPUs are needed for both training and testing.

  1. Preparation for Instant NGP
$ sudo apt-get install build-essential git python3-dev python3-pip libopenexr-dev libxi-dev \
libglfw3-dev libglew-dev libomp-dev libxinerama-dev libxcursor-dev
  1. Clone this repo:
$ REPO_ROOT=/path/to/clone/ParallelInversion
$ git clone --recursive https://github.com/NVlabs/ParallelInversion.git $REPO_ROOT
  1. Create an Anaconda environment or create your own virtual environment
$ conda create -n pinerf python=3.9
$ conda activate pinerf
$ pip install -r requirements.txt
  1. Build the project using CMake
$ cmake . -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo $ cmake --build build --config RelWithDebInfo -j 

Dataset

To play with scenes presented in the paper, download the data here. Place the downloaded dataset according to the following directory structure:

 ├── data/nerf │ ├── nerf_llff_data │ │ └── fern │ │ └── fortress | | └── ...
| ├── nerf_synthetic
| | └── chair
| | └── drums | | └── ...

Following NeRF-Pytorch and Instant-NGP, we further preprocess LLFF dataset by converting it to the NeRF format. We provide the script colmap2nerf.py to convert the specific dataset format to the NeRF format (saving a json file).

$ cd REPO_ROOT/scripts
$ export PYTHONPATH='../'
$ python preprocess_llff.py

For a sanity check, you can visualize the converted dataset by running the following command:

$ cd REPO_ROOT/scripts
$ export PYTHONPATH='../'
$ python run_debug.py --config config/debug/default.yaml

Evaluation

We evaluate our method on NeRF Synthetic and LLFF datasets.

$ cd REPO_ROOT/scripts
$ export PYTHONPATH='../'## Main# Evaluation on NeRF Synthetic dataset
$ python exp_nerf_synthetic.py --config config/exp/exp_nerf_synthetic.yaml
$ python exp_nerf_synthetic.py --config config/exp/exp_nerf_synthetic_multiGuess.yaml
# Evaluation on LLFF dataset
$ python exp_nerf_llff.py --config config/exp/exp_nerf_llff.yaml
$ python exp_nerf_llff.py --config config/exp/exp_nerf_llff_multiGuess.yaml
## Ablation study# Evaluation on NeRF Synthetic dataset with simulated noise
$ python exp_nerf_synthetic.py --config config/exp/exp_nerf_synthetic_noisy.yaml --eval_mode ablation_rgb_loss
# Evaluation on LLFF dataset
$ python exp_nerf_llff.py --config config/exp/exp_nerf_llff.yaml --eval_mode ablation_rgb_loss

We also provide the options to generate visualization results. An example is shown below:

$ cd REPO_ROOT/scripts
$ export PYTHONPATH='../'
$ python run_pose_refinement.py --config config/demo/nerf_synthetic_hotdog_multiGuess.yaml

You can get the following result:

Acknowledgements

In this repository, we have used codes or datasets from the following repositories. We thank all the authors for sharing great codes or datasets.

Citation

Please cite the following if you use this repository in your publications:

@inproceedings{lin2023icra:parallel,
title={Parallel Inversion of Neural Radiance Fields for Robust Pose Estimation},
author={Lin, Yunzhi and Müller, Thomas and Tremblay, Jonathan and Wen, Bowen and Tyree, Stephen and Evans, Alex and Vela, Patricio A. and Birchfield, Stan},
booktitle={IEEE International Conference on Robotics and Automation (ICRA)},
year={2023}
}

Licence

Parallel Inversion NeRF is licensed under the NVIDIA Source Code License - Non-commercial.

About

Parallel Inversion of Neural Radiance Fields for Robust Pose Estimation (ICRA 2023)

Topics

Resources

Stars

35 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Parallel Inversion NeRF

Overview

This repository is the official implementation of the paper Parallel Inversion of Neural Radiance Fields for Robust Pose Estimation by Lin et al., ICRA 2023 (full citation below). For videos, please visit the Parallel Inversion NeRF project site.

In this work, we present a parallelized optimization method based on fast Neural Radiance Fields (NeRF) for estimating 6-DoF pose of a camera with respect to an object or scene. Given a single observed RGB image of the target, we can predict the translation and rotation of the camera by minimizing the residual between pixels rendered from a fast NeRF model and pixels in the observed image. We integrate a momentum-based camera extrinsic optimization procedure into Instant Neural Graphics Primitives, a recent exceptionally fast NeRF implementation. By introducing parallel Monte Carlo sampling into the pose estimation task, our method overcomes local minima and improves efficiency in a more extensive search space. We also show the importance of adopting a more robust pixel-based loss function to reduce error. Experiments demonstrate that our method can achieve improved generalization and robustness on both synthetic and real-world benchmarks. The algorithm takes an average of 25 seconds on an NVIDIA GTX 3090 GPU.

Installation

The code was tested on Ubuntu 20.04, with Anaconda Python 3.9. Other versions should be possible with some accuracy difference. NVIDIA GPUs are needed for both training and testing.

  1. Preparation for Instant NGP
$ sudo apt-get install build-essential git python3-dev python3-pip libopenexr-dev libxi-dev \
libglfw3-dev libglew-dev libomp-dev libxinerama-dev libxcursor-dev
  1. Clone this repo:
$ REPO_ROOT=/path/to/clone/ParallelInversion
$ git clone --recursive https://github.com/NVlabs/ParallelInversion.git $REPO_ROOT
  1. Create an Anaconda environment or create your own virtual environment
$ conda create -n pinerf python=3.9
$ conda activate pinerf
$ pip install -r requirements.txt
  1. Build the project using CMake
$ cmake . -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo $ cmake --build build --config RelWithDebInfo -j 

Dataset

To play with scenes presented in the paper, download the data here. Place the downloaded dataset according to the following directory structure:

 ├── data/nerf │ ├── nerf_llff_data │ │ └── fern │ │ └── fortress | | └── ...
| ├── nerf_synthetic
| | └── chair
| | └── drums | | └── ...

Following NeRF-Pytorch and Instant-NGP, we further preprocess LLFF dataset by converting it to the NeRF format. We provide the script colmap2nerf.py to convert the specific dataset format to the NeRF format (saving a json file).

$ cd REPO_ROOT/scripts
$ export PYTHONPATH='../'
$ python preprocess_llff.py

For a sanity check, you can visualize the converted dataset by running the following command:

$ cd REPO_ROOT/scripts
$ export PYTHONPATH='../'
$ python run_debug.py --config config/debug/default.yaml

Evaluation

We evaluate our method on NeRF Synthetic and LLFF datasets.

$ cd REPO_ROOT/scripts
$ export PYTHONPATH='../'## Main# Evaluation on NeRF Synthetic dataset
$ python exp_nerf_synthetic.py --config config/exp/exp_nerf_synthetic.yaml
$ python exp_nerf_synthetic.py --config config/exp/exp_nerf_synthetic_multiGuess.yaml
# Evaluation on LLFF dataset
$ python exp_nerf_llff.py --config config/exp/exp_nerf_llff.yaml
$ python exp_nerf_llff.py --config config/exp/exp_nerf_llff_multiGuess.yaml
## Ablation study# Evaluation on NeRF Synthetic dataset with simulated noise
$ python exp_nerf_synthetic.py --config config/exp/exp_nerf_synthetic_noisy.yaml --eval_mode ablation_rgb_loss
# Evaluation on LLFF dataset
$ python exp_nerf_llff.py --config config/exp/exp_nerf_llff.yaml --eval_mode ablation_rgb_loss

We also provide the options to generate visualization results. An example is shown below:

$ cd REPO_ROOT/scripts
$ export PYTHONPATH='../'
$ python run_pose_refinement.py --config config/demo/nerf_synthetic_hotdog_multiGuess.yaml

You can get the following result:

Acknowledgements

In this repository, we have used codes or datasets from the following repositories. We thank all the authors for sharing great codes or datasets.

Citation

Please cite the following if you use this repository in your publications:

@inproceedings{lin2023icra:parallel,
title={Parallel Inversion of Neural Radiance Fields for Robust Pose Estimation},
author={Lin, Yunzhi and Müller, Thomas and Tremblay, Jonathan and Wen, Bowen and Tyree, Stephen and Evans, Alex and Vela, Patricio A. and Birchfield, Stan},
booktitle={IEEE International Conference on Robotics and Automation (ICRA)},
year={2023}
}

Licence

Parallel Inversion NeRF is licensed under the NVIDIA Source Code License - Non-commercial.

About

Parallel Inversion of Neural Radiance Fields for Robust Pose Estimation (ICRA 2023)

Topics

Resources

Stars

35 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Parallel Inversion NeRF

Overview

This repository is the official implementation of the paper Parallel Inversion of Neural Radiance Fields for Robust Pose Estimation by Lin et al., ICRA 2023 (full citation below). For videos, please visit the Parallel Inversion NeRF project site.

In this work, we present a parallelized optimization method based on fast Neural Radiance Fields (NeRF) for estimating 6-DoF pose of a camera with respect to an object or scene. Given a single observed RGB image of the target, we can predict the translation and rotation of the camera by minimizing the residual between pixels rendered from a fast NeRF model and pixels in the observed image. We integrate a momentum-based camera extrinsic optimization procedure into Instant Neural Graphics Primitives, a recent exceptionally fast NeRF implementation. By introducing parallel Monte Carlo sampling into the pose estimation task, our method overcomes local minima and improves efficiency in a more extensive search space. We also show the importance of adopting a more robust pixel-based loss function to reduce error. Experiments demonstrate that our method can achieve improved generalization and robustness on both synthetic and real-world benchmarks. The algorithm takes an average of 25 seconds on an NVIDIA GTX 3090 GPU.

Installation

The code was tested on Ubuntu 20.04, with Anaconda Python 3.9. Other versions should be possible with some accuracy difference. NVIDIA GPUs are needed for both training and testing.

  1. Preparation for Instant NGP
$ sudo apt-get install build-essential git python3-dev python3-pip libopenexr-dev libxi-dev \
libglfw3-dev libglew-dev libomp-dev libxinerama-dev libxcursor-dev
  1. Clone this repo:
$ REPO_ROOT=/path/to/clone/ParallelInversion
$ git clone --recursive https://github.com/NVlabs/ParallelInversion.git $REPO_ROOT
  1. Create an Anaconda environment or create your own virtual environment
$ conda create -n pinerf python=3.9
$ conda activate pinerf
$ pip install -r requirements.txt
  1. Build the project using CMake
$ cmake . -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo $ cmake --build build --config RelWithDebInfo -j 

Dataset

To play with scenes presented in the paper, download the data here. Place the downloaded dataset according to the following directory structure:

 ├── data/nerf │ ├── nerf_llff_data │ │ └── fern │ │ └── fortress | | └── ...
| ├── nerf_synthetic
| | └── chair
| | └── drums | | └── ...

Following NeRF-Pytorch and Instant-NGP, we further preprocess LLFF dataset by converting it to the NeRF format. We provide the script colmap2nerf.py to convert the specific dataset format to the NeRF format (saving a json file).

$ cd REPO_ROOT/scripts
$ export PYTHONPATH='../'
$ python preprocess_llff.py

For a sanity check, you can visualize the converted dataset by running the following command:

$ cd REPO_ROOT/scripts
$ export PYTHONPATH='../'
$ python run_debug.py --config config/debug/default.yaml

Evaluation

We evaluate our method on NeRF Synthetic and LLFF datasets.

$ cd REPO_ROOT/scripts
$ export PYTHONPATH='../'## Main# Evaluation on NeRF Synthetic dataset
$ python exp_nerf_synthetic.py --config config/exp/exp_nerf_synthetic.yaml
$ python exp_nerf_synthetic.py --config config/exp/exp_nerf_synthetic_multiGuess.yaml
# Evaluation on LLFF dataset
$ python exp_nerf_llff.py --config config/exp/exp_nerf_llff.yaml
$ python exp_nerf_llff.py --config config/exp/exp_nerf_llff_multiGuess.yaml
## Ablation study# Evaluation on NeRF Synthetic dataset with simulated noise
$ python exp_nerf_synthetic.py --config config/exp/exp_nerf_synthetic_noisy.yaml --eval_mode ablation_rgb_loss
# Evaluation on LLFF dataset
$ python exp_nerf_llff.py --config config/exp/exp_nerf_llff.yaml --eval_mode ablation_rgb_loss

We also provide the options to generate visualization results. An example is shown below:

$ cd REPO_ROOT/scripts
$ export PYTHONPATH='../'
$ python run_pose_refinement.py --config config/demo/nerf_synthetic_hotdog_multiGuess.yaml

You can get the following result:

Acknowledgements

In this repository, we have used codes or datasets from the following repositories. We thank all the authors for sharing great codes or datasets.

Citation

Please cite the following if you use this repository in your publications:

@inproceedings{lin2023icra:parallel,
title={Parallel Inversion of Neural Radiance Fields for Robust Pose Estimation},
author={Lin, Yunzhi and Müller, Thomas and Tremblay, Jonathan and Wen, Bowen and Tyree, Stephen and Evans, Alex and Vela, Patricio A. and Birchfield, Stan},
booktitle={IEEE International Conference on Robotics and Automation (ICRA)},
year={2023}
}

Licence

Parallel Inversion NeRF is licensed under the NVIDIA Source Code License - Non-commercial.

About

Parallel Inversion of Neural Radiance Fields for Robust Pose Estimation (ICRA 2023)

Topics

Resources

Stars

35 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Parallel Inversion NeRF

Overview

This repository is the official implementation of the paper Parallel Inversion of Neural Radiance Fields for Robust Pose Estimation by Lin et al., ICRA 2023 (full citation below). For videos, please visit the Parallel Inversion NeRF project site.

In this work, we present a parallelized optimization method based on fast Neural Radiance Fields (NeRF) for estimating 6-DoF pose of a camera with respect to an object or scene. Given a single observed RGB image of the target, we can predict the translation and rotation of the camera by minimizing the residual between pixels rendered from a fast NeRF model and pixels in the observed image. We integrate a momentum-based camera extrinsic optimization procedure into Instant Neural Graphics Primitives, a recent exceptionally fast NeRF implementation. By introducing parallel Monte Carlo sampling into the pose estimation task, our method overcomes local minima and improves efficiency in a more extensive search space. We also show the importance of adopting a more robust pixel-based loss function to reduce error. Experiments demonstrate that our method can achieve improved generalization and robustness on both synthetic and real-world benchmarks. The algorithm takes an average of 25 seconds on an NVIDIA GTX 3090 GPU.

Installation

The code was tested on Ubuntu 20.04, with Anaconda Python 3.9. Other versions should be possible with some accuracy difference. NVIDIA GPUs are needed for both training and testing.

  1. Preparation for Instant NGP
$ sudo apt-get install build-essential git python3-dev python3-pip libopenexr-dev libxi-dev \
libglfw3-dev libglew-dev libomp-dev libxinerama-dev libxcursor-dev
  1. Clone this repo:
$ REPO_ROOT=/path/to/clone/ParallelInversion
$ git clone --recursive https://github.com/NVlabs/ParallelInversion.git $REPO_ROOT
  1. Create an Anaconda environment or create your own virtual environment
$ conda create -n pinerf python=3.9
$ conda activate pinerf
$ pip install -r requirements.txt
  1. Build the project using CMake
$ cmake . -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo $ cmake --build build --config RelWithDebInfo -j 

Dataset

To play with scenes presented in the paper, download the data here. Place the downloaded dataset according to the following directory structure:

 ├── data/nerf │ ├── nerf_llff_data │ │ └── fern │ │ └── fortress | | └── ...
| ├── nerf_synthetic
| | └── chair
| | └── drums | | └── ...

Following NeRF-Pytorch and Instant-NGP, we further preprocess LLFF dataset by converting it to the NeRF format. We provide the script colmap2nerf.py to convert the specific dataset format to the NeRF format (saving a json file).

$ cd REPO_ROOT/scripts
$ export PYTHONPATH='../'
$ python preprocess_llff.py

For a sanity check, you can visualize the converted dataset by running the following command:

$ cd REPO_ROOT/scripts
$ export PYTHONPATH='../'
$ python run_debug.py --config config/debug/default.yaml

Evaluation

We evaluate our method on NeRF Synthetic and LLFF datasets.

$ cd REPO_ROOT/scripts
$ export PYTHONPATH='../'## Main# Evaluation on NeRF Synthetic dataset
$ python exp_nerf_synthetic.py --config config/exp/exp_nerf_synthetic.yaml
$ python exp_nerf_synthetic.py --config config/exp/exp_nerf_synthetic_multiGuess.yaml
# Evaluation on LLFF dataset
$ python exp_nerf_llff.py --config config/exp/exp_nerf_llff.yaml
$ python exp_nerf_llff.py --config config/exp/exp_nerf_llff_multiGuess.yaml
## Ablation study# Evaluation on NeRF Synthetic dataset with simulated noise
$ python exp_nerf_synthetic.py --config config/exp/exp_nerf_synthetic_noisy.yaml --eval_mode ablation_rgb_loss
# Evaluation on LLFF dataset
$ python exp_nerf_llff.py --config config/exp/exp_nerf_llff.yaml --eval_mode ablation_rgb_loss

We also provide the options to generate visualization results. An example is shown below:

$ cd REPO_ROOT/scripts
$ export PYTHONPATH='../'
$ python run_pose_refinement.py --config config/demo/nerf_synthetic_hotdog_multiGuess.yaml

You can get the following result:

Acknowledgements

In this repository, we have used codes or datasets from the following repositories. We thank all the authors for sharing great codes or datasets.

Citation

Please cite the following if you use this repository in your publications:

@inproceedings{lin2023icra:parallel,
title={Parallel Inversion of Neural Radiance Fields for Robust Pose Estimation},
author={Lin, Yunzhi and Müller, Thomas and Tremblay, Jonathan and Wen, Bowen and Tyree, Stephen and Evans, Alex and Vela, Patricio A. and Birchfield, Stan},
booktitle={IEEE International Conference on Robotics and Automation (ICRA)},
year={2023}
}

Licence

Parallel Inversion NeRF is licensed under the NVIDIA Source Code License - Non-commercial.

About

Parallel Inversion of Neural Radiance Fields for Robust Pose Estimation (ICRA 2023)

Topics

Resources

Stars

35 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Parallel Inversion NeRF

Overview

This repository is the official implementation of the paper Parallel Inversion of Neural Radiance Fields for Robust Pose Estimation by Lin et al., ICRA 2023 (full citation below). For videos, please visit the Parallel Inversion NeRF project site.

In this work, we present a parallelized optimization method based on fast Neural Radiance Fields (NeRF) for estimating 6-DoF pose of a camera with respect to an object or scene. Given a single observed RGB image of the target, we can predict the translation and rotation of the camera by minimizing the residual between pixels rendered from a fast NeRF model and pixels in the observed image. We integrate a momentum-based camera extrinsic optimization procedure into Instant Neural Graphics Primitives, a recent exceptionally fast NeRF implementation. By introducing parallel Monte Carlo sampling into the pose estimation task, our method overcomes local minima and improves efficiency in a more extensive search space. We also show the importance of adopting a more robust pixel-based loss function to reduce error. Experiments demonstrate that our method can achieve improved generalization and robustness on both synthetic and real-world benchmarks. The algorithm takes an average of 25 seconds on an NVIDIA GTX 3090 GPU.

Installation

The code was tested on Ubuntu 20.04, with Anaconda Python 3.9. Other versions should be possible with some accuracy difference. NVIDIA GPUs are needed for both training and testing.

  1. Preparation for Instant NGP
$ sudo apt-get install build-essential git python3-dev python3-pip libopenexr-dev libxi-dev \
libglfw3-dev libglew-dev libomp-dev libxinerama-dev libxcursor-dev
  1. Clone this repo:
$ REPO_ROOT=/path/to/clone/ParallelInversion
$ git clone --recursive https://github.com/NVlabs/ParallelInversion.git $REPO_ROOT
  1. Create an Anaconda environment or create your own virtual environment
$ conda create -n pinerf python=3.9
$ conda activate pinerf
$ pip install -r requirements.txt
  1. Build the project using CMake
$ cmake . -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo $ cmake --build build --config RelWithDebInfo -j 

Dataset

To play with scenes presented in the paper, download the data here. Place the downloaded dataset according to the following directory structure:

 ├── data/nerf │ ├── nerf_llff_data │ │ └── fern │ │ └── fortress | | └── ...
| ├── nerf_synthetic
| | └── chair
| | └── drums | | └── ...

Following NeRF-Pytorch and Instant-NGP, we further preprocess LLFF dataset by converting it to the NeRF format. We provide the script colmap2nerf.py to convert the specific dataset format to the NeRF format (saving a json file).

$ cd REPO_ROOT/scripts
$ export PYTHONPATH='../'
$ python preprocess_llff.py

For a sanity check, you can visualize the converted dataset by running the following command:

$ cd REPO_ROOT/scripts
$ export PYTHONPATH='../'
$ python run_debug.py --config config/debug/default.yaml

Evaluation

We evaluate our method on NeRF Synthetic and LLFF datasets.

$ cd REPO_ROOT/scripts
$ export PYTHONPATH='../'## Main# Evaluation on NeRF Synthetic dataset
$ python exp_nerf_synthetic.py --config config/exp/exp_nerf_synthetic.yaml
$ python exp_nerf_synthetic.py --config config/exp/exp_nerf_synthetic_multiGuess.yaml
# Evaluation on LLFF dataset
$ python exp_nerf_llff.py --config config/exp/exp_nerf_llff.yaml
$ python exp_nerf_llff.py --config config/exp/exp_nerf_llff_multiGuess.yaml
## Ablation study# Evaluation on NeRF Synthetic dataset with simulated noise
$ python exp_nerf_synthetic.py --config config/exp/exp_nerf_synthetic_noisy.yaml --eval_mode ablation_rgb_loss
# Evaluation on LLFF dataset
$ python exp_nerf_llff.py --config config/exp/exp_nerf_llff.yaml --eval_mode ablation_rgb_loss

We also provide the options to generate visualization results. An example is shown below:

$ cd REPO_ROOT/scripts
$ export PYTHONPATH='../'
$ python run_pose_refinement.py --config config/demo/nerf_synthetic_hotdog_multiGuess.yaml

You can get the following result:

Acknowledgements

In this repository, we have used codes or datasets from the following repositories. We thank all the authors for sharing great codes or datasets.

Citation

Please cite the following if you use this repository in your publications:

@inproceedings{lin2023icra:parallel,
title={Parallel Inversion of Neural Radiance Fields for Robust Pose Estimation},
author={Lin, Yunzhi and Müller, Thomas and Tremblay, Jonathan and Wen, Bowen and Tyree, Stephen and Evans, Alex and Vela, Patricio A. and Birchfield, Stan},
booktitle={IEEE International Conference on Robotics and Automation (ICRA)},
year={2023}
}

Licence

Parallel Inversion NeRF is licensed under the NVIDIA Source Code License - Non-commercial.

About

Parallel Inversion of Neural Radiance Fields for Robust Pose Estimation (ICRA 2023)

Topics

Resources

Stars

35 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Parallel Inversion NeRF

Overview

This repository is the official implementation of the paper Parallel Inversion of Neural Radiance Fields for Robust Pose Estimation by Lin et al., ICRA 2023 (full citation below). For videos, please visit the Parallel Inversion NeRF project site.

In this work, we present a parallelized optimization method based on fast Neural Radiance Fields (NeRF) for estimating 6-DoF pose of a camera with respect to an object or scene. Given a single observed RGB image of the target, we can predict the translation and rotation of the camera by minimizing the residual between pixels rendered from a fast NeRF model and pixels in the observed image. We integrate a momentum-based camera extrinsic optimization procedure into Instant Neural Graphics Primitives, a recent exceptionally fast NeRF implementation. By introducing parallel Monte Carlo sampling into the pose estimation task, our method overcomes local minima and improves efficiency in a more extensive search space. We also show the importance of adopting a more robust pixel-based loss function to reduce error. Experiments demonstrate that our method can achieve improved generalization and robustness on both synthetic and real-world benchmarks. The algorithm takes an average of 25 seconds on an NVIDIA GTX 3090 GPU.

Installation

The code was tested on Ubuntu 20.04, with Anaconda Python 3.9. Other versions should be possible with some accuracy difference. NVIDIA GPUs are needed for both training and testing.

  1. Preparation for Instant NGP
$ sudo apt-get install build-essential git python3-dev python3-pip libopenexr-dev libxi-dev \
libglfw3-dev libglew-dev libomp-dev libxinerama-dev libxcursor-dev
  1. Clone this repo:
$ REPO_ROOT=/path/to/clone/ParallelInversion
$ git clone --recursive https://github.com/NVlabs/ParallelInversion.git $REPO_ROOT
  1. Create an Anaconda environment or create your own virtual environment
$ conda create -n pinerf python=3.9
$ conda activate pinerf
$ pip install -r requirements.txt
  1. Build the project using CMake
$ cmake . -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo $ cmake --build build --config RelWithDebInfo -j 

Dataset

To play with scenes presented in the paper, download the data here. Place the downloaded dataset according to the following directory structure:

 ├── data/nerf │ ├── nerf_llff_data │ │ └── fern │ │ └── fortress | | └── ...
| ├── nerf_synthetic
| | └── chair
| | └── drums | | └── ...

Following NeRF-Pytorch and Instant-NGP, we further preprocess LLFF dataset by converting it to the NeRF format. We provide the script colmap2nerf.py to convert the specific dataset format to the NeRF format (saving a json file).

$ cd REPO_ROOT/scripts
$ export PYTHONPATH='../'
$ python preprocess_llff.py

For a sanity check, you can visualize the converted dataset by running the following command:

$ cd REPO_ROOT/scripts
$ export PYTHONPATH='../'
$ python run_debug.py --config config/debug/default.yaml

Evaluation

We evaluate our method on NeRF Synthetic and LLFF datasets.

$ cd REPO_ROOT/scripts
$ export PYTHONPATH='../'## Main# Evaluation on NeRF Synthetic dataset
$ python exp_nerf_synthetic.py --config config/exp/exp_nerf_synthetic.yaml
$ python exp_nerf_synthetic.py --config config/exp/exp_nerf_synthetic_multiGuess.yaml
# Evaluation on LLFF dataset
$ python exp_nerf_llff.py --config config/exp/exp_nerf_llff.yaml
$ python exp_nerf_llff.py --config config/exp/exp_nerf_llff_multiGuess.yaml
## Ablation study# Evaluation on NeRF Synthetic dataset with simulated noise
$ python exp_nerf_synthetic.py --config config/exp/exp_nerf_synthetic_noisy.yaml --eval_mode ablation_rgb_loss
# Evaluation on LLFF dataset
$ python exp_nerf_llff.py --config config/exp/exp_nerf_llff.yaml --eval_mode ablation_rgb_loss

We also provide the options to generate visualization results. An example is shown below:

$ cd REPO_ROOT/scripts
$ export PYTHONPATH='../'
$ python run_pose_refinement.py --config config/demo/nerf_synthetic_hotdog_multiGuess.yaml

You can get the following result:

Acknowledgements

In this repository, we have used codes or datasets from the following repositories. We thank all the authors for sharing great codes or datasets.

Citation

Please cite the following if you use this repository in your publications:

@inproceedings{lin2023icra:parallel,
title={Parallel Inversion of Neural Radiance Fields for Robust Pose Estimation},
author={Lin, Yunzhi and Müller, Thomas and Tremblay, Jonathan and Wen, Bowen and Tyree, Stephen and Evans, Alex and Vela, Patricio A. and Birchfield, Stan},
booktitle={IEEE International Conference on Robotics and Automation (ICRA)},
year={2023}
}

Licence

Parallel Inversion NeRF is licensed under the NVIDIA Source Code License - Non-commercial.

About

Parallel Inversion of Neural Radiance Fields for Robust Pose Estimation (ICRA 2023)

Topics

Resources

Stars

35 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages