# nerf
**Repository Path**: ROBOT1001/nerf
## Basic Information
- **Project Name**: nerf
- **Description**: Code release for NeRF (Neural Radiance Fields)
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 2
- **Created**: 2024-03-03
- **Last Updated**: 2024-03-03
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# NeRF: 神经辐射场
### [项目页面](http://tancik.com/nerf) | [视频](https://youtu.be/JuH79E8rdKc) | [文章](https://arxiv.org/abs/2003.08934) | [数据](https://drive.google.com/drive/folders/128yBriW1IG_3NJ5Rp7APSTZsJqdJdfc1)
[](https://colab.research.google.com/github/bmild/nerf/blob/master/tiny_nerf.ipynb)
Tensorflow实现,用于优化单个场景的神经表示和渲染新视野。
[NeRF: 把场景表示作为视图合成的神经辐射场](http://tancik.com/nerf)
[Ben Mildenhall](https://people.eecs.berkeley.edu/~bmild/)\*1,
[Pratul P. Srinivasan](https://people.eecs.berkeley.edu/~pratul/)\*1,
[Matthew Tancik](http://tancik.com/)\*1,
[Jonathan T. Barron](http://jonbarron.info/)2,
[Ravi Ramamoorthi](http://cseweb.ucsd.edu/~ravir/)3,
[Ren Ng](https://www2.eecs.berkeley.edu/Faculty/Homepages/yirenng.html)1
1UC Berkeley, 2Google Research, 3UC San Diego
\*奉献相同贡献
在 ECCV 2020 (Oral Presentation, Best Paper Honorable Mention)
## TL;DR 快速入门
设置conda环境,下载示例训练数据,开始训练过程,和启动Tensorboard:
```
conda env create -f environment.yml
conda activate nerf
bash download_example_data.sh
python run_nerf.py --config config_fern.txt
tensorboard --logdir=logs/summaries --port=6006
```
如果所有步骤没有错误,你可以在浏览器`localhost:6006`,观看“Fern”场景训练。
## 运行环境
Python 3 依赖:
* Tensorflow 1.15
* matplotlib
* numpy
* imageio
* configargparse
LLFF 数据加载器需要 ImageMagick。
我们提供一个包括上面所有的依赖的conda环境设置文件。创建一个conda环境‘nerf’,通过运行:
```
conda env create -f environment.yml
```
如果你想在自己的真实数据上运行,你将会需要设置[LLFF代码](http://github.com/fyusion/llff)(和 COLMAP)来计算构成。
## 什么是 NeRF?
神经辐射场是一个简单的全连接网络(权重为 ~5MB),经过训练,可以使用渲染损失再现单个场景的输入视图。该网络从空间位置和观看方向(5D 输入)直接映射到颜色和不透明度(4D 输出),充当“体积”,因此我们可以使用体积渲染来可微分地呈现新视图。
优化 NeRF 需要几个小时到一两天(取决于分辨率),并且只需要一个 GPU。从优化的 NeRF 渲染图像需要不到 30 秒的时间(取决于分辨率)。
## 运行代码
在这里,我们将展示如何在两个示例场景上运行我们的代码。您可以在[这儿](https://drive.google.com/drive/folders/128yBriW1IG_3NJ5Rp7APSTZsJqdJdfc1)下载论文中使用的其他合成和真实数据.
### 充分利用 NeRF
运行
```
bash download_example_data.sh
```
将会得到我们合成的Lego数据集和LLFF Fern数据集。
要优化低分辨率 Fern NeRF:
```
python run_nerf.py --config config_fern.txt
```
200k 次迭代后(约 15 小时), 你应该在`logs/fern_test/fern_test_spiral_200000_rgb.mp4`得到一个下面这样的视频:

要优化一个低分辨率的Lego NeRF:
```
python run_nerf.py --config config_lego.txt
```
200k 次迭代后,你会得到一个下面一样的视频:

### 渲染NeRF
运行
```
bash download_example_weights.sh
```
获取 Fern 数据集的预训练高分辨率 NeRF。你可以使用[`render_demo.ipynb`](https://github.com/bmild/nerf/blob/master/render_demo.ipynb) 去渲染新的视图
### 复制论文结果
比起论文和视频的定量/定性结果,样例配置文件的结果更低。要复制论文的结果,请从 ['paper_configs/'](https://github.com/bmild/nerf/tree/master/paper_configs)中的配置文件开始。我们合成的Blender数据和LLFF场景被放在[这儿](https://drive.google.com/drive/folders/128yBriW1IG_3NJ5Rp7APSTZsJqdJdfc1),DeepVoxels数据被放在[Vincent Sitzmann](https://drive.google.com/open?id=1lUvJWB6oFtT8EQ_NzBrXnmi25BufxRfl).
### 提取NeRF的几何图像
查看 ['extract_mesh.ipynb'](https://github.com/bmild/nerf/blob/master/extract_mesh.ipynb),了解从经过训练的 NeRF 网络中提取三角形网格的运行行进立方体示例。如果要在笔记本中渲染网格,您需要安装用于移动立方体的[PyMCubes](https://github.com/pmneila/PyMCubes)包以及[trimesh](https://github.com/mikedh/trimesh)和 [pyrender](https://github.com/mmatl/pyrender)包:
```
pip install trimesh pyrender PyMCubes
```
## 生成自己场景的pose
### 没有poses?
我们推荐使用[LLFF code](https://github.com/fyusion/llff)的`imgs2poses.py`脚本。然后,你可以通过`--datadir `和`-dataset_type llff`将基础场景目录传递到我们的代码。你可以查看配置文件`config_fern.txt`来设置使用前向场景。对于球形捕获的 360 度场景,我们重新注释添加`--no_ndc --spherify --lindisp`标志。
### 已经有poses!
在 `run_nerf.py` 和所有其他代码中,我们使用与 OpenGL 相同的pose坐标系:从图像中可以看出,图像的局部相机坐标系的定义方式是 X 轴指向右侧,Y 轴指向上方,Z 轴指向后方。
Poses存储为 3x4 numpy 数组,表示相机到世界的转换矩阵。您需要的其他数据是简单的针孔相机内部函数('hwf = [高度、宽度、焦距]')和近/远场景边界。看看[我们的数据加载代码](https://github.com/bmild/nerf/blob/master/run_nerf.py#L406)以了解更多信息。
## 引文
```
@inproceedings{mildenhall2020nerf,
论文标题={NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis},
作者={Ben Mildenhall and Pratul P. Srinivasan and Matthew Tancik and Jonathan T. Barron and Ravi Ramamoorthi and Ren Ng},
发布时间={2020},
会议名称={ECCV},
}
```