简介
主页:https://bennyguo.github.io/nerfren/
NeRF将稳定的反射图像建模为真实的几何图形,而不是反射表面上的点的视效,即NeRF的视图依赖只能处理像高光这样的简单反射,而不能处理像来自玻璃和镜子的复杂反射
NeRF倾向于将反射面后面的场景几何模型建模为半透明的(像雾),并将反射几何图形视为出现在某些虚拟深度,原因是NeRF并没有通过改变从不同方向观看时反射面点的颜色来解释这个点的视图依赖性,而是通过利用它后面的所有空间点沿着相机光线通过体渲染得到正确的颜色来解释它,导致几何图形雾霭和物理错误的深度
因此,NeRF很难估计正确的场景几何形状,阻碍了进一步的解释或编辑,当多视图一致性不成立时,由于反射物体可能只在部分图像中可见,会产生不准确的渲染结果,限制了NeRF正确合成的视图
NeRF在建模具有复杂反射的场景时可能遇到的两个问题
- 反射区域的深度估计不准确,如(a)和(b);
- 违反多视图一致性时的不准确渲染,如(b)中的放大区域。
NeRFReN通过使用单独的nerf对场景的传输和反射分量建模,并在图像域中合成视图(下)来解决这些问题。
为了合成新的视图,将对应辐亮度场渲染的透射像
I
t
I_t
It 和反射像
I
r
I_r
Ir 以相加的方式组合,其中反射像
I
r
I_r
Ir 用学习到的反射分数 β 进行加权
上述以无监督的方式将场景分解为透射和反射分量是高度欠约束的
常见的退化是
- 让一个组件解释整个场景,而让另一个组件空着;
- 两个组件都对整个场景进行建模;
- 在(1)和(2)之间的某个位置,其中一个组件的一部分混合到另一个组件中,导致不完整的透射/反射几何结构。
为解决这些歧义,论文提出三个假设,这些假设通常适用于在现实世界中常见的平面或几乎平面反射表面
- 反射分数只与透射分量有关,因为它表示反射面的材料;
- 由于现实场景中大部分反射镜几乎是平面的,因此传输分量具有局部光滑的深度图;
- 反射组件只需要简单的几何图形来呈现正确的渲染图,因为大多数时候我们只能从非常有限的观看方向看到反射图像。
贡献点
- 分析了NeRF在建模反射区域时的行为和局限性,并提出在复杂反射场景中使用分离的传输和反射神经辐射场。
- 设计了特定的网络架构,利用几何先验,并应用精心设计的热身训练策略,在几个真实世界场景中实现了物理上合理的分解结果,与vanilla NeRF相比,具有竞争的新视图合成质量,包括有镜子的场景等挑战性情况。
- 在此基础上,我们还研究了深度估计和场景编辑的应用
实现流程
NeRF公式回顾
δ
i
=
t
i
+
1
−
t
i
δ_i = t_{i+1} − t_i
δi=ti+1−ti
通过计算预期的终止深度,可以估计出沿射线的深度值
t
∗
t^*
t∗
直接在有严重反射的场景上应用NeRF会得到一个混合的几何图形,包含了场景的透射部分和反射部分,其中前者被建模为半透明,以获得正确的视图重构
- 由于半透明几何图形的存在,由式(5)得到的深度估计可能非常不准确,停留在反射表面的真实深度和反射图像的虚拟深度之间。(a)的灰色框中,我们可视化了与黄色十字对应的沿射线的点的权重。NeRF的权重分布呈双峰分布,左峰由真实曲面点贡献,右峰由虚拟曲面点贡献。沿着这条射线的预期终止深度偏向于虚拟深度,在左下方的深度图中以较深的颜色显示
- 在破坏多视图一致性的情况下,很难得到正确的视图合成结果,(b)中说明了这一点,其中一些被反射的物体只有在面对镜子时才能被看到。但由于NeRF将反射物体建模为真实的几何图形,我们仍然可以从镜子的一侧观察到雾雾的内容
NeRFReN
NeRFREN将场景分解为传输NeRF和反射NeRF
透射场的密度为
σ
t
σ^t
σt,辐射度为
c
t
c^t
ct
反射场的密度为
σ
f
σ^f
σf,辐射度为
c
f
c^f
cf
学习每个三维位置的反射分数值 α(由透射分支预测),以测量物体在不同材料中的反射特性,根据透射部分的几何形状,通过体绘制累积像素对应的反射分数 β
将反射颜色经 β 衰减后与透射颜色相加,得到最终像素色
根据假设1(反射分数只与透射分量有关,因为它表示反射面的材料)提出上面的网络结构图
反射分数值 α 与透射分支中的透射密度一起被预测,因为它是反射表面的一种属性,与反射分量无关,传输的颜色取决于观看方向,因此低频视相关效果(如高光)由传输场建模,稳定的虚拟图像由反射场建模,反射颜色和反射分数值不受观察方向的限制,它们很好地近似了大多数场景,并大大降低了网络的复杂性,使不适定分解问题更容易学习
Geometric Priors
将场景分解为传输和反射组件是一个欠约束问题,存在无穷多的解和糟糕的局部极小值,可能在训练图像上产生视觉上令人满意的渲染结果,但不能将反射辐亮度场与透射辐亮度场分开。人类正确地识别反射的虚拟图像,因为我们知道真实世界的几何形状。
提出利用两个几何先验,即深度平滑先验和双向深度一致性(BDC)先验,来指导场景的分解
Depth smoothness
根据假设2(由于现实场景中大部分反射镜几乎是平面的,因此传输分量具有局部光滑的深度图),提出深度平滑先验
利用了一个普遍的先验,即传输分量的深度映射应该是局部平滑的
t
∗
(
p
)
t^* (p)
t∗(p)是Eq.(5)中定义的近似深度,p 表示图像中的每个像素,N § 是其 8 个相邻像素的集合,C 是图像颜色,γ 是一个超参数
ω(p, q)是一个衰减因子,用于基于颜色梯度重新加权(relax)约束,因为深度不连续常常伴随着突然的颜色变化
L d L_d Ld保持了边缘,只在小区域上工作,避免了在大多数情况下过度平滑
为了在训练过程中应用这种正则化,我们对补丁而不是像素进行采样
Bidirectional depth consistency
根据假设3(反射组件只需要简单的几何图形来呈现正确的渲染图,因为大多数时候我们只能从非常有限的观看方向看到反射图像),提出双向深度一致性(BDC)先验
深度平滑先验有利于传输部分的正确几何形状,假设它有一个简单的几何形状来限制反射部分,其中每个射线只击中一个不透明的表面,只能从有限的视角看到被反射的物体,所以在某种程度上,它们类似于一个有纹理的固体外壳
定义一个新的后向深度
t
←
\stackrel{\leftarrow}{t}
t←* 沿射线r作为预期的终止点,看到来自 r 相反方向的体积:
T
i
←
\stackrel{\leftarrow}{T_i}
Ti←(σ) = exp(−
∑
j
>
i
σ
j
δ
j
\sum_{j>i}σ_jδ_j
∑j>iσjδj). Denote
t
→
\stackrel{\rightarrow}{t}
t→∗ 为上述公式5的预测深度
t
∗
t^∗
t∗
这种正则化对沿射线的密度分布提出了限制,迫使它是单峰的,并且具有小的方差
这里列出了神经辐射场中沿着射线的三种常见密度分布(蓝色实线曲线)。对于每个图形,水平轴表示沿射线的点位置。点线和虚线橙色曲线是点权重(公式(3)及(9)),计算前后深度(公式分别为(5)和(9)。计算出的深度值用黑线标出。只有在©有一个低的BDC值,这对应于预期的壳状几何。
如果射线击中多个表面(如(a))或在“雾蒙蒙的”区域(如(b))没有清晰表面,则前后深度不一致
只有当密度分布为单模态且方差较小(如©)时,两个深度值才会接近
直观地说,这要求反射分量具有“壳”样几何形状
注意, L b d c L_{bdc} Lbdc = 0也可以对应一个空射线。这不会发生,因为由于深度平滑先验的存在,仅传输组件不能忠实地再现输入图像。
也有一些论文为密度分布问题,在已知深度提出了正则化解决该问题,而BDC在未知深度实现了这一目标
Warm-up Training
几何先验的大小会极大地影响分解结果,需要仔细调整权重因子,而这些权重因子很难跨场景共享,尤其在训练的早期,很难在光度损失和几何约束之间取得平衡,几何约束占主导地位,模型将停留在一个糟糕的局部极小值,只使用一个组件来解释整个场景,而留下另一个空白,如果光度损失占主导地位,几何正则化不足将导致次优分解结果
论文提出一种通用的训练策略,避免了对每个场景的超参数进行调优,有效地稳定了训练过程,从学习率热身中得到启发,提出对几何约束条件进行“热身”。 λ d λ_d λd和 λ b d c λ_{bdc} λbdc初始值较小,随着训练的进行, λ d λ_d λd和 λ b d c λ_{bdc} λbdc先增大后减小,同时还在训练的早期屏蔽了输入的观察方向,以避免反射分量“泄漏”到传输分量中
首先增加 λ d λ_d λd 以确保传输组件的几何形状正确,然后增加 λ b d c λ_bdc λbdc 以消除反射组件中的冗余。发现这种稳定训练与同时优化两者相比。然后,逐渐降低权重,更多地关注光度损失,以获得更准确的渲染
λ b d c λ_bdc λbdc 在第epoch 20 时增加到 0.05,在第epoch 12 时下降到1e-4,在第 epoch 15 时进一步下降到0。我们在epoch 10之前屏蔽输入的观看方向。所有模型都使用Adam优化器进行了40次训练,初始学习率为5e-4。在最近的20个 epoch 中,学习率呈指数衰减至5e-6。
为了进一步稳定训练,在前1k次迭代中,强制传输图像接近输入图像:
还对反射分数映射应用平滑约束
λ
i
n
i
t
λ_{init}
λinit 和
λ
β
λ_β
λβ 分别设置为 0.01 和 1e-4
Interactive Setting
由于方程式(1)和(7)中的相加公式,可以利用额外的信息,如手动标记的反射分数映射。利用一种交互设置,其中用户提供少量训练图像的二进制掩码,1和0分别表示反射和非反射区域。L1损失用于鼓励预测反射分数映射 β 与用户提供的掩模之间的一致性
β
^
=
β
(
r
(
p
)
;
σ
,
α
)
\hat{\beta} = \beta(r(p);\sigma,\alpha)
β^=β(r(p);σ,α)是反射分数值的估计值,
β
(
p
)
\beta(p)
β(p)是用户提供的二进制掩码在像素 p 处的值