【论文精读】Deep Marching Cubes: Learning Explicit Surface Representations

0、摘要

现有的基于学习的3D表面预测解决方案无法进行端到端训练,因为它们在中间表示(例如, TSDF)上操作,在后处理步骤(例如,通过移动立方体算法)中必须从中提取3D表面网格。在本文中,我们研究了端到端的三维表面预测问题。我们首先证明了Marching Cubes算法是不可微的,并提出了一种替代的可微公式,将其作为最终层插入到3D卷积神经网络中。我们进一步提出了一组损失函数,允许用稀疏点监督训练我们的模型。我们的实验表明,该模型可以预测任意拓扑结构的亚体素精确三维形状。此外,即使在存在稀疏和不完整的基本事实的情况下,它也学会了完成形状并将物体的内部和外部分离。我们的模型是灵活的,可以与多种形状编码器和形状推断技术相结合

main contribution

  • 我们证明了Marching Cubes对于拓扑变化是不可微的,并提出了一个可微的改进表示。
  • 我们提出了一个端到端曲面预测模型,并推导了合适的几何损失函数。我们的模型可以从非结构化点云中训练,并且不需要明确的表面GT。
  • 我们提出了一种新的损失函数,它允许在学习稀疏的非结构化3D数据时将物体的内部与外部分离。

1、Marching Cubes

主要是两步:

  1. 估计拓扑(即估计体积网格中每个单元格中三角形的数量和连通性)
  2. 预测三角形的顶点位置,确定几何形状。

1.1 详细算法过程

  1. 假设有N^3的符号距离场signed distance field(sdf)。每个格点记录了它到表面的符号距离d(比如格点在物体里面,d>0; 在外面,d<0)。每个小立方体(cell)有8个角落格点(cornor)。通过对所有单元格迭代( ‘marching’),并在检测到相邻格点符号变化时插入三角形面。
    在这里插入图片描述
  2. 通过线性插值计算顶点w(vertex)的位置x,我们假设:
    x=0, if w=v
    x=1, if w=v’
    d和d’表示在格点v和v’的符号距离,那么给定位置x的符号距离f(x)=d+x(d’-d)
    令f(x)=0,即得到表面的顶点w的位置x=d/(d-d’)
    在这里插入图片描述

1.2 无法使用marching cubes算法构建神经网络

给定MC算法,我们可以构建一个深度神经网络进行端到端的表面预测吗?我们可以尝试构造一个深度神经网络,它预测一个有符号的距离场,它被转换为一个三角形网格使用MC。然后我们可以通过MC层和神经网络将该表面与GT表面或点云进行比较并反向传播误差。答案是不可以。

原因:marching cubes算法不可微

  1. x=d/(d-d’)在d=d’时,会导致分母为0,产生异常。
  2. 其次,观测点只影响其附近的网格cell,即它们只作用于表面经过的cell。因此,梯度不会传播到离预测表面更远的cell。

解决办法:

不是让网络预测符号距离值,而是预测每个格点的占用概率probability of occupancy(比如格点在物体里面,o=1; 在外面,o=0)
在这里插入图片描述
通过线性插值计算顶点w(vertex)的位置x,我们假设:
x=0, if w=v
x=1, if w=v’
d和d’表示在格点v和v’的符号距离,那么给定位置x的符号距离f(x)=d+x(d’-d)
令f(x)=0,即得到表面的顶点w的位置x=d/(d-d’)

2、Differentiable Marching Cubes

2.1 Differentiable Marching Cubes Layer (DMCL)数学定义

网络预测的On是伯努利分布的参数,pn(t)表示体素格占用的概率。注意t取值0或1的离散值,而on取值[0,1]的实数域。
那其实,
pn(t)=on , if t=1
pn(t)=1-on, if t=0
在这里插入图片描述

2.1.1 立方格n其拓扑结构为T的概率:由8个格点的占用概率决定

在这里插入图片描述
在这里插入图片描述
参考文章:https://hideoninternet.github.io/2020/01/06/a18afe7a/

作者有一点很好的地方,就是假设点的概率值符合伯努利分布,这样就可以得到一个cube关于所有拓扑结构的所有概率值,计算loss的时候,是用所有的拓扑结构共享同一个vertex displacement来得到误差。这种对所有情况都预测一个概率值当做权重的思想比较常见(例:pixel2mesh++, CMR)

2.1.2 确定顶点的位移

由2.1.1确定了所有256种拓扑结构的概率,比如选其中概率最大的作为该立方体格cell的拓扑结构,比如就下图这种,那么我们只需要确定这个面4个顶点的具体位置,就可以最终确定这个面的形状。我们令网络预测一个张量X∈[0,1]NxNxNx3,令xn∈[ 0 , 1]3表示X的第n '个元素,表示与xn相关的三角形顶点沿边的位移.请注意,xn是一个三维矢量,因为我们需要为三维空间的每个维度指定一个顶点位移。
在这里插入图片描述

2.2 网络结构

  • 点特征提取(Point feature extraction ):采用的是PointNet++的变体,全连接层对每个点提取局部特征
  • 网格池化(Grid pooling): 对落在同一个voxel的所有点归为一类并进行池化,(比如最大池化?)
  • 得到一个NxNxNx16的三维体素格结构,使用3D-CNN
  • 使用跳连接(skip connections)保持细节
  • 解码端分为两分支,一个用来预测占用概率O,一个用来预测点的位移场X。
  • 一个立方体格有8个顶点,拓扑结构有2^8=256种,作者只考虑了140种单连接面(single connected topologies)的情况。
    在这里插入图片描述

2.3 Loss 函数

在这里插入图片描述

1. Point to Mesh Loss

在这里插入图片描述

2. Occupancy Loss

在这里插入图片描述

3. Smoothness Loss

在这里插入图片描述

4. Curvature Loss

在这里插入图片描述

3、实验结果

在这里插入图片描述
在这里插入图片描述

4、结论

我们提出了一个学习3D网格预测的灵活框架。我们证明了端到端的训练表面预测任务会导致更准确和完整的重建。此外,我们表明,在Ground Truth 3D模型不完整的情况下,基于表面的监督结果会得到更好的预测。在未来的工作中,我们计划使用八叉树技术使我们的方法适应更高分辨率的输出,并将我们的方法与其他输入模式集成。

猜你喜欢

转载自blog.csdn.net/weixin_43693967/article/details/127434329