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. [C#] NAudio 库的各种常用使用方式: 播放 录制 转码 音频可视化

    概述 在 NAudio 中, 常用类型有 WaveIn, WaveOut, WaveStream, WaveFileWriter, WaveFileReader 以及接口: IWaveProvider ...

  2. JavaScript动态设置div的样式的方法

    有时候需要根据需要动态设置div的样式,当然对于稍有经验的javascript开发者来说,这一切都是那么的简单,但是对于初学者或者说没有相关经验的开发者来说可能就是一个不大不小的难关,下面就通过实例简 ...

  3. 技术面试问题汇总第005篇:猎豹移动反病毒工程师part5

    这是我当初接受面试的最后两个问题,当时,那位面试官问我对漏洞了解多少时,我说一点都不懂,问我懂不懂系统内核时,我同样只能说不知道.后来他跟我说,面试的考查重点不在于我所掌握的知识的广度,而是深度.这也 ...

  4. Python小游戏 -- 猜单词

    Python初学者小游戏:猜单词 游戏逻辑:就像我们曾经英语学习机上的小游戏一样,电脑会从事先预置的词库中抽取单词,然后给出单词的字母数量,给定猜解次数,然后让玩家进行猜测,并给出每次猜测的正确字母与 ...

  5. PE文件格式偏移参考

    在进行PE文件格式病毒分析的时候,经常要使用到PE文件格式的解析,尤其是对LoadPE形式的病毒的分析,经常要查看PE文件格式的偏移,特地从博客<PE文件格式的偏移参考>中转载收录一份,之 ...

  6. UVA11388GCD LCM

    题意:       输入两个整数G,L,找出两个正整数a,b使得gcd(a ,b)=G,lcm(a ,b)=L,如果有多组解,输出最小的a的那组,如果没解,输出-1. 思路:       比较简单,如 ...

  7. 前端基础问题:CSS居中的几种方式

    水平居中 (1)内联元素: text-align: center; 利用 text-align: center :可以实现在块级元素内部的内联元素水平居中. 如果一行中有多个块级元素,可以通过设置块级 ...

  8. 修改linux默认文件创建权限-umask命令解析

    umask值用于设置用户在创建文件时的默认权限,当我们在系统中创建目录或文件时,目录或文件所具有的默认权限就是由umask值决定的. 对于root用户,系统默认的umask值是0022:对于普通用户, ...

  9. layui的loading加载中

    var load = layer.load(1, { content: '数据加载中', shade: [0.4, '#393D49'], // time: 10 * 1000, success: f ...

  10. thinkphp 5中的混合查询

    1.手册样例thinkphp 5.0Db::table('think_user') ->where('name',['like','thinkphp%'],['like','%thinkphp' ...