Cascade-MVSNet论文笔记

Cascade-MVSNet论文笔记

    • 摘要
    • 1 立体匹配(Stereo Matching)
    • 2 多视图立体视觉(Multi-View Stereo)
    • 3 立体视觉和立体视觉的高分辨率输出
    • 4 代价体表达方式(Cost volume Formulation)
      • 4.1 多视图立体视觉的3D代价体(3D Cost Volumes in Multi-View Stereo)
      • 4.2 立体匹配的3D代价体(3D Cost Volumes in Stereo Matching)
    • 5 级联代价体(Cascade Cost Volume)
      • 5.1 假设范围(Hypothesis Range)
      • 5.2 假设平面间隔(Hypothesis Plane Interval)
      • 5.3 假设平面数(Number of Hypothesis Planes)
      • 5.4 空间分辨率(Spatial Resolution)
      • 5.5 翘曲操作或视图变换操作(Warping Operation)
    • 6 特征金子塔(Feature Pyramid)
    • 7 损失函数
    • 8 实验分析
      • 8.1 实验数据集
      • 8.2 实验比较

X. Gu, Z. Fan, S. Zhu, Z. Dai, F. Tan and P. Tan, “Cascade Cost Volume for High-Resolution Multi-View Stereo and Stereo Matching,” 2020 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR), Seattle, WA, USA, 2020, pp. 2492-2501, doi: 10.1109/CVPR42600.2020.00257.

摘要

在本文中,作者提出了一种基于三维代价体积的多视点立体匹配方法的三维立体匹配方法。
首先,所提出的代价体是建立在一个特征金字塔编码的几何形状并且背景在逐渐更精细的尺度上。
然后,通过对前一个阶段的预测来缩小每个阶段的深度(或视差)范围。
随着越来越高的代价体积分辨率和深度(或视差)间隔的自适应调整,获得由粗到精细的输出。将级联代价体应用到具有代表性的MVS-Net上,比DTU基准(第一名)提高了35.6%,GPU内存和运行时分别减少了50.6%和59.3%。
在这里插入图片描述
网络结构:
在这里插入图片描述

1 立体匹配(Stereo Matching)

一个典型的立体匹配算法包括四个步骤:匹配代价计算、匹配代价聚合、视差计算和视差细化局部方法与相邻像素聚合匹配代价,通常利用赢家通吃策略来选择最优视差。全局方法构造一个能量函数,并试图将其最小化以找到最优视差。更进一步地方法利用信念传播和半全局匹配进行动态规划逼近全局优化。

在深度神经网络的背景下,Zbontar和LeCun首先引入了基于CNN的立体匹配方法,其中引入了卷积神经网络来学习小斑块对的相似性度量。在GCNet中首次在立体匹配中引入了广泛使用的3D代价体,其中视差回归步骤使用soft argmin操作来找出最佳匹配结果。PSMNet 进一步引入了金字塔空间池和三维沙漏网络进行代价体正则化,得到了更好的结果。GwcNet 修改了三维沙漏的结构,并引入了组间的相关性,形成了一个基于组间的3D代价体。DeepPruner是一种从粗到细的方法,它提出了一种基于可微分补丁匹配的模块来预测每个像素的剪枝搜索范围。

2 多视图立体视觉(Multi-View Stereo)

传统的多视图立体视觉大致可分为基于体素方法(估计每个体素与表面之间的关系);基于点云的方法(直接处理三维点来迭代强化结果);深度图重建方法(它只使用一个参考和少量源图像进行单深度图估计)。对于大规模的运动结构(SFM,Structure-from-Motion)中的工作使用基于分布式运动平均和全局相机共视的分布式方法

现如今,基于学习的方法在多视图立体视觉也表现出了优越的性能。多补丁相似度引入了一个学习的代价度量。 SurfaceNet和DeepMVS将多视图图像预扭曲到三维空间,并使用深度网络进行正则化和聚合。近些年,提出了基于3D代价体的多视图立体视觉技术。基于多视图扭曲的二维图像特征构建三维代价体,并应用三维CNN进行代价正则化和深度回归。由于3D CNN需要较大的GPU内存,这些方法通常使用下采样的代价体。实现高分辨率的代价体,并进一步提高精度、计算速度和GPU内存效率,是目前研究的热点

3 立体视觉和立体视觉的高分辨率输出

目前,有一些基于学习的方法试图减少内存需求,以产生高分辨率的输出。Point MVSNet不使用体素网格,而是使用小的代价体来生成粗深度,并使用基于点的迭代细化网络来输出全分辨率深度。相比之下,一个标准的MVSNet结合级联代价体可以比Point MVSNet 使用更少的运行时间和GPU内存,输出全分辨率深度和优越的精度。还有区分高级空间以减少内存消耗,并构建一个缺乏灵活性的固定代价体表示的方法。另外还有用2D CNN建立额外的细化模块,输出高精度的预测。

4 代价体表达方式(Cost volume Formulation)

基于学习的多视图立体视觉和立体匹配构造三维代价体来度量相应图像补丁之间的相似性,并确定它们是否匹配。在多视图立体视觉和立体匹配中构建三维代价体需要三个主要步骤。首先,确定离散假设的深度(或视差)平面。然后,将提取的每个视图的二维特征扭曲到假设平面上,构建特征体,最后将其融合在一起,构建三维代价。像素级的代价计算通常在固有的不适定区域中是模糊的,如遮挡区域、重复模式、无纹理区域和反射表面。为了解决这个问题,通常引入多尺度的3D CNN来聚合上下文信息,并正则可能的噪声污染代价体。

4.1 多视图立体视觉的3D代价体(3D Cost Volumes in Multi-View Stereo)

MVSNet 提出使用不同深度的前段到平行平面作为假设平面,深度范围一般由稀疏重建决定。坐标映射由单应性确定
H i ( d ) = K i ⋅ R i ⋅ ( I − ( t 1 − t i ) ⋅ n 1 T d ) ⋅ R 1 T ⋅ K 1 − 1 ( 1 ) H_i(d)=K_i \cdot R_i \cdot\left(I-\frac{\left(t_1-t_i\right) \cdot n_1^T}{d}\right) \cdot R_1^T \cdot K_1^{-1} ~~~~ (1) Hi(d)=KiRi(Id(t1ti)n1T)R1TK11    (1)
其中Hi(d)是指第i个视图的特征图与深度d的参考特征图之间的单应性,I表示参考图特征。Ki、Ri、ti分别为相机的内参、第i个视图的旋转矩阵和平移,n1为参考相机的主轴。然后利用可微单应性变换扭曲二维特征图到参考相机的假设平面,形成特征体积。为了将多个特征体汇总为一个代价体,提出基于方差的代价度量来适应任意数量输入的特征体。

4.2 立体匹配的3D代价体(3D Cost Volumes in Stereo Matching)

PSMNet使用视差分层作为假设平面,视差的范围是根据特定的场景来设计的。由于左右图像已被校正,因此坐标映射由x轴方向上的偏移量决定
C r ( d ) = X l − d ( 2 ) C_r(d) = X_l − d ~~~~(2) Cr(d)=Xld    (2)
其中, C r ( d ) C_r (d) Cr(d)为右视图在视差d处转换后的x轴坐标, X l X_l Xl为左视图的源x轴坐标。为了构建特征t体,使用沿x轴的平移,将右视图的特征图扭曲到左视图。有多种方法可以构建最终的代价体。GCNet 和PSMNet在不减少特征维度的情况下将左侧特征体和右特征体连接起来。还有人提出使用绝对差值的和来计算匹配代价。DispNetC计算关于左特征体和右特征体的完全相关性并为每个视差级别产生只一个单通道相关图。GwcNet 提出组间相关性,将特征分成组并计算每一组的相关图。

5 级联代价体(Cascade Cost Volume)

下图展示了W×H×D×F的分辨率的标准代价体,其中W×H表示空间分辨率,D是平面假设的数量,F是特征图的通道数。随着平面假设D的数量的增加,更大的空间分辨率W×H和更细的平面间隔可能提高重建精度。然而,GPU内存和运行时间随着代价体分辨率的增加而不断增长。正如R-MVSNet所示,MVSNet能够在16 GB Tesla P100 GPU上处理最大H×W×D×F=1600×1184×256×32的代价体。为了解决上述问题,Cascade MVSNet提出了一个级联代价体公式,并以粗到细的方式预测输出。
在这里插入图片描述

5.1 假设范围(Hypothesis Range)

如下图所示,用R1表示的第一阶段的深度(或视差)范围覆盖输入场景的整个深度(或视差)范围。在接下来的阶段中,可以基于前一个阶段的预测输出,并缩小假设范围。因此,有Rk+1 = Rk·wk,其中Rk是第k个阶段的假设范围,wk < 1是假设范围的缩小因子。
在这里插入图片描述

5.2 假设平面间隔(Hypothesis Plane Interval)

在第一阶段的深度(或视差)间隔为I1。与通常采用的单代价体公式相比,初始假设平面区间相对较大,可以产生一个粗糙的深度(或视差)估计。在接下来的阶段中,将应用更精细的假设平面区间来恢复更详细的输出。因此,有 Ik+1 = Ik·pk,其中Ik为第k阶段的假设平面区间,pk < 1是假设平面区间的缩小因子。

5.3 假设平面数(Number of Hypothesis Planes)

在第k阶段,给定假设范围Rk和假设平面区间Ik,相应的假设平面数Dk被确定为 Dk = Rk/Ik。当一个代价体的空间分辨率被固定,一个更大的Dk可以获得更多的假设平面和更准确的结果,同时导致增加的GPU内存和运行时间。基于级联公式,可以有效地减少假设平面的总数,因为假设范围是逐步显著减少的,同时仍然覆盖了整个输出范围。

5.4 空间分辨率(Spatial Resolution)

根据特征金字塔网络的实践,在每个阶段将代价体的空间分辨率增加一倍,并将输入特征图的空间分辨率增加一倍。将N定义为级联代价体的总阶段数,然后将第k阶段代价体的空间分辨率定义为 W / 2 N − k × H / 2 N − k W/2^{N−k}×H/2^{N−k} W/2Nk×H/2Nk。我们在多视图立体视觉任务中设置N = 3,在立体匹配任务中设置N = 2。

5.5 翘曲操作或视图变换操作(Warping Operation)

将级联代价体公式应用于多视图立体视觉,基于公式1,将(k+1)阶段的单应性变换改写为:
H i ( d k m + Δ k + 1 m ) = K i ⋅ R i ⋅ ( I − ( t 1 − t i ) ⋅ n 1 T d k m + Δ k + 1 m ) ⋅ R 1 T ⋅ K 1 − 1 ( 3 ) H_i\left(d_k^m+\Delta_{k+1}^m\right)=K_i \cdot R_i \cdot\left(I-\frac{\left(t_1-t_i\right) \cdot n_1^T}{d_k^m+\Delta_{k+1}^m}\right) \cdot R_1^T \cdot K_1^{-1}~~~~(3) Hi(dkm+Δk+1m)=KiRi(Idkm+Δk+1m(t1ti)n1T)R1TK11    (3)
其中 d k m d_k^m dkm为第k阶段第m个像素的预测深度, ∆ k + 1 m ∆_{k+1}^m k+1m为第k+阶段学习的第m个像素的深度差值。

类似地,在立体匹配中,根据级联代价体重新制定公式2。第k+1阶段的第m个像素坐标映射表示为:
C r ( d k m + Δ k + 1 m ) = X l − ( d k m + Δ k + 1 m ) ( 4 ) C_r\left(d_k^m+\Delta_{k+1}^m\right) = X_l − \left(d_k^m+\Delta_{k+1}^m\right) ~~~~(4) Cr(dkm+Δk+1m)=Xl(dkm+Δk+1m)    (4)
其中 d k m d_k^m dkm为第k阶段第m个像素的预测视差, ∆ k + 1 m ∆_{k+1}^m k+1m为第k+1阶段学习的第m个像素的差值。

6 特征金子塔(Feature Pyramid)

为了获得高分辨率的深度(或视差)地图,通常使用标准代价体生成一个相对低分辨率的深度(或视差)图,然后用2D CNN进行上采样和细化。标准代价体是使用高阶段特征图构建的,该特征图包含高级的语义特征,但缺乏低级的更精细的表示。Cascade-MVSNet参考了特征金字塔网络,并采用其具有增加空间分辨率的特征图来构建更高分辨率的代价体。例如,当将级联代价体应用到MVSNet 时,从特征金字塔网络的特征映射{P1、P2、P3}中构建了三个代价体。如下图所示,它们对应的空间分辨率分别为输入图像大小的{1/16、1/4、1}。
在这里插入图片描述

7 损失函数

N阶段的级联代价体产生N−1的中间输出和最终预测。对所有输出进行监督,总损失定义为:
Loss  = ∑ k = 1 N λ k ⋅ L k ( 5 ) \text { Loss }=\sum_{k=1}^N \lambda^k \cdot L^k~~~~(5)  Loss =k=1NλkLk    (5)
其中 L k L^k Lk为第k阶段的损失, λ k λ^k λk为对应的损失权重。在实验中采用与MVSNet相同的损失函数 L k L^k Lk

8 实验分析

8.1 实验数据集

DTU是一个大规模的MVS数据集,由124个不同的场景组成,在7种不同的光照条件下,在49或64个位置进行扫描。坦克和寺庙数据集(Tanks and Temples dataset)包含具有小深度范围的真实场景。更具体地,它的中间场景由8个场景组成,包括家庭,弗朗西斯,马,灯塔,M60,黑豹,操场和火车。使用DTU训练集来训练Cascade-MVSNet,并在DTU评价集上进行测试。为了验证Cascade-MVSNet的泛化性,Cascade-MVSNet还在坦克和模板数据集的中间集上使用在DTU数据集上训练的不进行任何微调的模型进行测试。

8.2 实验比较

在这里插入图片描述
在这里插入图片描述
MVSNet+Ours(Cascade-MVSNet)在DTU和Tanks and Temples数据集上的表现都是最佳的。
在这里插入图片描述
MVSNet+Ours(Cascade-MVSNet)生成了更完整的点云与更精细的细节。除了R-MVSNet 提供了具有后处理方法的点云结果外,其它都是通过运行它们提供的预训练模型和代码来获得上述方法的结果。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务实战系列之Gateway

前言 人类世界自工业革命以来&#xff0c;无论从金融、货币、制度&#xff0c;还是科技、资源、社会各个方面&#xff0c;都发生了翻天覆地的变化。物质极大丰富&#xff0c;从而也推动了科技的极速发展。当计算机问世也仅仅不到80年&#xff0c;而如今我们的生活中处处有它的影…

为了摆脱 Android ,亚马逊开发基于Linux的操作系统

导读亚马逊一直在开发一种新的操作系统 —— 内部代号为 “Vega”&#xff0c;以便在 Fire TV、智能显示器和其他联网设备上取代 Android 系统。 亚马逊一直在开发一种新的操作系统 —— 内部代号为 “Vega”&#xff0c;以便在 Fire TV、智能显示器和其他联网设备上取代 Andr…

K8S精进之路-控制器Deployment-(1)

在K8S中&#xff0c;最小运行单位为POD,它是一个逻辑概念&#xff0c;其实是一组共享了某些资源的容器组。POD是能运行多个容器的&#xff0c;Pod 里的所有容器&#xff0c;共享的是同一个 Network Namespace&#xff0c;并且可以声明共享同一个 Volume。在POD中能够hold住网络…

2023年中国宠物清洁用品分类、市场规模及发展特征分析[图]

宠物清洁用品指专用于清洁宠物毛发、口腔、耳部、脚爪等部位的各类宠物用品&#xff0c;包括宠物香波、滴耳露、修毛刀等。宠物主对宠物清洁用品需求的出现&#xff0c;一定程度上反映出部分宠物主与宠物间的感情逐渐加深&#xff0c;并逐渐达到了较为亲密的程度。随着宠物清洁…

全民阅读营造良好氛围 助力培养孩子阅读习惯

日前,2023年全民终身学习活动周全国总开幕式在重庆举行,自2005年起,终身学习活动周已连续举办了18届,累计带动4亿多群众参与全民终身学习活动周,有效推进全面阅读。 随着全民阅读氛围的持续浓厚,阅读不再是语文学科的专项,不再是学校教育的专属,家庭、社会都在积极参与进来。尤…

2023年11月25日(星期六)骑行三家村

2023年11月25日 (星期六) 骑行三家村(赏红杉林&#xff09;&#xff0c;早8:30到9:00&#xff0c; 大观公园门囗集合&#xff0c;9:30准时出发 【因迟到者&#xff0c;骑行速度快者&#xff0c;可自行追赶偶遇。】 偶遇地点:大观公园门口集合 &#xff0c;家住东&#xff0c;南…

ssm租房小程序-计算机毕设 附源码42196

SSM租房小程序 摘 要 本论文主要论述了如何使用SSM框架开发一个租房小程序&#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构JAVA技术&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述租房小程序的当前背景以及系…

Ajax技

Ajax的特点 异步提交&#xff1a;Ajax采用异步通信方式&#xff0c;能够在页面无需重新加载的情况下向服务器发送请求并接收响应数据&#xff0c;提升了用户体验。无需插件&#xff1a;Ajax是基于标准浏览器的Javascript和XMLHttpRequest对象实现的&#xff0c;无需安装插件或…

5.基于飞蛾扑火算法(MFO)优化的VMD参数(MFO-VMD)

代码的使用说明 基于飞蛾扑火算法优化的VMD参数 优化算法代码原理 飞蛾扑火优化算法&#xff08;Moth-Flame Optimization&#xff0c;MFO&#xff09;是一种新型元启发式优化算法&#xff0c;该算法是受飞蛾围绕火焰飞行启发而提出的&#xff0c;具有搜索速度快、寻优能力强的…

母婴服务预约小程序的效果如何

二胎家庭增速明显&#xff0c;占比较大&#xff0c;成为市场各母婴品牌的目标&#xff0c;而随着行业发展及市场变化&#xff0c;线上互联网深入人们生活&#xff0c;各家母婴品牌开始向“数字化”靠拢。 目前母婴门店商家主要面临服务/产品线上曝光不足、宣传度不够或扩圈无门…

Azure 机器学习 - 搜索中的检索增强 (RAG)

目录 一、Azure AI 信息检索系统介绍二、采用 Azure AI 搜索的 RAG 方法三、适合 Azure AI 搜索的自定义 RAG 模式四、Azure AI 搜索中的可搜索内容五、Azure AI 搜索中的内容检索构建查询响应按相关性排名适用于 RAG 方案的 Azure AI 搜索查询的示例代码 六、集成代码和 LLM七…

超级实用的程序员接单平台,看完少走几年弯路,强推第一个!

“前途光明我看不见&#xff0c;道路曲折我走不完。” 兜兜转转&#xff0c;心心念念&#xff0c;念念不忘&#xff0c;必有回响。终于找到了… 网络上好多人都在推荐程序员线上接单&#xff0c;有人说赚得盆满钵满&#xff0c;有的人被坑得破口大骂&#xff0c;还有的人甚至还…

PyTorch 实战之水果分类

当我们试图提高神经网络的准确性时&#xff0c;经常会遇到过拟合训练数据的情况。当我们运行测试数据的模型时&#xff0c;这会导致一个糟糕的预测。因此&#xff0c;我采取了一个数据集&#xff0c;并应用这些技术&#xff0c;不仅提高准确性&#xff0c;而且还处理过拟合的问…

十七、Linux的组管理

1、Linux组基本介绍 在linux中的每个用户必须属于一个组&#xff0c;不能独立于组外。在linux中每个文件所有者、所在组、其它组的概念 1.所有者 2.所在组 3.其他组 4.改变用户所在的组 2、文件/目录 所有者 一般为文件的创建者&#xff0c;谁创建了该文件&#xff0c;就自…

【C++】泛型编程 ⑩ ( 类模板的运算符重载 - 函数实现 写在类外部的同一个 cpp 代码中 | 类模板 的 外部友元函数二次编译问题 )

文章目录 一、类模板 - 函数声明与函数实现分离1、类模板 外部 实现 构造函数2、类模板 外部 实现 普通函数3、类模板 外部 实现 友元函数( 1 ) 错误示例及分析 - 类模板 的 外部友元函数 二次编译 问题( 2 ) 正确写法 二、代码示例 - 函数声明与函数实现分离1、代码示例2、执行…

90天,广告商单43张,小红书AI庭院风视频制作详解教程

今天给大家分享一个目前在小红书很火的AI绘画商单号案例。 首先给大家看看案例视频形态 这类视频内容非常简单&#xff0c;主要展示农家庭院的别致景色。通过AI绘画工具生成图片&#xff0c;再利用剪辑工具将画面增加动态元素&#xff0c;让整个视频逼真鲜活&#xff0c;加上…

Head、Neck、Backbone介绍

在深度学习中&#xff0c;通常将模型分为三个部分&#xff1a;backbone、neck 和 head。 Backbone&#xff1a;backbone 是模型的主要组成部分&#xff0c;通常是一个卷积神经网络&#xff08;CNN&#xff09;或残差神经网络&#xff08;ResNet&#xff09;等。backbone 负责…

使用Pytorch实现linear_regression

使用Pytorch实现线性回归 # import necessary packages import torch import torch.nn as nn import numpy as np import matplotlib.pyplot as plt# Set necessary Hyper-parameters. input_size 1 output_size 1 num_epochs 60 learning_rate 0.001# Define a Toy datas…

基于单片机仓库温湿度监测报警系统仿真设计

**单片机设计介绍&#xff0c;基于单片机仓库温湿度监测报警系统仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的仓库温湿度监测报警系统可以被设计成能够实时监测仓库内的温度和湿度&#xff0c;并根据预设…

【C++】继承(上) 继承 | 子类的默认成员函数

一、继承 概念 继承(inheritance)是一种面向对象编程的概念&#xff0c;它允许一个类&#xff08;称为子类或派生类&#xff09;继承另一个类&#xff08;称为父类或基类&#xff09;的特征和行为。子类可以获得父类的成员函数和变量&#xff0c;而不需要重新编写它们。子类还…