MVSNet论文笔记

MVSNet论文笔记

    • 摘要
    • 1 引言
    • 2 相关基础
      • 2.1 多视图立体视觉重建(MVS Reconstruction)
      • 2.2 基于学习的立体视觉(Learned Stereo)
      • 2.3 基于学习的多视图的立体视觉(Learned MVS)

Yao, Y., Luo, Z., Li, S., Fang, T., Quan, L. (2018). MVSNet: Depth Inference for Unstructured Multi-view Stereo. In: Ferrari, V., Hebert, M., Sminchisescu, C., Weiss, Y. (eds) Computer Vision – ECCV 2018. ECCV 2018. Lecture Notes in Computer Science(), vol 11212. Springer, Cham. https://doi.org/10.1007/978-3-030-01237-3_47

摘要

作者提出了一种端到端深度学习架构,用于从多视图图像进行深度图推断。在网络中,作者首先提取深度视觉图像特征,然后通过可微分单应性变换在参考相机坐标系上构建三维代价体。接下来,应用三维卷积对初始深度图进行正则化和回归,然后用参考图像进行细化,最终输出推断的深度图。该框架使用基于方差的代价度量灵活地适应任意的n视图输入,该度量将多个特征映射到一个代价特征中。在大规模室内DTU数据集上对MVSNet进行了演示。通过简单的后处理,该方法不仅显著优于以前的最新技术,而且在运行速度也快了好几倍。还在复杂的室外坦克和寺庙数据集上评估了MVSNet,在2018年4月18日之前,该方法在没有进行任何微调的情况下排名第一,显示出MVSNet具有很强的泛化能力。

1 引言

多视图立体视觉(MVS, Multi-view stereo)估计重叠图像的密集表示是计算机视觉领域研究了数十年的核心问题。传统的方法使用手工的相似度度量和工程正则化(例如,归一化互相关和半全局匹配)来计算对应的密集和恢复三维点。虽然这些方法在理想的传感器下显示了良好的结果,但它们存在一些共同的局限性。例如,场景的低纹理、镜面和反射区域使密集匹配难以处理,从而导致不完整的重建。在最近的MVS基准测试中报道,尽管目前最先进的算法在精度上表现得很好,但重建的完整性仍然有很大的改进空间。

最近卷积神经网络(CNNs)研究的成功也引发了人们对改进立体重建的兴趣。从概念上讲,基于学习的方法可以引入全局语义信息,如镜面和反射先验,以实现更鲁棒的匹配。有一些尝试在双视图立体匹配上,用基于学习的方式取代手工的相似度量或工程正则化。这些工作已经显示出了良好的结果,并在立体基准测试集中逐渐超过了传统的方法。事实上,立体匹配任务非常适合使用基于CNN的方法,因为图像对被预先纠正,因此问题成为不影响摄像机参数的水平像素级视差估计

然而,直接将学习到的双视图立体视觉扩展到多视图场景并不简单。虽然可以简单地对所有选择的图像对进行立体匹配,然后将所有成对的重建合并到一个全局点云,但这种方法不能充分利用多视图信息,导致不准确的结果。与立体匹配不同,输入到MVS的图像可能是任意的相机几何形状,这给基于学习方法带来了一个棘手的问题

只有少数工作认识到这个问题,并尝试将CNN应用于MVS重建:SurfaceNet预先构造了彩色体素立方体(CVC, Colored Voxel Cubes),它将所有图像像素的颜色和摄像机信息结合到单个体积作为网络的输入。相比之下,基于学习的立体视觉机制(LSM, Learned Stereo Machine)直接利用可微分投影/非投影来实现端到端训练/推理。

然而,这两种方法都利用了规则网格的体积表示。由于3D体积巨大内存消耗的限制,他们的网络很难扩展: LSM只处理低体积分辨率的合成对象,SurfaceNet采用启发式分治策略,需要很长时间进行大规模重建。在2018年4月18日之前,现代MVS基准测试的主流仍被传统的方法所占据。

为此,作者提出了一种用于深度图推理的端到端深度学习架构,它每次计算一个深度图,而不是一次计算整个3D场景。与其它基于深度图的MVS方法类似,MVSNet以一个参考图像和几个源图像作为输入,并推断出参考图像的深度图。这里的关键是可微分单应性变换操作,它隐式地编码网络中的摄像机几何结构,从二维图像特征构建三维代价体,并实现端到端训练。

为了适应输入中任意数量的源图像,我们提出了一个基于方差的度量方法,它将多个特征映射到一个代价体特征中。这个代价体经过多尺度的三维卷积和回归出一个初始深度图。最后,利用参考图像对深度图进行细化,以提高边界区域的精度

MVSNet和以前基于学习的方法之间有两个主要的区别。首先,为了进行深度图推断,MVSNet的3D代价体是建立在相机的坐标系之上,而不是常规的欧几里得空间。其次,MVSNet将MVS重建解耦到较小的每一个视图深度图估计问题上,这使得大规模重建成为可能。

2 相关基础

2.1 多视图立体视觉重建(MVS Reconstruction)

根据输出表示法,MVS方法可分为1)直接点云重建、2)体素重建、3)深度图重建基于点云的方法直接基于三维点,通常依靠传播策略逐步强化重建。由于点云的传播是按顺序进行的,这些方法很难被完全并行化,而且通常需要很长的处理时间基于体素的方法将三维空间划分为规则的网格,然后估计每个体素是否附着在表面上。这种表示方法的缺点是空间离散化误差和高内存消耗。相比之下,深度图是所有表示方式中最灵活的。它将复杂的MVS问题解耦为相对较小的每一幅视图的深度图估计问题,该问题一次只关注一个参考图像和几个源图像。此外,深度图可以很容易地融合到点云或体素重建上。根据最近的MVS基准测试,在2018年4月18日之前最好的MVS算法都是基于深度图的方法。

2.2 基于学习的立体视觉(Learned Stereo)

与使用传统的手工图像特征和匹配度量不同,最近的立体视觉研究使用深度学习技术进行成对的补丁匹配。Han等人首先提出了一个深度网络来匹配两个图像补丁。Zbontar等人和Luo等人使用学习到的特征进行立体匹配和半全局匹配(SGM)进行后处理。除了成对匹配代价外,基于学习的方法也应用于代价正则化。SGMNet学习调整SGM中使用的参数,而CNN-CRF 在网络中整合了条件随机场优化,用于端到端立体视觉学习。在2018年4月18日之前,最先进的方法是GCNet ,它应用3D CNN来规范代价体,并通过soft argmin操作回归视差。在KITTI数据集中有报道,基于学习的立体视觉方法,特别是端到端的学习算法,明显优于传统的立体视觉方法。

2.3 基于学习的多视图的立体视觉(Learned MVS)

在2018年4月18日之前,对基于学习的MVS方法的尝试较少。哈特曼等人提出了学习到的多补丁相似度来替代传统的MVS重建的代价度量。第一个基于学习的处理MVS问题的算法是SurfaceNet ,它通过复杂的体素级视图选择预先计算代价体,并使用三维CNN进行正则化和推断表面体素。与MVSNet最相关的方法是LSM,其中摄像机参数在网络中被编码为投影操作,以形成代价体,并使用3D CNN对一个体素是否属于某一表面进行分类。然而,由于体素表示的普遍缺点,SurfaceNet和LSM的网络被限制在小规模的重建。它们要么应用分治策略,要么只适用于具有低分辨率输入的合成数据。相比之下,MVSNet专注于每次为一个参考图像生成深度图,这使得MVSNet可以直接自适应地重建一个大型场景。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux 零拷贝splice函数

Linux splice 函数简介 splice 是 Linux 系统中用于在两个文件描述符之间移动数据的系统调用。它的主要作用是在两个文件描述符之间传输数据&#xff0c;而无需在用户空间进行数据拷贝。也是零拷贝操作. 函数原型 #include <fcntl.h> ssize_t splice(int fd_in, loff_…

『Spring Boot Actuator Spring Boot Admin』 实现应用监控管理

前言 本文将会使用 Spring Boot Actuator 组件实现应用监视和管理&#xff0c;同时结合 Spring Boot Admin 对 Actuator 中的信息进行界面化展示&#xff0c;监控应用的健康状况&#xff0c;提供实时警报功能 Spring Boot Actuator 简介 官方文档&#xff1a;Production-rea…

【Java 进阶篇】JQuery 事件绑定:`on` 与 `off` 的奇妙舞曲

在前端开发的舞台上&#xff0c;用户与页面的互动是一场精彩的表演。而 JQuery&#xff0c;作为 JavaScript 的一种封装库&#xff0c;为这场表演提供了更为便捷和优雅的事件绑定方式。其中&#xff0c;on 和 off 两位主角&#xff0c;正是这场奇妙舞曲中的核心演员。在这篇博客…

【C++】一文全解C++中的异常:标准库异常体系&自定义异常体系(含代码演示)

前言 大家好吖&#xff0c;欢迎来到 YY 滴C系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; 目录 一.C语言传统的处理错误的方式二.C异常…

Unity中Shader法线贴图(上)

文章目录 前言一、法线纹理的作用二、为什么法线贴图长这样&#xff1f;&#xff08;蓝色&#xff09;三、法线贴图能使纹理采样时&#xff0c;进行偏移采样四、在Shader中使用法线贴图1、在属性面板定义一个变量来接收法线贴图2、在使用前声明 _NormalTex3、在片元着色器中&am…

SQLite 安装和 Java 使用教程

SQLite是一个C语言库&#xff0c;它实现了一个小型、快速、自包含、高可靠性、功能齐全的SQL数据库引擎。SQLite是世界上使用最多的数据库引擎。SQLite内置于所有手机和大多数计算机中&#xff0c;并捆绑在人们每天使用的无数其他应用程序中。 SQLite文件格式稳定、跨平台、向…

系列三、GC垃圾回收算法和垃圾收集器的关系?分别是什么请你谈谈

一、关系 GC算法&#xff08;引用计数法、复制算法、标记清除算法、标记整理算法&#xff09;是方法论&#xff0c;垃圾收集器是算法的落地实现。 二、4种主要垃圾收集器 4.1、串行垃圾收集器&#xff08;Serial&#xff09; 它为单线程环境设计&#xff0c;并且只使用一个线程…

Java --- JVM之垃圾回收相关算法

目录 一、垃圾标记算法 1.1、垃圾标记阶段&#xff1a;对象存活判断 1.2、引用计数算法 1.3、可达性分析算法 1.4、GC Roots 二、对象的finalization机制 2.1、生存还是死亡&#xff1f; 三、查看GC Roots 3.1、使用MAT查看 四、使用JProfiler分析OOM 五、清除阶段算…

李宏毅2023机器学习作业HW05解析和代码分享

ML2023Spring - HW5 相关信息&#xff1a; 课程主页 课程视频 Sample code HW05 视频 HW05 PDF 个人完整代码分享: GitHub | Gitee | GitCode 运行日志记录: wandb P.S. HW05/06 是在 Judgeboi 上提交的&#xff0c;完全遵循 hint 就可以达到预期效果。 因为无法在 Judgeboi 上…

git常用命令和参数有哪些?【git看这一篇就够了】

文章目录 前言常用命令有哪些git速查表奉上常用参数后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;git操作相关 &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。(如果出…

MIB 6.S081 System calls(1)using gdb

难度:easy In many cases, print statements will be sufficient to debug your kernel, but sometimes being able to single step through some assembly code or inspecting the variables on the stack is helpful. To learn more about how to run GDB and the common iss…

每天一道算法题(六)——返回一组数字中所有和为 0 且不重复的三元组

文章目录 前言1、问题2、示例3、解决方法4、效果5、注意点 前言 注意&#xff1a;答案中不可以包含重复的三元组。 1、问题 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] n…

23.11.19日总结

经过昨天的中期答辩&#xff0c;其实可以看出来项目进度太慢了&#xff0c;现在是第十周&#xff0c;预计第十四周是终级答辩&#xff0c;在这段时间要把项目写完。 前端要加上一个未登录的拦截器&#xff0c;后端加上全局的异常处理。对于饿了么项目的商品建表&#xff0c;之前…

redis问题归纳

1.redis为什么这么快&#xff1f; &#xff08;1&#xff09;基于内存操作&#xff1a;redis的所有数据都存在内存中&#xff0c;因此所有的运算都是内存级别的&#xff0c;所以性能比较高 &#xff08;2&#xff09;数据结构简单&#xff1a;redis的数据结构是专门设计的&…

系列五、怎么查看默认的垃圾收集器是哪个?

一、怎么查看默认的垃圾收集器是哪个 java -XX:PrintCommandLineFlags -version

python-opencv 培训课程作业

python-opencv 培训课程作业 作业一&#xff1a; 第一步&#xff1a;读取 res 下面的 flower.jpg&#xff0c;读取彩图&#xff0c;并用 opencv 展示 第二步&#xff1a;彩图 -> 灰度图 第三步&#xff1a;反转图像&#xff1a;最大图像灰度值减去原图像&#xff0c;即可得…

整数转罗马数字

罗马数字包含以下七种字符&#xff1a; I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如&#xff0c; 罗马数字 2 写做 II &#xff0c;即为两个并列的 1。12 写做 XII &#xff0c;即为…

【Go入门】 Go搭建一个Web服务器

【Go入门】 Go搭建一个Web服务器 前面小节已经介绍了Web是基于http协议的一个服务&#xff0c;Go语言里面提供了一个完善的net/http包&#xff0c;通过http包可以很方便的搭建起来一个可以运行的Web服务。同时使用这个包能很简单地对Web的路由&#xff0c;静态文件&#xff0c…

线性表--链表-1

文章目录 主要内容一.链表练习题1.设计一个递归算法&#xff0c;删除不带头结点的单链表 L 中所有值为 X 的结点代码如下&#xff08;示例&#xff09;: 2.设 L为带头结点的单链表&#xff0c;编写算法实现从尾到头反向输出每个结点的值代码如下&#xff08;示例&#xff09;: …

vite+vue3+ts项目,使用语法糖unplugin-auto-import插件的步骤

1. 安装插件 npm install unplugin-auto-import vitejs/plugin-vue -D2. vite.config.ts中引入插件 import AutoImport from "unplugin-auto-import/vite"export default defineConfig({plugins: [vue(), AutoImport({imports: ["vue", "vue-router…