3D点云重建0-04:MVSNet-白话给你讲论文-翻译无死角(2)

3维重建-点云 专栏收录该内容
12 篇文章 13 订阅

以下链接是个人关于MVSNet(R-MVSNet)-多视角立体深度推导重建 所有见解,如有错误欢迎大家指出,我会第一时间纠正。有兴趣的朋友可以加微信:17575010159 相互讨论技术。若是帮助到了你什么,一定要记得点赞!因为这是对我最大的鼓励。 文 末 附 带 \color{blue}{文末附带} 公 众 号 − \color{blue}{公众号 -} 海 量 资 源 。 \color{blue}{ 海量资源}。

3D点云重建0-00:MVSNet(R-MVSNet)–目录-史上最新无死角讲解:https://blog.csdn.net/weixin_43013761/article/details/102852209

话不多说,我们继续前面的3.3 Depth Map

3.3 Depth Map

。。。。。。

Depth Map Refinement 从probability volume,也就是论文图示的这个部分:
在这里插入图片描述
得到的,是一个不错的深度图,但是因为比较大的感受野范围进行了正则化,边界可能会存在平滑的现象(翻译得有模有样,但是不知道啥意思)。他有点类似于语义分割,或者说抠图。为什么这么说?因为r img肯定是包含了边界信息的,因此我们用r img去对初始深度图进行提炼,让深度图的表述更加精确。其灵感主要来自于最近比较流行的抠图算法,在MVSNet最后阶段,我们采用了端到端训练的残差网络对MVSNet,把r img图像改变成和初始深度图的大小一样,然后他他们组合成4个通道的特征图,当作网络的输入,如下:
在这里插入图片描述
然后经过经过11层,通道数为32的2D卷积,输出一个单通道的深度图,这个深度图就是上面的Refined Depth Map。在2D卷积的最后一层是没有使用BN,ReLU以及残差网络单元。另外为了防止一定范围内的偏差,在送入网络的时候,把像素转化到[0,1],等提炼之后再恢复过来。

3.4 Loss

loss部分其实很好理解。他主要考虑到两方面的loss,一个GT(ground truth )与初始深度图计算损失,一个是与提炼之后的深度图计算损失。再这里还要涉及的一个问题就是,我们的GT(ground truth )可能只有部分是有效的的,如下:
在这里插入图片描述
可以看待GT中,有的地方是紫色的,可以理解为背景。对于背景是不需要参与损失计算的。所以我们再源码中看到mask的操作(后续讲解),计算loss的公式如下,万变不离其宗,就是像素做差:
在这里插入图片描述
这里的 P v a l i d P_{valid} Pvalid表示的就是GT有效的像素, d ( p ) d(p) d(p)表示GT中像素P的深度, d ^ i ( p ) \hat{d}_i(p) d^i(p)表示初始深度图像素p的深度, d ^ r ( p ) \hat{d}_r(p) d^r(p)表示提炼深度图像素p的深度,其中的参数 λ \lambda λ在实验中是被设置为1的。

4 Implementations

4.1 Training

Data Preparation 现在 MVS的数据集提供的GT一般都是点云或者网格形式,所以我们需要取去产生深度图的GT。DTU是一个比较大的MVS(多视角立体)数据集,其中的图像包含了一百多个场景,每个场景都有不同的关照强度对应,并且带有正常点云的相关标签,我们只使用过滤出来的screened Poisson surface reconstruction(SPSR-大概是个神经网络,猜的)去生成网格曲面, 然后根据这些视点生成我们训练要的深度图。为了获得高质量的网格结果,我们把SPSR的参数,depth-of-tree设置为11,trimming-factor为9.5(减少边缘区域网格的虚影)。MVSNet在和其他的网络做比较的时候,我们选择了相同的训练集和测试集。考虑到每个scan(后面代码分析解释)中有49种图片,每种图片带有7种不同的关照强度。我们会把每个图片都当初r img进行训练。DTU 数据集总共提供了27097个训练样本。
View Selection 我们每次训练使用一张r img和两张s img(N=3),那么我们怎么去选择这些视角图呢?作者定义了一个分值 s ( i , j ) = ∑ p G ( θ i j ( p ) ) s(i,j) = \sum_pG(\theta_{ij}(p)) s(i,j)=pG(θij(p))。对每个s img都会和r img计算这个 s s s分值,这里 p p p是两幅图 i img和 j img的公共轨迹, θ i j ( p ) = ( 180 / π ) a r c c o s ( ( c i − p ) ⋅ ( c j − p ) ) \theta_{ij}(p)=(180/\pi)arccos((c_i-p)·(c_j-p)) θij(p)=(180/π)arccos((cip)(cjp))表示的是 P P P偏移基线的角度, c c c表示的是摄像头的中心。 G G G是一个高斯分段函数,根据 θ \theta θ的不同,计算方式不一样:
在这里插入图片描述
在实验中, θ \theta θ σ 1 \sigma_1 σ1, σ 2 \sigma_2 σ2分别被设置为5,1,和10。为什么要根据这个公式来计算S,然后根据S选择视觉图,我也不是很了解,如果我后面想通了,就为大家解释一下,如果没有想明白,那就算了哈。 当 然 , 如 果 那 位 大 佬 想 明 白 了 , 一 定 要 告 知 我 , 小 的 感 激 不 尽 ! \color{#FF0000}{当然,如果那位大佬想明白了,一定要告知我,小的感激不尽!}
注意的是,这些视角图在进行特征提取的时候都会变小,然后放入4个缩放尺寸的3D编码-解码卷积,输入图像的尺寸必须能被32整除。考虑到GPU内存消耗的原因,我们把图片由原来的1600×1200缩小到800×600,然后围绕着中心点进行剪裁,剪裁成W = 640 和 H = 512的图片当作网络的输入,所以输入摄像头的参数也要随之变化。假如输入的样本,其深度均匀的分布在[425,935]mn,分辨率为2mn(D=256),我们编程的框架是TensorFlow,使用Tesla P100显卡,迭代了100 000次。

4.2 Post-processing(后期处理)

Depth Map Filter(深度图过滤) 上面的网络是对每个像素进行深度估算,处于转化为3D点云操作的前面,有必要过滤掉背景以及一些异常点。我们提出了两种标准,称为photometric(关照)和geometric(几何) 一致性的深度图过滤。
photometric一致性深度匹配质量:在前面我们提到过,我们使用probability map(概率图)去评估深度估算的质量。可以注意到,这个体素概率低于0.8的可以看作离群点。
在这里插入图片描述
geometric 约束测量多个视角:其类似于这个人眼,利用左右视角差去观测立体目标。我们将参考像素 p 1 p_1 p1通过他的深度 d 1 d_1 d1投影到其他的视角像素 p i p_i pi,然后根据 p i p_i pi的深度 d i d_i di,又把 p i p_i pi重映射到r img上面。简单的说,把其他2维视觉图,映射到立体空间,然后再重立体空间映射到另外一个视角。如果重映射的坐标 p r e p r o j p_{reproj} preproj 和重映射深度 d r e p r o j d_{reproj} dreproj 分别满足 ∣ p r e p r o j − p 1 ∣ < 1 |p_{reproj}-p_1|<1 preprojp1<1 ∣ d r e p r o j − d 1 ∣ / d 1 < 0.01 |d_{reproj}-d_1|/d1<0.01 dreprojd1/d1<0.01。则认为 p 1 p_1 p1 d 1 d_1 d1和另外的视觉是一致的。在我们的实验中,3个视角的深度应该是一致的。
通过上面两种简单的操作,对不同类型的异常值具有较好的鲁棒性。

Depth Map Fusion 类似于其他的多视角立体方法,我利用多个不同视角的深度图,集合到一个点云之中。在我们的算法中,使用了视角融合的算法,这样把遮挡,光照等影响降到了最低。为了进一步抑制噪声,我们对每个视角的每一个像素做了滤波操作(取得这个所有重映射深度的平均值 d r e p r o j ‾ \overline {d_{reproj}} dreproj,作为这个最后的深度估算值)。融合了深度之后,直接把深度图重映射到3D点云空间,如下插图:
Fig. 3:
在这里插入图片描述
图解:这是对DTU数据集的scan9进行重构。(a)从MVSNet网络获得的深度图。(b)过滤之后的深度图。(c)从ground truth mesh生成的深度图(d)r img(e)融合之后的点云(f)ground truth的点云

5 Experiments

5.1 Benchmarking on DTU dataset

我们首先在DTU评估数据集中的22 scan进行评估,输入图像数目N=5,宽W=1600,高=1184,深度D=256。为了定量的进行评估(用数字体现出来),我们计算了准确率差距,以及完整性的百分比差距。准确率距离差距的评估,由发布DTU数据集的官方提供的matlab代码完成。我们自己进行完整性百分比的评估。注意,百分比的评估,比准确率的评估更加全面,称为 f − s c o r e f-score fscore,给出了一个类似于下面Table 1的测量结果:我们对了所有方法的距离评估,越小越好。完整性百分比的测量,越高越好。阈值分别取了1 mm以及2mm
在这里插入图片描述

定量的分析展现在上面的表格,准确率准最好的是Gipuma,在完整性方面,我们超出了所有方法,并且甩开他们十分的远。如下图Fig. 4,MVSNet生成了最完整的点云,特别是在那些结构不清楚的地方,在MVS中,那些问题一般是最难解决的,但是我们取得了很好的效果:
Fig. 4:
在这里插入图片描述
图解,这里是数据集中scans 9,11,75的结果,我们的 MVSNet生成了完整性最好的点云结构,获得最好的视觉效果。

5.2 Generalization on Tanks and Temples dataset(在坦克和寺庙数据集上的泛化能力)

对于DTU数据集,是在摄像头比较平稳,并且是室内环境。为了进一步证明MVSNet网络的泛化能力,我们在户外的数据集(Tanks,Temples)上进行了测试,使用基于DTU训练出来的模型,并且没有做任何的处理。对户外数据集进行重构时,N=5,W=1920,H=1056,D=256。深度的范围是由r img 和s img稀疏点云以及摄像头位置决定的。其由开源软件SfM和OpenMVG恢复(这里看得比较模糊,不过没有关系)
虽然MVSNet使用大量的室内数据集进行训练,但是他依然适用于室外场景。证明了这个网络的泛化能力比较强,定性的分析结果展示如下:
Fig. 6:
在这里插入图片描述
图解:(a)输入视角图数目不同,验证集的loss(b)是否使用:对图像进行特征提取,cost metric以及提炼等

5.3 Ablations

在这个部分主要分析MVSNet中的几个网络组件,下面是针对这些组件的所以研究。我们使用验证集的loss去评估重构的质量。使用的是数据集中的scan 18,其中N=5,W=640,H=512,D=256。

View Number 从上面的图中,我们可以看到,输入的视角图越多,其loss能够下降得越低。

Image Features 使用特征抽取,和不使用特征抽取,也就是是否使用网络中这个部分:
在这里插入图片描述
其效果的差距是十分明显的。

Cost Metric 我们对比了基于cost metric的方差操作和平均操作(在代码中,进行详细的解说-其是计算每个体素的方差)。其使用平均操作和方差操作的对比,在上面的Fig. 6中能清晰的看到,MVSNet使用方差的方法,效果要好很多。

Depth Refinement 在训练MVSNet的时候,可以选择对初始深度进行提炼,当然也可以不进行提炼。对比的结果也能在Fig. 6中看到,论文中说有一点点提高,但是提高得很少。说75.58提到了75.69(<1mm f-socre),79.98提到了80.25(<1mm f-socre),所以我们应该根据实际情况选择是否进行提炼,毕竟提高不了多少,但是参数却增加了好些。这个是否提炼,在源码中是有设定的。

5.4 Discussions(描述)

Running Time 反正就是说他的比别人的快,还快了不少

GPU Memory 他们是在16G的显卡训练的,然后还说可以在11G的显卡上进行训练。不知道为什么我的11G的显卡不可以。配置了很多次,但是依旧报错显卡内存不足

Training Data 因为DTU 数据集提供了比较完整的点云信息,所以我们可以先得到mesh surfaces,然后再去生成深度图,也就是我们网络的GT(ground truth)。但是没有办法在Tanks和Temples数据集上进行训练,因为改些数据集的点云信息提供得不是很完整。虽然使用点云合成的深度图当做GT,让我们的网络获得了一个比较令人满意的结果。但是也一定的局限性。
1.提高的ground truth meshes不是百分百的完整,在训练的时候,会把这些地方的前景当做有效像素来训练,可能降低模型的效果。
2.如果有的像素,在其他的视觉被遮挡住了,那么他应该是不能被用来训练的,因为没有完整的complete mesh surfaces我们不能正确的识别被遮挡的像素,所。所以希望MVS数据集能提供ground truth depth maps,并且完好的标记出遮挡区域,以及背景信息。

6 Conclusion

我们的比别人好,比别人好,真的比别人好。准确率比别人高,完整性比别高,泛化能力比别人强

结语

到这里,MVSNet的论文已经为大家翻译完成了,但是R-MVSNet对应的论文还没有翻译。这个后面再说吧,下面就是为大家解析代码了。

在这里插入图片描述

  • 13
    点赞
  • 2
    评论
  • 6
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值