简介
主页:https://www.cs.cornell.edu/~zl548/NSFF/
可以从一个动态场景的单目视频在空间和时间上合成新的观点。模型输入包含坐标、方向、时间,输出包含了空间密度,反射颜色,时域双向流,以及遮挡权重
创新点
- 用于动态场景的时空视图合成的神经表示,称之为神经场景流场,具有对3D场景动力学建模的能力
- 通过利用刚性和非刚性区域中的多视图约束来优化单目视频上的神经场景流场的方法, 允许同时合成和插值视图和时间
实现流程
假设时间实例之间的运动是线性的
为了在第 i 时刻渲染一帧,在第 i 时刻使用 RGBσ 沿着光线
r
i
r_i
ri执行体积渲染,得到像素颜色
C
^
i
(
r
i
)
\hat{C}_i(r_i)
C^i(ri)(左)。为了将场景从时间 j 扭曲到 i,沿着
r
i
r_i
ri 使用场景流
f
i
→
j
f_{i→j}
fi→j 和 相关颜色和透明度
(
c
j
,
σ
j
)
(c_j, σ_j)
(cj,σj)的体积渲染(右)来偏移每一步。
Temporal photometric consistency
i 时刻通过光线 ri 积分计算得到的像素点颜色,要与该光线经过流动之后,在新的坐标位置下,在 j 时刻积分计算得到的像素点颜色相同。该约束旨在让 i 时刻的 nerf 和 j 时刻的 nerf 分别在
r
i
r_i
ri 光线和经过流变换的
r
i
r_i
ri 曲光线上的积分得到相同的颜色值。但是这点约束存在一个问题,就是经过时间变换之后,由于流变换,物质表面法向量也变换,相同方向射入的光线不一定能够接收到相同的颜色值,因此积分结果不一定相同。
注意到使用的方向仍然是
d
i
d_i
di,说明该约束默认动态flow仅仅是空间中的平移变换,默认约束位置对应的
c
i
c_i
ci 和
c
j
c_j
cj 在相同的方向有着相同的输出
考虑到在 i 时刻未被遮挡的光线
r
i
r_i
ri 在 j 时刻被前景遮挡,那么上述约束就不合理了,因为经过流变换后的颜色不是 j 时刻该有的颜色,而是新的前景颜色,此时不应该约束 j 时刻的 nerf 去恢复背景色,而应鼓励其产生前景色。因此使用了一个遮挡权重作为遮挡区域的置信度,通过
L
1
L_1
L1 约束其零点稀疏,几乎处处为 1,为 1 只在边缘遮挡区域起效
从时间 j 开始对光线
r
i
r_i
ri 的不透明度进行体积渲染来应用这些权重,并在每个2D像素上乘以累积的权重
通过添加
L
1
L_1
L1 正则化来鼓励预测权重接近于 1,从而避免所有预测权重为零的平凡解
β
w
β_w
βw是正则化权值,设为 0.1
Scene flow priors
为了规范预测的场景流场,添加了一个三维场景流循环一致性项,以促使在所有采样的3D点 x i x_i xi 上,预测的正向场景流 f i → j f_{i→j} fi→j 与时刻 j 对应位置的反向场景流 f j → i f_{j→i} fj→i 是一致的(即位置 x i → j = x i + f i → j x_{i→j} = x_i + f_{i→j} xi→j=xi+fi→j )
对于 i 到 j 和 j 到 i 时刻的场景流,通过循环一致性进行了约束,在除去遮挡发生的区域,两者应该是逆向的
还在预测的场景流场上添加了低级正则化
L
r
e
g
L_{reg}
Lreg,首先,通过对射线附近采样的3D点应用
L
1
L_1
L1 正则化来增强场景流的时空平滑性,并鼓励3D点轨迹分段线性。其次,通过应用
L
1
L_1
L1 正则化项来鼓励场景流在大多数地方都很小
Data-driven priors
上述约束训练动态场景重建模型实在是太难了,很容易陷入局部最优,因此利用了数据驱动的方法来辅助模型训练。包括两点:几何约束和深度约束。几何约束是将场景流映射到像素坐标上得到光流,再用训练好的光流网络进行光流
L
1
L_1
L1 约束。深度约束则是将场景的深度期望和深度网络预测的深度值进行
L
1
L_1
L1 约束
geometric consistency term
几何一致性有助于模型在相邻帧之间建立精确的对应关联,其最小化了场景流位移3D点w.r.t.的重投影误差
使用预先训练的网络计算得到的2D光流, p i p_i pi 是时间 i 的2D像素位置,当时刻 j 通过二维光流 u i → j u_{i→j} ui→j 位移时,相邻帧中对应的二维像素位置可以计算为: p i → j = p i + u i → j p_{i→j} = p_i + u_{i→j} pi→j=pi+ui→j
首先通过体积渲染计算预期的场景流 F ^ i → j ( r i ) \hat{F}_{i→j}(r_i) F^i→j(ri) 和预期的 3D 点位置 X ^ i ( r i ) \hat{X}_i(r_i) X^i(ri)
然后,通过将场景流(即
X
^
i
(
r
i
)
\hat{X}_i(r_i)
X^i(ri) +
F
^
i
→
j
(
r
i
)
\hat{F}_{i→j}(r_i)
F^i→j(ri)) 置换的预期 3D 点位置执行透视投影到时间 j 处与帧对应的视点来计算
p
i
→
j
p_{i→j}
pi→j。几何一致性计算为
p
^
i
→
j
\hat{p}_{i→j}
p^i→j 和
p
i
→
j
p_{i→j}
pi→j 之间的
L
1
L_1
L1 差值
single-view depth term
添加了一个单一视图深度,以鼓励沿着每条射线计算的预期终止深度
Z
^
i
\hat{Z}_i
Z^i 接近从预训练的单一视图网络预测的深度
Z
i
Z_i
Zi。由于单视图深度预测在未知尺度和位移范围内定义,利用了鲁棒尺度-位移不变损失:
∗是一种whitening操作,它将深度归一化为零均值和单位尺度。
L d a t a = L g e o + β z L z , 实验中 β z = 2 L_{data} = L_{geo} + β_zL_z ,实验中β_z = 2 Ldata=Lgeo+βzLz,实验中βz=2
Integrating a static scene representation
基于变形的时间损失只能用于局部时间邻域 N (i),因为动态组件通常会经历太多的变形,从而可靠地推断出更大的时间间隔的对应关系。然而,静态区域应该是一致的,应该利用所有框架的观测结果。因此,将动态(与时间相关的)场景表示与静态(与时间无关的)场景表示相结合,并要求合并后的体渲染图像与输入匹配。用MLP对每个表示进行建模
其中动态场景组件表示
静态组件表示
v 是一个无监督的3D混合权值场,其沿着光线线性混合静态和动态场景表示的 RGBσ,v 应该在有足够观察的静态区域给动态表示分配一个低权重,因为这些可以通过静态表示以更高的保真度呈现,而在移动区域给静态表示分配一个低权重,因为这些可以通过动态表示更好地建模
σ
i
c
b
(
t
)
σ^{cb}_i(t)
σicb(t)
C
i
c
b
(
t
)
C^{cb}_i(t)
Cicb(t) 静态场景分量和动态场景分量的线性组合
Loss
模型总损失公式如下,β 系数为每一项加权
Space-time view synthesis
为了在给定的时间渲染新的视图,只需使用Eq. 5(动态)或Eq. 13(静态+动态)对每个像素进行体积渲染。然而,虽然这种方法在与输入视图相对应的时候产生了良好的结果,但这种表示不允许在时间之间插入时变几何,导致渲染结果看起来像现有帧的线性混合组合
相反,根据预测的场景流来渲染中间时间。为了提高绘制效率,论文提出了一种基于溅射的平面扫描体绘制方法。为了在中间时间 i + δi, δi∈(0,1) 在指定的目标视点渲染图像,从前面到后面扫描从新视点发射的每一步。在沿着射线的每一个采样步骤t,通过模型在 i 和 i+1时刻查询点信息,并将 i 时刻的3D点替换为缩放场景流
x
i
+
δ
i
f
i
→
i
+
1
(
x
i
)
x_i+δ_if_{i→i+1}(x_i)
xi+δifi→i+1(xi),以及 i+1 时刻的相似度。然后,将3D位移点溅射到一个(c, α)积累缓冲区上,并从时间 i 和 i + 1以线性权重
1
−
δ
i
1−δ_i
1−δi,
δ
i
δ_i
δi 混合溅射。最终渲染的视图是通过对累积缓冲区的体积渲染获得的
效果