【3D】NeRF论文随笔

【3D】NeRF论文随笔

【注】:本文地址:【3D】NeRF论文随笔
若转载请于明显处标明出处。本人理解有限,如有错误敬请指出!

Institutions: Google, UC Berkeley, UC San Diego
Pdf link: https://arxiv.org/pdf/2003.08934.pdf
Comments: ECCV2020_oral
Project page with videos and code: http://tancik.com/nerf

前言

NeRF实在太火了,今天把这个坑稍微填上一点点。读完论文,感觉作者一步步做的写的真奇妙,不愧是oral。

那么什么是NeRF呢?NeRF中文可译作“神经辐射场”,类似于DeepSDF,它也通过MLP隐式地表征出一个三维场景。不同的是,NeRF用 RGB-σ 代替了SDF,实现了更加强大的渲染效果。

此外,每个场景对应的NeRF训练完成后,便可以得到用MLP模型权重参数代表的场景隐式表征。需要注意的是:一个模型只含有该场景的信息,不具有生成别的场景的图片的能力。

相关资料

本文目的在于记录本人阅读NeRF论文时候的一些疑问及思考,因此并不会对论文作翻译工作或是详细的讲解,如有这方面需要的可以移步下面几篇讲解,讲的都很不错:

知乎 NeRF:用深度学习完成3D渲染任务的蹿红
知乎 【NeRF论文笔记】用于视图合成的神经辐射场技术
博客园 【论文精炼】 | NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
CSDN [NeRF]代码+逻辑详细分析

此外,有关NeRF的相关论文工作已有大佬整理在GitHub上:

GitHub awesome-NeRF

我的随笔及思考

【3D】NeRF论文随笔_第1张图片

NeRF比DeepSDF进步的地方就在于,NeRF用RGBσ代替了SDF,所以除了能推理一个点是否在物体表面,还能推理RGB颜色和透明度,且颜色是view-dependent的(观察视角不同,同一物点的颜色不同),从而实现功能更强大的渲染。

文中首先将观测的三维坐标及相机二维观测视角 ( θ , ϕ ) (\theta, \phi) (θ,ϕ) 通过MLP,映射 R G B − σ RGB-\sigma RGBσ 。这种映射关系实际上就是所谓的辐射场(Radiance Fields)。这个MLP的结构非常简单,类似DeepSDF也加了一个skip connection,如下图所示。

【3D】NeRF论文随笔_第2张图片

读到这里的时候,我作为外行就有一些问题:

首先,为何相机二维观测视角用 ( θ , ϕ ) (\theta, \phi) (θ,ϕ) 表示?这里我想到学习微波技术与天线这门课中的这个图:

【3D】NeRF论文随笔_第3张图片

是不是一看就明白了?

此外,这个 R G B − σ RGB-\sigma RGBσ 是何物?RGB就是color,而 σ \sigma σ 英文名叫体积密度(Volume density),它可以简单理解为透明度。其更严谨的解释为:一条射线终止于位置x的无穷小粒子的微分概率。

类似于 R G B A RGBA RGBA R G B − α RGB- \alpha RGBα )。下面是摘抄的一段关于 R G B A RGBA RGBA R G B − α RGB- \alpha RGBα ) 中 α \alpha α 通道的介绍:

Alpha通道一般用作不透明度参数。如果一个像素的alpha通道数值为0%,那它就是完全透明的(也就是看不见的),而数值为100%则意味着一个完全不透明的像素(传统的数字图像)。在0%和100%之间的值则使得像素可以透过背景显示出来,就像透过玻璃(半透明性),这种效果是简单的二元透明性(透明或不透明)做不到的。它使数码合成变得容易。alpha通道值可以用百分比、整数或者像RGB参数那样用0到1的实数表示。

至于volume rendering,中文可译为“体绘制”。关于体绘制的具体内容可以参考这篇文章:

体绘制(Volume Rendering)概述_痞子龙3D编程-CSDN博客

其中,有几句话写得甚好,我斗胆摘抄过来:

  1. 体绘制技术是在同一射线方向上对体数据进行采样,获取多个体素的颜色值,然后根据其透明度进行颜色的合成。
  2. 体绘制技术侧重展现物质内部细节,要求真实!
  3. 光线投射算法是沿着光线路径进行采样,根据样点的色彩和透明度,用体绘制的色彩合成算子进行色彩的累计。
  4. 透明度本质上代表着光穿透物体的能力,光穿透一个物体会导致波长比例的变化,如果穿越多个物体,则这种变化是累加的。所以,透明物体的渲染,本质上是将透明物体的颜色和其后物体的颜色进行混合,这被称为 alpha 混合技术。

学弟的问题和我的回答记录

【3D】NeRF论文随笔_第4张图片

我的回答:

  1. 首先引用原论文的话:函数T(t)表示沿射线从tn到t的累积透射率,即射线从tn传播到t而没有击中任何其他粒子的概率。换句话说,我计算当前位置的color的时候(这里对应最外层积分的每一个微分),需要考虑光线到当前位置走过的路上所累积的所有透明度(累积透明度越大,表明这个不会击中其他粒子的概率越大)。
    那么,为什么要加上这样一个累积量呢?我认为他的意义在于表征出一个衰减量。这一点在《RAY TRACING VOLUME DENSITIES》的3.2节有所体现。
  2. d向量是光线由相机指向场景点方向的单位矢量。可将 ( θ , ϕ ) (\theta, \phi) (θ,ϕ)的坐标系原点看做是相机,毕竟是由相机发出光线。
  3. 这个问题是针对于原论文5.2节的。这里需要理解好文中的C® 函数。C® 函数本是一个射线上 [ t n , t f ] [t_n,t_f] [tn,tf] 范围内的积分,后面将积分离散化成求和形式,但射线范围仍然是 [ t n , t f ] [t_n,t_f] [tn,tf] ,即近边界和远边界(这个场景范围是给定的)。采样即在这个范围内分层采样。
    5.2节的精髓在于 coarse-to-fine 的模式,简要来说:用coarse网络先针对于Nc个分层采样的点学习到沿着射线的概率密度函数(PDF),这个PDF代表了射线上物体的粗略分布情况;在此基础上,再基于PDF采样更精细的点。
    更具体的解释可以看这篇知乎https://zhuanlan.zhihu.com/p/360365941?ivk_sa=1024320u ,讲得很好,主要是这两张图:
    【3D】NeRF论文随笔_第5张图片
    【3D】NeRF论文随笔_第6张图片

你可能感兴趣的