论文链接
原文地址: Progressively-connected Light Field Network for Efficient View Synthesis
论文代码: 暂无
参考阅读: NeRF:用深度学习完成3D渲染任务的蹿红
参考阅读: NeRF论文笔记: 用于视图合成的神经辐射场技术
参考阅读; NeRF代码+逻辑详细分析
NeRF介绍
已知一组相机参数的输入图像, 目标是从这些图像中学习到一个神经光场(映射函数).
假如图像中每个像素对应的光线为 r = ( u , v , s , t ) r=(u,v,s,t) r=(u,v,s,t) , 其中 ( u , v ) (u,v) (u,v) 是近平面的点坐标, ( s , t ) (s,t) (s,t) 是远平面的点坐标.
神经光场是一个函数 L F : R 4 → R 3 LF:\mathbb{R}^4 \rightarrow \mathbb{R}^3 LF:R4→R3 , 它将光线 ( u , v , s , t ) (u,v,s,t) (u,v,s,t) 映射到 颜色 ( r , g , b ) (r,g,b) (r,g,b) .
对 L F LF LF 函数建模的一个简单的方法就是MLP多层感知机网络.
然而, 这样的设计容易对三维几何产生过拟合, 没有能力推广到新出现的视图, 效果如下:
为了使神经光场学习到多图一致的场景表示, 作者提出了基于点的神经光场, 渐进的训练方案 和 多视图一致性正则化方案.
1. 基于点的神经光场
在给定的光线 r r r 上, 以预定义的深度值 { d 0 , d 1 , . . . , d D − 1 } \{d_0,d_1,...,d_{D-1}\} {d0,d1,...,dD−1} 进行深度采样. 如图所示:
通过连接所有采样点 { x 0 , y 0 , x 1 , y 1 , . . . , x D − 1 , y D − 1 } \{x_0,y_0,x_1,y_1,...,x_{D-1},y_{D-1}\} {x0,y0,x1,y1,...,xD−1,yD−1} 的坐标, 来序列化表示光线 r r r .
把序列化光线 r r r 送入到多层感知机网络 M L P : R 2 D → R D × R 3 D MLP:\mathbb{R}^{2D} \rightarrow \mathbb{R}^D \times \mathbb{R}^{3D} MLP:R2D→RD×R3D , 在一次前向传播中来预测每个采样点 ( x i , y i ) (x_i,y_i) (xi,yi) 对应的密度 σ i \sigma_i σi 和 颜色 c i c_i ci .
最后通过体积渲染(volume rendering), 累积所采样的D个点对应的密度
σ
i
\sigma_i
σi 和 颜色
c
i
c_i
ci , 以计算原始光线处的点, 对应的密度
σ
\sigma
σ 和 颜色
C
C
C . 公式如下:
C
=
∑
i
=
0
D
−
1
T
i
α
i
c
i
C=\sum_{i=0}^{D-1}T_i \alpha_i c_i
C=i=0∑D−1Tiαici
其中
T
i
T_i
Ti 代表透射率,
α
i
\alpha_i
αi 代表 alpha值(透明度),
c
i
c_i
ci 代表该采样点处的颜色.
α
i
=
1
−
e
x
p
(
−
δ
i
σ
i
)
T
i
=
∏
j
=
0
i
−
1
(
1
−
α
j
)
\alpha_i=1-exp(-\delta_i \sigma_i) \\ T_i=\prod_{j=0}^{i-1} (1-\alpha_j)
αi=1−exp(−δiσi)Ti=j=0∏i−1(1−αj)
其中
δ
i
\delta_i
δi 代表两采样点
i
i
i 和
i
+
1
i+1
i+1 点之间的采样距离.
σ
i
\sigma_i
σi 代表采样点的密度,
a
j
a_j
aj 代表采样点的透明度.
总结 : 与直接将光线映射到颜色的设计不同, 作者利用神经光场预测采样点的密度和颜色, 通过体积渲染计算得到最终的像素颜色.
- 该方案让网络利于去推断点之间的遮挡关系, 学习潜在的集合场景.
- 在 MLP里一次的 forward 就可以预测所有采样点的颜色和密度, 效率高.
代价: 三维点的颜色和密度不仅取决于自身坐标,还取决于同一光线上其他采样点的坐标纠缠. 当两条光线在一个三维点上相交时,神经光场可能会在两条光线上为该三维点分配完全不同的颜色和密度. 为了解决这个问题, 作者引入了渐进训练和多视图一致正则化.
2. 渐进训练策略
在训练开始时, 独立处理每个点, 以学习一致的几何场景. 之后在网络中添加连接来逐步提高网络的能力, 以获得更好的渲染质量.
具体为: 在训练开始时, 丢弃MLP网络中的部分神经元连接, 确保点 ( x i , y i ) (x_i,y_i) (xi,yi) 的密度和颜色只取决于该点的坐标, 不予其它点的坐标纠缠. 这样使得一个点在不同的光线上具有同样的密度和颜色, 这为网络学习一致的几何场景提供了强烈的诱导偏差. 在随后的训练中, 逐步增加MLP中的连接以提高能力. 如图:
将训练分为
k
k
k 个阶段,
- stage 0 : 只有特定深度点的坐标连接到自身的特征向量, 因此不会影响到其他深度的样本点的特征. 给定 D D D 个深度的样本, 该架构可以被视为 D D D 个独立的小网络, 处理不同深度的点以预测颜色和密度.
- stage 1 : 将两个相邻的子网拼接形成新的子网, 可以视为 D / 2 D/2 D/2 个独立的子网络, 每个子网络处理两个相邻采样点的坐标, 以生成这两个点的密度和颜色.
- …
- stage t : 只有一个包含 d d d 个采样点的网络, 这个网络同时处理所有采样点, 以生成所有采样点的密度和颜色.
除了通过添加更多的神经元连接来增加网络能力, 还可以在采样中逐步添加更多的采样点.
3. 多视图一致性正则化
在整个训练过程中, 作者采用多视图一致性正则化来让网络学习潜在的几何场景.
密度一致性损失 : 三维点的密度是一个恒定值, 无论是在哪个发射光线上的. 但是后期训练点的密度会受到其他点的影响. 所以设置密度一致性损失进行约束.
为了计算损失, 我们定义了整个计算过程, 光线 ( u , v , s , t ) (u,v,s,t) (u,v,s,t) 在深度为 d i d_i di 处的点 p i p_i pi 的密度为 σ i \sigma_i σi . 其中 σ i = L i ( u , v , s , t ) \sigma_i = L_i(u,v,s,t) σi=Li(u,v,s,t) .
注意
L
i
L_i
Li 由两部分组成 :
(1) 光线
(
u
,
v
,
s
,
t
)
(u,v,s,t)
(u,v,s,t) 上的预定义深度的采样点.
(2) 预测所有采样点的密度值.
在深度为
d
i
d_i
di 处的密度一致性损失为:
L
d
e
n
s
i
t
y
=
E
u
,
v
,
s
,
t
,
i
(
∥
∇
L
i
(
u
,
v
,
s
,
t
)
⋅
p
∥
2
+
∥
∇
L
i
(
u
,
v
,
s
,
t
)
⋅
q
∥
2
)
\mathcal{L}_{density} = \mathbb{E}_{u,v,s,t,i}(\|\nabla L_i(u,v,s,t) \cdot p\|^2 + \|\nabla L_i(u,v,s,t) \cdot q\|^2 )
Ldensity=Eu,v,s,t,i(∥∇Li(u,v,s,t)⋅p∥2+∥∇Li(u,v,s,t)⋅q∥2)
其中:
p
=
(
d
i
,
0
,
−
(
1
−
d
i
)
,
0
)
⊤
q
=
(
0
,
d
i
,
0
,
−
(
1
−
d
i
)
)
⊤
p = (d_i,0,-(1-d_i),0)^\top \\ q = (0,d_i,0,-(1-d_i))^\top
p=(di,0,−(1−di),0)⊤q=(0,di,0,−(1−di))⊤
这种损失的本质是:
(1) 与点
p
i
p_i
pi 相交的所有光线在
(
u
,
v
,
s
,
t
)
(u,v,s,t)
(u,v,s,t) 中形成了2D流形.
(2)
(
p
,
q
)
(p,q)
(p,q) 是在该点上跨越该流形的切空间的基.
(3) 我们最小化梯度
∇
L
i
\nabla L_i
∇Li 在这个切空间中的投影. 理想情况下, 该点的密度对于与该点相交的所有都是相同的, 所以投影应为0.
颜色一致性损失 : 同样的, 与同一点相交的光线的渲染颜色也应该具有一致性. 通过以下的方式表示神经辐射场的整个渲染过程. 其中: C = L F ( u , v , s , t ) C=LF(u,v,s,t) C=LF(u,v,s,t) .
计算颜色一致性损失为 :
L
c
o
l
o
r
=
E
u
,
v
,
s
,
t
(
R
(
∇
L
F
(
u
,
v
,
s
,
t
)
⋅
p
)
+
R
(
∇
L
F
(
u
,
v
,
s
,
t
)
⋅
q
)
)
\mathcal{L}_{color} = \mathbb{E}_{u,v,s,t}(\mathcal{R}(\nabla LF(u,v,s,t) \cdot p) + \mathcal{R}(\nabla LF(u,v,s,t) \cdot q) )
Lcolor=Eu,v,s,t(R(∇LF(u,v,s,t)⋅p)+R(∇LF(u,v,s,t)⋅q))
其中:
p
=
(
d
^
,
0
,
−
(
1
−
d
^
)
,
0
)
⊤
q
=
(
0
,
d
^
,
0
,
−
(
1
−
d
^
)
)
⊤
d
^
=
∑
i
T
i
α
i
d
i
p = (\hat d,0,-(1-\hat d),0)^\top \\ q = (0,\hat d,0,-(1-\hat d))^\top \\ \hat d = \sum_{i}T_i \alpha_i d_i
p=(d^,0,−(1−d^),0)⊤q=(0,d^,0,−(1−d^))⊤d^=i∑Tiαidi
这里 T i T_i Ti 和 α i \alpha_i αi 是透射率和透明度. d ^ \hat d d^ 是可见表面的预测深度, R \mathcal{R} R 为平滑的 L 1 L_1 L1 损失, 以降低遮挡边界上对异常值的敏感性.
颜色一致性的本质是 : 计算深度为 d ^ \hat d d^ 处的切线空间基 ( p , q ) (p,q) (p,q) , 并最小化这个空间基上 ∇ L F \nabla LF ∇LF 的梯度.
总结 : 训练神经辐射场的总体损失为:
L
=
L
r
e
n
d
e
r
+
λ
d
e
n
s
i
t
y
L
d
e
n
s
i
t
y
+
λ
c
o
l
o
r
L
c
o
l
o
r
\mathcal{L} = \mathcal{L}_{render} + \lambda_{density} \mathcal{L}_{density} + \lambda_{color} \mathcal{L}_{color}
L=Lrender+λdensityLdensity+λcolorLcolor
其中:
L
r
e
n
d
e
r
=
E
u
,
v
,
s
,
t
,
i
(
∥
C
u
,
v
,
s
,
t
−
C
g
t
∥
2
2
λ
d
e
n
s
i
t
y
=
1
0
−
3
,
λ
c
o
l
o
r
=
1
0
−
2
\mathcal{L}_{render} = \mathbb{E}_{u,v,s,t,i}(\|C_{u,v,s,t} - C_{gt} \|_2^2 \\ \lambda_{density}=10^{-3} ,~~~~ \lambda_{color} = 10^{-2}
Lrender=Eu,v,s,t,i(∥Cu,v,s,t−Cgt∥22λdensity=10−3, λcolor=10−2