前言
NeRF从2020年发展至今,仅仅三年时间,而Follow的工作已呈井喷之势,相信在不久的将来,NeRF会一举重塑三维重建这个业界,甚至重建我们的四维世界(开头先吹一波)。NeRF的发展时间虽短,有几篇工作却在我研究的领域开始呈现万精油趋势:
- PixelNeRF----泛化法宝
- MipNeRF----近远景重建
- NeRF in the wild----光线变换下的背景重建
- NeuS----用NeRF重建Surface
- Instant-NGP----多尺度Hash编码实现高效渲染
今天的主角是来自NVlabs的Instant-NGP
概述
如何对空间中的采样点
x
\mathbf{x}
x进行位置编码(position encoding)从而使得NeRF能够对3D空间进行多尺度的精确表达是NeRF社区一直关注的问题。总体来说面临的一个进退两难问题是:要嘛大模型进行多轮采样得到高精度的渲染结果,要嘛模型小训得快得到一个粗糙的结果。
所以问题来了,有没有一种~既要,又要,还要的方法可以实现训得快、单卡也玩得起、精度还高呢?
啥?小镇做题家也能要自行车?NVlabs为我们送来一台,关键是Instant-NGP这台自行车还啥路都能骑,有图为证:
上图列出了四项Instant-NGP完成的任务:
- 高分辨率图像下的三维渲染(类推large-scale下应该也可以搞)。
- SDF重建任务,喂喂三维重建也能搞了,妙~
- Neural Radiance Caching(那将该方法扩展到Phong 光照模型下也不是不可以)。
- NeRF的高效渲染。
总的来说Instant-NGP有以下这两个特点:普适性:Adaptivity,高效性:Efficiency。
方法
说起来Instant-NGP的novelty挺简单直接,主要是改变了采样点
x
\mathbf{x}
x的编码方式,一句话概括就是:将
x
\mathbf{x}
x分解为L层hash编码,每层hash编码分别表示了不同的分辨率。在每层hash编码中,
x
\mathbf{x}
x取周围编码点特征值的加权平均作为自身的特征值, 叠加L层hash编码的特征值送入模型中inferene出该点的渲染结果
(
σ
,
c
)
(\sigma,\mathbf{c})
(σ,c),随后就是NeRF的一系列操作了。具体的例子可以看某乎的这篇文章:instant-ngp论文解释
下面来解释一下文章的几个关键的公式:
-
确定每层hash特征的分辨率大小(举个例子:2等分到64等分),表达成公式就是: [ N m i n , N m a x ] [N_{min},N_{max}] [Nmin,Nmax],而每层具体是几等分通过下面公式确定:
N l : = ⌊ N m i n ⋅ b l ⌋ b : = exp ( l n N m a x − l n N m i n L − 1 ) . N_l:=\lfloor N_{min}\cdot b^l\rfloor \\ b:=\exp(\frac{ln N_{max}-ln N_{min}}{L-1}). Nl:=⌊Nmin⋅bl⌋b:=exp(L−1lnNmax−lnNmin). -
接下来就是如何把一个三维空间的 x \mathbf{x} x编码到1维的hash空间中:
h ( x ) = ⨁ i = 1 d x i π i m o d T , h(x)=\bigoplus^d_{i=1}x_i\pi_i \space mod \space T, h(x)=i=1⨁dxiπi mod T,文章来源:https://www.toymoban.com/news/detail-487712.html -
如何双线性插值,也请移步:instant-ngp论文解释
此时position embedding已经搞定了,不过我们还可以加入direction embedding, image feature embedding等等,就把它命名为 ξ \xi ξ。 现在Instant-NGP版本的position embedding就搞定了。文章来源地址https://www.toymoban.com/news/detail-487712.html
到了这里,关于NeRF必读:Instant-NGP----RTX3090单卡就能玩转NeRF的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!