【论文精读5】MVSNet系列论文详解-Point-MVSNet

news2025/7/18 5:57:59

Point-MVSNet全文名称:Point-Based Multi-View Stereo Network,是2019提出的使用coarse-to-fine方法来优化深度图推断过程的网络结构,与上一篇CVP-MVSNet都是迭代优化的思想,不同的是Point-MVSNet在点云上进行操作,而CVP-MVSNet]是使用图像在代价体上操作,因而速度和内存消耗都比Point-MVSNet少,文末会对两者做一个详细的对比。


本文是MVSNet系列的第5篇,建议看过【论文精读1】MVSNet系列论文详解-MVSNet之后再看便于理解。

一、问题引入

在这里插入图片描述
传统基于代价体的方法需要3D CNN逐深度的去处理代价体上的特征来推断出概率体,并以此为基础计算深度图,然而实际物体表面点只处于某些深度下,因此直接对接近表面3D的点位置进行计算无疑是更高效的

二、论文核心创新

  • 使用PointFlow模块,输入是unprojected点云(由粗糙深度图加相机参数以非投影方式获取的点)+hypothesized点云(在unprojected点云前后某个Δdi距离的假设点),输出是每个unprojected点的位置偏移量Δd,进而投影为各点深度偏移量得到残差深度图
  • PointFlow模块当中通过多层边缘卷积(Edge Conv)动态提取点云的局部特征信息(来自DGCNN)
  • 点云中各点特征是2D-3D的,即包含了2D图像纹理特征与3D的几何位置先验

三、模型介绍

在这里插入图片描述
论文模型主要分为两部分,第一是粗糙深度图重建,第二是迭代深度图优化。

1.粗糙深度图重建

该部分基本遵从MVSNet的方法,使用分辨率、深度采样数由1/4、256减少至1/8、48(或96)来实现1/20的内存消耗。

在这里插入图片描述

2.迭代深度图优化

2.1 2D-3D特征挖掘(2D-3D feature lifting)

  • 该部分为每个3D点构造特征表示向量,传统的3D点p可表示为Xp(x,y,z)包含了空间几何位置的先验信息,而论文又使用卷积网络提取了多个视角下图片的2D高级视觉特征,并通过方差法来提取属于点P的多视角2D纹理特征Cp两者做连接[Cp,Xp]即构成了所谓的2D-3D特征。
  • 另外,使用了图像特征金字塔来实现迭代优化、多次进行的目的,但也导致论文讲解结构的安排比较混乱,为了方便理解下文直接按照训练流程的步骤来解释
2.1.1 3D特征构建 & 生成假设3D点集

这一步即下图中红框部分的内容,包括非投影的深度图到3D点云变换假设点生成

在这里插入图片描述
利用1中所得的初始深度图,可以通过非投影(unprojection)的方式来生成初始的空间点云X=[X1,X2,…,Xn],其中点云中点数目n为图像像素点数即H/8xW/8,此时每个点Xp包含了其3D特征[x,y,z]

对该初始空间点云X,我们称这些点为unprojected点,接下来要生成与这些点深度方向一致、但存在深度位移的假设点(hypothesized point),具体如下图所示:
在这里插入图片描述
该图可以看作一个俯视图红色点p是初始unprojected点,连接参考相机和红点这条射线称为深度方向t每一个单位深度位移为s,在每个红点前后m个位移间隔处设置蓝色hypothesized点p’ ,此时生成了每个unprojected点的假设点集{p’k}表述如下(打不出来,p’即图中的p加上波浪):
在这里插入图片描述

此时的点云X’包含了原始的unprojected点(n个)和每个unprojected点对应的2m个hypothesized点,即共计n x(2m+1)个,每个点Xp’都有不同的3D特征[x,y,z]

2.1.2 动态特征提取(dynamic feature fetching)
  • 这一步的目的是提取2.1.1中点云X‘内每个点对应的图像上的2D特征,这个特征是从特征金字塔输出的三个尺度的特征图里找到的;同时每个unprojected点、和它同深度方向上产生的hypothesized点对应的各视图上对应的2D特征是一样的,因此实际是找点云X中每个点的2D特征
  • 由于要迭代优化深度图,即推断出新的深度图之后会利用它重复上边2.1.1生成新的点云X和X’,然后再次执行该步骤为其中每个点找到2D特征,新的点云中的点3D坐标会发生变化各点对应的图像上的特征也会随之变化,因此被称为动态特征提取(dynamic feature fetching)

在这里插入图片描述

  • 首先利用2D金字塔卷积网络为N张原始视图提取图像特征,通过3次下采样,为每个视图i提供3个不同层级的特征图Fi=[Fi1,Fi2,Fi3]

  • 每一层尺度下的特征图,由于已知相机参数,可以利用非投影(unprojection)方式,获取点云中每个点Xp在该层不同视角图片下对应的2D特征点,进而找出在对应特征图i上的特征Fip;那么每个三维点Xp的2D特征Cp,可以看作其在不同视角图片下对应特征图上2D特征的方差,即 C p = ∑ i = 1 N ( F i p − F p ‾ ) N C_p=\frac{\sum_{i=1}^{N}(F_i^p-\overline{F^p})}{N} Cp=Ni=1N(FipFp)

  • 每个三维点Xp求3个特征层级的2D特征,此时点Xp第j层的2D特征表述为 C j = ∑ i = 1 N ( F i j − F j ‾ ) N , ( j = 1 , 2 , 3 ) C^j=\frac{\sum_{i=1}^{N}(F_i^j-\overline{F^j})}{N},(j=1,2,3) Cj=Ni=1N(FijFj),(j=1,2,3)

  • 此时点云中每个点Xp都对应了2D方差特征Cj(j=1,2,3),进行“增强”得到特征增强点云,即后文PointFlow模块的输入,实际就是连接两者的2D特征和3D位置[Cp,Xp],此时特征增强点云上每个点Xp的特征都是2D-3D的,公式表述为 C p = c o n c a t [ C p j , X p ] , ( j = 1 , 2 , 3 ) C_p=concat[C_p^j,X_p],(j=1,2,3) Cp=concat[Cpj,Xp],(j=1,2,3)

2.2 PointFlow模块

使用PointFlow模块的动机在论文中有提到:For each point, we aim to estimate its displacement to the ground truth surface along the reference camera direction by observing its neighboring points from all views, so as to push the points to flow to the target surface( 即旨在为每个初始的unprojection点估计沿着深度方向上与真实物体表面的位移值,而这个过程是通过所有视图观察各unprojection点与周围点实现的,从而推动该点流向真实的目标表面,也即我们说Point-MVSNet是直接在点云上进行操作的原因。)


在这里插入图片描述

具体来讲,该过程可分为五步:

  • 利用kNN思想为每个unprojection点找到其k个临近点
  • 使用DGCNN中提出的边缘卷积(Edge Conv),计算各点与其邻近点之间的局部结构信息
  • 通过3层边缘卷积并使用shortcut-connection来连接每一层的输出,以获取在不同尺度下的局部结构特征
  • 各unprojection点的局部结构特征(上一步的输出)输入共享参数的MLP,得到该unprojection点的各个假设点(2m+1个,包含自身)的概率标量并进行softmax操作
  • 各unprojection点的偏移量Δd等于各假设点的概率乘以其偏移深度

针对上述5个步骤中的细节做以下解释:
(1)kNN中计算k个距离最近点用的是各点的2D-3D特征
(2)边缘卷积示意图如下:
在这里插入图片描述

  • 首先看图中间,xi代表点云当中的某个点,xji1-xjik代表其最近的k个点,边缘卷积首先要为每个点构建k个“边缘特征”——表示在图中就是中心点与临近点的k条连线eij。各个边缘特征计算公式为 e i j = h Θ ( x i , x j ) e_{ij}=h_Θ(x_i,x_j) eij=hΘxi,xj,其中hΘ代表的是用于学习的网络参数,也即图左边的神经网络层表示的过程。
  • 在此基础上,对各中心点与周围k个点计算出的k个边缘特征做一个聚合,可以是sum,max等等,从而计算出中心点经边缘卷积后的特征xi,整个过程用公式表述为 x i ′ = □ j : ( i , j ) ∈ ε h Θ ( x i , x j ) x_i'=□_{j:(i,j)∈ε}h_Θ(x_i,x_j) xi=j:(i,j)εhΘxi,xj,□表示的是聚合函数,下标的含义是对与点i最近邻的每个点j计算边缘特征最终对它们进行聚合。
  • 此时的xi’即为对中心点边缘卷积后的新特征点,其包含了该点的局部结构信息
  • 计算边缘特征的h_Θ的输入其实有多种,论文沿用了DGCNN所用的(xi, xi - xj),即使用中心点的主体特征和中心点与临近点的“残差特征”
  • 聚合函数使用max和average pooling,调参后效果差异不大

(3)使用3层边缘卷积来在不同尺度上提取局部结构特征,并将每一层输出shortcut connect来作为局部点特征输入至MLP。
在这里插入图片描述
(4)将包含各unsample点多尺度局部2D-3D特征的边缘卷积结果输入共享参数的MLP,输出该unprojection点的各个假设点(2m+1个,包含自身)的概率标量并进行softmax操作
在这里插入图片描述
(5)该softmax之后的2m+1个概率标量代表了各假设点为真实表面上点的概率,因此其深度位移量与概率相乘可得该unsample点的偏移深度,公式表述为: Δ d p = E ( k s ) = ∑ k = − m k = m k s × P r o b ( p ′ ) Δd_p=E(ks)=\sum_{k=-m}^{k=m}ks×Prob(p') Δdp=E(ks)=k=mk=mks×Prob(p),随后将各点的位移投影回深度图上即得到该次残差深度预测图。
在这里插入图片描述

2.3 迭代优化深度

  • 在上一步获取残差图后,首先将其与初始深度图相加得到优化深度图
  • 随后根据该深度图反投影出新的点云集,并重复2.1中构建假设点、动态为这些点提取2D-3D特征得到特征增强点云的过程,随后输入2.2pointFlow模块得到新的深度残差图,从而实现迭代优化深度的目标,
  • 需要注意的是随着迭代进行构建假设点时的单位位移深度s会逐渐减小,以达到更高精度的深度预测。

在这里插入图片描述

2.4 训练损失函数Loss

与MVSNet类似将深度预测看作一个回归问题,使用L1损失来预测深度图和真实深度图间的绝对误差,不过由于是迭代进行优化,加上了权重参数来控制各迭代步骤的重要性占比。

在这里插入图片描述
公式当中Pvalid表示有效的真实像素集,l为迭代次数,训练时权重λ (i)设置为1.0,s(i)为第i次迭代中单位位移深度。

s(i)作为分母且随着迭代进行不断减小,该次迭代损失权重会增大,即让深度预测更加精细时继续进行优化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/17544.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于51单片机的二氧化碳(CO2)气体浓度监测报警系统

基于51单片机的二氧化碳(CO2)气体浓度监测报警系统( proteus仿真程序演示视频) 仿真图proteus 8.9 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:C0073 这里写目录标题基于51单片机的二氧化碳&am…

【数据结构】栈和队列的实现

文章目录一、栈的实现二、队列的实现一、栈的实现 栈是一种特殊的线性表,只允许在固定的一端进行插入和删除元素的操作,进行数据插入和删除操作的一端称为栈顶,另一端称为栈低。栈遵循数据后进先出的原则。 创建一个栈: typedef …

就是一整个爱住,你们大胆飞,我就是最坚强的后盾——Java面试突击宝典

前言 马老师说过,员工的离职原因很多,只有两点最真实: 钱,没给到位 心,受委屈了 当然,我是想换个平台,换个方向,想清楚为什么要跳槽,如果真的要跳槽,想要拿…

75.【JavaWeb-03】

JavaWeb(十五)、JavaBean(十六)、MVC三层框架1.早些年:2.三层架构:(十七)、Filter(过滤器)1加入依赖2.基本步骤3.出现500错误的话4.案列演示(十八)、Listener(监听器)1.利用监听实现在线人数的统计(十九)、小结对18之前的(二十)、过滤器、监听器常见应用1.过滤器注册和注销操作…

一起Talk Android吧(第四百一十八回:制作时钟)

文章目录整体思路准备画布绘制表盘绘制刻度绘制指针示例代码各位看官们大家好,上一回中咱们说的例子是"解决Glide不能加载网络图片的方法",这一回咱们介绍的例子是"制作时钟"。闲话休提,言归正转,让我们一起Talk Android…

向毕业妥协系列之深度学习笔记:神经网络深度学习(一)

目录 一.神经网络杂记 二.计算图(反向传播求导几个实例) 1.普通式子反向传播求导 2.逻辑回归中的梯度下降 3.m个样本的梯度下降 三.向量化 深度学习系列的文章也可以结合下面的笔记来看: 深度学习笔记-目录 一.神经网络杂记 这个系列…

不知道word压缩文件怎么弄?简单三步轻松实现

如果你是学生,那么你的作业、论文应该都是以word文档格式上交的吧? 如果你是打工人,应该也经常需要编辑一些文档,例如通知、工作安排等等,给上司或其他同事查阅。 那么久而久之积累下来,word文件就会占据电…

TIA博途_通过PEEK指令在TP900触摸屏上实现监控所有IO地址的具体方法示例

TIA博途_通过PEEK指令在TP900触摸屏上实现监控所有IO地址的具体方法示例 如下图所示,首先,新建一个项目,添加一个DB块,这里以DB276为例进行说明,在该DB块中添加如图所示变量, 如下图所示,添加一个FB,用于读取IO点的值,具体程序可参考下图, 如下图所示,在OB1中调…

使用马尔可夫链构建文本生成器

本文中将介绍一个流行的机器学习项目——文本生成器,你将了解如何构建文本生成器,并了解如何实现马尔可夫链以实现更快的预测模型。 文本生成器简介 文本生成在各个行业都很受欢迎,特别是在移动、应用和数据科学领域。甚至新闻界也使用文本生…

PyTorch中的matmul函数详解

PyTorch中的两个张量的乘法可以分为两种: 两个张量对应的元素相乘(element-wise),在PyTorch中可以通过torch.mul函数(或者∗*∗运算符)实现 两个张量矩阵相乘(Matrix product)&…

Day07--生命周期的概念与分类

文字概述: 1.啥子是生命周期呢? ***********************************************************************************************************************************************************************************************************…

[附源码]Python计算机毕业设计毕业生就业信息管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

EasyExcel对大数据量表格操作导入导出

前言 最近有个项目里面中有大量的Excel文档导入导出需求,数据量最多的文档有上百万条数据,之前的导入导出都是用apache的POI,于是这次也决定使用POI,结果导入一个四十多万的文档就GG了,内存溢出... 于是找到EasyExce…

上采样,下采样,卷积,反卷积,池化,反池化,双线性插值【基本概念分析】

上采样,下采样,卷积,反卷积,池化,反池化,双线性插值【基本概念分析】】一、上采样1.概念2.原理二、下采样1.概念2.原理三、卷积与反卷积四、池化五、反池化六、双线性插值1.意义2.作用3.单线性插值4.双线性插值的公式5.双线性插值的例子一、上采样 1.概念 上采样(…

前端页面全新的写法(第七课)Vue中的组件

VueCli框架的实操内容(第七课)Vue中的组件 组件是可复用的 Vue 实例, 把一些公共的模块抽取出来,然后写成单独的的工具组件或者页面,在需要的页面中就直接引入即可那么我们可以将其抽出为一个组件进行复用。例如 页面头部、侧边、内容区,尾部…

电脑里重要文件用什么备份,电脑如何备份主要数据

保护好数据安全是很重要的,能够给我们减少很多麻烦或者说是损失,所以,我们是有必要通过一些手段来保护好重要数据的。电脑里重要文件用什么备份?提前对数据进行备份无疑是最好的方法之一。 一、如何备份数据? 我们可以…

数据结构-排序算法总结

排序算法总结插入排序直接插入排序(稳定)希尔排序交换排序冒泡排序(稳定)快速排序选择排序简单选择排序堆排序归并排序(稳定)基数排序(稳定)多路归并排序(外排序&#xf…

Stream之flatMap用法

记录一下flatMap的用法 个人理解是将流中的流合并 Data AllArgsConstructor NoArgsConstructor public class WhiteIp {//idprivate Integer id;//域名private String domain;//ip,多个用;分隔private String ipaddress;public static void main(String[] args) {WhiteIp w1 …

Android未捕获异常监控原理

背景 本文仅探讨java层的未捕获异常的监控为什么我们自己的异常捕获总是比 Bugly 收到的信息少? Android未捕获异常的监控与收集 Java层未捕获异常监控的基本实现 先看看Java层未捕获异常监控的运行过程: public class MyUncaughtExceptionHandler …

企业虚拟网络管理

随着企业规模的扩大,其网络的规模和复杂性也会成比例地扩展。企业级组织和中小型企业需要大规模网络来满足不断增长的业务需求。然而,大规模网络需要大量的物理组件、定期维护和配置,所有这些都是有代价的。因此,为了规避这些额外…