提供一个用于计算两个point之间的距离方法_Point-MVSNet:基于多视角的点云重建网络...

提供一个用于计算两个point之间的距离方法_Point-MVSNet:基于多视角的点云重建网络..._第1张图片

Point-Based Multi-View Stereo Network是一篇点云重建领域的文章,其工作内容为通过输入多张不同角度的图片,提取不同的点云特征,再进行融合,从而生成最终的点云。

1.介绍

Point-MVSNet的大致流程如下:

  1. 首先生成一个粗略的深度图(通过MVSNet,这是另一篇文章提出的网络结构,不过它是通过cost volume的方式进行重建的)。
  2. 然后把深度图转换为点云,再通过事先生成的深度图与ground truth之间的差值,通过迭代的方式进一步优化点云。

Point-MVSNet的亮点为,该网络把3D几何先验知识和2D纹理信息融合到一个叫做特征增强点云中(feature-augmented point cloud),然后在为每一个点估计它的3D flow(什么是3D flow,难道是一个点的3D属性的抽象表示???)

2.方法

粗略深度图预测

论文采用MVSNet模型来生成一个粗略的深度图。通过给予MVSNet图片和相关的相机参数,MVSNet生成一个3D cost volume(代价块),所谓代价块,是指每一个像素其实都有一个代价值,这个代价是通过代价聚合(cost aggregation)的方式计算来的,假想此处有一个WxHxD的三维矩阵,W和H分别是图像的宽高,D是深度范围(一般这个D都是在实验中,假定的一个范围比如5-10之类的),这个三维矩阵的每一个值都是一个像素点在不同深度值下的代价,如果说某一个像素点在

的深度值下,它的代价最小,那么就取
作为该像素点的深度值,每一个像素点的深度值确定了之后,这张图片的深度图也就确定了。

2D-3D特征融合

在网络里面使用的点特征是由从多尺度条件下提取出来的图像2D特征和归一化的3D坐标组成的,这就是所谓的2D-3D特征融合。

这里的2D特征就是通过卷积网络金字塔结构,提取出多尺度的图像特征,赋予每个点更大的感受野和上下文信息,一张图片

的2D特征就是
,这些不同尺度下的特征图是需要融合在一起,再去和坐标信息融合的。而且这里还不止一张图片,是不同角度的多张图片,每一张图片还提取出了多尺度的特征图,融合不同角度的图像特征使,需要用到不同角度的相机参数,这样才能把特征图wrap到一个统一的方向(就是一些旋转矩阵和平移向量组成的相机外参以及相机内参,再和特征图做矩阵乘法)。多张图片在同一个尺度下的特征融合公式如下:

。j代表了不同尺度。

然后再和点云的坐标位置进行融合,公式如下:

文中提到的动态特征提取的意思就是,得出来的

输入到point flow中,得到深度残差,然后这个深度残差往回输入到点云中,进一步更新点云的位置,然后再通过更新后的点云输入到point flow得到深度残差。这个过程文中迭代了两次。

PointFlow

PointFlow是论文中的核心模块,工作内容为为unprojected point点(通过深度图外加相机参数,通过非映射的方式生成的点)生成一系列假设点,利用这些点构造出一个有向图,在进行边卷积进一步提取邻域特征。然后经过MLP判断unprojected point的偏移位置,偏移向量由各假设点带权平均得到。

假设点的生成(Point Hypothesis Generation)

提供一个用于计算两个point之间的距离方法_Point-MVSNet:基于多视角的点云重建网络..._第2张图片

对每一个unprojected point都会沿着参考相机的方向生成一系列不同偏移的点(就是在投影出来的点的前前后后生成一些点)。公式如下:

代表参考相机的方向,
代表偏移距离。最后会有2m+1个假设点。
边卷积(Edge Convolution)

如上图所示,论文通过KNN的方法生成一个有向图。边卷积可以先简单理解为提取出边的特征(后面研究DGCNN的时候再做详细记录)。

43af67cab8ce26cc6b2b65291a126843.png

是一个可学习的非线性函数,
是一个逐渠道的对称聚合操作(对称操作主要是max pooling、average pooling和weighted sum等方法,可以把多个特征聚合到一起,所谓对称是指输入的顺序并不影响结果)。

提供一个用于计算两个point之间的距离方法_Point-MVSNet:基于多视角的点云重建网络..._第3张图片

如上图所示,边卷积过后的点云跳连接到一起。

Flow Prediction

如上图所示,Point Flow输入增强点云,输出深度残差图。内部使用了三个EdgeConv层来聚合不用尺度下的点特征(特征金字塔刚好也是3层),再通过快连接把EdgeConv的结果组合成一个局部点特征。最后通过MLP来转换点特征,输出每一个unprojected point在假设点上的概率值,最终的unprojected point的偏移是由每一个假设点带权平均得到的。

Training loss

损失函数的公式如下所示:

代表迭代次数

提供一个用于计算两个point之间的距离方法_Point-MVSNet:基于多视角的点云重建网络..._第4张图片

你可能感兴趣的:(提供一个用于计算两个point之间的距离方法_Point-MVSNet:基于多视角的点云重建网络...)