Unsupervised MVS论文笔记
摘要
在2019年6月6日,作者提出了一种基于学习的多视图立体视觉(MVS)的方法。虽然目前的深度MVS方法取得了令人印象深刻的结果,但它们关键地依赖于真实的3D训练数据,而获取这种精确的3D几何图形用于监督是一个主要障碍。相反,作者的框架利用多个视图之间的光度一致性作为监督信号,在一个较宽的基线MVS设置中学习深度预测。然而,仅用光度一致性约束是不可取的。为了克服这一问题,作者提出了一个有效的损失公式: a)强制一阶一致性,b)对每个点,有选择性地强制与一些视图进行一致性,从而隐式地处理遮挡。在不使用真实数据集进行3D监督的情况下,此方法是有效的,并表明提出的有效损失每个组成部分都对重建结果具有显著的改进。作者定性地观察到,作者的重建往往比获得的事实数据更完整,进一步显示了这种方法的优点。
1 引言
从图像中恢复场景密集的三维结构一直是计算机视觉的一个长期目标。多年来,有几种方法通过利用潜在的几何和光度约束来解决这个多视图立体视觉(MVS)任务——一个图像中的一个点沿着极线投射到另一个图像上,并且正确的匹配在光学上是一致的。虽然实施这一见解导致了显著的成功,但这些纯粹的基于几何的方法对每个场景独立,并无法对世界隐式地捕获和利用通用先验,例如表面往往是平的,因此当信号稀疏时有时表现不佳,如无纹理表面。
为了克服这些限制,一项新兴的工作集中于基于学习的MVS任务解决方案,通常训练CNN来提取和合并跨视图的信息。虽然这些方法产生了令人印象深刻的性能,但它们在学习阶段依赖于真实的3D数据。作者认为,这种形式的监督过于繁琐,不是自然可行的,因此,寻求不依赖这种3D监督的解决方案具有实用性和科学意义。
虽然类似的重投影损失已经被最近的方法成功地用于其他任务,如单眼深度估计,但作者注意到,天真地将它们应用于学习MVS是不够的。这是因为不同的可用图像可能捕获到不同的可见场景。因此,一个特定的点(像素)不需要在光度学上与所有其他视图一致,而是只需要那些它没有被遮挡的视图。然而,明确地推理遮挡来恢复几何,提出了一个鸡和蛋的问题,因为遮挡的估计依赖于几何,反之亦然。
为了避免这一点,作者注意到,虽然正确的几何估计不需要与所有视图的光度一致性,但它应该至少与某些视图一致性。此外,在MVS设置中,跨视图的照明变化也很重要,因此只在像素空间中强制执行一致性是不可取的,而作者认为强制执行额外的基于梯度的一致性。
总之,该论文的主要贡献是:
1)提出一个以无监督的方式学习多视图立体视觉的框架,只使用来自新视图的图像作为监督信号。
2)一种用于学习无监督深度预测的有效多视图光度一致性损失,允许隐式地克服跨训练视图之间的照明变化和遮挡。
2 相关工作
多视图立体视觉重建
关于MVS的工作有着悠久而丰富的历史。在这里只讨论有代表性的作品,感兴趣的读者可以进行相关调查。MVS的实现有四个主要步骤:视图选择、传播方案、补丁匹配和深度图融合。已经有研究为每个像素聚合多个视图的方案,作者的构思可以看作是在训练过程中通过损失函数整合了其中的一些想法。基于补丁匹配的立体匹配的方法取代了经典的种子和扩展传播方案。补丁匹配已被用于多视图立体视觉结合迭代实现传播方案,深度估计和法线。深度图融合将单个深度图合并到一个单一点云中,同时确保结果点在多个视图之间保持一致,并删除不正确的估计。深度表示继续主导MVS基准测试和寻找深度图像作为输出的方法,从而将MVS问题解耦成更易于处理的部分。
基于学习的MVS
利用CNN学习到的特征能够很自然地适合于MVS的第三步:匹配图像补丁。CNN特征已被用于立体匹配,同时使用度量学习来定义相似度的概念。这些方法需要一系列的后处理步骤来最终生成成对的视差图。专注于学习MVS所有步骤的工作相对较少。体素表示自然地从不同的视图编码表面可见性,这已经在一些工作中得到证实。选择这种表示的常见缺点是不清楚如何将它们缩放到更多样化和大规模的场景。有些工作使用CNN特征创建代价体,视差值通过可微soft argmin操作回归获得。结合上述方法的优点,并借鉴经典方法的见解,最近的工作为多个视图生成深度图像,并将它们融合以获得三维重建。至关重要的是,上述所有方法都依赖于3D监督,本篇工作放宽了这一要求。
无监督深度估计
由于减少监督需求的类似动机,最近的一些单目]或双目立体深度预测方法利用了光度一致性损失。作为监督信号,这些图像依赖于训练过程中来自双目图像对或单目视频的图像。作为可见性推理的手段,网络用于预测可解释性、失效掩模或通过加入观察置信度的概率模型。这些方法在一个狭窄的基线设置上运行,在训练过程中使用的帧之间的视觉变化有限,因此不会由于遮挡和照明变化而遭受显著的影响。当前的目标是在MVS设置中利用光度损失进行学习,因此Unsupervised MVS提出一个有效的构思来处理这些挑战。
3 实现方法
MVS设置的目标是给定一组输入图像重建场景的密集三维结构,其中这些视图的内参和外参是已知的——这些参数通常可以通过前面的运动结构(SFM)步骤来估计。虽然MVS问题有一些方法集中于不同的3D表示,但我们在这里关注的是基于深度的MVS方法。因此,作者推断出与每个输入相关联的每像素深度图,然后通过将这些深度图反向投影到一个组合的点云中,从而获得密集的三维场景。
利用一个基于学习的系统来预测深度图的步骤,学习一个CNN网络将相邻视图的图像作为输入,并预测中心图像的每个像素的深度图。与以往基于学习的MVS方法有些不同,我们只依赖于可用的多视图图像作为监控信号,而不需要一个地面真实的3D场景。为了利用这种监督,我们建立在经典方法的基础上,发现当投影到其他视图上时,对一个点(图像像素)的精确几何预测应该会产生光度学上一致的预测。我们将使用光度一致性损失来训练我们的深度预测CNN网络,惩罚原始图和可用的新视图中像素强度之间的差异。然而,我们注意到光度一致性的假设并不总是正确的。相同的点并不一定在所有视图中都可见。此外,不同视图之间的照明变化会导致像素强度之间的差异。为了考虑可能的光照变化,我们在光度损失中添加了一阶一致性项,因此也确保除了像素强度外梯度匹配。然后,我们通过提出一个有效的光度损失来隐式地处理可能的遮挡,迫使一个点应该与某些点一致,但不一定与所有的观点一致。
我们描述了用于推断深度的CNN的体系结构,并介绍了普通版本的光度损失,它可以用于以无监督的方式学习这个CNN。然后,我们介绍了另一个有效的光度损失,并描述了总的学习设置、额外的先验和实现细节。而且我们主要关注于深度预测CNN网络的学习,简要总结了在推理过程,以及学习到的CNN网络是如何集成到一个标准的MVS设置中的。
3.1 网络架构
3.2 通过光度一致性学习
在不需要地面真实深度图的情况下,有效地训练我们的深度预测网络,其核心思想是使用基于变换的视图合成损失,这在双目和单目深度预测任务中相当有效,但尚未在非结构化的多视图场景中进行探索。给定一个输入图像 I s I_s Is和额外的相邻视图,我们的CNN网络输出一个深度图d。在训练过程中,我们还可以通过M个同一场景的的新视图{ I v m I_v^m Ivm}来监督预测的深度d。
对于具有相关的内参和相对的外参(K,T)的特定一对视图(
I
s
,
I
v
m
I_s,I_v^m
Is,Ivm),预测的深度图
D
s
D_s
Ds允许我们使用空间变换网络“逆变换”新视图到源视图,然后使用可微双线性采样来产生
I
^
i
\widehat{I}_i
I
i。对于源图像
I
s
I_s
Is中的一个像素u,我们可以通过变换得到其坐标:
u
^
=
K
T
(
D
s
(
u
)
⋅
K
−
1
u
(
1
)
\widehat{u} =KT(D_s(u)·K^{-1}u~~~~(1)
u
=KT(Ds(u)⋅K−1u (1)
然后,在新视图中围绕变换后的坐标周围进行双线性采样,可以获得变换后的图像:
I
^
s
m
(
u
)
=
I
v
m
(
u
^
)
(
2
)
\widehat{I}_s^m(u) =I_v^m(\widehat{u})~~~~(2)
I
sm(u)=Ivm(u
) (2)
其中的变换关系如下图所示:
除了变换后的图像外,还生成了一个二值有效的掩模
V
s
m
V_s^m
Vsm,表示在合成视图中,当一些像素在新视图中投射到图像边界外时的“有效”像素。正如单目深度估计中所做的那样,我们可以制定一个照片一致性目标,指定变换的图像应该与源图像匹配。在我们的多视图系统场景中,可以扩展所有M个新视图到参考视图的逆变换,它的损失是:
L
p
h
o
t
o
=
∑
m
M
∥
(
I
s
−
I
^
s
m
)
⊙
V
s
m
∥
(
3
)
L_{photo}=\sum_{m}^{M} \left \| (I_s-\widehat{I}_s^m)\odot V_s^m \right \| ~~~~(3)
Lphoto=m∑M
(Is−I
sm)⊙Vsm
(3)
这种损失使我们能够学习一个没有真实3D数据来预测深度的CNN网络,但是这个公式有几个问题,例如无法解释遮挡和照明的变化。虽然类似的重投影损失在单眼或立体重建中已经成功地用于KITTI数据集中,但在这些数据集在不同视图的遮挡和光线变化最小。然而,在MVS数据集中,自遮挡、反射和阴影是一个很大的问题。因此,我们扩展了这种光度损失,并提出了一个适合我们的设计的更有效的框架。
3.3 MVS的鲁棒光度一致性
我们提出的鲁棒光度损失公式是基于两个简单的原则——图像梯度对光照变化比光强度变化更重要,并且一个点只需要与一些新点的光度一致,而不是所有。
我们所做的第一个修改实际上利用了多年来MVS研究的见解,其中许多传统方法发现,基于绝对图像强度和图像梯度差异的匹配代价比前者要好得多。我们还发现,由于图像之间的像素强度变化很大,对绝对图像差异方面进行绝对损失是很重要的。因此,基于等式3的逆变换的光度损失被修改以反映这一点:
L
p
h
o
t
o
=
∑
m
=
1
M
∥
(
I
s
−
I
^
s
)
⊙
V
s
m
∥
ϵ
+
∥
(
▽
I
s
−
▽
I
^
s
m
)
⊙
V
s
m
∥
(
4
)
L_{photo}=\sum_{m=1}^{M} \left \| (I_s-\widehat{I}_s)\odot V_s^m \right \|_\epsilon + \left \| (\bigtriangledown I_s-\bigtriangledown \widehat{I}_s^m)\odot V_s^m \right \| ~~~~(4)
Lphoto=m=1∑M
(Is−I
s)⊙Vsm
ϵ+
(▽Is−▽I
sm)⊙Vsm
(4)
我们将此称为一阶一致性损失。
接下来,我们将解决在不同图像中遮挡三维结构所引起的问题。上面讨论的损耗公式要求源图像中的每个像素应该在光度学上与所有其他视图一致。如图3所示,这是不可取的,因为一个特定的点由于遮挡,可能只能在新视图的一个子集中可见。
我们的关键见解是只使用M中评分最高的k个视图来加强每个像素的光度一致性。设
L
m
(
u
)
L^m(u)
Lm(u)表示一个特定像素的一阶一致性损失。我们最终的有效的光度损失可以表述为:
L
photo
=
∑
u
min
m
1
,
⋯
m
K
m
i
≠
m
j
V
s
m
k
(
u
)
>
0
∑
m
k
L
m
k
(
u
)
(
5
)
L_{\text {photo }}=\sum_{u}\min_{\substack{\\ m_1, \cdots m_K \\ m_i \neq m_j \\ V_s^{m_k}(u)>0}} \sum_{m_k} L^{m_k}(u)~~~~(5)
Lphoto =u∑m1,⋯mKmi=mjVsmk(u)>0minmk∑Lmk(u) (5)
上面的方程简单地说明,对于每个像素u,在像素投影有效的视图中,我们使用最佳的K个不相交视图计算损失。这一点如图4所示。为了实现这种鲁棒的光度损失,我们将M个新视图图像与参考图像进行逆扭曲,并计算每像素的一阶一致性“损失图”。所有损失图然后堆叠成一个尺寸W×H×M的3D损失体。对于每个像素,我们找到K个具有有效掩码的最小值条目,并将它们求和得到像素级一致性损失。
图4:用于训练的鲁棒像素级聚合损失的可视化。从网络中预测的深度图与参考图像一起用于变换和计算M个非参考相邻视图的损失图,如等式4所示。然后M个损失图被连接成一个维度为H×W×M的体积,其中H和W是图像维度。这个体积沿着体积的第三维(即M损失图)选择K个“最佳”(最低损失)值,然后取平均值来计算有效的光度损失。
3.4 学习设置和实施的细节
在训练过程中,我们的深度预测网络的输入包括一个源图像和N = 2个相邻视图。然而,我们使用更大的视图集(M = 6,K = 3)来加强光度一致性。这允许我们从更大的图像集中提取监控信号,而只需要更小的推理集。除了上述有效的光度损失外,我们还添加了结构相似性(
L
S
S
I
M
L_{SSIM}
LSSIM)和深度平滑性(
L
S
m
o
o
t
h
L_{Smooth}
LSmooth)损失。平滑性损失强调在预测的视差图上具有与边缘相关的平滑性。SSIM损失在变换的图像上是一个更高阶的重建损失,但由于它是基于更大的图像补丁,我们不应用我们的像素级选择方法的光度损失,相反,使用视图选择得分最高的两个相邻视图来计算SSIM损失。我们最终的端到端无监督学习目标函数是前面描述的损失的加权组合:
L
=
∑
α
L
p
h
o
t
o
+
β
L
S
S
I
M
+
γ
L
S
m
o
o
t
h
(
6
)
L=\sum \alpha L_{photo }+\beta L_{S S I M}+\gamma L_{S m o o t h}~~~(6)
L=∑αLphoto+βLSSIM+γLSmooth (6)
在我们所有的实验中,我们都使用了α = 0.8,β = 0.2和γ = 0.0067。该网络采用ADAM优化器进行训练,学习速率为0.001,动量衰减因子为0.95。使用TensorFlow来实现该算法。网络的高GPU内存要求意味着在训练中使用更小的图像分辨率和更粗的深度步长是有效的,而更高的设置可以用于评估。在实验部分中提到了图像分辨率的使用。
3.5.预测每幅图像的深度图
在测试时,我们通过我们的网络取一组三维场景的图像预测每幅图像的深度图。这是通过网络传递一个参考图像和2个相邻的图像来实现的,这些图像是根据相机基线或一个视图的选择评分来选择。然后将这一组深度图像进行融合形成点云。我们使用了 Fusibile一个开源的实用工具来进行点云融合。
4 实验
4.1 在DTU上的结果
使用官方规定的指标在DTU数据集的测试分割上评估我们的模型:
精度(Accuracy):重建点到真实值的平均距离。
完整性(Completion):真实值到重建点的平均距离。
总体性能(Overall):准确性和完整性的平均值。
此外,我们报告了在坦克和寺庙数据中使用的百分比度量和f-score(测量点云的总体准确性和完整性)。
我们定量地评估了三种无监督模型,即:
- 光度一致性:该模型结合使用了如方程3中所述的原始光度图像重建损失,以及SSIM和平滑损失。
- 光度+一阶损失:我们用我们提出的方程4的一阶梯度一致性损失来代替原本的光度损失,这使得网络更加适应局部照明的变化(在表1中表示为光度+G)
- 鲁棒性:我们的最佳模型,它结合了一阶梯度一致性损失和top-K视图聚合方案。
为了在无监督的背景下替换成将我们的方法,除了无监督的光度设置外,我们还将我们的模型与两种经典方法进行了比较,以及另外两种最近的深度学习方法,它们都是完全监督的,SurfaceNet和MVSNet。据我们所知,在2019年 6月前,我们不知道任何其他现有的基于深度学习的模型以无监督的方式学习这项任务,但我们的方法做到了。
我们发现,对于我们的模型,一个具有稳健损失的模型,在所有指标上都显著优于没有稳健损失的模型。为了表征我们模型的模型性能,我们进一步计算距离阈值高达10mm的百分比指标,并在图7中报告F-score图。
如表1所示,虽然我们的模型在高分辨率(< 1mm)上遇到了困难,但在增加分辨率方面,我们优于所有其他方法(除了完全监督的MVSNet模型)。这表明,虽然一些经典的方法在非常低的阈值下比我们的方法更准确,但我们的方法产生的异常值更少。表1中的定量结果和图5中误差的定性可视化显示,我们的鲁棒模型获得了更高质量的重建。图8显示了我们的模型在低纹理区域的优越性能。
4.2 消融实验
为了说明top-K的优质选择,我们可视化从不同的视图中被选择的光度一致性的像素频率。我们在训练和验证数据集上运行训练后的模型50次,并存储top-K操作的频率计数,如图6所示。我们可以观察到两件事: 1)一个视图的选择频率与它的视图选择分数成正比。这验证了用于选择图像集进行训练的视图选择标准直接对应于光度一致性;2)超过50%的选择来自排名低于2的视图,这就解释了为什么增加额外图像可以获得更好的性能。
在我们的稳健损失公式中,我们消除了变化K的影响。从表3中可以看出,使用K = 3(M=6张图输入),即50%的非参考图像具有显著更好的验证精度。请注意,为了进行验证,我们使用了针对真实深度图的精度。我们报告了深度值的绝对差值小于3%的像素的百分比。