前言:Why NeRFStudio?
NeRF社区是近两年来计算机领域最活跃的学术社区之一,各种具有milestone意义的算法层出不穷,各位作者的开源工作也做得非常扎实,非常多的工作都自带了code、data、project page。 但是后继者想要在这些伟大的工作基础上做研究却是一件令人棘手的事情,其主要原因便是各大实验室的代码风格不一,封装习惯也不一样,导致新手想接触一项新的工作时不仅要学习理论知识,还要迅速接受新的编程风格,并且还要对各个模块重新封装才能将其应用到自己的工作中。
NeRFStudio应运而生,将NeRF的研究、迭代、工业化集为一体,实现了NeRF的抽象化和模块化,并向开发者提供了详尽的说明文档与Demo。我相信NeRFStudio将会成为下一个mmcv。
注:官方文档已经足够详尽,在此我仅打算做一个阅读笔记,梳理阅读思路,用来给以后向我这样的糊涂鬼使用。
Cotents
首先我们进入官网,映入眼帘的documents目录:
- Getting Started: 主要包括如何安装
- Nerfology:NeRF相关的知识储备
- Developer Guides: 如何搭建一套NeRF PipeLine
- Reference:Command line interface and API, 主打一个命令行和一些API的参考,平时又看不懂的可以来这里翻一翻。
在后面的文章中,我会主要介绍Nerfology以及developer guides这两部分,reference稍有涉及。
PipeLines Overview
上图展示了NeRFStudio总体的Pipelines.主要分为两部分:DataManager和Model.
-
DataManager:主要负责加载data并且生成RayBundle和Ray GT实例。RayBundle即为 { ( o , d ) ∈ Batches } \{(\bm{o,d}) \in \text{Batches}\} {(o,d)∈Batches}, RayGT就是采样点对应的像素 { C ( r ) ∈ Batches } \{\bm{C}(\bm{r}) \in \text{ Batches}\} {C(r)∈ Batches} 。
-
Models:主要负责沿着RayBundle进行采样,返回每条ray对应的渲染结果:RayOutputs,而RayOutputs会联合Ray GT用于计算Loss Dict进而优化NeRF模型。
-
Fields:这个好理解,举个例子Color Field, Density Field, Transient Color Field etc, 输入的是samples,输出的是积分结果。
在此基础上,NeRFStudio构建了自己的Nerfacto Method, 该模型主要在MipNeRF-360的框架上加入了NeRF–, Instant-NGP, NeRF-W, Ref-NeRF等Feature,并增加了实时训练可视化的功能,效果经验,仅需要10到20分钟就能得到效果经验的场景渲染。
NeRFacto features的相关论文我会在后面的文章中介绍。