【论文简述】Multiview Stereo with Cascaded Epipolar RAFT(arxiv 2022)

news2024/9/25 9:34:52

一、论文简述

1. 第一作者:Zeyu Ma

2. 发表年份:2022

3. 发表期刊:arxiv

4. 关键词:MVS、RAFT、级联、极线

5. 探索动机:3D卷积在计算和内存方面成本很高,在有限资源条件下限制重建质量。

However, a drawback of MVSNet is that regularizing the 3D plane-sweeping cost volume using 3D convolutions can be costly in terms of computation and memory, potentially limiting the quality of reconstruction under finite resources. Subsequent variants of MVSNet have attempted to address this issue by replacing 3D convolutions with recurrent sequential processing of 2D slices. Despite significant empirical improvements, however, such sequential processing can be suboptimal because the 3D cost volume does not have a natural sequential structure.

6. 工作目标:结合RAFT结构,解决上述问题。

7. 核心思想:

  • We propose CERMVS (Cascaded Epipolar RAFT Multiview Stereo), a new approach based on the RAFT (Recurrent All-Pairs Field Transforms) architecture developed for optical flow.
  • CERMVS introduces five new changes to RAFT: epipolar cost volumes, cost volume cascading, multiview fusion of cost volumes, dynamic supervision, and multiresolution fusion of depth maps. CER-MVS is significantly different from prior work in multiview stereo. Unlike prior work, which operates by updating a 3D cost volume, CER-MVS operates by updating a disparity field.
  • Furthermore, we propose an adaptive thresholding method to balance the completeness and accuracy of the reconstructed point clouds.

8. 实验结果:SOTA

On DTU, CERMVS achieves performance competitive to the current state of the art (the second best among published results). On Tanks-and-Temples, CER-MVS significantly advances the state of the art of the intermediate set from a mean F1 score of 61:68 to 64:82, and the advanced set from 37:44 to 40:19.

 9.论文&代码下载:

https://arxiv.org/pdf/2205.04502.pdf

http:// https://github.com/princeton-vl/CER-MVS

二、实现方法

1. CERMVS概述

CER-MVS的结构和流程如下图,给定参考视图和一组相邻视图:

  1. 使用一组卷积网络提取特征
  2. 使用特征构建级联极线代价体
  3. 通过循环迭代更新来预测视差(逆深度)图
  4. 融合多分辨率深度
  5. 所有参考视图的深度图融合以产生最终的点云

​2. 代价体构建

图像特征。从参考视图和相邻视图中提取图像特征,来构造代价体;GRU需要来自参考视图的上下文特征。使用RAFT的卷积编码器: H×W×3→RH/2k×W/2k×Df,其中kDf决定特征分辨率和维度的超参数

极线代价体。提取特征图{fi,i = 0,……,N+1},其中f0是参考视图,其他是相邻视图,每个都有分辨率(Df,Hf,Wf) = (Df,H/2k,W/2k),通过计算参考视图中每个像素与相邻视图中沿其极线的像素之间的相关来构建3D代价体,输出一个体Cl∈N×Hf×Wf×D

Specifically, for a pixel in the reference view, we backproject it to D 3D points with disparity (inverse depth) uniformly spaced in the range from 0 to dmax (after proper scaling as described in Sec. 4.1), reproject the 3D points to the epipolar line in the neighbor view, and
use differentiable bilinear sampling to retrieve the features  from the neighbor view.

RAFT一样,通过重复的平均池化计算多尺度代价体的CP,即CP={C0,C1,……,CL−1},其中Cl∈N×Hf×Wf×D/2l, l = 0,……,L-1

代价体级联。RAFT不同,极线代价体的大小不仅取决于图像分辨率,还取决于采样的视差值的数量。大量视差值的密集采样有效地提高了代价体沿深度维度的分辨率,有助于重构精细细节。然而,使用大量的视差值会占用太多的GPU内存。因此引入了级联设计。基本思想是以当前视差预测为中心沿着视差维度构建粒度更细的额外代价体。

具体来说,在T1迭代更新之后,构建了一个新的代价体堆栈,CfP={Cf0,Cf1,……,CfL−1},其中Cfl∈N×Hf×Wf×Df/2l, l = 0,……,L-1,其中Df是均匀采样的视差值的数量,以当前预测的视差为中心,增量小于在初始代价体堆栈中使用的增量。具体地说,Df的值由2L−1*R决定,其中R是控制邻域大小的超参数,因子2L−1进行重复池化。在实验中使用了2个阶段,但设计可以简单地扩展到更多阶段。这与以前的MVS工作有很大的不同,因为代价体不被更新,只被作为静态查找表。

3. 迭代更新

迭代更新在整体结构上遵循RAFT。迭代更新初始化为零的视差场d∈Hf×Wf。在每次迭代中,更新算子的输入包括隐藏状态h∈Hf×Wf×Dh、当前视差场、来自参考视图的上下文特征i∈Hf×Wf×Dh,以及使用当前视差场从代价体中检索到的像素特征。更新算子的输出包括一个新的隐藏状态和视差场的增量。

代价体的多视图融合。不同于RAFT,在MVS中,需要考虑多个相邻视图。对于参考视图中的每个像素,针对每个邻居视图生成一个相关特征向量。给定来自多个邻居视图的这样的特征向量,将元素的均值作为最终向量。这个操作符背后的直觉是,平均值更健壮,因为邻居视图的数量可以在测试时间内变化。

为了针对单个邻居视图为每个像素生成相关特征向量,执行与RAFT相同的查找过程。给定像素的当前视差估计和相对于邻居视图的代价体堆栈CP={C0,C1,……,CL−1},从每个代价体中检索对应于以当前视差为中心的长度为R的局部1D整数网格的相关值。对于堆栈的每一层都重复这样做,来自所有层级的值被连接起来形成一个单一的特征向量。

更新算子。使用基于GRU的更新算子来对视差场提出一系列增量更新。

首先,从当前视差估计dt中提取特征。通过将每个像素的视差减去其7x7邻域,然后将结果重新塑造为49维向量,从而形成特征向量。这个操作的效果是使特征向量对视差场的不变性达到一个移位因子,因为检索到的向量只依赖于相邻像素之间的相对视差。

其次,因为有一个代价体的级联,并且更新算子在级联的不同阶段访问不同的代价体,尽管更新算子仍然是循环的,但被赋予灵活性,以便在级联的不同阶段有不同的行为。因此,修改RAFT的权重绑定方案,使一些权重在所有迭代中绑定,而另一些权重仅在级联的单个阶段中绑定。特别地,除了从GRU的隐藏状态解码视差更新的解码器层之外,在迭代中绑定了所有权重。解码层的权重仅在级联的每个阶段内绑定。

第三,RAFT使用上采样层对流场进行最终预测,而本文没有使用任何上采样层。

更新方程如下,第1阶段为2级联,迭代次数为T1

这里i是上下文特征,Encoderc是一个使用两个卷积层转换相关特征的编码器

4. 多分辨率深度融合

在高分辨率下操作通常有助于构造更精细的细节,但GPU内存限制了网络可以访问的最高分辨率,特别是在使用大型小批量训练时。绕过这一限制的一种方法是在推理过程中将网络应用到更高的分辨率,这是之前工作中采用的常见方法。

然而,文中发现虽然在推理过程中使用更高的分辨率可以有所帮助,但更好的方法是在两个输入分辨率上应用相同的网络,用于训练网络的分辨率W × H和更高分辨率2W × 2H,并结合两个视差图LRHR,形成具有控制参数t的融合视差图MR:

即,如果低分辨率预测和高分辨率预测在一个像素处相似,则使用高分辨率预测;否则我们使用低分辨率预测。这是由于观察到低分辨率的预测在没有纹理的大型结构(如平面)方面更可靠,而高分辨率的预测在细节方面更可靠,这些细节往往不会与低分辨率的预测有很大的偏差。注意,当控制参数t0变化到无穷大时,dMRdLR变化到dHR

5. 自适应点云连接

作为最后一步,将来自参考视图的深度图连接在一起,形成单个点云。使用D2HC-RMVSNet中提出的基于动态一致性检查(DCC)的自适应阈值方法。DCC硬编码了重投影误差的两个阈值t1t2,但是,使用阈值kt1kt2,其中每个场景的k是不同的,以确保一个固定的百分比,所有像素的p%通过一致性测试。p通过验证集得到优化。

6. 监督

监督网络的损失由两部分组成。第一部分在每次迭代中测量预测视差相对于真实的L1误差,并在后续迭代中以指数级增加权重。这部分可以加快所有视差范围的训练,而不考虑开始时的异常值。损失的第二部分与第一部分相似,只是(1)测量深度的误差(即逆视差),以便更符合点云评估;(2)误差上限为常数κ,以防止异常值主导损失。

给定每次迭代的预测视差为dt,t =1,……,T1+T2和真实视差dgt,综合损失定义如下:

其中γ控制迭代中的权重,λ使两部分具有大致相同的范围。参数w平衡了这两个部分,并随着训练的进行线性地从01变化,以更加关注深度误差,例如,对于总共16个训练周期,当8个epoch结束时w为0.5

7. 实验

7.1. 数据集

DTU Dataset、Tanks and Temples

7.2. 实现

通过PyTorch实现,使用DTU数据集训练,在DTU上测试。在blenddmvs数据集上训练,在Tanks-and-Temples上测试。

没看懂,In BlendedMVS, which is used for training only, the scenes have large variations in the range of depth values, we scale each reference view, along with its neighbor views, so that its ground-truth depth has a median value 600 mm. When we evaluate on Tanks-andTemples, due to lack of ground-truth and noisy background, we scale each reference view, along with its neighbor views, so that its minimum depth of a set of reliable feature points (computed by COLMAP [22] as in MVSNet [34]) is 400 mm. To stitch the predicted depth maps from multiple reference views, we simply scale back each depth map to its original scale.

7.3. 基准结果

DTU数据集基准:SOTA

 Tanks & Temples:SOTA 

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

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

相关文章

CISP-PTE 学习记录

CISP-PTE 学习记录 题目链接1 http://49.232.193.10:2083/start/index.php?pagehello.html write up: http://49.232.193.10:2083/start/index.php?pagephp://filter/readconvert.base64-encode/resource…/key.php 知识点: php伪协议,php伪协议是可以读取到ww…

【运维】Linux/Ec2挂载卷与NFS搭建实站讲解

英文Network File System(NFS),是由SUN公司研制的UNIX表示层协议(presentation layer protocol),能使使用者访问网络上别处的文件就像在使用自己的计算机一样。NFS在实际场景中有着不少的应用场景,比如分布式代码部署下,代码一致性…

关于 微软商店无法加载页面 显示错误代码0x80131500的解决办法

目录一、误删系统文件导致Microsoft Store无法打开1.运行 SFC 和 DISM2.尝试修复或者重置微软应用商店3.重新部署 Microsoft Store4.运行Windows疑难解答5.对系统镜像进行无损修复二、其他原因导致Microsoft Store无法打开1.调整网络连接2.更改DNS3.清理应用商店的缓存4.调整 I…

java-raft框架之atomix进行分布式管理

共识算法 在一个分布式的系统中,管理各个节点的一致性(共识)一直是个很有难度的问题。 在近几十年的发展中,于1990年诞生的Paxos算法是其中最为经典的代表,并一统江湖数几十载。 如著名的zookeeper、chubby都是基于…

操作系统(day03)-- 进程

文章目录进程进程的定义进程的组成进程的组织进程的特征进程的状态-五种基本状态进程状态的转换进程控制进程控制的定义进程控制相关的原语进程 系统并发运行多个程序,它需要将程序代码、数据段存放到内存的某个位置,那系统怎么知道哪个内存的数据在哪呢…

注册公司选择认缴or实缴?如何查验公司实际资金?

目录 前言 实缴制 认缴制 认缴制还是实缴制呢,哪个更好? 1、如果你的启动资金比较少,建议选认缴制: 2、有27类的公司暂不推行注册资金认缴制: 3、如何查看公司实际的公司实缴金额? 4、认缴不需要验资&#xf…

【原文核心对照代码】【一文足以系列】A-LOAM里程计部分简短精解

前言 本文将通过论文对照代码的方式阐述A-LOAM这一神奇算法。全文保持各个章节短小精悍的风格。本文会省去一些细节,但是了解大部分的论文和代码实现已经足够了。 点曲率计算与边缘点面点区分 论文中通过对点云点的曲率进行如下求曲率的计算。将计算的结果跟阈值…

org.slf4j.Logger无法输出日志的BUG

场景依赖<dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.4.13</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>s…

第一章 Iceberg入门介绍

1、Iceberg简介 本质&#xff1a;一种数据组织格式 1.1、应用场景 ①面向大表&#xff1a;单表包含数十个PB的数据 ②分布式引擎非必要&#xff1a;不需要分布式SQL引擎来读取或查找文件 ③高级过滤&#xff1a;使用表元数据&#xff0c;使用分区和列级统计信息修建数据文…

技术管理者如何获得下属的认同?

你好&#xff0c;我是童军&#xff0c;目前是华锐技术资管营销研发团队总监。今天我将从自己的工作场景出发&#xff0c;讲讲我是如何和团队小伙伴相处沟通&#xff0c;并获得认同的。 我们先看一个小故事。 我刚当上主管那会儿&#xff0c;在和新入职同事沟通具体工作时&…

【数组相关面试题】LeetCode试题

前言&#xff1a;在之前我们已经学习过了顺序表的相关概念以及实现的方法&#xff0c;今天我们通过几个题来进行应用了解。 目录1.第一题([oj链接](https://leetcode.cn/problems/remove-element/))2.第二题&#xff08;[oj链接](https://leetcode.cn/problems/remove-duplicat…

Ubuntu和Linux开发板网络环境搭建

参考&#xff1a;https://www.bilibili.com/video/BV1n541197rk?spm_id_from333.999.0.0 目录前言STM32MP157 开发板网络环境搭建开发工具网络拓扑结构Ubuntu 常用工具安装同一网段ping 测试概念关闭Ubuntu 和Windows 防火墙电脑和开发板直连同个路由器准备工作VMware 设置查看…

Java:每个开发人员职业生涯的基本Java技能

早在1996年&#xff0c;Java就首次被引入世界&#xff0c;如今仍然非常受欢迎。2021&#xff0c;全球超过35%的程序员使用这种语言。此外&#xff0c;它是TIOBE索引中最受欢迎的三种编程语言之一。作为Java初学者&#xff0c;这对你意味着什么?这意味着你必须获得竞争优势&…

浏览器的URL中每个中字符的“乱码”问题,字符集的解码和编码

uft-8和Unicode字符表对应&#xff0c;查找可参考&#xff1a;https://www.utf8-chartable.de/unicode-utf8-table.pl 几个好用的字符集转换网址&#xff1a;http://web.chacuo.net/charseturlencode&#xff0c;https://123.w3cschool.cn/webtools&#xff0c;http://mytju.co…

JVM详解--内存结构

文章目录什么是JVM内存结构程序计数器&#xff08;Program Counter Register&#xff09;虚拟机栈&#xff08;Java Virtual Machine Stacks&#xff09;概述栈内存溢出本地方法栈堆&#xff08;Heap&#xff09;堆内存溢出堆内存诊断方法区方法区内存溢出常量池运行时常量池St…

PHP手册

NULL 未定义和unset()的变量都将解析为值null unset() unset( $var, ...$vars) 如果在函数中 unset() 一个全局变量&#xff0c;则只是局部变量被销毁&#xff0c;而在调用环境中的变量将保持调用 unset() 之前一样的值。 <?php function destroy_foo() {global $foo;un…

双系统下linux分区被误删的解决办法

前言在windows系统的磁盘管理中误删了ubuntu的磁盘分区&#xff0c;开机后一直卡在grub界面。Windows/Linux双启动的机器一般都使用grub作为引导程序。如果不小心在Windows中删除了linux分区&#xff0c;grub就会因为找不到配置文件而造成无法启动。 系统配置 系统类型&#x…

Qt新手入门指南 - 如何创建模型/视图(一)

每个UI开发人员都应该了解ModelView编程&#xff0c;本教程的目标是为大家提供一个简单易懂的介绍。Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff…

java排错定位

1、检查有没有报错信息 日志文件中登记的错误&#xff0c;这个算是最简单的&#xff0c;在定位错误时&#xff0c;也最希望问题在这一步得到确认。在打印异常时&#xff0c;通常会打印异常的调用栈信息&#xff0c;通过调用栈信息就可以很便捷的定位问题了。 例如&#xff1a; …

【JavaScript】原型与原型链以及判断数据类型方式

&#x1f4bb; 【JavaScript】原型与原型链以及判断数据类型方式 &#x1f3e0;专栏&#xff1a;JavaScript &#x1f440;个人主页&#xff1a;繁星学编程&#x1f341; &#x1f9d1;个人简介&#xff1a;一个不断提高自我的平凡人&#x1f680; &#x1f50a;分享方向&#…