NeRF论文阅读笔记


paperhttps://par.nsf.gov/servlets/purl/10301170
code: https://github.com/yenchenlin/nerf-pytorch
author: UC Berkeley; Google Research; UC San Diego


前置知识

  1. 3D渲染:将场景定义(包括摄像机、灯光、剥面几何和材料)转换为模拟摄像机图像的过程称为渲染。 简单来说就是模拟相机的拍照过程,生成的结果是该视角下看到的一张照片。传统的3D渲染方法是光栅化 (rasterization),光线追踪(ray tracing)。
  2. Alpha合成(Alpha Compositing):在计算机图形学领域,Alpha合成是一种将图像与背景结合的过程,结合后可以产生部分透明或全透明的视觉效果。Alpha合成也叫阿尔法合成或透明合成。
    • Alpha通道[5]是计算机图形学中的术语,指的是特别的通道,意思是“非彩色”通道,主要是用来保存选区和编辑选区。Alpha 没有透明度的意思,不代表透明度。opacity 和 transparency 才和透明度有关,前者是不透明度,后者是透明度。真正让图片变透明的不是Alpha 实际是Alpha所代表的数值和其他数值做了一次运算 。
    • 阿尔法通道(α Channel或Alpha Channel)是指一张图片的透明和半透明度。例如:一个使用每个像素16比特存储的位图,对于图形中的每一个像素而言,可能以5个比特表示红色,5个比特表示绿色,5个比特表示蓝色,最后一个比特是阿尔法。
  3. 极限、导数和微分的关系[1]:
    • 我们现在所学的体系,是按照先极限、再通过极限定义导数、再通过导数定义微分这个顺序来的。
    • 极限的发明是为了解释无穷小的理论体系
    • 导数是指函数在某一点处变化的快慢,是一种变化率[2],可以理解为切线的概率。如果 Δy/Δx 在Δx→0 时极限存在,则称函数 f(x)在 x0 处可导(仅在 x0 这一点处,并不保证在所有点处),并称这个极限为函数 y=f(x)在点x0 处的导数记为 f′(x0),即:
    • 在这里插入图片描述
    • 微分是指函数在某一点处(趋近于无穷小)的变化量,是一种变化的量
    • 古典微分学:(1) dy和dx表示的是自变量和因变量的具体的变化; (2) 根据想象中的无穷小这个东西,定义了切线; (3) 然后将切线的斜率定义为导数
    • 极限微分学与古典微分学的区别:
      • 相同之处:都是表示微小变化的量
      • 不同之处:(1) 古典微分是直接将变化的具体值定义成了微分,也就是dy=Δy,而极限微分学中是dy≈Δy。也就是在极限微分学中,微分是变化的逼近,而不是变化本身。(2) 微分是实实在在的一个量,是一个无穷小量(当变化趋近于0时)
    • 求微分是求微分,求导是求导。积分就是求微分的和:定积分相当于求面积,不定积分相当于求原函数。
  4. 概率密度函数(PDF)、累积分布函数(CDF)、蒙特卡洛积分、离散空间采样、连续空间采样(基于逆变换采样)、连续空间采样(基于拒绝采样)、重要性采样及多重重要性采样。[3]
  5. 概率密度函数(PDF):是一个描述随机变量在某个确定的取值点附近的可能性的函数。横坐标表示自变量的取值,纵坐标纵坐标表示的并不是概率,而是概率密度,概率的表示形式为曲线下所围区域的面积。
  6. 累积分布函数(CDF):概率密度函数为 f X ( x ) f_X(x) fX(x)的一维随机变量所对应的累积分布函数为 F X ( x ) = ∫ − ∞ x f X ( t ) d t F_X(x)=\int_{-\infty }^{x} f_X(t)dt FX(x)=xfX(t)dt,累积分布函数的值域为 [0, 1]。
  7. 蒙特卡洛积分: 简而言之就是,在求积分时,如果找不到被积函数的原函数,那么利用经典积分方法是得不到积分结果的,但是蒙特卡洛积分方法告诉我们,利用一个随机变量对被积函数进行采样,并将采样值进行一定的处理,那么当采样数量很高时,得到的结果可以很好的近似原积分的结果。这样一来,我们就不用去求原函数的形式,就能求得积分的近似结果。可以使用任意一个PDF来进行采样以计算蒙特卡洛积分。参考[4]。
    • 对一个函数 f ( x ) f(x) f(x)求积分,当其原函数 F ( x ) F(x) F(x)不好求时,使用蒙特卡洛法对积分进行计算的过程描述如下:首先从区间[a,b]上对均匀分布的随机变量X连续取样N次,得到N个取样值 x 1 , x 2 , x 3 , . . . , x N {x_1,x_2,x_3,...,x_N} x1,x2,x3,...,xN,对每个取样值 x i ( i = 1 , 2 , 3 , . . . , N ) x_i(i=1,2,3,...,N) xi(i=1,2,3,...,N)计算 f ( x i ) f(x_i) f(xi)得到 f ( x 1 ) , f ( x 2 ) , f ( x 3 ) , . . . , f ( x N ) {f(x_1),f(x_2),f(x_3),...,f(x_N)} f(x1),f(x2),f(x3),...,f(xN),再计算它们的和 ∑ i = 1 N f ( x i ) \sum_{i=1}^{N} f(x_i) i=1Nf(xi), 最后乘系数$\frac{b-a}{N} $即可得到对理论积分值的一个无偏估计。公式如下:
      在这里插入图片描述
    • 上述过程中 X X X被规定为与原积分区间相同的均匀分布随机变量。那么对于与原积分区间相同,但却不是均匀分布的一般随机变量,蒙特卡洛法也成立。定义如下,之前的要求不同,这里仅要求随机变量 X X X的概率密度分布函数 p ( x ) p(x) p(x)已知且在 X X X的样本空间内 p ( x ) ≠ 0 p(x)≠0 p(x)=0
      在这里插入图片描述
  8. 离散空间采样:要对离散空间进行采样[3],一个简单的方法是:首先将表示概率的直方图堆叠起来(即:上图右边所示),然后生成一系列均匀分布的采样点,该采样点对应的值在哪个区间内,就返回对应的 x x x值。
  9. 连续空间采样(基于逆变换采样): 基于逆变换采样的方式适用于累积分布函数CDF可求解其逆函数的情况,具体过程参考[3]。
  10. 连续空间采样(基于拒绝采样): 若无法求解CDF的逆函数,则可使用拒绝采样
  11. 重要性采样 :上面所说,使用任意一个PDF来进行采样以计算蒙特卡洛积分,那么究竟哪种PDF是最好的呢?这就是重要性采样所回答的问题。参考[4],蒙特卡洛方法的估计值的不稳定来源于随机变量的取值不稳定,也就是说,如果 Y = f ( X i ) p ( X i ) Y=\frac{f(X_i)}{p(X_i)} Y=p(Xi)f(Xi) 因不同 X i X_i Xi的取值变化地越剧烈,就会造成 Y Y Y的方差较大,则会造成估计值的收敛速度越慢。这启示我们,若 p ( x ) p(x) p(x)的形状越接近 f ( x ) f(x) f(x),则有益于最终结果的收敛。这种思想就是重要性采样,即对积分值有重要贡献( f ( x ) f(x) f(x)较大)的被积函数区间,我们以较大概率生成处于这个区间附近的随机变量,用于快速逼近理论值。

NeRF原文阅读笔记

Nerf的网络和思路并不复杂,但其动机包含了很多光学和计算机图形学的知识,使对其进行改进形成了一定的门槛。本文主要是参考[6]对原文进行理解并记录。

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


总结

NeRF的成像是在相机视角位置成像的,也就是成像面是在光线发射位置。成像面(相机处)有h*w个像素,每个像素都有着对应的位置φ,伴随着相机内参,每个像素点也有着对应的观测方向θ。从这个像素点出发一条射线,中间可以采样n个点,每一个点都有一个空间坐标(x,y,z)。这样,所求图像的每一个像素都对应了一条射线,每条射线下有着n个输入(x, y, z, θ,φ),然后每一个点经过NeRF都会产生一个不透明度σ,和一个RGB值,将这条射线上点的不透明度从头开始累积到一定阈值,这一过程中的RGB的累积值就是所求图像上这一像素最后的颜色值。为每一个像素都执行以上过程,最终就合成了新视角下的图像。

参考文献

[1] https://www.zhihu.com/question/264955988
[2] https://www.zhihu.com/question/28684811
[3] https://zhuanlan.zhihu.com/p/396618080
[4] https://www.cnblogs.com/time-flow1024/p/10094293.html
[5] https://zhuanlan.zhihu.com/p/24415265
[6] https://zhuanlan.zhihu.com/p/360365941

猜你喜欢

转载自blog.csdn.net/DUDUDUTU/article/details/128551476
今日推荐