【论文精读4】MVSNet系列论文详解-CVP-MVSNet

news2024/11/24 15:02:03

CVP-MVSNet全文名为“Cost Volume Pyramid Based Depth Inference for Multi-View Stereo”,主要创新点在于使用由粗到细(coarse-to-fine)模式来构建代价体金字塔(cost volume pyramid),流程如下:

(1)构建不同分辨率的L+1层图片金字塔(Image Pyramid),首先用最低精度L+1层的N张图像基于MVSNet流程推断深度图DL+1,上采样得到L层的初始深度图DL
(2)以该初始深度图DL为基础、结合L层的N张图像,通过重投影的方式构建一个局部代价体(partial cost volumes)并依次推断出初始深度图DL各像素的残差深度(residual depth,即相对于初始深度的Δd),相加之后得到当前L层的最终深度图DL
(3)不断重复第(2)步直至推断出最终第0层即原始尺寸的深度图


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

一、问题引入&创新点

这篇论文主要是提高精度的同时,解决基于学习方法完成MVS重建时的时效问题,指出优化后的RMVSNet虽然减少了内存消耗但导致时间变长,而与本文思路类似的Point-MVSNet虽然也coarse-to-fine迭代优化深度图,但由于直接在点云上操作耗时也较长。

创新点主要概括为两点:

  • 以coarse-to-fine方式构建代价体金字塔,实现一个比Point-MVSNet快6倍的MVS深度推断网络,且消耗内存较少。
  • 在构建代价体金字塔的每一层,尤其是第一层之后来构建局部代价体时使用到残差深度搜索范围(即相对初始深度要在多大范围上搜索Δd),并给出该搜索范围选取与图像分辨率关系的详细分析

二、论文模型

在这里插入图片描述

1.特征金字塔

首先构建图像金字塔,并使用一个共享参数的9层卷积神经网络(Leaky-ReLU作激活函数)来提取特征,输出通道数为16,宽高尺寸为[W/2l,H/2l],组成特征金字塔供接下来使用。

2.代价体金字塔

2.1 用于粗略深度图估计的代价体(第L+1层)

这一步就是标准MVSNet推断流程,值得一提的是论文解释了单应矩阵H作用:描述了参考视图上像素x与源视图i上像素xi的可能对应关系,即可以表述为λixi=Hi(d)x,λi代表xi在源视图i下的深度。

2.2 用于多尺度深度残差估计的代价体(第L层-第0层)

首先在2.1中我们得到了第L+1层的深度图DL+1,将其上采样得到第L层的初始深度图DL+1 该步骤的目的是得到结合了残差深度估计的第L层最终深度图DL=DL+1 +ΔDL
随后重复该步骤至第0层得到最终深度图。


这一步是核心步骤,这张图一定要看懂!

首先,对于2.1上采样后的初始深度图DL+1 ,我们定义第L层图像上像素点p(u,v)深度为dp=DL+1 (u,v)。

下图是该操作的两个步骤,左边为重投影操作,右边为提取特征和构建局部代价体的操作。
在这里插入图片描述

2.2.1 左边重投影过程

依据当前点p的初始深度找出对应3D点(绿色),加、减一个值作为最远和最近的、可能真实3D点(紫色、红色),残差搜索深度sp就是指紫色点和红色点之间的距离(该范围选定方法将在3.1详细解释),残差深度平面就是在中间划分M个可能的深度值平面,此时残差深度平面的距离间隔为Δdp=sp/M,M个可能3D点的深度值为(DL+1 (u,v)+mΔdp),其中m∈{-M/2, … ,M/2-1}。
【可以理解为以初始深度为起始点,初始深度加、减sp/2为可能的3D点最远、最近深度,这也是Δdp残差深度的含义】

此时对于当前参考视图下的像素点p,我们可以将其M个不同深度的可能3D点的按照以下公式投影,在一张源视图下得到M个深度对应的特征,如图上设置的紫色、绿色、红色三个深度点在各个源视图下都对应了一个特征。
在这里插入图片描述

2.2.2 右边构建局部代价体

右边便是将这些不同深度的可能3D点投影后的特征做方差,并将方差值作为像素点p在该深度的代价值;由于有M个假设深度,共HxW个像素点,因此便构成了[H,W,M]的局部代价体,将其通过同样的3D CNN之后便可以推断出这个残差深度Δd。

【这里和MVSNet构建代价体都使用方差法,只不过MVSNet是通过假设一系列深度值,将各源视图上的像素特征通过单应矩阵H变换到对应的深度、某个应该在的像素处,而这里是通过假设真实3D点位置来找到各源视图上该点的特征——即MVSNet是将特征从源视图变到参考视图下某个像素处,本文是从参考视图像素点找源视图对应的特征】

3.深度图推断

3.1 代价体金字塔的深度采样

在这里插入图片描述
论文观察到对于假设深度平面的采样应该与图像分辨率有关——如上图所示,太过密集的深度采样会导致3D点投影后的图像特征过于紧密、且并未提供额外的深度推断信息,因此是没有必要的。
在这里插入图片描述
因此,论文首先使用像素点p的初始深度值找到对应的3D点(绿色),将其投影至各源视图,沿级线方向(利用极限搜索原理,之前说过*********)搜索左右两个方向上离投影点2像素(?)远的像素点,并将其重投影至3D射线,此时两射线与参考视图的深度方向交集就是搜索深度

原文:find points that are two pixels away from the its projection along the epipolar line in both directions(see Fig. 3 “2 pixel length”),
按原文意思应该是左右像素点都是离投影点2像素?那图中标识的应该是4 Pixel length才对

3.2 深度图推断

之后便与MVSNet一样把代价体放入3D卷积网络中聚合上下文信息并输出概率体,由概率体通过soft-argmax求期望得到深度图,特殊之处在于代价体是沿着金字塔自上而下构建的,每次得到的该层最终深度图(除第L+1层)都应该按以下公式计算:
在这里插入图片描述
即上采样的深度+该层的局部代价体所得概率体推断出的期望残差深度

4.损失函数

在这里插入图片描述
与MVSNet一致,对每层深度图与真实深度求l1损失求和作为loss.

三、总结

  • 图画的很好看
  • 构思比较巧妙,用图像由粗到细做肯定比在点云上操作快,先得到小尺寸初始深度图,然后不断上采样再加残差深度迭代至最后深度图,求残差深度的局部代价体构建其实还是MVSNet的方差法,但是寻找特征的思路与MVSNet相反。
  • 对于如何选取残差采样深度给出了详细的思考和分析,由投影点跟左右2像素点反投影至射线来作为搜索深度,理由是图像上点太密的话其实无法提供额外信息,从而减少了采样数过多带来的内存消耗问题,这个深度采样的大小、方式在P-MVSNet里也做了改进,但其inverse-depth设置并没有仔细讲,跟本文最后的3D卷积网络一样说是在supplyment material里,不过说明这块还是可以做文章创新点的。

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

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

相关文章

Java虚拟机之运行时数据区(一)

Java虚拟机之运行时数据区 简述 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进行启动而一直存在,有些区域则是依赖用户线程的启动和结…

房子装修有哪些注意事项要注意?

房子装修有哪些注意事项要注意?这里的东西太多了,可能三天三夜都搞不清楚,而且对于初次装修的业主来说,很多专业术语都是一头雾水,所以本文就简单介绍一下,从装修到装修,以及需要注意的几点。 房…

【深度学习】实验4答案:脑部 MRI 图像分割

DL_class 学堂在线《深度学习》实验课代码报告(其中实验1和实验6有配套PPT),授课老师为胡晓林老师。课程链接:https://www.xuetangx.com/training/DP080910033751/619488?channeli.area.manual_search。 持续更新中。 所有代码…

数据之道读书笔记-05面向“联接共享”的数据底座建设

数据之道读书笔记-05面向“联接共享”的数据底座建设 在从信息化向数字化转型的过程中,企业积累了海量的数据,并且还在爆发式地增长。数据很多,但真正能产生价值的数据却很少。数据普遍存在分散、不拉通的问题,缺乏统一的定义和架…

[发送AT指令配置a7670C模块上网]

发送AT指令配置a7670C模块上网内核配置调试验证应用的编写AT的指令的使用内核配置 概要:基于rv1126平台调试SIMCOM 7670C 4G模块。 1,内核配置及内核代码修改 1.1按照芯片data sheet修改kernel代码,添加PID和VID。 此处根据不同的芯片按照其…

Mybatis plus注解@TableField详解

Mybatis plus注解TableField详解 目录1. 前言2. 应用场景2.1 更新null值2.2 查询时排除字段2.3 非数据库字段属性1. 前言 TableField 字段注解,该注解用于标识非主键的字段。将数据库列与 JavaBean 中的属性进行映射。 2. 应用场景 2.1 更新null值 想要在更新字…

auth模块方法的使用

文章目录1、创建超级用户(管理员)2、获取表,检验密码3、保存用户状态4、获取用户对象,校验用户是否登录5、验证用户是否登录6、修改密码7、注销8、注册9、方法总结10、如何扩展auth_user表1、创建超级用户(管理员) """ 在创建好一个djan…

医保医用耗材编码目录——在线查询

医保医用耗材编码目录是按照“统一分类、统一编码、统一维护、统一发布、统一管理”的总体要求下进行更新维护,旨在强调“分类”与“追溯”属性,助力将医保编码标准统一为新时期医保信息交换的通用语言。 对于医保医用耗材分类与代码数据的“分类”与“追…

高数 | 【数一】 多元函数积分学 —— 总复习框架总结

自用复习笔记。 整理参考于 2023张宇高数18讲、武忠祥十七堂课。 三重积分(质量) 概念与对称性计算 直角坐标系 先一后二法/先z后xy法/投影穿线法(柱体,侧面为柱体)先二后一法/先xy后z法/定限截面法(旋转体)柱面坐标系 = 极坐标下二重积分与定积分球面坐标系 应用 体积总…

开源版禅道的使用教程

文章目录一、禅道简介二、下载安装三、敏捷版基本功能使用四、其他版本使用一、禅道简介 1.官网介绍:国产开源项目管理软件。核心管理思想基于敏捷方法scrum。集产品管理、项目管理、质量管理、文档管理、组织管理和事务管理于一体。 scrum:迭代式增量软…

DHCP地址池耗尽攻击

DHCP地址池耗尽攻击 攻击原理简介 ​ 路由器内置的DHCP服务器,划定了一个地址池作为自动分配给接入终端号IP地址的范围。 ​ 攻击工具伪装成大量的接入主机,向路由器内的DHCP服务器请求大量的IP地址分配。 ​ 在DHCP的地址租期超时之前,已经分…

CentOS 7搭建Yunzai-Bot原神机器人

CentOS 7.6搭建Yunzai-Bot原神机器人 前言 目前使用较多的原神机器人: LittlePaimon ✨基于NoneBot2和go-cqhttp的原神Q群机器人 原神多功能机器人,查询游戏信息、图鉴攻略、树脂提醒等等,以及各种各样的好玩的功能,不仅仅是原神…

行业案例 | 睿眼攻击溯源组合拳让黑客攻击事件无所遁形

项目背景 近年来,网络安全形势愈发严峻,黑客入侵、信息泄露等信息安全事件层出不穷,给企业带来了巨大的经济损失。一是互联网出口应用多为Web应用,有效防护和监测Web应用的安全性是金融行业客户信息安全领域的一项重点工作;二是随…

C++11 lambda+包装器+可变参数模板

索引lambda表达式(1).什么是lambda(2).lambda基本规则(3).lambda实现原理包装器可变参数模板lambda表达式 (1).什么是lambda 假设有这样一个类 struct Goods { string _name; // 名字 double _price; // 价格 int _evaluate; // 评价 };现在要将商品分别按照名字…

“健康中国”战略下如何推进公共卫生建设,海尔生物医疗给出“智慧答案”

【潮汐商业评论/原创】 公共卫生是一个老话题,但在新时代的背景下正在呈现出诸多新故事。在人民健康需求日益提升的当下,推动公共卫生服务体系的高效、便捷升级成了新时期的一大命题,而这一问题的答案则指向了公共卫生需要“数智化”。 在此…

Python之第十章 IO及对象列化

目录 Python之第十章 IO及对象列化 1.IO流(IO stream) 1.概述 2.IO流定义 3.流的分类 2.open方法 1.过程 2.缓冲区(buffer) 使用缓存区的必要性: 缓冲区分类: 3.格式 4.b模式 5.模式 6.文件对…

CentOS 7搭建LittlePaimon原神机器人

CentOS 7.6搭建LittlePaimon原神机器人 前言 最近小伙伴说别人的QQ群里有个原神的机器人,可以随时查询自己账号的角色卡信息。然后我自己查了下资料,发现不是很难弄,所以帮忙也弄了一个。 目前使用较多的原神机器人: LittlePaim…

SpringMVC学习篇(八)

SpringMVC拦截器 1.拦截器和过滤器的区别 过滤器拦截器servlet规范中(java ee)规范中的一部分,任何java web工程都可以使用拦截器是框架提供的,如只有在SpringMVC框架下的工程才能使用其提供的拦截器在url-pattern中配置了/*之后,可以拦截任何一切资源拦截器只会拦截控制器方…

easyrecovery工具2023最新版一键恢复丢失数据免费下载

通常,许多人会将工作或生活中的数据存储在我们的计算机上。很多时候,由于我们的误操作或其他一些问题,很容易错误地删除一些文件和数据。特别是,一些计算机故障总是会导致数据丢失,这是非常麻烦的。当需要重新安装系统…

JS 对象总结

对象 创建对象 有两种方式: 通过 new 操作符实例化一个对象,再添加属性。 let person new Object(); person.name "孤城浪人"; person.sayName function() { console.log(this.name); };构造函数,若不需要传参&#xff0…