新知一下
海量新知
6 5 2 3 1 9 7

浅谈如何基于深度方法进行三维重建(续)

我爱计算机视觉 | 计算机视觉与机器学习技术最前沿 2022/09/23 09:23

最近顶会纷纷发榜,又积累了一批室内三维重建的优秀方法。因而本篇继续介

绍室内三维重建方向的优秀论文。之前我已经写过一篇相关文章(介绍了mobile3Drecon, Atlas, Neuralrecon)了,如果有同学想了解请看这里:

浅谈如何基于深度方法进行三维重建

(或知乎:https://zhuanlan.zhihu.com/p/547411687)。

本文继续带大家了解场景三维重建的一些优秀文章。在开始正文前,简单归纳一下目前主流的场景三维重建的实现方案。

基于深度图融合方法 ,尝试直接预测有向距离场(SDF)或截断有向距离场值(TSDF)或occupancy value,从而进行三维重建。我之前写的文章详细的总结了如何使用TSDF进行三维重建。今天的文章里面会提到使用occupancy value进行重建的方法。

基于MVS进行单帧深度图预测 ,之后调用深度图融合方法,生成三维重建结果。与1的不同是,使用了显性的模型融合方式解决问题。

近似重建过程 。这里举apple开发的三维重建链路为例子,重建过程中对于所有形体,统一按照检测出的三维物体框,替换为对应的立方体(厚度视种类而定)。这种方式相比于上面的两种,真实度就差了很多,但是重建的效果很简洁。

最近两年的工作则聚焦于直接通过重建表面来实现整体的三维重建,这种方式现在可以取得很高的重建质量,但是整体重建速度受限于资源,往往不能实现实时+低内存消耗,这对于端侧硬件来说是很难接受的。

今天我们重点围绕方案一、二,介绍相关优秀论文。

注:本文所有截图来自对应章节的对应论文,版权属于原作者。

01

TransformerFusion

我们首先介绍一下TransformerFusion这篇文章。本文基于Neuralrecon(关于Neuralrecon的介绍请见上文)做了进一步改进,主要处理了关键帧选取这一核心问题。

新知达人, 浅谈如何基于深度方法进行三维重建(续)

TransformerFusion尝试使用transformer进行室内三维重建。作者使用视频+对应的姿态作为输入,对应的每一帧视频会被编码到代表场景的特征网格内,并解码为对应的三维场景表示。这一算法的关键在于,引入了transformer以更好的学习最重要的视频帧。同时特征学习遵循了由粗到细(course-to-fine)的过程,只存储精细特征,以节约所需的gpu内存。最后,区别于Atlas与NeuralRecon,使用了基于occupancy预测的方式(而非tsdf预测)来进行建模。

下图展示了TransformerFusion的整体框架。

新知达人, 浅谈如何基于深度方法进行三维重建(续)

给定一组视频帧(N张图像),以及对应的相机内外参,TransformerFusion尝试通过直接预测occupancy value的方式来进行物体表面预测。每张图会经过一个二维的卷积编码器,逐步提取粗特征与精细化特征。

学习好这些特征后,我们尝试重建一个三维特征池,通过以30cm距离均匀采样三维网格点来采样粗特征点,并进一步采用10cm距离均匀采样来采样细部特征点。对于这些粗提取点与精细提取点,我们索引其对应的N张图的二维特征,并预测融合后的粗+细特征。具体预测的方式为使用transformer网络(文中由特征+权重代表)。

完成特征提取后,使用三维卷积神经网络对于各个尺度的特征进行卷积,并预测场景的occupancy值。具体实现方式为,输出的特征会以三次方插值的形式被升采样,并且统一作为MLP的输入来预测occupancy。

这里额外要注意的是,基于occupancy value建模的方式,是受启发于convolutional occupancy networks 与 IFNets。完成occupancy field建模后,模型通过marching cube的方式对表面进行提取,并同时对于近表面位置预测occupancy mask,这会被用来进行表面过滤以移除无关点,也使得实时重建成为可能。

TransformerFusion额外存储了中间层的注意力权重来进行关键帧选择。训练过程中只使用K张随机输入图像,测试阶段,选择第一层transformer对应的权重,去决定k张图里面,使用具体哪几张输入图像。

对于新的输入图像,提取其二维特征,然后对于粗+细特征进行特征融合,这返回了融合特征以及所有目前集聚的输入对应的权重。如果集聚量达到K,则会选择其中权重最低的一张图丢弃。通过这种方式保证了最少的输入量对应的K组权重,使得模型可以正常工作。

关于损失函数,TransformerFusion使用BCE损失来预测occupancy mask,实际损失优化会同时包括粗层和精细层。同时引入BCE损失进行surface occupancy预测。TransformerFusion不涉及坐标预测等回归任务,因而不需要回归损失。

TransformerFusion具体实现细节

细节一:对于输入视频帧+姿态,如何进行预处理?

给定可能的采样位置,先使用内外参完成二维坐标与三维坐标之间的映射,然后使用双线性插值进行采样。为了保证采样有效,额外引入了像素有效性作为输入来进行判断。除了使用上述二维特征,额外使用了投影深度与光束照射方向(使用了相机中心点进行了归一化)作为输入,使用了FCN进行patch embedding,以预测融合特征和与之对应的权重。

细节二:上文提到的粗+细(coarse-to-fine)具体指的是什么?

使用了course-to-fine的方式预测表面结果,就类似于FPN的方式。由于三维

预测出来的点是密集的, 直接进行表面提取,需要资源会非常多。 因此,使用了surface filtering的方式,通过预测occupancy mask,来只去重建近表面位置。 这里要注意的是,occupancy mask是对整体形体进行预测,使用了三维卷积实现。 其对应真值由三维重建阶段的重建过程提供。

细节三:三维重建如何实现?

最终的表面重建由解码粗+细特征网格到对应occupancy值来实现。对于给定点,使用立方插值的方式,计算其特征表示,并合并对应特征以预测该点的 occupancy,这里引入了MLP+Relu +残差链接+layernorm进行预测。

细节四:三维模型密集点多,所需时空间复杂度高,如何提升训练效率?

为了提升训练效率,实际训练对应场的体积为1.5*1.5*1.5,内部实际采样一千个点,其中80%在场表面10cm内,剩余20%均匀的在场内(<10cm)采样。occupancy真值由RGBD重建结果提供。

VoRTX

Vo RT X 对于同样立足于处理关键帧选择这一问题,来进一步优化三维重建精度。 更进一步的,VoRTX在挑选关键帧的同时,还考虑如何分配关键帧权重,以更好的进行三维重建。 这两点也是VoRTX的核心贡献。

传统方式(例如atlas)选择使用全部挑选好的关键帧进行三维重建。这种方式在作者看来会有很大的问题。举例来说,如果获取视频帧对应的姿态差异很大 ,那么这些帧的时序关系可能很弱 ,其对应的内容相关性则不一定很大。 但是对于卷积神经网络来说,它提取图像中底层视觉特征的能力较强,但是进行合理空间匹配的能力则严重受限(也就是仅仅在若干帧之内有效)。 这个问题也是MVS领域的常见问题。

MVS领域对此的解决方法为,

  • 使用相机姿态进行限制并最小化差异

  • 制图像特征 尽可能独立于视角(姿态)

但是VoRTX认为,更好的方式应该是,直接学习基于姿态的图像内容来解决姿态对于三维重建的限制。

另一个主要问题是,直接对于所有输入全部分配相同权重,甚至对于被堵塞的视角对应的voxel也这样做,本身是不合理的。对于堵塞越严重的场景,这样的问 题越大。 为什么这样说呢? 因为场景被堵 塞的情况下,场景对应真值是无法在回投(backprojection)或者直接重建的情况下拿到的,因为必须已知后者才能计算前者; 但是堵塞情况下没法计算前者。 这就让场景重建变成了“先有鸡还是先有蛋”的问题了。

为了解决上述两个问题,VoRTX使用了基于transformer(ViT)的方式去建模不同视角间的依赖关系。transformer使用自注意力机制去软性聚类互相关(mutually relevant)视角。通过学习这种关系,可以帮助模型融合不同的特征空间对应特征。

Tran sformer本身也提供了一 种自然的机制来处理堵塞问题。 对于堵塞问题,由于注意力机制可以作为对于每个输入视角的三维建模函数,那么就可以据此,对于场景聚合问题,使用监督学习来增强非堵塞区域权重,并减少堵塞区域权重。

下面这幅图是基于transformer结果的VoRTX,与其他baseline模型,对于深度图预测结果的对比。

接下来我们介绍一下VoRTX的具体实现:

VoRTX使用一系列无顺 序视频帧以及与之对应的姿态作为输入,同时学习对应的全局TSDF网格重建结果。 训练阶段额外假设需要每帧与之对应的深度图。 具体来说,模型使用二维卷积网络进行特征提取并且回投到三维空间。 整体上与之前一系列介绍的模型的建模方式区别不大。 但是仍旧有两个主要区别。

图像特征回投以及集聚的方式不同。使用transformer来处理单视角图像特征,并且在集聚每个voxel对应的特征前,选择性的把它们融合。这极大的拓展了模型合理选择关键帧的能力。

对于最终的特征聚合,使用了不同的权重。这可以强迫图像特征集聚到属于他们对应位置的物体表面上。

新知达人, 浅谈如何基于深度方法进行三维重建(续)

这里是 VoRTX 的框架图

新知达人, 浅谈如何基于深度方法进行三维重建(续)

VoRTX整体框架和前面介绍的Neuralrecon很相似。整体使用了二维卷积网络(FPN+MnasNet)进行特征提取,得到对应二维特征后,回投到三维空间对应的grid内,按照FPN输出特征尺度,依次分为粗、中等、细三种特征池。之后分别接入Transformer,对每个视频帧对应的特征进行挑选,得到合适的关键帧,然后再接入三维卷积网络来预测occupancy。

在每组分辨率上,如果当前的voxel被预测为空,则会被剪枝,不参与之后的预测过程。但是在最后一组(细粒度最高一层)输出上,模型预测tsdf值,并使用marching cubes提取零表面。每层细粒度对应的voxel尺度分别为16,8,4立方米。

那么VoRTX如何挑选关键帧呢?

首先解释VoRTX挑选关键帧的目的:为了在无限制的帧里面学到类似特征的聚合关系,这样子就可以不依赖外在条件来进行筛选。所以VoRTX希望尽快能的在保持数据视角多样性的情况下,减少视频帧数。具体来说,VoRTX使用了transformer来实现这个功能,基于回投特征来进行挑选。对于每个voxel,transformer输入一批无顺序单视角特征向量,其中引入了深度和姿态,并生成对应的多维特征。由于输入阶段引入了姿态和深度信息,对应的位置和方向信息也存在特征中。

这里作者改动了transformer的编码方法,使用了相机姿态编码的方式,取代transformer的位置编码。给定相机光束起点到voxel的位置方向,使用位置编码对此进行编码(而非像是传统方式对于图像特征编码),编码后与图像特征合并,并且使用全连接层来减少特征维度。

最后把归一化的相机深度与生成的新特征合并,然后再使用全连接层来减少特征维度,最终结果作为transformer输入。作者同时也使用了Neuralrecon里面挑选关键帧的方法。然后对于每个子体素,使用随机采样的方式挑选N帧关键帧。这里VoRTX额外有个要求:这些关键帧的视角和目标体素上对应的相机视角需要重合。

Transformer的结构如下,仅使用了传统Transformer的编码结构。

新知达人, 浅谈如何基于深度方法进行三维重建(续)

VoRTX进一步处理了视角被堵塞的问题。

首先来讨论一下本文中的一个重要贡献:可以不依赖输入视频的时序顺序完成重建任务。这也就意味着,不同的视角之间,可能会相差很大的度数。但是在传统的MVS任务中,希望给定场景的baseline的距离较小,同时符合“平行平面假设(fronto-parallel assumption)”。

那么什么是“平行平面假设”呢?实际求解深度图(MVS任务核心应用)的时候,希望解出来的深度图是与观测相机平行的平面,否则如果场景里有一个倾斜的平面,这时候优化器希望解出由近到远的一个斜面,而正则项约束相邻像素深度相等,于是 SGM 的结果里,深度图被解成一层一层的断裂,造成非常严重的bias。这会向重建结果引入大量噪声。

因此作者重新思考了如何准确定义可见性这个问题。我们进行三维重建的一个主要目标是,通过合理转换多组图像特征到三维中,来估测三维表面位置。如果我们按照空间排布,沿着相机照射光线,根据估测投影occupancy值来分配这些特征,他们的空间密度则大概率会在估测目标表面深度的中心位置。

正相反的,如果特征的空间排布是按照可见度来排布的,那么他们的空间密度则会横跨所有观测空间,这会导致部分特征无法靠近真正的物体表面,如果深度被低估的话。因此,估测投影occupancy值是更为合适的做法。

下图通过画出特征点对应距离到表面的函数来进一步解释这个问题。

新知达人, 浅谈如何基于深度方法进行三维重建(续)

考虑去预测occupancy值还可以让模型更容易学习。原因如下,

  • 学习occupancy值只需要考虑tsdf的数值

  • 但是预测是否可见,则需要预测tsdf的符号

理论上来说,估测tsdf数值只需要两组图像投影特征作为输入,使用匹配代价函数即可完成优化。但是学习tsdf的符号则需要进一步了解不符合的特征对应的方向,并且和相对姿态进行比较。因此,尝试通过预测可见度来解决堵塞问题,不如预测occupancy值来的更加容易。

这里估测occupancy值的方式和传统方式略有不同。

首先需要计算sdf值,公式如下

新知达人, 浅谈如何基于深度方法进行三维重建(续)

然后判定该位置是否被占据(实际用的是tsdf去算的)

新知达人, 浅谈如何基于深度方法进行三维重建(续)

VoRTX使用被transformer+MLP处理的特征(计为X),通过一系列全卷积层之后,生成occupancy值,之后即可使用BCE损失来计算对应位置的occupancy值了。为了可以使用X进行特征聚合,VoRTX将一组零概率向量与X合并,之后使用softmax算子去生成一组1*(N+1)维向量。

同时把一组零特征向量加入到输出特征(也就是transformer输出特征)上,两者相乘,得到最终特征。这里使用softmax对权重归一化,可以保证权重不受到输入视角N的影响。额外填入一组零向量(padding zero vectors)则可以让输出特征靠近零,如果所有预测的occupancy值很低(也就是没有表面)。

02

SimpleRecon

这里我们接着为大家介绍SimpleRecon(ECCV 2022)这篇文章。这篇文章部分借鉴了Neuralrecon和TransformerFusion以及VoRTX,因而我们先介绍Neuralrecon(详细介绍请看前篇)与TransformerFusion和VoRTX,再来带大家看SimpleRecon这篇文章。

SimpleRecon的框架图如下

新知达人, 浅谈如何基于深度方法进行三维重建(续)

给定输入相机视频帧以及对应内参与姿态,SimpleRecon会训练一个模型去学习对应视频帧的深度图,并且在测试阶段进行预测。具体来说,SimpleRecon通过使用基于cost volume的编解码结构,尝试直接学习深度图。模型首先对图像进行特征提取,之后输出的cost volume通过二维编解码卷积网络进行学习,并且和一个预训练网络提取的特征进行特征融合以学习更有代表性的特征。

那么什么是cost volume呢?这里提到的cost volume是四维张量,尺度为 C * D * H * W。对于每个空间位置(k,i,j),k是深度平面的索引,C是特征维度。这个张量包含了参考图像特征以及对应的一系列变换后的图像特征。

之后,相比于其他论文的一个创新点,作者向cost volume中引入了metadata,期望通过metadata为模型训练提供更多先验知识。由于metadata是SimpleRecon中非常核心的一环,这里我们花比较长的篇幅来重点介绍。

首先给出metadata的结构图。

新知达人, 浅谈如何基于深度方法进行三维重建(续)

通过引入Metadata,向cost volume中存储了什么信息?

实际以引入特征(显性+隐性)的方式,存储了如下信息:

  1. (显性)基于特征的点乘:直接对参考图像特征以及原始图像进行点乘,用来衡量相关性。

  2. (显性)光束方向:相较于相机原点,归一化的点坐标(i,j,k)方向。这里包括参考帧与原始帧的光束方向

  3. (显性)参考平面深度:描述了cost volume里面参考相机到某点(i,j,k)的垂直深度

  4. (显性)参考帧投影深度:cost volume里面源相机到给定三维点(i,j,k)的垂直深度

  5. (显性)相对光束夹角:参考光束方向与源光束方向的夹角

  6. (显性)相对姿态距离:衡量参考帧对应姿态与源视频帧对应姿态的距离

  7. (显性)深度有效性蒙版(mask):这是一个二值蒙版,记录了cost volume中给定点(i,j,k)是否处于相机前面

  8. (隐性)SimpleRecon额外进行了特征排序,基于MLP网络内在的顺序依存关系。具体来说,就是调整了源特征通道的排列顺序。具体的排布方式为,使用相机相对姿态距离来排布。这种方式已被证明对于关键帧选择有极好的效果,也可以让MLP同时基于姿态距离和特征相关性进行选择。

相对姿态距离计算公式请见下图。

新知达人, 浅谈如何基于深度方法进行三维重建(续)

这些特征会统一送入MLP中进行学习,并且在每个三维点位置输出一个标量。这个标量代表了给定图像二维坐标(i,j)对应深度为k的可能性的初始估测。

那么使用metadata有什么好处呢?

Metadata通过显性的引入更多的特征通道,以及(隐性的)确保特定的特征排序,可以在不引入耗时的三维卷积或复杂的时序融合的方式下,更高效的完成三维重建。通过合理的使用metadata,模型可以直接输出预测的深度图,并且跳过基于三维卷积学习四维metadata的过程。

具体实现方式为,通过引入metadata,增强图像层级的特征并扩充通道数。这些通道编码了图像对应的三维关系,对于构造cost volume有很大帮助。同时允许网络更好的归因每张原始输入图像的重要性,可以帮助更好的估测某特定位置像素对应的深度。

使用Metadata的作用是什么呢:

使用metadata可以帮助MLP更好的权衡每一组输入的源帧在每个像素点的贡献。

例如考虑相对姿态距离这个变量。可以很明显的看到,离相机越远的距离,具有更大baseline的匹配特征,带来的信息量会更大。

再例如光线信息。对于判断是否出现堵塞情况很有帮助。如果参考帧对应的特征和源帧并不匹配,并且源帧和参考帧之间有很大的夹角,那么更有可能是堵塞,而非不正确的深度造成的。

深度有效性蒙版可以帮助判断,是否可以相信点(k,i,j)处的特征。如果判定无效,说明该特征并不匹配该相机处的视角。

Simplerecon损失函数

Simplerecon对应的损失函数具体如下:

  • 多尺度深度图回归损失:衡量了深度图学习的表现。这里是对每个参考深度图,在不同尺度上进行损失计算。使用了log尺度下的深度图 + mean absolute error实现。实际计算阶段,会对预测的深度图进行采样,升高至最高的预测尺度。对于所有损失,会基于每个batch,每个scale,每个像素进行平均。

  • 多尺度梯度归一化损失:对于最高分辨率的输出网络,使用了多尺度梯度损失。其中引入了一阶空间梯度并且下采样到每个尺度来计算梯度损失。此外,使用了简化的归一损失,使用1减去归一化图(normal map,由深度图+内参计算得来)的内积来计算。

  • 多维度深度图损失:在多尺度深度图回归损失的基础上,引入了多维度深度图损失。对于每个源视频帧,同时投影其预测深度以生成预测深度图。之后使用log尺度下的深度图结果,在所有有效的像素点上,计算mean absolute error。

多尺度深度图回归损失函数计算

新知达人, 浅谈如何基于深度方法进行三维重建(续)

多尺度梯度归一化损失函数计算

新知达人, 浅谈如何基于深度方法进行三维重建(续)

新知达人, 浅谈如何基于深度方法进行三维重建(续)

03

结语

本文汇总了三篇近两年三维重建相关的顶会论文,继续介绍了训练阶段基于深度信息,测试阶段仅需视频就可支持可泛化三维重建的优秀算法。可以看到,仅仅对于已有优秀论文中的一个或多个模块进行优化,便可进一步取得满意的效果提升。由此可见基于深度学习的三维重建领域还是有很大发展的。

令人遗憾的是,目前场景染色这一问题还是没有论文着手解决,非常期望相关领域的博士们多多努力,也希望早日看到这一问题的顺利解决。如果有做类似问题研究的同学和同行,欢迎和我交流相关领域的先进经验。我的邮箱是lcltopismine3@163.com。

更多“三维重建”相关内容

更多“三维重建”相关内容

新知精选

更多新知精选