《论文阅读》DeepSFM: Structure From Motion Via Deep Bundle Adjustment

news2024/10/6 16:26:03

留个笔记自用

DeepSFM: Structure From Motion Via Deep Bundle Adjustment

做什么

首先是最基础的,Structure-from-Motion(SFM),SFM可以简单翻译成运动估计,是一种基于dui8序列图片进行三维重建的算法。简单来说就是是从运动中不同角度拍摄一个物体,这样就有多张物体不同时间的照片,使用这种照片来恢复物体的三维结构。跟SLAM里的visual odometry一样,需要估计出每帧图片到世界坐标系的R,t,然后根据图片重建点云。
在这里插入图片描述
算法的关键是就是特征匹配,求两张图片之间的R,T,然后反投影得到物体的三维点,最后将多个稀疏点云融合在一起。
然后是SFM常用的一种算法Bundle Adjustment(BA),光束调整,也就是这篇文章所做的
在这里插入图片描述
在这里插入图片描述
省去复杂的公式,BA做的也是特征匹配的工作,在不同视角的图像中选取特征点,然后将这些特征点之间进行匹配,理论上来说,在整个空间上,这些匹配点如果投影到世界坐标系应该尽可能的接近,比如两张图片中的特征点都是某个桌子的左下角,那么就算在图片上位置不同,经过R,t转回去也应该在空间上位置接近。这就是重投影误差,使用这种方式来优化R,t,同时也会优化特征点的位置。
BA往往做的是精细化建图(空间建图)的工作。

做了什么

在这里插入图片描述
这张图展示了DeepSFM和其他方法的区别,a是传统的回归方式,就是分别用depth模块和pose模块分别估计深度图和pose,它文章里说的这种方法会存在泛化性问题,就是在不同场景下效果会差距很大。b是常规的深度估计方法,这里的意思就是已经通过某些设备(动捕、IMU之类的东西)知道了GT的pose,然后就可以通过这个pose作为一种正则化或者约束得到depth。c图就是它这里说的受BA框架启发而设计的模式,使用当前camera的pose优化像素的深度值,同样又使用深度值优化pose,说白了,就是传统BA的设计方式,同时优化深度图和pose。
除此之外,这里可以说上比较特殊的就是不需要一个良好的初始化值,因为在计算过程中它采样了多个虚拟可能值,然后对这些虚拟可能值打分,得到质量最高的那种可能

怎么做

在这里插入图片描述
整个框架的overwivew↑,输入是一个图像序列,输出是每帧的深度图和到世界坐标系的pose,值得注意的是这里也假设的是又一个效果还可以的深度图和pose的初始化的值,可以说是完全作为一个slam的后处理来做。整体框架上,首先用一个encoder提取feature,然后利用这个feature进行depth估计和pose估计。
在这里插入图片描述
首先是这里的feature extraction模块,这里构造的方式是先构造N个CNN,然后最后接一层spatial pyramid pooling层使输出变成一个固定的维度,方式看起来和SPP原文设计的很类似,说白了就是一个多尺度的特征聚合方式。
在这里插入图片描述
然后是第二个模块,DCV模块,深度估计模块
在这里插入图片描述
DCV模块由三个部分构成,目标图像特征,变换之后的源图像特征和深度性一致图。其实从名字上就很好理解,这里监督的就是变化图像(利用pose)的每个像素特征和目标图像特征之间的一致性误差。
具体来说,为了将源图像的特征和深度图投影到目标图像的3D空间,先是在逆深度空间中均匀采样一组垂直于目标图像z轴的虚拟平面,就是在源图像的深度图对着目标图的方向进行采样出多个平面,目的就是为了判断每个平面的质量。逆深度空间是近年来SLAM研究中出现的一种广泛使用的参数化技巧。它使用深度的倒数(也就是逆深度)来进行参数化,因为逆深度的分布更贴近高斯分布。
然后就是将feature转换到前面采样出来的所有虚拟平面上
在这里插入图片描述
在这里,u是目标图像上每个像素的坐标,ul是源图像上相应点的坐标,F~值得就是变换之后的整体特征,这里的生成方式是双线性插值。
至此,就完成了前两步,目标图像特征和源图像特征,这两个就是特征层次的一致性。接下来还构造了另外一个就是深度层次的一致性,来判断深度预测的质量,或者说给每个虚拟平面打分。这里的方式其实跟特征差不多,对源图像的深度图进行采样,然后也变换到目标图像坐标系下,还有另一个,这里用了个函数
在这里插入图片描述
简单来说,就是将这些虚拟深度图转换为源图像的坐标系,至此,就完成了两个一致性目标,特征层次的一致性和深度层次的一致性,然后就用这俩特征进行后续的decode
在这里插入图片描述
之后是第三模块,PCV模块,这里的方式也跟DCV类似,也是使用的采样的方法
在这里插入图片描述
从图上就能更好地理解,给定一个初始的pose,在保证一个不变的情况下对另外一个进行采样,获得N个虚拟pose,接下来就是给这些虚拟pose打分。
在这里插入图片描述
之后,像DCV一样,构造深度层次的一致性和特征层次的一致性,就是直接将源图像的这两个通过虚拟pose转换到目标坐标系下,同样的,特征层次的转换也使用的插值,深度层次的转换使用的最近邻方法。最后,也通过一序列3D卷积回归出pose在这里插入图片描述
最后是训练方式,既然是同时优化深度和pose,那么loss就很简单了,经典的Lrotation和Ltranslation还有Ldepth在这里插入图片描述

效果

在这里插入图片描述
scannet上配准效果的对比,demon是一个同时进行深度估计和运动估计的baseline《DeMoN: Depth and Motion Network for Learning Monocular Stereo》,和BANet一样都是把它作为的baseline,当前网络作为后处理
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
同样的,也在ETH3D做了轨迹精度上的对比

总结

1.框架构造的方式就是按BA那样进行的设计,加入了光度一致性(目标特征图和转换后的源特征图的一致性)、几何一致性(深度图一致性)和相机约束(初始化一个pose,然后迭代更新)
2.一个很有趣的采样方式,可以让它在初始值不太理想的情况下进行空间采样,获得更多值的可能,但其实这种方式应该也只是在局部进行小改动,而且感觉会有点影响时间复杂性

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

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

相关文章

C++11(三)可变模板参数、lambda表达式、包装器

🧸🧸🧸各位大佬大家好,我是猪皮兄弟🧸🧸🧸 文章目录一、可变模板参数1.通过递归推导参数包2.通过列表初始化推导参数包二、emplace三、lambda表达式1.lambda表达式语法2.使用lambda3.捕捉列表说…

phpstorm+wamp在线调试wordpress

简介 本文源自公司内部使用wordpress搭建了一套官网,经常有定制化的需求,有些插件实现不了,需要通过phpstorm调试的方式熟悉wordpress,同时修改php代码,本地测试环境window,适合用wamp作为php运行环境&…

解放你的双手----WIN7设置自动化任务

近期在使用双屏工具DualMonitor的时候遇到一个问题,每次电脑锁屏超过一定时常之后,登录解锁该软件虽然在运行但是功能失效了,需要手动关闭打开该程序,一时也没找到有效的解决方法和替代软件,于是就想着能不能在我登录解…

数据存储——存储图像

图像数字化(一)图像数字化1.图像采样2.数字图像的技术指标3.编码(三)数字图像的分类1.光栅图2.矢量图总结:图像数字化的过程(一)图像数字化 按一定空间间隔,自左至右,自…

面试系列Spring:SpringMVC的工作流程

核心组件: DispatcherServlet:前端控制器,负责调度其他模块执行,核心模块 Handler:处理器,完成具体的业务逻辑,相当于Servlet HandlerMapping:处理器映射器,DispatcherSe…

[世界杯]根据赔率计算各种组合可能性与赔率

目录 一、背景 二、数据输入 2.1 赔率示意图 2.2 代码 三、数据处理 3.1 计算各种组合可能性 3.2 修正概率 四、输出结果 一、背景 本文以世界杯体彩“混合过关”4场串胜平负为的赔率进行编码 其他类型如比分 、总进球数可以参考代码进行相应修改 需要的库&#xff…

Web3中文|区块链游戏的成长之痛

来源 | cointelegraph 编译 | DaliiNFTnews.com 在过去十年中,手机游戏已成为互动娱乐产业的重要支柱,得益于智能手机的普及,来自世界各地的用户都成为了硬核游戏玩家。 现在,区块链技术的出现正在推动一种范式的转变&#xff…

基于SSM的在线书城网站【附源码】

一、项目功能 1.前台功能 图书基本展示,包括推荐图书展示和类图书类型展示.推荐图书包括条幅推荐,热销推荐和新品推荐.按照图书类型展示商品.图书详细信息展示.图书加入购物车.修改购物车内图书信息,例如数量等.用户登录.用户注册.修改个人信息,包括密码和收获信息.购物车付款…

环状序列(逐行解析)(保姆式解析)(算法竞赛入门经典二)

环状序列长度为n的环状串有n种表示法&#xff0c;分别为某个位置开始顺时针得到。例如&#xff0c;图中的环状串有10种表示&#xff1a; CGAGTCAGCT,GAGTCAGCTC,AGTCAGCTCG等。在这些表示法中&#xff0c;字典序最小的称为“最小表示”。 输入一个长度为n(n<100)的环状DNA串…

leetcode 526. 优美的排列(回溯)

题目链接&#xff1a;526. 优美的排列 回溯 树型结构: 预处理 matchmatchmatch 数组&#xff08;每个位置符合条件的数有哪些&#xff09;&#xff1a; void getMatch(int n) {used.resize(n 1);match.resize(n 1);for (int i 1; i < n; i) {for (int j 1; j < n…

供应双功能螯合剂THP-Mal,THP 马来酰亚胺,CAS:1314929-99-1

一&#xff1a;产品描述 1、名称 THP-Mal THP Maleimide THP 马来酰亚胺 2、CAS编号&#xff1a;1314929-99-1 3、分子式&#xff1a;C44H57N9O13 4、分子量&#xff1a;919.41 5、外观&#xff1a;白色或者灰白色粉末 6、沸点&#xff1a;1389.365.0 C(Predicted) …

内网穿透无法访问本地wordpress网站

解决办法:在wordpress主目录下修改wp-config.php文件 增加2行代码。 define(WP_SITEURL, http:// . $_SERVER[HTTP_HOST]); define(WP_HOME, http:// . $_SERVER[HTTP_HOST]); 增加2代码的意思&#xff1a;设置网站域名为当前访问的域名&#xff0c;也就是取消了域名的绑定。…

Linux下 生成coredump文件前配置

一. Linux下coredump文件 在 Linux 系统下&#xff0c;存在一种 coredump机制。 Linux 系统下&#xff0c;在进行 C/C 开发时&#xff0c;经常会遇到程序运行突然崩溃的问题。这时可以通过离线调试即 coredump 方式进行 bug 的定位。 具体为当程序出现段错误时&#xff0c;内…

用匠心创造可期未来!与广州流辰信息科技一起携手创佳绩!

当今社会世界经济一体化趋势逐渐明朗化&#xff0c;竞争也愈发激烈&#xff0c;同时&#xff0c;这也是一个机遇与挑战并存的开放社会。在机遇面前&#xff0c;作为企业&#xff0c;要紧紧抓住机遇&#xff0c;顺势而为&#xff0c;创造辉煌佳绩&#xff1b;在挑战面前&#xf…

Hostlink读写寄存器报文分析

引言 Hostlink是欧姆龙PLC默认的串口上行通信协议&#xff0c;使用默认的通信协议可免除PLC端的配置工作&#xff0c;易于实现分工协作。下面以CP1E-E的PLC为例进行说明&#xff0c;CP系列的PLC规则都是一样的。 读离散量 请求报文 字节流 40 33 31 46 41 30 30 30 30 30 3…

[Jetson]在nvidia orin/xavier上快速配置深度学习环境(Tensorflow,Pytorch都可以参考)

本文章将介绍如何通过docker在边缘计算设备nvidia orin/xavier上快速配置深度学习环境.该方法适用于Tensorflow,Pytorch,但是本文以介绍Tensorflow的安装为主. 文章目录第一步:安装docker第二步:安装nvidia-docker2第三步:拉取tensorflow镜像3.1 确定容器版本3.2 拉取镜像3.3 测…

awk命令应用

记录&#xff1a;353 场景&#xff1a;在CentOS 7.9操作系统上&#xff0c;使用awk文本处理工具处理文本&#xff1b;使用awk、cat和grep搭配使用处理文本&#xff1b;使用awk直接处理文本&#xff1b;使用shell脚本调用awk脚本处理文本。 版本&#xff1a; 操作系统&#x…

基于神经网络彩色图像插值研究-附Matlab程序

⭕⭕ 目 录 ⭕⭕✳️ 一、引言✳️ 二、色彩过滤阵列CFA✳️ 三、BP网络结构✳️ 四、神经网络彩色图像插值实验验证✳️ 五、参考文献✳️ 六、Matlab程序获取与验证✳️ 一、引言 彩色图像插值是通过估算相邻像素来估计缺失的颜色分量的过程&#xff0c;数字相机通过色彩过滤…

若依对SpringSecurity框架的运用

引言&#xff1a;借助ruoyi-vue框架学习其对SpringSecurity框架的运用。若依的前后端分离版本基于SpringSecurity和JWT配合Redis来做用户状态记录. 1 SpringSecurity 1.1 入口 后台接收登录数据&#xff0c;基于用户名和密码封装一个(UsernamePasswordAuthenticationToken)认…

线程安全和synchronized关键字

一&#xff0c;线程安全的引入 1.示例 多线程在多进程的基础上更好解决了并发问题&#xff0c;但由于一个进程内的多个线程是资源共享的&#xff0c;就会出现多个线程在并发执行的时候造成内存中数据的混乱。 举一个例子&#xff1a; class Counter {public int count;publi…