前言
NeRF是NeRF系列的开山之作,将三维场景隐式的表达为神经网络的权重用于新视角合成。
MipNeRF和Instant NGP分别代表了NeRF的两个研究方向,前者是抗锯齿,代表着渲染质量提升方向;后者是采用多分辨率哈希表用于加速NeRF的训练与推理速度。
NeRF
Title:NeRF: Representing Scenes asNeural Radiance Fields for View Synthesis
Code:nerf-pytorch
From:ECCV 2020 Oral - Best Paper Honorable Mention
神经辐射场
辐射场可以理解光线场,给定多张带有相机内外参的二维图片,从摄像机出发,引出到每一个像素的光线,通过对这条光线经历过的空间点的颜色
c
c
c和体密度体密度
σ
\sigma
σ进行累积,以得到二维图片上像素点的颜色,从而实现端到端训练。在这个过程中,没有显式的三维结构,如点云、体素或者Mesh,而是通过神经网络的权重
F
θ
F_{\theta}
Fθ将三维场景连续的存储起来,通过空间位置(三维点
[
x
,
y
,
z
]
[x,y,z]
[x,y,z])和视角方向(球坐标系下的极角和方位角
[
θ
,
ϕ
]
[\theta,\phi]
[θ,ϕ])作为查询条件,查询出给定摄像机下的光线所经过的空间点颜色
c
c
c和体密度
σ
\sigma
σ,通过**体渲染(Volume Rendering)**得到该条光线对应像素点的颜色。
体渲染
沿着视角方向的光线上的点P可以用上图来表示,尽管论文中提到视角方向是使用 θ , ϕ \theta,\phi θ,ϕ来表示的,但代码中还是使用单位向量 d d d来表示的。
连续体渲染
体渲染实际上就是将视线r上所有的点通过某种方式累计投射到图像上形成像素颜色
C
(
r
)
C(r)
C(r)的过程:
C
(
r
)
=
∫
t
n
t
f
T
(
t
)
σ
(
r
(
t
)
)
c
(
r
(
t
)
,
d
)
d
t
where
T
(
t
)
=
exp
(
−
∫
t
n
t
σ
(
r
(
s
)
)
d
s
)
(1)
{C}(\boldsymbol{r})=\int_{t_n}^{t_f} T(t) \sigma(\boldsymbol{r}(t)) \boldsymbol{c}(\boldsymbol{r}(t), \boldsymbol{d}) dt \\ \text{where } T(t)=\exp \left(-\int_{t_n}^t \sigma(\boldsymbol{r}(s)) d s\right)\tag{1}
C(r)=∫tntfT(t)σ(r(t))c(r(t),d)dtwhere T(t)=exp(−∫tntσ(r(s))ds)(1)
其中,
c
(
r
(
t
)
,
d
)
\boldsymbol{c}(\boldsymbol{r}(t), \boldsymbol{d})
c(r(t),d)为三维点
r
(
t
)
r(t)
r(t)从
d
d
d这个方向看到的颜色值;
σ
(
r
(
t
)
)
\sigma(\boldsymbol{r}(t))
σ(r(t))为体密度函数,反映的是该三维点的物理材质吸收光线的能力;
T
(
t
)
T(t)
T(t)反映的是射线上从
t
n
t_n
tn到
t
t
t的累积透射率。tn和tf首先确定了nerf的边界,而不至于学习到无穷远;其次避免了光心到近景范围内无效采样。
直观上理解σ,可以解释为每个三维点吸收光线的能力,光经过该点,一部分被吸收,一部分透射,光的强度(可以理解为
T
(
t
)
T(t)
T(t)) 在逐渐减小,当光强为0时,后面的三维点即便可以吸收颜色,也不会对像素颜色有贡献。指数函数保证了随着σ的累积,光的强度从1逐渐减为0。
体渲染离散化
其实就是函数离散化的形式,将tn到tf拆分成N个均匀的分布空间,从每个区间中随机选取一个样本ti:
t i ∼ U [ t n + i − 1 N ( t f − t n ) , t n + i N ( t f − t n ) ] i 从1到N t_i \sim \mathcal{U}\left[t_n+\frac{i-1}{N}\left(t_f-t_n\right), t_n+\frac{i}{N}\left(t_f-t_n\right)\right] \quad i \text{ 从1到N} ti∼U[tn+Ni−1(tf−tn),tn+Ni(tf−tn)]i 从1到N
然后将连续体渲染公式离散化:
C
^
(
r
)
=
∑
i
=
1
N
T
i
(
1
−
exp
(
−
σ
i
δ
i
)
)
c
i
where
T
i
=
exp
(
−
∑
j
=
1
i
−
1
σ
j
δ
j
)
(2)
\hat{C}(\mathbf{r})=\sum_{i=1}^N T_i\left(1-\exp \left(-\sigma_i \delta_i\right)\right) \mathbf{c}_i \quad \tag 2 \\ \text{where } T_i=\exp \left(-\sum_{j=1}^{i-1} \sigma_j \delta_j\right)
C^(r)=i=1∑NTi(1−exp(−σiδi))ciwhere Ti=exp(−j=1∑i−1σjδj)(2)
where
T
i
=
exp
(
−
∑
j
=
1
i
−
1
σ
j
δ
j
)
T_i=\exp \left(-\sum_{j=1}^{i-1} \sigma_j \delta_j\right)
Ti=exp(−∑j=1i−1σjδj)
其中,
δ
i
=
t
i
+
1
−
t
i
\delta_i=t_{i+1}-t_i
δi=ti+1−ti 表示相邻采样点之间的距离
但均匀采样有明显的问题, 比如体密度较大的点如果在两个采样点之间,那么永远不可能采样到。从上图中可看出,左半张代表均匀采样,右半张代表真实分布,左边由于表面两侧被采样到,只能反应这个区间内可能存在表面,但估计的σ不一定准确。
作者提出了分层采样来试图解决这个问题。
方法
位置编码
网络结构由如上图所示全连接网络组成,输入x,d分别分三维点的空间位置和视线方向。该三维点的体密度只与空间位置相关,颜色还和视角相关。
γ ( p ) = ( sin ( 2 0 π p ) , cos ( 2 0 π p ) , ⋯ , sin ( 2 L − 1 π p ) , cos ( 2 L − 1 π p ) ) \gamma(p)=\left(\sin \left(2^0 \pi p\right), \cos \left(2^0 \pi p\right), \cdots, \sin \left(2^{L-1} \pi p\right), \cos \left(2^{L-1} \pi p\right)\right) γ(p)=(sin(20πp),cos(20πp),⋯,sin(2L−1πp),cos(2L−1πp))
还可以注意到γ(x)和γ(d)分别是对位置坐标和方向坐标的位置编码(标准正余弦位置编码),这是由于单纯坐标只能体现低频信息,位置编码可以有效的区分开两个距离很近的坐标(即低频接近但高频编码分开【但或许也有问题,离得特别近的两个点或许低频信息也不相似,私以为mipnerf考虑三维点邻域的区间,在一定程度上可以缓解】),从而帮助网络学习到高频几何和纹理细节。如下图所示,视角信息有效反应高光信息,位置编码有助于恢复高频细节。
分层采样
除了上述提到的均匀采样可能导致i真实表面难以正好采样到,还有均匀采样带来了很多无意义空间的无效采样,简单来说,只有空气的地方没必要进行采样,或者被遮挡区域(可见性问题,不可见区域也没必要采样,需要提前判断累积透射率是否为降为0)。
首先均匀采样可以得到crose color,wi可以理解为同条射线被采样的
N
c
N_c
Nc个三维点颜色的权重:
C
^
c
(
r
)
=
∑
i
=
1
N
c
w
i
c
i
,
w
i
=
T
i
(
1
−
exp
(
−
σ
i
δ
i
)
)
\widehat{C}_c(\mathbf{r})=\sum_{i=1}^{N_c} w_i c_i, \quad w_i=T_i\left(1-\exp \left(-\sigma_i \delta_i\right)\right)
C
c(r)=i=1∑Ncwici,wi=Ti(1−exp(−σiδi))
根据均匀采样点的权重值归一化后按重要性重新采样得到新的 n f n_f nf个位置
w ^ i = w i / ∑ j = 1 N c w j \widehat{w}_i=w_i / \sum_{j=1}^{N_c} w_j w i=wi/j=1∑Ncwj
最后损失函数可以表示为:
L = ∑ r ∈ R [ ∥ C ^ c ( r ) − C ( r ) ∥ 2 2 + ∥ C ^ f ( r ) − C ( r ) ∥ 2 2 ] \mathcal{L}=\sum_{\mathbf{r} \in \mathcal{R}}\left[\left\|\widehat{C}_c(\mathbf{r})-C(\mathbf{r})\right\|_2^2+\left\|\widehat{C}_f(\mathbf{r})-C(\mathbf{r})\right\|_2^2\right] L=r∈R∑[ C c(r)−C(r) 22+ C f(r)−C(r) 22]
这里为什么选用两个网络来分别做粗糙采样和精细采样,参考NeRF系列工作个人总结
。crose网络是用于均匀采样的,包含更多的是低频信息的查询,而fine网络用于重要性采样,适用于三维点高频细节的查询,两个网络起到了类似滤波器的作用。
「待做实验验证!!!Todo」
体渲染推导公式(1)到公式(2)
首先,光线通过区间
[
0
,
t
+
d
t
)
[0, t+d t)
[0,t+dt) 的概率:
光线通过区间
[
0
,
t
+
d
t
)
[0, t+d t)
[0,t+dt) 的概率:
T
(
t
+
d
t
)
=
T
(
t
)
⋅
(
1
−
d
t
⋅
σ
(
t
)
)
\begin{aligned} \mathcal{T}(t+d t) & =\mathcal{T}(t) \cdot(1-d t \cdot \sigma(t)) \end{aligned}
T(t+dt)=T(t)⋅(1−dt⋅σ(t))
可以得到
T
(
t
+
d
t
)
−
T
(
t
)
d
t
≡
T
′
(
t
)
=
−
T
(
t
)
⋅
σ
(
t
)
\begin{aligned} \frac{\mathcal{T}(t+d t)-\mathcal{T}(t)}{d t} & \equiv \mathcal{T}^{\prime}(t)=-\mathcal{T}(t) \cdot \sigma(t) \end{aligned}
dtT(t+dt)−T(t)≡T′(t)=−T(t)⋅σ(t)
1
−
T
(
t
)
1-\mathcal{T}(t)
1−T(t) 为光线在区间
[
0
,
t
)
[0, t)
[0,t) 被终止的累积分布函数(CDF);
T
(
t
)
σ
(
t
)
\mathcal{T}(t) \sigma(t)
T(t)σ(t) 为其对应的概率密度函数 (PDF)
其中,
T
(
t
)
\mathcal{T}(t)
T(t) 为光线通过区间
[
0
,
t
)
[0, t)
[0,t) 透射率,也就是没被终止的概率,从1->0;
σ
(
t
)
\sigma(t)
σ(t) 为体密度函数;
d
t
⋅
σ
(
t
)
d t \cdot \sigma(t)
dt⋅σ(t) 为光线在
[
t
,
t
+
d
t
)
[t, t+d t)
[t,t+dt) 区间被吸收的概率,也就是被终止概率。
T
′
(
t
)
=
−
T
(
t
)
⋅
σ
(
t
)
T
′
(
t
)
T
(
t
)
=
−
σ
(
t
)
∫
a
b
T
′
(
t
)
T
(
t
)
d
t
=
−
∫
a
b
σ
(
t
)
d
t
log
T
(
t
)
∣
a
b
=
−
∫
a
b
σ
(
t
)
d
t
T
(
a
→
b
)
≡
T
(
b
)
T
(
a
)
=
exp
(
−
∫
a
b
σ
(
t
)
d
t
)
\begin{aligned} \mathcal{T}^{\prime}(t) & =-\mathcal{T}(t) \cdot \sigma(t) \\ \frac{\mathcal{T}^{\prime}(t)}{\mathcal{T}(t)} & =-\sigma(t) \\ \int_a^b \frac{\mathcal{T}^{\prime}(t)}{\mathcal{T}(t)} d t & =-\int_a^b \sigma(t) d t \\ \left.\log \mathcal{T}(t)\right|_a ^b & =-\int_a^b \sigma(t) d t \\ \mathcal{T}(a \rightarrow b) \equiv \frac{\mathcal{T}(b)}{\mathcal{T}(a)} & =\exp \left(-\int_a^b \sigma(t) d t\right) \end{aligned}
T′(t)T(t)T′(t)∫abT(t)T′(t)dtlogT(t)∣abT(a→b)≡T(a)T(b)=−T(t)⋅σ(t)=−σ(t)=−∫abσ(t)dt=−∫abσ(t)dt=exp(−∫abσ(t)dt)
T
(
a
→
b
)
\mathcal{T}(a \rightarrow b)
T(a→b) 表示光线通过
a
a
a 到
b
b
b 区间没被终止的概率,假设
[
a
,
b
)
[a,b)
[a,b) 共享
a
a
a点体密度和颜色
C
=
∫
0
D
T
(
t
)
⋅
σ
(
t
)
⋅
c
(
t
)
d
t
+
T
(
D
)
⋅
c
b
g
C=\int_0^D \mathcal{T}(t) \cdot \sigma(t) \cdot \mathbf{c}(t) d t+\mathcal{T}(D) \cdot \mathbf{c}_{\mathrm{bg}}
C=∫0DT(t)⋅σ(t)⋅c(t)dt+T(D)⋅cbg
c
b
g
c_{b g}
cbg 表示背景色彩
C ( a → b ) = ∫ a b T ( a → t ) ⋅ σ ( t ) ⋅ c ( t ) d t = σ a ⋅ c a ∫ a b T ( a → t ) d t = σ a ⋅ c a ∫ a b exp ( − ∫ a t σ ( u ) d u ) d t = σ a ⋅ c a ∫ a b exp ( − σ a u ∣ a t ) d t = σ a ⋅ c a ∫ a b exp ( − σ a ( t − a ) ) d t = σ a ⋅ c a ⋅ exp ( − σ a ( t − a ) ) − σ a ∣ a b = c a ⋅ ( 1 − exp ( − σ a ( b − a ) ) ) \begin{aligned} \boldsymbol{C}(a \rightarrow b) & =\int_a^b \mathcal{T}(a \rightarrow t) \cdot \sigma(t) \cdot \mathbf{c}(t) d t \\ & =\sigma_a \cdot \mathbf{c}_a \int_a^b \mathcal{T}(a \rightarrow t) d t \\ & =\sigma_a \cdot \mathbf{c}_a \int_a^b \exp \left(-\int_a^t \sigma(u) d u\right) d t \\ & =\sigma_a \cdot \mathbf{c}_a \int_a^b \exp \left(-\left.\sigma_a u\right|_a ^t\right) d t \\ & =\sigma_a \cdot \mathbf{c}_a \int_a^b \exp \left(-\sigma_a(t-a)\right) d t \\ & =\left.\sigma_a \cdot \mathbf{c}_a \cdot \frac{\exp \left(-\sigma_a(t-a)\right)}{-\sigma_a}\right|_a ^b \\ & =\mathbf{c}_a \cdot\left(1-\exp \left(-\sigma_a(b-a)\right)\right)\end{aligned} C(a→b)=∫abT(a→t)⋅σ(t)⋅c(t)dt=σa⋅ca∫abT(a→t)dt=σa⋅ca∫abexp(−∫atσ(u)du)dt=σa⋅ca∫abexp(−σau∣at)dt=σa⋅ca∫abexp(−σa(t−a))dt=σa⋅ca⋅−σaexp(−σa(t−a)) ab=ca⋅(1−exp(−σa(b−a)))
T ( a → c ) = = exp ( − [ ∫ a b σ ( t ) d t + ∫ b c σ ( t ) d t ] ) = exp ( − ∫ a b σ ( t ) d t ) exp ( − ∫ b c σ ( t ) d t ) = T ( a → b ) ⋅ T ( b → c ) \begin{aligned} \mathcal{T}(a \rightarrow c)= & =\exp \left(-\left[\int_a^b \sigma(t) d t+\int_b^c \sigma(t) d t\right]\right) \\ & =\exp \left(-\int_a^b \sigma(t) d t\right) \exp \left(-\int_b^c \sigma(t) d t\right) \\ & =\mathcal{T}(a \rightarrow b) \cdot \mathcal{T}(b \rightarrow c)\end{aligned} T(a→c)==exp(−[∫abσ(t)dt+∫bcσ(t)dt])=exp(−∫abσ(t)dt)exp(−∫bcσ(t)dt)=T(a→b)⋅T(b→c)
T n = T ( t n ) = T ( 0 → t n ) = exp ( − ∫ 0 t n σ ( t ) d t ) = exp ( ∑ k = 1 n − 1 − σ k δ k ) \mathcal{T}_n=\mathcal{T}\left(t_n\right)=\mathcal{T}\left(0 \rightarrow t_n\right)=\exp \left(-\int_0^{t_n} \sigma(t) d t\right)=\exp \left(\sum_{k=1}^{n-1}-\sigma_k \delta_k\right) Tn=T(tn)=T(0→tn)=exp(−∫0tnσ(t)dt)=exp(k=1∑n−1−σkδk)
C ( t N + 1 ) = ∑ n = 1 N ∫ t n t n + 1 T ( t ) ⋅ σ n ⋅ c n d t = ∑ n = 1 N ∫ t n t n + 1 T ( 0 → t n ) ⋅ T ( t n → t ) ⋅ σ n ⋅ c n d t = ∑ n = 1 N T ( 0 → t n ) ∫ t n t n + 1 T ( t n → t ) ⋅ σ n ⋅ c n d t = ∑ n = 1 N T ( 0 → t n ) ⋅ ( 1 − exp ( − σ n ( t n + 1 − t n ) ) ) ⋅ c n \begin{aligned} \boldsymbol{C}\left(t_{N+1}\right) & =\sum_{n=1}^N \int_{t_n}^{t_{n+1}} \mathcal{T}(t) \cdot \sigma_n \cdot \mathbf{c}_n d t \\ & =\sum_{n=1}^N \int_{t_n}^{t_{n+1}} \mathcal{T}\left(0 \rightarrow t_n\right) \cdot \mathcal{T}\left(t_n \rightarrow t\right) \cdot \sigma_n \cdot \mathbf{c}_n d t \\ & =\sum_{n=1}^N \mathcal{T}\left(0 \rightarrow t_n\right) \int_{t_n}^{t_{n+1}} \mathcal{T}\left(t_n \rightarrow t\right) \cdot \sigma_n \cdot \mathbf{c}_n d t \\ & =\sum_{n=1}^N \mathcal{T}\left(0 \rightarrow t_n\right) \cdot\left(1-\exp \left(-\sigma_n\left(t_{n+1}-t_n\right)\right)\right) \cdot \mathbf{c}_n\end{aligned} C(tN+1)=n=1∑N∫tntn+1T(t)⋅σn⋅cndt=n=1∑N∫tntn+1T(0→tn)⋅T(tn→t)⋅σn⋅cndt=n=1∑NT(0→tn)∫tntn+1T(tn→t)⋅σn⋅cndt=n=1∑NT(0→tn)⋅(1−exp(−σn(tn+1−tn)))⋅cn
T ( 0 → t n ) ⋅ ( 1 − exp ( − σ n ( t n + 1 − t n ) ) ) \mathcal{T}\left(0 \rightarrow t_n\right) \cdot\left(1-\exp \left(-\sigma_n\left(t_{n+1}-t_n\right)\right)\right) T(0→tn)⋅(1−exp(−σn(tn+1−tn)))表示光线正好在 t N + 1 t_{N+1} tN+1位置的颜色的权重(透射率*该点的颜色吸收率=该点颜色的贡献率,对应代码中的weights,代码中的 α \alpha α指代 1 − e x p ( − σ ∗ δ ) 1-exp(-\sigma*\delta) 1−exp(−σ∗δ))
C ( t N + 1 ) = ∑ n = 1 N T n ⋅ ( 1 − exp ( − σ n δ n ) ) ⋅ c n , where T n = exp ( ∑ k = 1 n − 1 − σ k δ k ) \boldsymbol{C}\left(t_{N+1}\right)=\sum_{n=1}^N \mathcal{T}_n \cdot\left(1-\exp \left(-\sigma_n \delta_n\right)\right) \cdot \mathbf{c}_n, \quad \\ \text{where} \quad \mathcal{T}_n=\exp \left(\sum_{k=1}^{n-1}-\sigma_k \delta_k\right) C(tN+1)=n=1∑NTn⋅(1−exp(−σnδn))⋅cn,whereTn=exp(k=1∑n−1−σkδk)
部分代码解读
相机变换(重要!)
- 关于nerf相机方向的解读
- 关于llff格式数据使用的NDC空间解读
-
详解NeRF中的NDC ray space - Jermmy的文章 - 知乎
简单来说就是针对不同种类的数据在不同的空间进行计算,如360度合成数据lego(直接从相机坐标系变换到世界坐标系下)或者无界数据llff(NDC空间能将近远景0到正无穷)范围限制在0到1之间)
Mip-Nerf
存在什么问题
混叠
根据奈奎斯特采样定律,采样频率至少是模拟信号中最高频率的两倍。所谓混叠,即在对模拟信号进行采样时,高于1/2采样频率的高频信号被映射到信号的低频部分(即高频信息丢失),与原有低频信号叠加,对信号的完整性和准确性产生影响。
参考链接:
- 数字图像处理中的混叠
- GAMES101-现代计算机图形学入门-闫令琪
-
计算机图形学笔记四:光栅化(抗锯齿,反走样)
- 走样(混叠错误)常见的三种类别:锯齿样、摩尔纹(手机拍显示屏,去掉图像中的奇数行列)、车轮效应(人眼看轮子旋转出现逆向)
- MSAA()
抗混叠
参考链接:
-
图形渲染中的抗锯齿(反走样)方法 - 奇林的文章 - 知乎
-
图形学底层探秘 - 纹理采样、环绕、过滤与Mipmap的那些事 - Clawko的文章 - 知乎
-
两种思路
- 一是直接提高采样频率,以获得更高的尼奎斯特频率,但是采样频率不能无限提高。如下图所示,将原本一个像素点拆分为4个,按比例决定最终像素点的颜色
【在图形学中称为超采样抗锯齿(Super Sampling Anti-Aliasing,SSAA)是采样混合公式的完整形式,是抗锯齿的理论模型,具有极好的呈现效果。它要求我们完整的渲染出一个屏幕分辨率 n 倍的图像,然后使用采样混合公式,一个屏幕像素对应 n 个采样点计算出屏幕大小的图像。
抗锯齿的基本思想:选取某个删格覆盖区域的多个样本点的颜色并进行混合计算后的颜色作为该删格的颜色
- 实时渲染中的 AA 技术:
- MSAA 算法家族(MSAA、CSAA、EQAA)
- TAA 算法家族(TAA、TXAA、MFAA)
- 后期处理 AA 算法家族(MLAA、FXAA)
- 深度学习 AA 算法 (DLSS)】
- 二是在采样频率固定的情况下,可通过低通滤波器消除大于尼奎斯特频率的高频信号,从而消除混叠现象(最简单的先模糊去除高频信号后采样,比如高斯模糊、平均模糊)
在图形学中,还有一种被广泛使用的纹理抗锯齿技术Mipmap:【!!核心思想:纹理大小跟图形大小接近才会有好的显示效果,本质上可以理解为是经过一系列的低通滤波器预处理】
- 一是直接提高采样频率,以获得更高的尼奎斯特频率,但是采样频率不能无限提高。如下图所示,将原本一个像素点拆分为4个,按比例决定最终像素点的颜色
参考链接:PowerVR-为什么你需要使用mipmap技术 - 东汉书院的文章 - 知乎
- Mipmap抗锯齿的基本思路是利用图像金字塔的概念,在不同尺寸的纹理图像中存储同一张原始纹理的多个版本。这些不同尺寸的纹理图像被称为mipmap级别
- 当进行纹理映射时,系统根据与被渲染表面的距离来选择合适的mipmap级别。当渲染表面比纹理图像小很多时,系统选择使用更高分辨率的mipmap级别,反之则选择使用分辨率较低的mipmap级别。这样可以避免在渲染过程中出现锯齿,因为根据视角和距离的变化,始终使用适应当前场景的纹理尺寸
- 各向异性过滤指当纹理形状和图形差别较大导致纹理坐标变化率变大,需要贴不同level的mipmap。比如下图
发现和思考
作者尝试调整摄像机的距离来观察不同分辨率的结果,可以看到(SSIM作为评价指标)(a)低分辨率下出现严重的锯齿,这是典型的混叠现象,当摄像机距离拉远**,同一个像素需要表达空间中更大范围的信息**,导致失真(b)如果在训练的时候采用多分辨率混合训练,能够提升低分辨率下的渲染质量,但是Full分辨率的渲染质量出现了下降,这是由于多分辨率混合训练反而可能导致学到的是摄像机在中间位置的结果。
假设超采样方案,将一个像素点拆分为多个,会导致数倍的计算开销;本篇文章中使用的是低通滤波器方案,mipmaps。
简单来说
- 将原本的光线变为圆锥体,原本的采样点变为圆椎体的截台体,以前只采样一个点,现在是采样一个圆锥体范围内的许多点,通过加权平均得到这个圆台体的体密度和颜色。这就类似于对范围内的所有点先进行了均值滤波,或者说低通滤波,然后再进行渲染。
- 但是将圆台内所有的点都去计算体密度和颜色的均值,每个点都需要经过位置编码后过一遍神经网络,带来了额外的开销。本文考虑对位置编码进行加权平均得到集成位置编码后再通过神经网络以近似平均的体密度和颜色。
方法
-
如何对位置编码进行加权平均
- 首先确保采样点位置 x x x是否在圆台范围内, r ˙ \dot{r} r˙表示像素区间投射到像素上距离像素中心位置的最大距离(圆台截面半径radius)
F ( x , o , d , r ˙ , t 0 , t 1 ) = 1 { ( t 0 < d T ( x − o ) ∥ d ∥ 2 2 < t 1 ) ∧ ( d T ( x − o ) ∥ d ∥ 2 ∥ x − o ∥ 2 > 1 1 + ( r ˙ / ∥ d ∥ 2 ) 2 ) } , \begin{gathered}\mathrm{F}\left(\mathbf{x}, \mathbf{o}, \mathbf{d}, \dot{r}, t_0, t_1\right)=\mathbb{1}\left\{\left(t_0<\frac{\mathbf{d}^{\mathrm{T}}(\mathbf{x}-\mathbf{o})}{\|\mathbf{d}\|_2^2}<t_1\right)\right. \left.\wedge\left(\frac{\mathbf{d}^{\mathrm{T}}(\mathbf{x}-\mathbf{o})}{\|\mathbf{d}\|_2\|\mathbf{x}-\mathbf{o}\|_2}>\frac{1}{\sqrt{1+\left(\dot{r} /\|\mathbf{d}\|_2\right)^2}}\right)\right\},\end{gathered} F(x,o,d,r˙,t0,t1)=1{(t0<∥d∥22dT(x−o)<t1)∧ ∥d∥2∥x−o∥2dT(x−o)>1+(r˙/∥d∥2)21 ⎭ ⎬ ⎫,
前一项判断当前空间点位置是否在 t 0 , t 1 t_0,t_1 t0,t1之间, θ \theta θ为摄像机到像素中心的射线与相机到采样点对应射线之间的夹角,这里默认假设摄像机与每个像素中心的连线垂直于该像素平面(额…)
t x = ∥ x − o ∥ 2 cos ( θ ) = ∥ x − o ∥ 2 d T ( x − o ) ∥ d ∥ 2 ∥ x − o ∥ 2 \begin{gathered}t_x=\|x-o\|_2\cos(\theta)=\|x-o\|_2\frac{\mathbf{d}^{\mathrm{T}}(\mathbf{x}-\mathbf{o})}{\|\mathbf{d}\|_2\|x-o\|_2}\end{gathered} tx=∥x−o∥2cos(θ)=∥x−o∥2∥d∥2∥x−o∥2dT(x−o)
后一项判断采样点是否在 t 0 , t 1 t_0,t_1 t0,t1对应的圆台内,即 cos θ \cos\theta cosθ应大于 cos ϕ \cos\phi cosϕ
cos θ ≥ cos ϕ = d T ( x − o ) ∥ d ∥ 2 ∥ x − o ∥ 2 ≥ ∥ d ∥ 2 r ˙ 2 + ∥ d ∥ 2 = 1 1 + ( r ˙ / ∥ d ∥ 2 ) 2 \begin{gathered}\cos\theta\geq\cos\phi=\frac{\mathbf{d}^{\mathrm{T}}(\mathbf{x}-\mathbf{o})}{\|\mathbf{d}\|_2\|\mathbf{x}-\mathbf{o}\|_2}\geq\frac{\|\mathbf{d}\|_2}{\sqrt{\dot{r}^2+\|\mathbf{d}\|_2}}=\frac{1}{\sqrt{1+\left(\dot{r} /\|\mathbf{d}\|_2\right)^2}}\,\end{gathered} cosθ≥cosϕ=∥d∥2∥x−o∥2dT(x−o)≥r˙2+∥d∥2∥d∥2=1+(r˙/∥d∥2)21则圆台体的位置编码的期望可以定义为
γ ∗ ( o , d , r ˙ , t 0 , t 1 ) = ∫ γ ( x ) F ( x , o , d , r ˙ , t 0 , t 1 ) d x ∫ F ( x , o , d , r ˙ , t 0 , t 1 ) d x \gamma^*\left(\mathbf{o}, \mathbf{d}, \dot{r}, t_0, t_1\right)=\frac{\int \gamma(\mathbf{x}) \mathrm{F}\left(\mathbf{x}, \mathbf{o}, \mathbf{d}, \dot{r}, t_0, t_1\right) d \mathbf{x}}{\int \mathrm{F}\left(\mathbf{x}, \mathbf{o}, \mathbf{d}, \dot{r}, t_0, t_1\right) d \mathbf{x}} γ∗(o,d,r˙,t0,t1)=∫F(x,o,d,r˙,t0,t1)dx∫γ(x)F(x,o,d,r˙,t0,t1)dx- 其次(为了更方便的对统计信息建模)作者选择使用三维gaussian近似圆锥台,定义
μ
t
\mu_{t}
μt 表示对应圆锥截台到相机的平均距离,
σ
t
2
\sigma_{t}^{2}
σt2 为沿光线方向的距离方差,
σ
r
2
\sigma_{r}^{2}
σr2 为垂直于光线方向的距离方差:
μ t = t μ + 2 t μ t δ 2 3 t μ 2 + t δ 2 σ t 2 = t δ 2 3 − 4 t δ 4 ( 12 t μ 2 − t δ 2 ) 15 ( 3 t μ 2 + t δ 2 ) 2 σ r 2 = r ˙ 2 ( t μ 2 4 + 5 t δ 2 12 − 4 t δ 4 15 ( 3 t μ 2 + t δ 2 ) ) \mu_{t}=t_{\mu}+\frac{2 t_{\mu} t_{\delta}^{2}}{3 t_{\mu}^{2}+t_{\delta}^{2}} \quad \sigma_{t}^{2}=\frac{t_{\delta}^{2}}{3}-\frac{4 t_{\delta}^{4}\left(12 t_{\mu}^{2}-t_{\delta}^{2}\right)}{15\left(3 t_{\mu}^{2}+t_{\delta}^{2}\right)^{2}} \quad \sigma_{r}^{2}=\dot{r}^{2}\left(\frac{t_{\mu}^{2}}{4}+\frac{5 t_{\delta}^{2}}{12}-\frac{4 t_{\delta}^{4}}{15\left(3 t_{\mu}^{2}+t_{\delta}^{2}\right)}\right) μt=tμ+3tμ2+tδ22tμtδ2σt2=3tδ2−15(3tμ2+tδ2)24tδ4(12tμ2−tδ2)σr2=r˙2(4tμ2+125tδ2−15(3tμ2+tδ2)4tδ4)
其中 t μ = ( t 0 + t 1 ) / 2 t_{\mu}=\left(t_{0}+t_{1}\right) / 2 tμ=(t0+t1)/2, t δ = ( t 1 − t 0 ) / 2 t_{\delta}=\left(t_{1}-t_{0}\right) / 2 tδ=(t1−t0)/2, r ˙ \dot{r} r˙ 设置为 2 / 12 2 / \sqrt{12} 2/12(注意不是内切圆,应该是近似 1 / π 1/\sqrt{\pi} 1/π) 倍的像素大小。
公式推导是根据圆锥台体积进行计算的(见附录),为方便理解,附录中的 θ \theta θ如下图所示其次为了降低优化难度,使用 t μ , t δ t_{\mu},t_{\delta} tμ,tδ进行了重参数*
从圆台坐标转换到世界坐标系:
μ = o + μ t d , ∑ = σ t 2 ( d d T ) + σ r 2 ( I − d T ∥ d ∥ 2 2 ) \boldsymbol{\mu}=\boldsymbol{o}+\mu_{t} \boldsymbol{d}, \quad \sum=\sigma_{t}^{2}\left(\boldsymbol{d d}^{\boldsymbol{T}}\right)+\sigma_{r}^{2}\left(\boldsymbol{I}-\frac{\boldsymbol{d}^{\boldsymbol{T}}}{\|\boldsymbol{d}\|_{2}^{2}}\right) μ=o+μtd,∑=σt2(ddT)+σr2(I−∥d∥22dT)
其中, o \boldsymbol{o} o 表示相机位置, d \boldsymbol{d} d 表示观察方向。
-
集成位置编码
- NeRF的位置编码
γ ( q ) = ( sin ( 2 0 π q ) , cos ( 2 0 π q ) , ⋯ , sin ( 2 L − 1 π q ) , cos ( 2 L − 1 π q ) ) \gamma(q)=\left(\sin \left(2^{0} \pi q\right), \cos \left(2^{0} \pi q\right), \cdots, \sin \left(2^{L-1} \pi q\right), \cos \left(2^{L-1} \pi q\right)\right) γ(q)=(sin(20πq),cos(20πq),⋯,sin(2L−1πq),cos(2L−1πq))
将位置编码写为矩阵的形式:
P = [ 1 0 0 2 0 0 2 L − 1 0 0 0 1 0 0 2 0 . . . 0 2 L − 1 0 0 0 1 0 0 2 0 0 2 L − 1 ] T γ ( x ) = [ sin P x cos P x ] P = \begin{bmatrix} &1 &0 &0 &2 &0 &0 & &2^{L-1} &0 &0\\ &0 &1 &0 &0 &2 &0 &... &0 &2^{L-1} &0\\ &0 &0 &1 &0 &0 &2 & &0 &0 &2^{L-1} \end{bmatrix}^T \\ \mathcal{\gamma}(x)= \begin{bmatrix} \sin{Px}\\ \cos{Px} \end{bmatrix} P= 100010001200020002...2L−10002L−10002L−1 Tγ(x)=[sinPxcosPx]
因为x服从高斯分布,进行线性变换后, P x Px Px 也服从高斯分布( μ γ = P μ ∈ R 3 L , Σ γ = P Σ P T ∈ R 3 ∗ 3 \mu_\gamma=P\mu \in R^{3L},\Sigma_\gamma=P\Sigma P^T \in R^{3*3} μγ=Pμ∈R3L,Σγ=PΣPT∈R3∗3),计算 sin ( p ) \sin (p) sin(p) 和 cos ( p ) \cos (p) cos(p) 的期望:
E p ∼ N ( μ , σ 2 ) [ sin ( p ) ] = sin ( μ ) exp ( − ( 1 2 ) σ 2 ) E p ∼ N ( μ , σ 2 ) [ cos ( p ) ] = cos ( μ ) exp ( − ( 1 2 ) σ 2 ) \begin{array}{l} E_{p \sim \mathcal{N}\left(\mu, \sigma^{2}\right)}[\sin (p)]=\sin (\mu) \exp \left(-\left(\frac{1}{2}\right) \sigma^{2}\right) \\ E_{p \sim \mathcal{N}\left(\mu, \sigma^{2}\right)}[\cos (p)]=\cos (\mu) \exp \left(-\left(\frac{1}{2}\right) \sigma^{2}\right) \end{array} Ep∼N(μ,σ2)[sin(p)]=sin(μ)exp(−(21)σ2)Ep∼N(μ,σ2)[cos(p)]=cos(μ)exp(−(21)σ2)
集成位置编码 γ ( μ , Σ ) \gamma(\boldsymbol{\mu}, \Sigma) γ(μ,Σ) 的期望计算公式如下, diag ( ) \operatorname{diag}() diag() 表示取对角线元素:
γ ( μ , Σ ) = E x N ( μ γ , Σ γ ) [ γ ( x ) ] = [ sin ( μ γ ) ∘ exp ( − ( 1 2 ) diag ( ∑ γ ) ) cos ( μ γ ) ∘ exp ( − ( 1 2 ) diag ( ∑ γ ) ) ] \gamma(\boldsymbol{\mu}, \Sigma)=E_{x} \mathcal{N}\left(\boldsymbol{\mu}_{\gamma}, \Sigma_{\gamma}\right)[\gamma(\boldsymbol{x})]=\begin{bmatrix} \sin \left(\boldsymbol{\mu}_{\gamma}\right) \circ \exp \left(-\left(\frac{1}{2}\right) \operatorname{diag}\left(\sum_{\gamma}\right)\right)\\ \cos \left(\boldsymbol{\mu}_{\gamma}\right) \circ \exp \left(-\left(\frac{1}{2}\right) \operatorname{diag}\left(\sum_{\gamma}\right)\right) \end{bmatrix} γ(μ,Σ)=ExN(μγ,Σγ)[γ(x)]= sin(μγ)∘exp(−(21)diag(∑γ))cos(μγ)∘exp(−(21)diag(∑γ))
方差公式如下:
diag ( ∑ γ ) = [ diag ( Σ ) , 4 diag ( Σ ) , … , 4 L − 1 diag ( Σ ) ] T diag ( Σ ) = σ t 2 ( d ∘ d ) + σ r 2 ( 1 − d ∘ d ∥ d ∥ 2 2 ) \begin{array}{c} \operatorname{diag}\left(\sum_{\gamma}\right)=\left[\operatorname{diag}(\Sigma), 4 \operatorname{diag}(\Sigma), \ldots, 4^{L-1} \operatorname{diag}(\Sigma)\right]^{T} \\ \operatorname{diag}(\Sigma)=\sigma_{t}^{2}(\boldsymbol{d} \circ \boldsymbol{d})+\sigma_{r}^{2}\left(\mathbf{1}-\frac{\boldsymbol{d} \circ \boldsymbol{d}}{\|\boldsymbol{d}\|_{2}^{2}}\right) \end{array} diag(∑γ)=[diag(Σ),4diag(Σ),…,4L−1diag(Σ)]Tdiag(Σ)=σt2(d∘d)+σr2(1−∥d∥22d∘d)
从上图中可以看到MipNeRF高频部分分量近似都为灰色,说明在高频部分是一致的,集成位置编码起到了滤波作用,低频部分和NeRF一致,有显著不同来区分细节。
NeRF的工作原理是沿着每个像素的射线提取点采样的位置编码特征(此处显示为点)。这些点采样特征忽略了每条射线所看到的体积的形状和大小,因此两个不同的相机以不同的尺度对同一位置进行成像可能会产生相同的模糊点采样特征,从而显著降低NeRF的性能。相反,Mip-NeRF投射的是圆锥体而不是射线,并对每个采样的截锥体(此处显示为梯形)的体积进行了明确的建模,从而解决了这种模糊性。
- NeRF的位置编码
-
单个网络训练推理
由于本身是采用圆锥台进行采样,不需要因为均匀采样和重要性采样的不同设两个网络。
实验
-
指标
PSNR、SSIM和LPIPS -
NeRF+超采样的对比
一个替代的方法是超采样,可以通过在每个像素上投射多个抖动的光线来实现。
Instant-NGP
NeRF在加速方面的主流方法,如何减小神经网络的同时不影响性能,Instant-NGP提供了新的思路。创新点主要在于多分辨率哈希编码,有效的增强了特征的表达能力,同时减小了神经网络的规模。
该图展示了不同编码方式和参数数据结构的渲染结果对比,(a)是没有任何位置编码的结果,无法恢复高频细节(b)原版NeRF可以恢复一定细节(C)单分辨率(128128128)密集网格编码,每个顶点存储16维特征,然后会导致更新时大部分空间点被浪费(空白区域无点,特征也不会被更新)(d)多分辨率特征编码采用
1
6
3
16^3
163to
17
3
3
173^3
1733分辨率网格。每个网格存储2维的特征向量,最终插值出16维的特征向量,有效降低了参数存储,但PSNR只提升了一个点(e,f)本文提出的多分辨率哈希编码,能够有效的减少参数存储,也不需要像NSVF等方法采用渐进策略或者修剪策略。与之前使用空间哈希[Optimized Spatial Hashing for Collision Detection of Deformable Objects]进行三维重建的工作不同[Real-time 3D reconstruction at scale using voxel hashing],本文没有通过探测、分桶或链接等典型方式显式地处理哈希函数的碰撞。相反,依靠神经网络来学习消除哈希冲突本身的歧义,避免控制流发散,降低实现复杂度并提高性能。另一个性能好处是哈希表的可预测内存布局,它与所表示的数据无关。虽然使用树状结构通常很难实现良好的缓存行为,但我们的哈希表可以针对低级架构细节进行微调,例如缓存大小。
哈希表
定义:哈希表是一种将键(key)映射到值(value)的抽象数据类型,用于快速存储和检索数据。它通过哈希函数将键(key)映射到表中一个位置来记录值(value),以便快速访问记录(可能会产生哈希冲突)。
位置编码
-
原始NeRF中的位置编码:
坐标位置 x x x和视角 d d d分别进行频率编码,前面讨论过这是为了更好地恢复高频信息;但是这种编码需要较大的神经网络来保证场景的学习。 -
Instant-NGP中的位置编码:
- 将空间划分为多分辨率编码
- 将每个子空间的顶点赋予可训练的特征编码(位置编码)
- 给定任意一个空间位置 x x x,找到其落入的网格,通过子空间网格顶点存储的特征编码的三线性插值得到其在该子空间的特征编码
- 组合多个分辨率子空间的特征编码,然后送入一个小型MLP预测该位置的体密度 σ \sigma σ和颜色 c c c
详解多分辨率哈希编码
-
首先将场景空间划分为 L L L( l = 0 , 1 , … , L − 1 l = 0,1, …, L − 1 l=0,1,…,L−1)种不同分辨率的网格,每种分辨率 N t N_t Nt通过尺度因子 b b b的等比数列从 N m i n N_{min} Nmin来计算:
N l : = ⌊ N min ⋅ b l ⌋ , where b : = exp ( ln N max − ln N min L − 1 ) \begin{aligned} N_{l} & :=\left\lfloor N_{\min } \cdot b^{l}\right\rfloor , \text{where} \ b:=\exp \left(\frac{\ln N_{\max }-\ln N_{\min }}{L-1}\right) \end{aligned} Nl:=⌊Nmin⋅bl⌋,where b:=exp(L−1lnNmax−lnNmin)
N min N_{\min } Nmin和 N max N_{\max} Nmax分别表示最粗与最细分辨率时场景空间沿一个方向划分的网格数;
b b b表示相邻两个分辨率之间的沿一个方向的网格数的比值 -
本文的哈希编码参数设置
直白的讲一下哈希特征编码的存储和利用方式:每种子空间分辨率下设置一定长度的哈希表存储特征编码,当分辨率较低时,每个子空间顶点可以与对应的哈希表实现一一映射,当分辨率较高时使用哈希函数对哈希列表中的特征进行查询
哈希函数定义为: h ( x ) = ( ⨁ i = 1 d x i π i ) m o d T h(\mathbf{x})=\left(\bigoplus_{i=1}^{d} x_{i} \pi_{i}\right) \bmod T h(x)=(i=1⨁dxiπi)modT
⊕ \oplus ⊕定义为位异或运算并设置 π i \pi_i πi为素数, x i x_i xi代表需要被编码的空间位置维度(本文为空间坐标,维度为3),其中 T T T是每一级分辨率下子空间的哈希列表长度,F是特征的维度
关于 T , F T,F T,F的消融实验结果体现了训练时间和性能的trade off,决定这些超参数的最终大小 -
视线方向的编码在本文中采用的是基于球谐函数的编码
- 球谐函数
Instant-NGP和3DGS、Plenoxels类似,使用球谐函数表达采样点的颜色
参考链接:
- 球谐函数介绍(Spherical Harmonics)
- 球谐光照技术 —— 原理+程序(全网最通俗易懂的版本)
- The spherical harmonics
-
基于球谐函数的光照
俯仰角 θ \theta θ和偏航角 ϕ \phi ϕ与视角方向 d = ( x , y , z ) d=(x,y,z) d=(x,y,z)的关系可以表达为
z = r cos ( θ ) y = r sin ( θ ) sin ( ϕ ) x = r sin ( θ ) cos ( ϕ ) \begin{array}{l} z=r \cos (\theta) \\ y=r \sin (\theta) \sin (\phi) \\ x=r \sin (\theta) \cos (\phi) \end{array} z=rcos(θ)y=rsin(θ)sin(ϕ)x=rsin(θ)cos(ϕ)
假设视角方向为单位向量,可得:
阶数 j = 1 , m = 0 j=1, m=0 j=1,m=0时, Y 1 0 ( θ , ϕ ) = 3 4 π cos ( θ ) = 3 4 π z Y_{1}^{0}(\theta, \phi)=\sqrt{\frac{3}{4 \pi}} \cos (\theta)=\sqrt{\frac{3}{4 \pi}} z Y10(θ,ϕ)=4π3cos(θ)=4π3z
阶数 j = 1 , m = 1 j=1, m=1 j=1,m=1时, Y 1 1 ( θ , ϕ ) = − 3 4 π cos ( ϕ ) sin ( θ ) = − 3 4 π x Y_{1}^{1}(\theta, \phi)=-\sqrt{\frac{3}{4 \pi}} \cos (\phi) \sin (\theta)=-\sqrt{\frac{3}{4 \pi}} x Y11(θ,ϕ)=−4π3cos(ϕ)sin(θ)=−4π3x
阶数 j = 1 , m = − 1 j=1, m=-1 j=1,m=−1时, Y 1 − 1 ( θ , ϕ ) = − 3 4 π sin ( ϕ ) sin ( θ ) = − 3 4 π y Y_{1}^{-1}(\theta, \phi)=-\sqrt{\frac{3}{4 \pi}} \sin (\phi) \sin (\theta)=-\sqrt{\frac{3}{4 \pi}} y Y1−1(θ,ϕ)=−4π3sin(ϕ)sin(θ)=−4π3y
依此类推 - 球谐函数
-
网络结构补充(ToDo)
-
隐式哈希碰撞分析(借用原文)
这种编码能够在哈希冲突的情况下忠实地重建场景可能看起来有些违反直觉。其成功的关键在于不同的分辨率级别具有互补的不同优势。较粗的级别和整个编码本身是单射的,也就是说它们根本没有冲突。然而,它们只能表示场景的低分辨率版本,因为它们提供的特征是从一个间隔较大的点网格进行线性插值得到的。相反,细节级别可以捕捉到小的特征,因为它们具有较高的网格分辨率,但会遇到许多冲突,即不同的点哈希到相同的表项。具有相等整数坐标⌊ x l x_l xl⌋的附近输入不被视为冲突;冲突发生在不同的整数坐标哈希到相同的索引时。幸运的是,这些冲突在空间中是伪随机分布的,并且在给定一对点的每个级别上同时发生的概率统计上很低。当训练样本以这种方式发生冲突时,它们的梯度会进行平均。需要考虑到这些样本对最终重建结果的重要性很少是相等的。例如,光通量场中可见表面上的一个点将对重建图像产生强烈的贡献(具有高可见性和高密度,两者都会乘法地影响梯度的幅度),从而导致其表项发生大的变化,而恰好引用相同表项的空间中的一个点将具有较小的权重。因此,更重要样本的梯度主导了冲突平均值,而混叠的表项将自然地被优化,以反映更高权重点的需求。
哈希编码的多分辨率特性涵盖了从粗分辨率 N m i n N_{min} Nmin(保证无冲突)到任务所需的最细分辨率 N m a x N_{max} Nmax的完整范围。因此,它确保了包括所有可能进行有意义学习的尺度,而不考虑稀疏性。几何缩放使得只需 O ( l o g ( N m a x / N m i n ) ) O(log(N_{max}/N_{min})) O(log(Nmax/Nmin))个级别即可覆盖这些尺度,这使得可以选择一个保守较大的 ( N m a x (N_{max} (Nmax值。文章来源:https://www.toymoban.com/news/detail-759317.html
-
训练:我们通过应用Adam来联合训练神经网络权重和哈希表条目,其中我们设置𝛽1 = 0.9,𝛽2 = 0.99,𝜖 = 10−15。选择𝛽1和𝛽2只会产生很小的差异,但是小的𝜖值 = 10−15可以显著加速哈希表条目在梯度稀疏和弱的情况下的收敛速度。为了防止长时间训练后的发散,我们对神经网络权重应用弱的L2正则化(因子10−6),但不对哈希表条目应用正则化。
当拟合千兆像素图像或NeRF时,我们使用L2损失。对于有符号距离函数,我们使用平均绝对百分比误差(MAPE),定义为|prediction − target | |target | + 0.01,对于神经辐射缓存,我们使用亮度相对L2损失[原始NeRF]。我们观察到,对于有符号距离函数,学习率为10−4,其他情况下为10−2,批量大小为214用于神经辐射缓存,其他情况下为218,收敛速度最快。
最后,我们跳过梯度恰好为0的哈希表条目的Adam步骤。当梯度稀疏时,这可以节省约10%的性能,这在𝑇 ≫ BatchSize的情况下经常发生。尽管这种启发式方法违反了Adam背后的一些假设,但我们观察到收敛没有退化。
非空间输入维度𝜉 ∈ R𝐸。多分辨率哈希编码以相对较低的维度目标空间坐标。我们所有的实验都在2D或3D中进行。然而,在输入辅助维度𝜉 ∈ R𝐸到神经网络时,如学习光场时的视角和材料参数,通常会很有用。在这种情况下,辅助维度可以使用已建立的技术进行编码,其成本与维度成比例增长;我们在神经辐射缓存[Müller等人2021]中使用了单个blob编码[Müller等人2019],在NeRF中使用了球谐基础,类似于同时进行的工作[Ref-NeRF,Plenoxels]。文章来源地址https://www.toymoban.com/news/detail-759317.html
讨论和未来工作
- Concatenation vs. reduction
在编码的末尾,我们将从每个分辨率获得的𝐹维特征向量进行连接,而不是减少(例如求和)。我们之所以偏向于连接,有两个原因。首先,它允许对每个分辨率进行独立的、完全并行的处理。其次,将编码结果y的维度从𝐿𝐹减少到𝐹可能太小,无法编码有用的信息。虽然𝐹可以成比例增加,但这会使编码的成本大大增加。然而,我们认识到可能有一些应用中减少是有利的,例如当神经网络比编码更昂贵时,增加𝐹的计算成本可能是微不足道的。因此,我们默认情况下主张连接,而不是作为一条硬性规则。在我们的应用中,连接和𝐹 = 2总是产生了迄今为止最好的结果。 - 哈希函数的选择
哈希函数的选择。作者还尝试了额外的三种哈希函数,但并未取得较好的结果。
未来的工作中优化哈希函数,将该方法转化为字典学习方法。两种可能的途径是(1)开发一种适用于解析微分的连续索引公式或(2)应用可以有效探索离散函数空间的进化优化算法。 - 哈希碰撞
可能还不知道原因,但是对于SDF很友好 - 生成设置
参数输入编码,在生成设置中使用时,通常将它们的特征排列在一个密集的网格中,然后可以由单独的生成器网络填充,通常是CNN,如StyleGAN 。我们的哈希编码增加了一个额外的复杂性层(类似stylegan的mapping网络),因为特征没有通过输入域以规则模式排列;也就是说,特征不是双射的,具有规则的点网格。我们将其留给未来的工作来确定如何最好地克服这个困难。 - 其他应用程序。
将多分辨率散列编码应用于其他需要准确、高频拟合的低维任务。频率编码源于变压器网络的注意机制。我们希望像我们这样的参数编码可以导致一般基于注意力的任务的有意义的改进。异质体积密度场,如存储在VDB中的云和烟雾[Museth 2013, 2021]数据结构,通常包括外部的空白空间、内部的可靠核心和体积表面上的稀疏细节。这使得它们非常适合我们的编码。在本文发布的代码中,我们包含了一个初步实现,可以直接从体积路径跟踪器的噪声输出拟合辐射场和密度场。初步结果很有希望,如下图所示,我们打算在未来的工作中进一步研究这个方向。
到了这里,关于【论文阅读笔记】NeRF+Mip-NeRF+Instant-NGP的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!