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相机定位的更多相关文章

  1. Slam(即时定位与地图构建) 知识篇

    Slam即时定位与地图构建 技术解释 同步定位与地图构建(SLAM或Simultaneous localization and mapping)是一种概念:希望机器人从未知环境的未知地点出发,在运动过 ...

  2. 从零开始一起学习SLAM | 相机成像模型

    上一篇文章<从零开始一起学习SLAM | 为啥需要李群与李代数?>以小白和师兄的对话展开,受到了很多读者的好评.本文继续采用对话的方式来学习一下相机成像模型,这个是SLAM中极其重要的内容 ...

  3. 即时定位与地图构建SLAM(Simultaneous Localization and Mapping)

    SLAM 即时定位与地图构建SLAM(Simultaneous Localization and Mapping) 参考链接: 视觉SLAM漫谈,http://www.cnblogs.com/gaox ...

  4. 深度学习结合SLAM研究总结

    博客转载自:https://blog.csdn.net/u010821666/article/details/78793225 原文标题:深度学习结合SLAM的研究思路/成果整理之 1. 深度学习跟S ...

  5. 最近一年语义SLAM有哪些代表性工作?

    点击"计算机视觉life"关注,置顶更快接收消息! 本文由作者刘骁授权发布,转载请联系原作者,个人主页http://www.liuxiao.org 目前 Semantic SLAM ...

  6. 如何从零开始系统化学习视觉SLAM?

    由于显示格式问题,建议阅读原文:如何从零开始系统化学习视觉SLAM? 什么是SLAM? SLAM是 Simultaneous Localization And Mapping的 英文首字母组合,一般翻 ...

  7. SLAM领域牛人、牛实验室、牛研究成果梳理

    点击公众号"计算机视觉life"关注,置顶星标更快接收消息! 本文阅读时间约5分钟 对于小白来说,初入一个领域时最应该了解的当然是这个领域的研究现状啦.只有知道这个领域大家现在正在 ...

  8. 从零开始一起学习SLAM | 给点云加个滤网

    对VSLAM和三维重建感兴趣的在计算机视觉life"公众号菜单栏回复"三维视觉"进交流群. 小白:师兄,上次你讲了点云拼接后,我回去费了不少时间研究,终于得到了和你给的参 ...

  9. 从零开始一起学习SLAM | SLAM有什么用?

    SLAM是 Simultaneous Localization And Mapping的 英文首字母组合,一般翻译为:同时定位与建图.同时定位与地图构建. 「同时定位与地图构建」这几个词,乍一听起来非 ...

随机推荐

  1. 04- HTML常用标签

    HTML标签分类 通过上节博客我们知道了网页的组成:文字 图片 连接 视频 音频.在HTML页面中,带有"< >"符号的元素被称为HTML标签,如上面提到的 <H ...

  2. 【Scrapy(三)】Scrapy 中的 logging 模块

    logging模块的使用: 1.在scrapy中使用 2.在普通项目中使用

  3. TP5 验证-内置规则

    系统内置的验证规则如下: 格式验证类 require 验证某个字段必须,例如: 'name'=>'require' number 或者 integer 验证某个字段的值是否为数字(采用filte ...

  4. 【MySQL】SQL中On和Where的区别

    数据库再通过链接两张表或者多张表时来返回记录时,都会生成一张中间的临时表,然后再将这张表返回给用户: 在使用left jion时,on和where条件的区别如下: 1. on条件是在生成临时表时使用的 ...

  5. windows内核开发环境的简易搭建

    一.windows内核开发需要的软件 1.WDK 2.WinDbg 3.virtualKD 4.DebugView 5.Visual C++ 6.0 6.VMware Workstation 二.wi ...

  6. Dalvik模式下在Android so库文件.init段、.init_array段构造函数上下断点

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/78244766 在前面的博客<在Android so文件的.init..ini ...

  7. 从零开始搞监控系统(1)——SDK

    目前市面上有许多成熟的前端监控系统,但我们没有选择成品,而是自己动手研发.这里面包括多个原因: 填补H5日志的空白 节约公司费用支出 可灵活地根据业务自定义监控 回溯时间能更长久 反哺运营和产品,从而 ...

  8. 深入探索Android热修复技术原理读书笔记 —— so库热修复技术

    热修复系列文章: 深入探索Android热修复技术原理读书笔记 -- 热修复技术介绍 深入探索Android热修复技术原理读书笔记 -- 代码热修复技术 深入探索Android热修复技术原理读书笔记 ...

  9. JSX语法详解

    一.基础1.JSX是什么JSX是一种像下面这样的语法: const element = <h1>Hello, world!</h1>;1它是一种JavaScript语法扩展,在 ...

  10. [bug] Python Anoconda3 安装完成后开始菜单不显示

    版本问题,需更新 win+R打开cmd,敲入命令: conda update menuinst conda install -f console_shortcut ipython ipython-no ...