SLAM相机定位
SLAM相机定位
摘要
深度学习在相机定位方面取得了很好的结果,但是当前的单幅图像定位技术通常会缺乏鲁棒性,从而导致较大的离群值。在某种程度上,这已通过序列的(多图像)或几何约束方法解决,这些方法可以学习拒绝动态对象和光照条件以获得更好的性能。在这项工作中,我们显示出注意力可以用来迫使网络专注于几何上更鲁棒的对象和特征,即使仅使用单个图像作为输入,也可以在通用基准中实现最新的性能。通过公共室内和室外数据集提供了广泛的实验证据。通过显著性图的可视化,我们展示了网络如何学习拒绝动态对象,从而产生好的全局相机位姿回归性能。
源代码开源:https://github.com/BingCS/AtLoc。

这项工作的主要贡献如下:
•我们提出了一种新的用于单图像摄像机定位的自注意引导神经网络,允许精确和稳健的摄像机姿态估计。
•通过在注意之后可视化特征显著性图,我们展示了我们的注意机制如何鼓励框架学习稳定的特征。
•通过在室内和室外场景中的大量实验,我们证明我们的模型在姿势回归中达到了最佳状态,甚至优于多帧(顺序)方法。


算法流程

图7,提出的AtLoc框架的概述,该框架包括视觉编码器(从单个图像中提取特征),注意力模块(计算注意力并重新加权特征)和位姿回归器(将新特征映射到相机位姿)
1. 视觉编码器
视觉编码器用于从单幅图像中提取位姿回归任务所需的特征。我们采用34层的残差网络(ResNet34)作为视觉编码器的基网络。ResNet34的权重是使用ResNet34经过ImageNet数据集上的图像分类预训练预先初始化的。为了鼓励学习有利于位姿回归的特征,用C维全连接层替换ResNet34最后的1000维全连接层并删除用于分类的Softmax层。C是输出特征的维度,考虑到模型的效率和性能,选择维数为C = 2048。给定输入图像I, 通过视觉编码器f encoder提取特征x:

2. 注意力模块
我们在注意力模块中采用了non-local风格的自注意力机制,该方法已应用于视频分析和图像生成。这旨在捕获图像特征的长期依赖性和全局相关性,这将有助于从广泛分离的空间区域中生成更好的,注意力引导的特征图。
首先利用视觉编码器提取的特征x,计算两个嵌入空间 θ(xi) and φ(xj)之间的点积相似度:




3. 学习相机位姿
位姿回归器通过多层感知机将注意力引导特征Att(x)分别映射到位置p∈R3和四元数q∈R4:

训练的损失函数:


4. 时序约束
我们通过合并图像对之间的时序约束,将我们提出的AtLoc扩展为AtLoc +。直观上,时序约束可以强制学习全局一致的特征,从而提高总体定位精度。考虑时序约束的损失为:

其中Iij = (pi− pj, qi−qj)
主要结果

图8, 7 Scenes上的相机定位结果(不包括时序约束)。对于每个场景,我们计算了各种基于单帧图像的方法估计的位置和旋转的中值误差。

图9,7 Scenes上的相机定位结果(包括时序约束)。对于每个场景,我们比较了 VidLoc, MapNet 和我们的方法估计的位置和旋转的中值误差。

图10,OxfordRobotCar数据集的LOOP序列和FULL序列上的相机定位结果。对于每个场景,我们计算了 Posenet+, MapNet 和我们的方法估计的位置和旋转的中值误差。Posenet和AtLoc利用单个图像,而MapNet和AtLoc +利用图像序列。

图11,从Chess序列中选择的两个场景的显著性图。

图12,Oxford RobotCar的LOOP1(上),LOOP2(中)和FULL1(下)的轨迹。真实轨迹用黑线表示,红线表示预测轨迹。轨迹中的星号代表起点。
SLAM相机定位的更多相关文章
- Slam(即时定位与地图构建) 知识篇
Slam即时定位与地图构建 技术解释 同步定位与地图构建(SLAM或Simultaneous localization and mapping)是一种概念:希望机器人从未知环境的未知地点出发,在运动过 ...
- 从零开始一起学习SLAM | 相机成像模型
上一篇文章<从零开始一起学习SLAM | 为啥需要李群与李代数?>以小白和师兄的对话展开,受到了很多读者的好评.本文继续采用对话的方式来学习一下相机成像模型,这个是SLAM中极其重要的内容 ...
- 即时定位与地图构建SLAM(Simultaneous Localization and Mapping)
SLAM 即时定位与地图构建SLAM(Simultaneous Localization and Mapping) 参考链接: 视觉SLAM漫谈,http://www.cnblogs.com/gaox ...
- 深度学习结合SLAM研究总结
博客转载自:https://blog.csdn.net/u010821666/article/details/78793225 原文标题:深度学习结合SLAM的研究思路/成果整理之 1. 深度学习跟S ...
- 最近一年语义SLAM有哪些代表性工作?
点击"计算机视觉life"关注,置顶更快接收消息! 本文由作者刘骁授权发布,转载请联系原作者,个人主页http://www.liuxiao.org 目前 Semantic SLAM ...
- 如何从零开始系统化学习视觉SLAM?
由于显示格式问题,建议阅读原文:如何从零开始系统化学习视觉SLAM? 什么是SLAM? SLAM是 Simultaneous Localization And Mapping的 英文首字母组合,一般翻 ...
- SLAM领域牛人、牛实验室、牛研究成果梳理
点击公众号"计算机视觉life"关注,置顶星标更快接收消息! 本文阅读时间约5分钟 对于小白来说,初入一个领域时最应该了解的当然是这个领域的研究现状啦.只有知道这个领域大家现在正在 ...
- 从零开始一起学习SLAM | 给点云加个滤网
对VSLAM和三维重建感兴趣的在计算机视觉life"公众号菜单栏回复"三维视觉"进交流群. 小白:师兄,上次你讲了点云拼接后,我回去费了不少时间研究,终于得到了和你给的参 ...
- 从零开始一起学习SLAM | SLAM有什么用?
SLAM是 Simultaneous Localization And Mapping的 英文首字母组合,一般翻译为:同时定位与建图.同时定位与地图构建. 「同时定位与地图构建」这几个词,乍一听起来非 ...
随机推荐
- LA2965侏罗纪(异或和为0的最大数字个数)
题意: 给你n个字符串,让你在里面找到一个字符串集合使得这些字符串中所有的字母出现的次数和为偶数,输出集合的最大个数,和ASCII最小的解. 思路: 考虑到每个字符串中所有的字 ...
- UVA11375火柴(递推+大数)
题意: 给你n根火柴,问你能组成多少种数字,比如3根可以组成1或者7,组成的数字中不能有前导0, 思路: 我们开一个数组,d[i]记录用i跟火柴可以组成多少种数字,则更新状态是 ...
- AsSystemRum 系统提权工具 实现思路及其源码
名字: AsSystemRun 功能: 用system权限启动一个进程. 开发语言: C++,C# 作者: Ack-Code 开发时间: 2016.9.15 实现原理: w ...
- 【python】Leetcode每日一题-螺旋矩阵
Leetcode每日一题-螺旋矩阵 [题目描述] 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素. 示例1: 输入:matrix = [[1,2,3], ...
- vue的快速入门【IDEA版本】
和vscode相比,使用IDEA进行前端开发并没有那么容易,需要先进行配置 . 安装vue插件,重启idea 鼠标右键添加vue component 点击 file 打开设置 settings,展开 ...
- PHP编程实现多维数组按照某个键值排序的方法
1.array_multisort()函数对多个数组或多维数组进行排序. //对数组$hotcat按照count键值大小降序进行排序: $hotcat =array( array('1501'=&g ...
- [BUAA2021软工助教]个人阅读作业#2小结
作业链接 见个人阅读作业#2 优秀作业推荐 Shaun_Yao ✍️ 道法之间--软工第2次博客作业 Potassium ✍️ 构之有道,建之有法--软工个人阅读作业#2 MarkDay ✍️ < ...
- OO第一单元总结-多项式求导
OO第一单元总结-多项式求导 一.第一.第二次作业总结 因为前两次作业设计复杂度差别不大,因而放在这里统一总结. 基于度量分析程序结构: 前两次作业确实存在缺乏可拓展设计的构想,基本还是面向过程的思维 ...
- Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/collect/ImmutableMap
selenium + java + mac + idea 报错分析: 网上搜的教程,配置selenium 自动化测试环境,都是只让导入 client-combined-3.141.59-sources ...
- TypeScript 中 Optional Chaining 和 Nullish Coalescing
Optional Chaining 解决的问题是重复且无意义的判空,之所以说无意义,是对业务来说它不是必需的,但不判空,程序直接就挂了,比如: let x = foo.bar.baz(); 这里的 ...