论文地址:Fast-MVSNet: Sparse-to-Dense Multi-View StereoWith Learned Propagation and Gauss-Newton Refine
一、摘要
以往的MVSNet都聚焦于提高精度,这篇文章从效率入手,提出了Fast-MVSNet。在重建过程中采用从稀疏到稠密,从粗糙到精细的策略。网络主要分为三个部分:
- 构造稀疏代价体来学习得到稀疏但高分辨率的深度图;
- 使用小型的CNN模块对局部区域内像素的深度依赖关系进行抽取,以此来稠密化深度图;
- 3.使用可微分的高斯牛顿层来处理得到亚像素精度的深度图。
二、网络结构
2.1 稀疏深度图生成
第一步是针对参考视图
I
0
I_{0}
I0 生成稀疏的高分辨率的深度图如图所示:
一般的MVSNet方法使用分辨率的深度图进行训练需要将ground true图像下采样,下采样过程中会导致不对齐,丢失细节;下采样过程中,在视差不连续的区域会产生错误插值。
和一般的做法一样,先是使用卷积神经网络提取图像特征,经过相机参数warp到参考视图构建代价体,得到
1
4
H
×
1
4
W
×
N
×
F
\frac{1}{4}H \times\frac{1}{4}W \times N\times F
41H×41W×N×F的稀疏代价体 ,其中
N
N
N 为深度范围,
F
F
F 为特征通道数。由于稀疏的代价体的表现像空洞卷积,因此能拥有更大的感受野。最后使用一个3D U-Net来对稀疏代价体正则化,经过可微分的 argmax操作得到一个稀疏的初始深度图。
2.2 深度传播
初始深度图估计得到了一个稀疏的初始深度图
D
D
D,在这一步需要将初始深度图经深度传播得到一个稠密的深度图
D
~
\tilde{D}
D~ ,使用联合双边上采样,使用原始图像作引导信息如式1所示:
D
~
(
p
)
=
1
z
p
∑
q
∈
N
(
p
)
D
(
q
)
f
(
∥
p
−
q
∥
)
g
(
∥
I
p
−
I
q
∥
)
(1)
\tilde{D}(p)=\frac{1}{z_{p}} \sum_{q \in N(p)} D(q) f(\|p-q\|) g\left(\left\|I_{p}-I_{q}\right\|\right)\tag{1}
D~(p)=zp1q∈N(p)∑D(q)f(∥p−q∥)g(∥Ip−Iq∥)(1)
其中,
f
f
f用于衡量两个像素之间的空间距离,
g
g
g 用于衡量两个像素之间的特征相似性,
N
(
p
)
N(p)
N(p) 为
k
×
k
k\times k
k×k的邻域像素,
z
p
z_{p}
zp是归一化项;使用一个简单的神经网网络来表示
f
(
∥
p
−
q
∥
)
g
(
∥
I
p
−
I
q
∥
)
f(\|p-q\|) g\left(\left\|I_{p}-I_{q}\right\|\right)
f(∥p−q∥)g(∥Ip−Iq∥)如式2所示:
D
~
(
p
)
=
1
z
p
∑
q
∈
N
(
p
)
D
(
q
)
⋅
w
p
,
q
(2)
\tilde{D}(p)=\frac{1}{z_{p}} \sum_{q \in N(p)} D(q) \cdot w_{p, q}\tag{2}
D~(p)=zp1q∈N(p)∑D(q)⋅wp,q(2)
其中权重
w
p
,
q
w_{p,q}
wp,q可以通过神经网络来学习到;
2.3 高斯牛顿层优化
由于前面的步骤为了兼顾效率,因此得到的稠密深度图的精度需要进一步提升,为此使用可微分的高斯牛顿法来优化深度图,优化的目标是最小化一下的代价函数:
E
(
p
)
=
∑
i
=
1
N
∥
F
i
(
p
i
′
)
−
F
0
(
p
)
∥
2
(3)
E(p)=\sum_{i=1}^{N}\left\|F_{i}\left(p_{i}^{\prime}\right)-F_{0}(p)\right\|_{2}\tag{3}
E(p)=i=1∑N∥Fi(pi′)−F0(p)∥2(3)
其中
F
i
F_{i}
Fi 和
F
0
F_{0}
F0 分别表示源图像和参考图像提取得到的特征,
p
i
′
p_{i}^{\prime}
pi′ 表示参考视图中的
p
p
p 点在第
i
i
i 个视图中的对应点,
p
i
′
p_{i}^{\prime}
pi′点计算公式如式4所示(先将p点反投影到到世界坐标系中,再投影到
i
i
i视角的图像坐标系中,
D
~
(
p
)
\tilde{D}(p)
D~(p)为深度值):
p
i
′
=
K
i
(
R
i
R
0
−
1
(
D
~
(
p
)
K
0
−
1
p
−
t
0
)
+
t
i
)
(4)
p_{i}^{\prime}=K_{i}\left(R_{i} R_{0}^{-1}\left(\tilde{D}(p) K_{0}^{-1} p-t_{0}\right)+t_{i}\right)\tag{4}
pi′=Ki(RiR0−1(D~(p)K0−1p−t0)+ti)(4)
其中
{
K
i
,
R
i
,
t
i
}
i
=
0
N
\left\{K_{i}, R_{i}, t_{i}\right\}_{i=0}^{N}
{Ki,Ri,ti}i=0N分别表示第
i
i
i 视图的相机内参,旋转矩阵和平移矩阵;
使用高斯牛顿法来最小化代价函数
E
p
E_{p}
Ep,对于每个残差
r
i
(
p
)
r_{i}(p)
ri(p),计算关于初始深度值
D
~
(
p
)
\tilde{D}(p)
D~(p)的一阶导数:
J
i
(
p
)
=
∂
F
i
(
p
i
′
)
∂
p
i
′
⋅
∂
p
i
′
∂
D
~
(
p
)
(5)
J_{i}(p)=\frac{\partial F_{i}\left(p_{i}^{\prime}\right)}{\partial p_{i}^{\prime}} \cdot \frac{\partial p_{i}^{\prime}}{\partial \widetilde{D}(p)}\tag{5}
Ji(p)=∂pi′∂Fi(pi′)⋅∂D
(p)∂pi′(5)
以此得到当前深度值的增量
δ
\delta
δ
δ
=
−
(
J
T
J
)
−
1
J
T
r
(6)
\delta=-\left(J^{T} J\right)^{-1} J^{T} r\tag{6}
δ=−(JTJ)−1JTr(6)
式中,
J
J
J为雅克比矩阵
{
J
i
(
p
)
}
i
=
1
N
\{J_{i}(p)\}_{i=1}^{N}
{Ji(p)}i=1N,
r
r
r 为残差向量
{
r
i
(
p
)
}
i
=
1
N
\{r_{i}(p)\}_{i=1}^{N}
{ri(p)}i=1N,更新后的深度值如式7所示:
D
~
′
(
p
)
=
D
~
(
p
)
+
δ
(7)
\tilde{D}^{\prime}(p)=\tilde{D}(p)+\delta\tag{7}
D~′(p)=D~(p)+δ(7)
三、损失函数
损失函数如式8所示:
Loss
=
∑
p
∈
p
valid
∥
D
~
(
p
)
−
D
^
(
p
)
∥
+
λ
⋅
∥
D
~
′
(
p
)
−
D
^
(
p
)
∥
(8)
\text { Loss }=\sum_{p \in \mathbf{p}_{\text {valid }}}\|\tilde{D}(p)-\hat{D}(p)\|+\lambda \cdot\left\|\tilde{D}^{\prime}(p)-\hat{D}(p)\right\|\tag{8}
Loss =p∈pvalid ∑∥D~(p)−D^(p)∥+λ⋅
D~′(p)−D^(p)
(8)
其中
D
^
(
p
)
\hat{D}(p)
D^(p)为ground true深度图,
p
v
a
l
u
e
p_{value}
pvalue为有效的像素点集合;同时使用了优化前和优化后的深度图求损失;
四、实验结果