NeRF必读:Instant-NGP----RTX3090单卡就能玩转NeRF

前言

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完成的任务:

  1. 高分辨率图像下的三维渲染(类推large-scale下应该也可以搞)。
  2. SDF重建任务,喂喂三维重建也能搞了,妙~
  3. Neural Radiance Caching(那将该方法扩展到Phong 光照模型下也不是不可以)。
  4. NeRF的高效渲染。
    总的来说Instant-NGP有以下这两个特点:普适性:Adaptivity,高效性:Efficiency

方法

NeRF必读:Instant-NGP----RTX3090单卡就能玩转NeRF_第1张图片
说起来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论文解释
下面来解释一下文章的几个关键的公式:

  1. 确定每层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:=Nminblb:=exp(L1lnNmaxlnNmin).

  2. 接下来就是如何把一个三维空间的 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=1dxiπi mod T,

  3. 如何双线性插值,也请移步:instant-ngp论文解释
    此时position embedding已经搞定了,不过我们还可以加入direction embedding, image feature embedding等等,就把它命名为 ξ \xi ξ。 现在Instant-NGP版本的position embedding就搞定了。

你可能感兴趣的:(深度学习,神经网络,3d)