# xrnerf **Repository Path**: OpenXRLab/xrnerf ## Basic Information - **Project Name**: xrnerf - **Description**: OpenXRLab Neural Radiance Field (NeRF) Toolbox and Benchmark - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2022-12-18 - **Last Updated**: 2025-06-24 ## Categories & Tags **Categories**: vrar **Tags**: None ## README # XRNeRF
[![actions](https://github.com/openxrlab/xrnerf/workflows/build/badge.svg)](https://github.com/openxrlab/xrnerf/actions) [![LICENSE](https://img.shields.io/github/license/openxrlab/xrnerf.svg)](https://github.com/openxrlab/xrnerf/blob/main/LICENSE)
## 简介 简体中文 | [English](README.md) 本文档提供 XRNeRF 相关用法的基本教程。对于安装说明,请参阅 [安装指南](docs/zh_cn/installation.md)。 - [XRNeRF](#xrnerf) - [简介](#简介) - [基准](#基准) - [数据集](#数据集) - [安装](#安装) - [创建模型](#创建模型) - [基本概念](#基本概念) - [自定义一个新模型](#自定义一个新模型) - [训练](#训练) - [迭代次数控制](#迭代次数控制) - [训练命令](#训练命令) - [测试](#测试) - [详细教程](#详细教程) - [引用](#引用) - [参与贡献](#参与贡献) - [致谢](#致谢) - [OpenXRLab中的其他项目](#openxrlab中的其他项目) ## 基准 更多细节可查看 [benchmark.md](docs/en/benchmark.md). 支持的场景类神经渲染方法如下:
(click to collapse) - [X] [NeRF](https://www.matthewtancik.com/nerf) (ECCV'2020) - [X] [Mip-NeRF](https://jonbarron.info/mipnerf/) (ICCV'2021) - [X] [KiloNeRF](https://arxiv.org/abs/2103.13744) (ICCV'2021) - [X] [Instant NGP](https://nvlabs.github.io/instant-ngp/) (SIGGRAPH'2022) - [X] [BungeeNeRF](https://city-super.github.io/citynerf/) (ECCV'2022) 支持的人体类神经渲染方法如下:
(click to collapse) - [X] [NeuralBody](https://zju3dv.github.io/neuralbody) (CVPR'2021) - [X] [AniNeRF](https://zju3dv.github.io/animatable_nerf/) (ICCV'2021) - [X] [GNR](https://generalizable-neural-performer.github.io/) 如果期望在XRNeRF中看到新的NeRF方法,可以张贴在[愿望清单](https://github.com/openxrlab/xrnerf/discussions/11),我们会根据社区投票意见来安排下一步的计划。 ## 数据集 我们推荐把数据集放在`项目目录/data`下面,否则可能需要修改config中的内容 ``` xrnerf ├── xrnerf ├── docs ├── configs ├── test ├── extensions ├── data │ ├── nerf_llff_data │ ├── nerf_synthetic │ ├── multiscale │ ├── multiscale_google │ ├── ... ``` 请参阅 [数据集准备](docs/zh_cn/dataset_preparation.md) 获取数据集准备的相关信息。 ## 安装 安装方法详见[教程](docs/zh_cn/installation.md), 我们还提供了[docker镜像文件](docker/DockerfileCN)作为另一种环境安装方式。 ## 创建模型 ### 基本概念 在XRNeRF中,模型被分为4个部分 - embedder: 输入点的位置和视角,输出embedded特征数据,embedder可能是纯函数型的,或者带有可学习参数的 - mlp: 使用embedder的输出作为输入,输出原始的点数据(采样点的rgb值和密度值)送给render, 一般由多层感知机组成 - render: 获取mlp的输出数据,沿着射线上的点进行积分等操作,输出图像上一个像素点的rgb值 - network: 将以上三个部分组织起来,同时也是与mmcv的runner进行交互的部分,控制了训练时的loss计算和验证时的指标计算 对于上述所有模型而言,输入都是一个字典类型的`data`。模型使用字典`data`中的内容来创建新的键值对,并加入`data`。以[origin nerf](configs/nerf/nerf_blender_base01.py)为例,最开始的`data`应该包含`pts`(尺寸为 n_rays, n_pts, 3) and `viewdirs`(尺寸为 n_rays, n_pts, 3). ### 自定义一个新模型 如果要自定义一个network,需要继承`BaseNerfNetwork`,其中定义了两个抽象方法 - `train_step()`: training 模式下的推理和计算loss的函数. - `val_step()`: testing 模式下的推理函数. [NerfNetwork](xrnerf/models/networks/nerf.py) 是一个很好的例子 具体而言,如果想要实现一个具有新feature的nerf方法,有以下几步需要做 1. 创建一个新文件如 `xrnerf/models/networks/my_networks.py`. ```python from ..builder import NETWORKS from .nerf import NerfNetwork @NETWORKS.register_module() class MyNerfNetwork(NerfNetwork): def __init__(self, cfg, mlp=None, mlp_fine=None, render=None): super().__init__(cfg, mlp, mlp_fine, render) def forward(self, data): .... def train_step(self, data, optimizer, **kwargs): .... def val_step(self, data, optimizer=None, **kwargs): .... ``` 2. 修改 `xrnerf/models/networks/__init__.py` 文件 ```python from .my_networks import MyNerfNetwork ``` 3. 修改配置文件[config file](configs/nerf/nerf_blender_base01.py) 原来 ```python model = dict( type='NerfNetwork', .... ``` 现在 ```python model = dict( type='MyNerfNetwork', .... ``` 同样的,要实现embedder/mlp/render的新功能,步骤与上述类似 * 要定义一个新的embedder, 需要继承`nn.Module` 或者 `BaseEmbedder`, 并定义 `forward` 方法. [BaseEmbedder](xrnerf/models/embedders/base.py) 是个很好的例子 * 要定义一个新的mlp, 需要继承 `nn.Module` 或者 `BaseMLP`, 并定义 `forward` 方法. [NerfMLP](xrnerf/models/mlps/nerf_mlp.py) 可供参考 * 要定义一个新的render, 需要继承 `nn.Module` 或者 `BaseRender`, 并定义 `forward` 方法. [NerfRender](xrnerf/models/renders/nerf_render.py) 可供参考 ## 训练 ### 迭代次数控制 XRnerf 使用 `mmcv.runner.IterBasedRunner` 来控制训练, 并用 `mmcv.runner.EpochBasedRunner` 来测试. 训练时, 配置文件的 `max_iters` 表示最多训练多少次. 测试时, `max_iters` 被强制改为1, 表示进行一次完整的epoch. ### 训练命令 ```shell python run_nerf.py --config configs/nerf/nerf_blender_base01.py --dataname lego ``` 参数为: - `--config`: 配置文件位置 - `--dataname`: 使用数据集下的哪个数据来训练 ### 测试 ```shell python run_nerf.py --config configs/nerf/nerf_blender_base01.py --dataname lego --test_only --load_from iter_200000.pth ``` 参数为: - `--config`: 配置文件位置 - `--dataname`: 使用数据集下的哪个数据 - `--test_only`: 切换为测试模式 - `--load_from`: 重载覆盖掉原来配置文件里的 `load_from`, 在某些情况下为了方便而使用 ## 详细教程 目前, XRNeRF 提供以下几种更详细的教程 * [如何编写配置文件](docs/zh_cn/tutorials/config.md) * [数据处理流程](docs/zh_cn/tutorials/data_pipeline.md) * [模型定义](docs/zh_cn/tutorials/model.md) 除此以外,文档还包括以下内容 * [api介绍](docs/zh_cn/api.md) * [数据集准备](docs/zh_cn/dataset_preparation.md) * [安装](docs/zh_cn/installation.md) * [benchmark](docs/en/benchmark.md) * [常见问题](docs/en/faq.md) ## 引用 ```bibtex @misc{xrnerf, title={OpenXRLab Neural Radiance Field Toolbox and Benchmark}, author={XRNeRF Contributors}, howpublished = {\url{https://github.com/openxrlab/xrnerf}}, year={2022} } ``` ## 参与贡献 我们非常欢迎用户对于 XRNeRF 做出的任何贡献,可以参考 [贡献指南](docs/en/CONTRIBUTING.md) 文件了解更多细节 ## 致谢 XRNeRF 是一款由不同学校和公司共同贡献的开源项目。我们感谢所有为项目提供算法复现和新功能支持的贡献者,以及提供宝贵反馈的用户。 我们希望该工具箱和基准测试可以为社区提供灵活的代码工具,供用户复现现有算法并开发自己的新模型,从而不断为开源社区提供贡献。 ## OpenXRLab中的其他项目 - [XRPrimer](https://github.com/openxrlab/xrprimer): OpenXRLab foundational library for XR-related algorithms. - [XRSLAM](https://github.com/openxrlab/xrslam): OpenXRLab Visual-inertial SLAM Toolbox and Benchmark. - [XRSfM](https://github.com/openxrlab/xrsfm): OpenXRLab Structure-from-Motion Toolbox and Benchmark. - [XRLocalization](https://github.com/openxrlab/xrlocalization): OpenXRLab Visual Localization Toolbox and Server. - [XRMoCap](https://github.com/openxrlab/xrmocap): OpenXRLab Multi-view Motion Capture Toolbox and Benchmark. - [XRMoGen](https://github.com/openxrlab/xrmogen): OpenXRLab Human Motion Generation Toolbox and Benchmark. - [XRNeRF](https://github.com/openxrlab/xrnerf): OpenXRLab Neural Radiance Field (NeRF) Toolbox and Benchmark.