NeuralRecon拜读:单目视频实时连贯三维重建

CVPR2021:NeuralRecon: Real-Time Coherent 3D Reconstruction from Monocular Video

Code:https://github.com/zju3dv/NeuralRecon

传统基于深度图重建方法:

  • depth map转换为point clouds
  • 估计三维曲面位置并生成重建的网格
    • 在离线MVS pipline中,常使用Poisson reconstruction 和Delaunay triagulation 通常用于实现这一目的。

基于TSDF的深度图融合方法:

  • 估计的深度图使用多视图一致性和时间平滑度等标准进行过滤
  • 融合为TSDF volumes
  • 利用MarchingCubes算法将融合后的TSDF volumes重建mesh

存在的问题:

  • 单视图深度估计scale-factor容易变,不同视图的深度不一致,使得重建分层或者分散
  • 多帧视图重叠区域的冗余重建计算

在这里插入图片描述

NeuralRecon的方案:

  • 通过神经网络为每个视频片段直接生成TSDF volumes
  • 然后使用基于gated recurrent units的TSDF融合模块引导网络融合前后片段

这种设计允许网络在顺序重建曲面时捕获3D曲面的局部平滑度先验和全局形状先验,从而实现精确、一致和实时的曲面重建
在这里插入图片描述

理论基础:Truncated Signed Distance Function (TSDF) volume

使用稀疏3D卷积预测离散TSDF volume

重建方法的前提:

  • 输入:已知图像和对应的内外参
  • 监督:
    • binary cross-entropy (BCE) loss: ground-truth occupancy values
    • SDF loss: ground-truth SDF values.

关键帧选择:

  • 当新传入帧的相对平移大于 t m a x t_{max} tmax且相对旋转角大于 R m a x R_{max} Rmax,则选择该帧作为关键帧
  • 每N个关键帧视为local fragment
  • 基于视图中固定的最大深度范围 d m a x d_{max} dmax(文中为3m)计算包围所有关键帧视锥体的立方形fragment bounding volume (FBV)
  • 在重建每个fragment时,只考虑FBV内的区域

边重建边融合:

  • 重建local fragment局部的TSDF volumes
  • 使用学习的方法将局部TSDF融入全局TSDF volumes

在这里插入图片描述

Feature volume构建:

  • ImageNet预训练的MnasNet_encoder提取feature
  • 各级feature反投影到3D feature volume
  • feature volume按体素可见性权重融合不同视图的feature:
    • 体素可见性权重为local fragment中可以观察到体素的视图数
      在这里插入图片描述

Coarse-to-fine的TSDF重建,逐步细化各层TSDF

  • 3D sparse convolution(TorchSpase)处理3D feature volume

  • MLP sigmoid预测TSDF截断距离λ的置信度 o o o 和 SDF-value x x x

    • o o o 小于阈值视为空,稀疏化
  • 稀疏化后将TSDF volume上采样并级联下一层的feature

  • 通过GRU Fusion 模块

在这里插入图片描述
GRU Fusion模块:
为了保证相邻fragment重建的一致性,以过去fragment为基础

  • 在每一层feature volume通过sparse 3D conv获得3D geometric features
  • 将该3D geometric features与全局volume对应区域融合成当前的参数volume
  • 再将当前参数volume更新回全局volume
  • 当前参数体通过MLP得到当前TSDF volume
  • 更新Global TSDF Volume在最后一层的GRU模块完成
    在这里插入图片描述

实验用的是有ground truth的室内数据集,效果如下:在这里插入图片描述

  • 0
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
System.arraycopy是Java中的一个方法,用于将一个数组的内容复制到另一个数组中。它的用法是:System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)。其中,src是源数组,srcPos是源数组的起始位置,dest是目标数组,destPos是目标数组的起始位置,length是要复制的元素个数。 System.arraycopy是一种浅拷贝方式,它只是将源数组的引用复制给目标数组,而不会复制源数组中的元素的值。因此,如果原始数组改变了,复制的数组也会发生相应的改变。 关于System.arraycopy的具体实现,可以参考引用中的源码拜读部分。另外,引用中也提到了System.arraycopy是对数组进行复制的常用方法。 在引用的代码示例中,可以看到System.arraycopy的具体用法。首先定义了一个二维数组src,然后使用System.arraycopy将src复制给了dest数组。接着,通过修改src数组的元素,可以观察到dest数组也发生了相应的改变,这正是浅拷贝的特性。 总之,System.arraycopy是Java中用于数组复制的方法,它是一种浅拷贝方式,可以将源数组的内容复制到目标数组中。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [System.arraycopy详解](https://blog.csdn.net/yangruidage21/article/details/128519021)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值