前言
NeRF从2020年发展至今,仅仅三年时间,而Follow的工作已呈井喷之势,相信在不久的将来,NeRF会一举重塑三维重建这个业界,甚至重建我们的四维世界(开头先吹一波)。NeRF的发展时间虽短,有几篇工作却在研究领域开始呈现万精油趋势:
- PixelNeRF----泛化法宝
- MipNeRF----近远景重建
- NeRF in the wild----光线变换下的背景重建
- NeuS----用NeRF重建Surface
- Instant-NGP----多尺度Hash编码实现高效渲染
本篇是NeRF必读系列的最后一篇:NeRF in the Wild. 该篇主打一个Appearance Embedding, 由于该方法在生活场景中的普适性被大范围的使用,可以说再以后NeRF的文章中,NeRF-W将成为一篇难以避开的引用文章。
先插一句题外话,现在各行各业都流行一个通用的Framework, 例如搞detection的都有MMCV,MMDETECTION。基于Framework可以快速迭代自己的idea,在知识迅速爆炸的今天,学会各行各业的框架可谓是至关重要!所以在结束本期的paper解析之后,我将开启NeRFStudio系列的解析文章,开始NeRF领域的迅速迭代之旅!在此奉上NeRFStudio的pipeline,可以发现大部分文章我们都已经在前文中学习,仅剩下NeRF-W以及NeRF减减没有解析。下面补齐这两篇。
NeRF-W Main Contributions
- Appearance Variations Embedding: 户外场景下被重建物体的曝光度,光线,季节、天气等的变换都会影响物体给出的appearance, 作者构造了一个Embedding层用来表征 ∇ V a p p r e a r a n c e \nabla V_{apprearance} ∇Vapprearance的低维描述
- Transient Embedding:作者利用将一张图像分解为场景共享部分(shared elements)和依赖于图像的瞬息部分(transient elements,如名胜古迹照的游客),并利用一个Transient Embedding层无监督地将这两个部分分解开来。具体的pipeline 如下:
经典Volumetric Rendering:
C
^
(
r
)
=
R
(
r
,
c
,
σ
)
=
∑
k
=
1
K
T
(
t
k
)
α
(
σ
(
t
k
)
δ
k
)
c
(
t
k
)
where
T
(
t
k
)
=
e
x
p
(
−
∑
k
′
=
1
k
−
1
σ
(
t
k
′
δ
k
′
)
)
,
\hat{\mathbf{C}}(\mathbf{r})=\mathcal{R}(\mathbf{r, c},\sigma)=\sum^{K}_{k=1}T(t_k)\alpha(\sigma(t_k)\delta_k)\mathbf{c}(t_k)\\ \text{where} \space T(t_k)=exp(-\sum^{k-1}_{k'=1}\sigma(t_{k'}\delta_{k'})),
C^(r)=R(r,c,σ)=k=1∑KT(tk)α(σ(tk)δk)c(tk)where T(tk)=exp(−k′=1∑k−1σ(tk′δk′)),
写成MLP的表达式如下:
[ σ ( t ) , z ( t ) ] = M L P θ 1 ( γ x ( r ( t ) ) ) c ( t ) = M L P θ 2 ( z t , γ d ( d ) ) \begin{aligned} [\sigma(t),\bf{z}(t)]=MLP_{\theta_1}(\gamma_{\bf{x}}(\bf{r}(t))) \\ \bf{c}(t)=MLP_{\theta_2}(\bf{z}_t,\gamma_d(d)) \end{aligned} [σ(t),z(t)]=MLPθ1(γx(r(t)))c(t)=MLPθ2(zt,γd(d))
作者为了强调
σ
(
t
)
\sigma(t)
σ(t)与观测角度无关,额外输出了隐变量
z
(
t
)
\mathbf{z}(t)
z(t),做为根据
(
x
,
d
)
\mathbf{(x,d)}
(x,d)生成color的condition。
最后是Coarse And Fine Loss:
∑
i
j
∥
C
(
r
i
j
)
−
C
^
c
(
r
i
j
)
∥
2
2
+
∥
C
(
r
i
j
)
−
C
^
f
(
r
i
j
)
∥
2
2
\sum_{ij}\Vert \bf{C}(\bf{r}_{ij}) -\bf{\hat{C}^c}(\bf{r}_{ij}) \Vert^2_{2}+\Vert \bf{C}(\bf{r}_{ij}) -\bf{\hat{C}^f}(\bf{r}_{ij}) \Vert^2_{2}
ij∑∥C(rij)−C^c(rij)∥22+∥C(rij)−C^f(rij)∥22
以上便是经典的NeRF操作,下面作者开始介绍作者的魔改:
Latent Appearance Modeling
这一段在论文中4.1节,非常简约,作者给每张image分配了一个关联的隐编码
l
i
(
a
)
\mathcal{l}^{(a)}_i
li(a),
l
i
(
a
)
\mathcal{l}^{(a)}_i
li(a)会随着训练被优化,优化后的公式如下:
C
^
i
(
r
)
=
R
(
r
,
c
,
σ
)
c
i
(
t
)
=
M
L
P
θ
2
(
z
t
,
γ
d
(
d
)
,
l
i
(
a
)
)
\hat{\mathbf{C}}_i(\mathbf{r})=\mathcal{R}(\mathbf{r, c},\sigma)\\ \bf{c}_i(t)=MLP_{\theta_2}(\bf{z}_t,\gamma_d(d),\mathcal{l}^{(a)}_i)
C^i(r)=R(r,c,σ)ci(t)=MLPθ2(zt,γd(d),li(a))
关于
l
i
(
a
)
\mathcal{l}^{(a)}_i
li(a)的故事我会在后面详细述说,感兴趣的读者可以三连,点赞破10我加班更新,扑哧~
Transient Objects
瞬息物体对我们需要渲染的主体部分进行了遮挡,因此最后渲染图片的颜色也应该是不同的,作者按照这个思路增加了一个MLP, 并给出了改进后的渲染公式:
C
^
(
r
)
=
∑
k
=
1
K
T
(
t
k
)
(
α
(
σ
(
t
k
)
δ
k
)
c
(
t
k
)
+
α
(
σ
i
(
τ
)
(
t
k
)
δ
k
)
c
i
(
τ
)
(
t
k
)
)
where
T
i
(
t
k
)
=
e
x
p
(
−
∑
k
′
=
1
k
−
1
(
σ
(
t
k
′
)
+
σ
i
(
τ
)
(
t
k
′
)
)
δ
k
′
)
\hat{\mathbf{C}}(\mathbf{r})=\sum^{K}_{k=1}T(t_k)(\alpha(\sigma(t_k)\delta_k)\mathbf{c}(t_k)+\alpha(\sigma^{(\tau)}_i(t_k)\delta_k)\mathbf{c}^{(\tau)}_i(t_k))\\ \text{where} \space T_i(t_k)=exp(-\sum^{k-1}_{k'=1}(\sigma(t_{k'})+\sigma^{(\tau)}_i(t_{k'}))\delta_{k'})
C^(r)=k=1∑KT(tk)(α(σ(tk)δk)c(tk)+α(σi(τ)(tk)δk)ci(τ)(tk))where Ti(tk)=exp(−k′=1∑k−1(σ(tk′)+σi(τ)(tk′))δk′)
至此便能刻画出在存在Transient Objects的情况下,Volumetric Rendering的过程了,但作者并没有到此为止,更进一步的优化了Loss的分配比重。对于始终都是静态的图像区域,color的分布方差肯定较小,而transient objects较多的区域,color分布的方差会比较大,对于梯度的方向当然要多给跟方差变化较小的区域~
根据此思路,作者选择在渲染过程中直接估计方差
β
^
i
(
r
)
=
R
(
r
,
β
i
,
σ
i
τ
)
\hat{\beta}_i(\mathbf{r})=\mathcal{R}(\mathbf{r},\beta_i,\sigma^{\tau}_i)
β^i(r)=R(r,βi,σiτ)
经过上述讨论,构建
MLP
θ
3
\text{MLP}_{\theta_3}
MLPθ3如下所示:
[
σ
i
(
τ
)
(
t
)
,
c
i
(
τ
)
(
t
)
,
β
~
i
(
t
)
]
=
MLP
θ
3
(
z
(
t
)
,
l
i
(
τ
)
)
β
i
(
t
)
=
β
m
i
n
+
l
o
g
(
1
+
e
x
p
(
β
~
i
(
t
)
)
)
[\sigma^{(\tau)}_i(t),\mathbf{c}^{(\tau)}_i(t),\tilde{\beta}_i(t)]=\text{MLP}_{\theta_3}(\mathbf{z}(t),\mathcal{l}^{(\tau)}_i)\\ \beta_i(t)=\beta_{min}+log(1+exp(\tilde{\beta}_i(t)))
[σi(τ)(t),ci(τ)(t),β~i(t)]=MLPθ3(z(t),li(τ))βi(t)=βmin+log(1+exp(β~i(t)))
其中下式的意义是将输出从
(
−
∞
,
+
∞
)
(-\infty,+\infty)
(−∞,+∞)映射到
(
0
,
+
∞
)
(0,+\infty)
(0,+∞),作者把上述loss构造给了fine model,而coarse model还是使用了经典loss
L
i
(
r
)
=
∥
C
i
(
r
)
−
C
^
i
(
r
)
∥
2
2
2
β
i
(
r
)
2
+
l
o
g
β
i
(
r
)
2
2
+
λ
μ
K
∑
k
=
1
K
σ
i
(
τ
)
(
t
k
)
L
t
o
t
a
l
=
∑
i
j
L
i
(
r
i
j
)
+
1
2
∥
C
(
r
i
j
)
−
C
^
i
c
(
r
i
j
)
∥
L_i(\bm{r})=\frac{\Vert\bm{C}_i(\bm{r})-\hat{\bm{C}}_i(\bm{r})\Vert^2_2}{2\beta_i(\bm{r})^2}+\frac{log\beta_i(\bm{r})^2}{2}+\frac{\lambda_\mu}{K}\sum^K_{k=1}\sigma^{(\tau)}_i(t_k)\\ L_{total}=\sum_{ij}L_i(\bm{r}_{ij})+\frac{1}{2}\Vert C(\bm{r}_{ij})-\hat{C}^c_i(\bm{r}_{ij})\Vert
Li(r)=2βi(r)2∥Ci(r)−C^i(r)∥22+2logβi(r)2+Kλμk=1∑Kσi(τ)(tk)Ltotal=ij∑Li(rij)+21∥C(rij)−C^ic(rij)∥
参考文献
Martin-Brualla, Ricardo, et al. “Nerf in the wild: Neural radiance fields for unconstrained photo collections.” Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2021.