LEARNING TO EXPLORE USING ACTIVE NEURAL SLAM 论文阅读
论文信息
题目:LEARNING TO EXPLORE USING ACTIVE NEURAL SLAM
作者:Devendra Singh Chaplot, Dhiraj Gandhi
项目地址:https://devendrachaplot.github.io/projects/Neural-SLAM
代码地址:https://github.com/devendrachaplot/Neural-SLAM
来源:LCLR
时间:2022
Abstract
这项工作提出了一种模块化和分层的方法来学习探索 3D 环境的策略,称为“Active Neural SLAM”。
我们的方法结合了经典方法和基于学习的方法的优势,通过使用带有学习 SLAM 模块的分析路径规划器以及全局和本地策略。
学习的使用提供了输入模式(在 SLAM 模块中)方面的灵活性,利用了世界的结构规律(在全局策略中),并为状态估计中的错误(在本地策略中)提供了鲁棒性。
所提出的模型还可以轻松转移到 PointGoal 任务,并且是 CVPR 2019 Habitat PointGoal 导航挑战赛的获胜作品。
Introduction
虽然使用学习进行探索是有充分动机的,但将探索问题转化为端到端学习问题有其自身的缺点。以端到端的方式纯粹从数据中学习映射、状态估计和路径规划可能会非常困难。因此,Chen 等人(2019)过去用于探索的端到端学习工作依赖于模仿学习和数百万帧经验的使用,但仍然比根本不需要任何训练的经典方法表现更差。
在本文中,我们研究了利用学习进行探索的替代方案,该方案保留了学习必须提供的优势,但没有成熟的端到端学习的缺点。我们的关键概念见解是,使用learning为了对室内环境的结构规律的利用、对状态估计误差的鲁棒性、对输入模式的灵活性。这些发生在不同的时间尺度上,因此可以被分解出来。
我们提出的探索架构由学习神经 SLAM 模块、全局策略和本地策略组成,它们通过地图和分析路径规划器连接。
学习神经 SLAM 模块可生成自由空间地图,并根据输入 RGB 图像和运动传感器估计代理姿势。
全局策略使用代理姿势来占据这个自由空间地图,并利用学习来利用现实世界环境布局中的结构规律来产生长期目标。
这些长期目标用于生成本地政策的短期目标(使用几何路径规划器)。
本地策略使用学习将原始 RGB 图像直接映射到代理应执行的操作。
在 SLAM 模块中使用学习提供了输入模态方面的灵活性,学习的全局策略可以利用现实环境布局中的规律性,而学习的本地策略可以使用视觉反馈来表现出更稳健的行为。
Related Work
Navigation Approaches
经典的导航方法将问题分为两部分:地图绘制和路径规划。
Exploration in Navigation
虽然许多工作专注于被动地图构建、路径规划和目标驱动的策略学习,但一小部分工作解决了主动 SLAM 的问题,即如何主动控制相机来构建地图。
Hierachical and Modular Policies(分层和策略学习)
分层强化学习(Dayan 和 Hinton,1993;Sutton 等,1999;Barto 和 Mahadevan,2003)是一个活跃的研究领域,旨在自动发现层次结构以加速学习。然而,这已被证明具有挑战性,因此大多数工作都诉诸于使用手动定义层次结构。例如,在导航方面,Bansal 等人(2019) 和 Kaufmann 等人 (2019) 设计了用于导航的模块化策略,将学习策略与低级反馈控制器连接起来。分层和模块化策略也已用于嵌入式问答(Das 等人,2018a;Gordon 等人,2018;Das 等人,2018b)。
Task Setup
Actuation and Noise Model(驱动和噪声模型)
我们用 (x, y, o) 表示代理的姿势,假设智能体从 p 0 = ( 0 , 0 , 0 ) p_0 = (0, 0, 0) p0=(0,0,0)开始。现在,假设代理采取行动。每个动作都作为机器人的控制命令来实现。
设相应的控制命令为 Δ u a = ( x a , y a , o a ) Δu_a = (x_a,y_a,o_a) Δua=(xa,ya,oa)。让智能体在动作后的姿势为 p 1 = ( x ∗ , y ∗ , o ∗ ) p_1 = (x^*, y^*, o^*) p1=(x∗,y∗,o∗)。驱动噪声 ( ϵ a c t \epsilon _{act} ϵact) 是动作后的实际代理姿势 ( p 1 p_1 p1) 与预期代理姿势 ( p 0 + Δ u p_0 + Δu p0+Δu) 之间的差异:
ϵ a c t = p 1 − ( p 0 + Δ u ) = ( x ∗ − x a , y ∗ − y a , o ∗ − o a ) \epsilon _{act} = p_1-(p_0+\Delta u)=(x^*-x_a,y^*-y_a,o^*-o_a) ϵact=p1−(p0+Δu)=(x∗−xa,y∗−ya,o∗−oa)
移动机器人通常具有估计机器人移动时的姿势的传感器。令传感器在动作后估计智能体的姿势为 p 1 ′ = ( x ′ , y ′ , o ′ ) p^{\prime}_1 = (x^{\prime}, y^{\prime}, o^{\prime}) p1′=(x′,y′,o′)。传感器噪声 ( ϵ s e n \epsilon _{sen} ϵsen) 由传感器姿态估计 ( p 1 ′ p^{\prime}_1 p1′) 和实际代理姿态 ( p 1 p_1 p1) 之间的差异给出;
ϵ s e n = p 1 ′ − p 1 = ( x ′ − x ∗ , y ′ − y ∗ , o ′ − o ∗ ) \epsilon _{sen} = p^{\prime}_1-p_1=(x^{\prime}-x^*,y^{\prime}-y^*,o^{\prime}-o^*) ϵsen=p1′−p1=(x′−x∗,y′−y∗,o′−o∗)
我们使用三个默认的导航动作:前进:向前移动25厘米,右转:原地顺时针旋转10度,左转:原地逆时针旋转10度。控制命令的实现为:
u F o r w a r d = ( 0.25 , 0 , 0 ) u_{Forward} = (0.25, 0, 0) uForward=(0.25,0,0) u R i g h t : ( 0 , 0 , − 10 ∗ π / 180 ) , u L e f t : ( 0 , 0 , 10 ∗ π / 180 ) u_{Right} : (0, 0, −10∗π/180) , u_{Left} : (0, 0, 10 ∗ π/180) uRight:(0,0,−10∗π/180),uLeft:(0,0,10∗π/180)
Methods
“Active Neural SLAM”。它由三个组件组成:神经 SLAM 模块、全局策略和局部策略,如图 1 所示。神经 SLAM 模块根据当前观察和先前的预测来预测环境地图和代理姿势。全局策略使用预测的地图和代理姿势来产生长期目标。使用路径规划将长期目标转换为短期目标。本地策略根据当前观察采取导航行动以实现短期目标。

Map Representation
Active Neural SLAM 模型内部维护空间图、 m t m_t mt 和智能体 x t x_t xt 的姿态。空间地图 m t m_t mt 是一个 2 × M × M 矩阵,其中 M × M 表示地图大小,该空间地图中的每个元素对应于物理世界中大小为 25cm2 (5cm × 5cm) 的单元。第一个通道中的每个元素表示相应位置处存在障碍物的概率,第二个通道中的每个元素表示正在探索的该位置的概率。当已知单元格是自由空间或障碍物时,就认为该单元格已被探索。空间图在步骤开始时用全零进行初始化, m 0 = [ 0 ] 2 × M × M m_0 = [0]^{2×M×M} m0=[0]2×M×M 。
位姿 x t ∈ R 3 x_t ∈ \mathbb{R}^3 xt∈R3 表示智能体的 x 和 y 坐标以及智能体在时间 t 时的方向。智能体在步骤开始时总是从地图中心面向东开始, x 0 = ( M / 2 , M / 2 , 0.0 ) x_0 = (M/2, M/2, 0.0) x0=(M/2,M/2,0.0)
Neural SLAM Module
Neural SLAM 模块 ( f S L A M f_{SLAM} fSLAM ) 接收当前 RGB 观测值 s t s_t st、当前和上一次传感器获取的智能体姿势 x t − 1 : t ′ x^{\prime}_{t−1:t} xt−1:t′、上一次智能体姿势和地图估计 x ^ t − 1 \hat{x}_{t−1} x^t−1、 m t − 1 m_{t−1} mt−1,并输出更新后的地图 m t m_t mt 和当前代理姿态估计 x ^ t \hat{x}_{t} x^t(见图 2): m t , x ^ t = f S L A M ( s t , x t − 1 : t ′ , x ^ t − 1 , m t − 1 ∣ θ S ) m_t, \hat{x}_t = f_{SLAM}(s_t, x^{\prime}_{t−1:t}, \hat{x}_{t−1}, m_{t−1}|θ_S) mt,x^t=fSLAM(st,xt−1:t′,x^t−1,mt−1∣θS),其中 θ S θ_S θS 表示可训练参数神经SLAM模块。

它由两个学习组件组成:映射器和姿势估计器。 Mapper( f M a p f_{Map} fMap)输出一个以自我为中心的自上而下的二维空间图, p t e g o ∈ [ 0 , 1 ] 2 × V × V p^{ego}_t ∈ [0, 1]^{2×V ×V} ptego∈[0,1]2×V×V(其中V是视野范围),预测当前观察中的障碍物和探索区域。姿势估计器 ( f P E f_{PE} fPE) 基于过去的姿势估计 ( x ^ t − 1 \hat{x}_{t-1} x^t−1) 和上一次两个以自我为中心的地图预测 ( p t − 1 : t e g o p^{ego} _{t−1:t} pt−1:tego) 来预测代理姿势 ( x ^ t \hat{x}_{t} x^t)。它本质上是将当前的以自我为中心的地图预测与变换到当前帧的最后以自我为中心的地图预测进行比较,以预测两个地图之间的姿态变化。根据姿势估计器给出的姿势估计,将来自映射器的自我中心地图转换为地心地图,然后与先前的空间地图( m t − 1 m_{t−1} mt−1)聚合以获得当前地图( m t m_t mt)。
Global Policy
Global Policy以 h t ∈ [ 0 , 1 ] 4 × M × M h_t ∈ [0, 1]^{4×M×M} ht∈[0,1]4×M×M为输入,其中ht的前两个通道是SLAM模块给出的空间图 m t m_t mt,第三个通道表示SLAM模块估计的当前代理的位置,第四个通道代表访问过的位置,即
∀ i , j ∈ 1 , 2 , . . . , m ∀i, j ∈ {1, 2,...,m} ∀i,j∈1,2,...,m:

在将 h t h_t ht 传递给全局策略模型之前,我们执行两次转换。第一个变换对来自 h t h_t ht 的智能体周围大小为 4 × G × G 的窗口进行子采样。第二个变换执行最大池化操作以从 h t h_t ht 获得大小为 4×G×G 的输出。这两个变换都堆叠起来形成大小为 8 × G × G 的张量,并作为输入传递到全局策略模型。全局策略使用卷积神经网络来预测 G × G 空间中的长期目标 g t l : g t l = π G ( h t ∣ θ G ) g^l_t:g^l_t = πG(h_t|θ_G) gtl:gtl=πG(ht∣θG),其中 θ G θ_G θG 是全局策略的参数。
Planner
Planner 将长期目标 ( g t l g^l_t gtl)、空间障碍图 ( m t m_t mt) 和 agnet 位姿估计 ( x ^ t \hat{x}_t x^t) 作为输入,计算短期目标 g t s g^s_t gts ,即 g t s = f P l a n ( g t l , m t , x ^ t g^s_t = f_{Plan}(g^l_t, m_t, \hat{x}_t gts=fPlan(gtl,mt,x^t) 。它使用基于当前空间地图 m t m_t mt 的快速行进方法(Sethian,1996)计算从当前代理位置到长期目标( g t l g^l_t gtl)的最短路径。未开发的区域被视为规划的自由空间。我们计算计划路径上的短期目标坐标(距智能体 ds(= 0.25m) 内的最远点)。
Local Policy
本地策略将当前 RGB 观测值 ( s t s_t st) 和短期目标 ( g t s g^s_t gts ) 作为输入,并输出导航操作 a t = π L ( s t , g t s ∣ θ L ) a_t = π_L(s_t, g^s_t |θ_L) at=πL(st,gts∣θL),其中 θ L θ_L θL 是本地策略的参数。短期目标坐标在传递给本地策略之前会转换为距智能体位置的相对距离和角度。本地策略是一个循环神经网络,由预训练的 ResNet18(He 等人,2016)作为视觉编码器组成。
Experiment


扩展
我们提出了一种模块化导航模型,该模型利用了经典和基于学习的导航方法的优势。我们表明,所提出的模型在 Exploration 和 PointGoal 任务上都优于先前的方法,并且显示出跨领域、目标和任务的强大泛化能力。未来,所提出的模型可以通过使用语义神经 SLAM 模块扩展到复杂的语义任务,例如语义目标导航和Ebmbodied问答,该模块创建捕获环境中对象的语义属性的多通道地图。该模型还可以与之前的定位工作相结合,在之前创建的地图中重新定位,以便在后续剧集中进行高效导航。
相关文章:
LEARNING TO EXPLORE USING ACTIVE NEURAL SLAM 论文阅读
论文信息 题目:LEARNING TO EXPLORE USING ACTIVE NEURAL SLAM 作者:Devendra Singh Chaplot, Dhiraj Gandhi 项目地址:https://devendrachaplot.github.io/projects/Neural-SLAM 代码地址:https://github.com/devendrachaplot/N…...
item_search-ks-根据关键词取商品列表
一、接口参数说明: item_search-根据关键词取商品列表,点击更多API调试,请移步注册API账号点击获取测试key和secret 公共参数 请求地址: https://api-gw.onebound.cn/ks/item_search 名称类型必须描述keyString是调用key(http:…...
windows运行WPscan报错:无法打开库libcurl.dll
windows运行WPscan报错:无法打开库libcurl.dll 1.问题背景2.解决方案1.问题背景 在Windows上启动WPScan时: wpscan --url xxx.ru提示如下错误: Could not open library libcurl.dll: �� ������ ��������� ������. . Could not open library libcu...
web前端框架Javascript之JavaScript 异步编程史
早期的 Web 应用中,与后台进行交互时,需要进行 form 表单的提交,然后在页面刷新后给用户反馈结果。在页面刷新过程中,后台会重新返回一段 HTML 代码,这段 HTML 中的大部分内容与之前页面基本相同,这势必造成…...
Java多线程(1)---多线程认识、四种创建方式以及线程状态
目录 前言 一.Java的多线程 1.1多线程的认识 1.2Java多线程的创建方式 1.3Java多线程的生命周期 1.4Java多线程的执行机制 二.创建多线程的四种方式 2.1继承Thread类 ⭐创建线程 ⭐Thread的构造方法和常见属性 2.2.实现Runnable接口 ⭐创建线程 ⭐使用lambda表达…...
搭建Django+pyhon+vue自动化测试平台
Django安装 使用管理员身份运行pycharm使用local 1 pip install django -i https://pypi.tuna.tsinghua.edu.cn/simple 检查django是否安装成功 1 python -m django --version 创建项目 1 1 django-admin startproject test cd 切换至创建的项目中启动django项目…...
CASAIM自动化平面度检测设备3D扫描零部件形位公差尺寸测量
平面度是表面形状的度量,指示沿该表面的所有点是否在同一平面中,当两个表面需要连接在一起形成紧密连接时,平面度检测至关重要。 CASAIM自动化平面度检测设备通过搭载领先的激光三维测头和智能检测软件自动获取零部件高质量测量数据…...
PostgreSql pg_ctl 命令
一、概述 控制 PostgreSQL 服务的工具。 二、语法 --初始化数据库实例 pg_ctl init[db] [-D datadir] [-s] [-o initdb-options]--启动数据库实例 pg_ctl start [-D datadir] [-l filename] [-W] [-t seconds] [-s] [-o options] [-p path] [-c]--停止数据库实例 pg_ctl sto…...
MySQL中的MVCC具体指的是什么?
在MySQL中,MVCC是指多版本并发控制(Multi-Version Concurrency Control)。它是一种用于处理并发读写操作的数据库事务管理技术。 MVCC通过在数据库中维护多个版本的数据来实现并发控制,每个事务在执行期间看到的数据版本是确定性…...
Docker网络模型详解
目录 一、Docker网络基础 1、端口映射 使用-P选项时Docker会随机映射一个端口至容器内部的开放端口 使用docker logs查看Nginx的日志 查看映射的随机端口范围 2、使用-p可以指定要映射到的本地端口。 Local_Port:Container_Port : 端口映射参数中指定了宿主…...
如何打造属于自己的个人IP?
在当今信息爆炸的时代,个人 IP 已经成为人们在网络世界中的独特标签。无论是在职场上、创业中,还是在社交生活中,拥有个人 IP 的人都能脱颖而出,吸引更多的关注和机会。那么,如何打造属于自己的个人 IP 呢?…...
全网最全最细的jmeter接口测试教程以及接口测试流程详解
一、Jmeter简介 Jmeter是由Apache公司开发的一个纯Java的开源项目,即可以用于做接口测试也可以用于做性能测试。 Jmeter具备高移植性,可以实现跨平台运行。 Jmeter可以实现分布式负载。 Jmeter采用多线程,允许通过多个线程并发取样或通过…...
【Linux命令200例】whereis用于搜索以及定位二进制文件
🏆作者简介,黑夜开发者,全栈领域新星创作者✌,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆本文已收录于专栏:Linux命令大全。 🏆本专栏我们会通过具体的系统的命令讲解加上鲜…...
Elasticsearch:如何将整个 Elasticsearch 索引导出到文件 - Python 8.x
在实际的使用中,我们有时希望把 Elasticsearch 的索引保存到 JSON 文件中。在之前,我写了一篇管如何备份 Elasticsearch 索引的文章 “Elasticsearch:索引备份及恢复”。在今天,我们使用一种 Python 的方法来做进一步的探讨。你可…...
cmd 实现启动mysql时保留窗口
因为mysql启动后, 只有在任务管理器里能看到进程, 关的时候还需要找一下 所以基于 start cmd /k 命令实现了该效果 :: Author: admin :: Date: 2022-08-30 :: Version v1.2 :: ::启动 :: :: echo off::配置变量 set mysqlC:\mysql-5.7.38-winx64\bin\mysqld.exe::打印配置…...
JavaScript数据结构与算法——栈
文章目录 一、初始栈结构1.1 特性1.2 注意事项 二、栈结构的封装2.1 封装简单栈结构2.2 利用栈将十进制转二进制 一、初始栈结构 1.1 特性 类似于汉诺塔,后进先出,每次只能操作栈顶的元素。关键词:压栈、退栈 简单示意图: 1.…...
Elasticsearch分词详解:ES分词介绍、倒排索引介绍、分词器的作用、停用词
详见:https://blog.csdn.net/weixin_40612128/article/details/123476053...
SpringMVC组件
目录 1、简介 2、SpringMVC与Servlet的关系 3、struc2 4、RESTful 编程风格 5、工作流程 6、代码示例 6.1、导入坐标 provide 6.2、DispathcerServlet 🔺配置web.xml 初始化 优先级 ⭐ 6.3、Controller类及视图页面 6.4、配置注解 6.5、spring-mvc.xm…...
解决el-dialog弹出时,页面抖动,右侧会缩小的问题(即滚动条被遮罩层覆盖的问题)
问题描述: 在弹出el-dialog时,会发现弹出框弹出时,页面会抖动,滚动条被遮罩层覆盖直接没有滚动条了,导致页面缩小了几个像素点(滚动条的宽度);体验感不好,会影响到页面的…...
【Rust 基础篇】Rust 属性宏:定制你的代码
导言 Rust是一门现代的、安全的系统级编程语言,它提供了丰富的元编程特性,其中属性宏(Attribute Macros)是其中之一。属性宏允许开发者在代码上方添加自定义的属性,并对代码进行定制化处理。在本篇博客中,…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
9-Oracle 23 ai Vector Search 特性 知识准备
很多小伙伴是不是参加了 免费认证课程(限时至2025/5/15) Oracle AI Vector Search 1Z0-184-25考试,都顺利拿到certified了没。 各行各业的AI 大模型的到来,传统的数据库中的SQL还能不能打,结构化和非结构的话数据如何和…...
React从基础入门到高级实战:React 实战项目 - 项目五:微前端与模块化架构
React 实战项目:微前端与模块化架构 欢迎来到 React 开发教程专栏 的第 30 篇!在前 29 篇文章中,我们从 React 的基础概念逐步深入到高级技巧,涵盖了组件设计、状态管理、路由配置、性能优化和企业级应用等核心内容。这一次&…...
python基础语法Ⅰ
python基础语法Ⅰ 常量和表达式变量是什么变量的语法1.定义变量使用变量 变量的类型1.整数2.浮点数(小数)3.字符串4.布尔5.其他 动态类型特征注释注释是什么注释的语法1.行注释2.文档字符串 注释的规范 常量和表达式 我们可以把python当作一个计算器,来进行一些算术…...
TI德州仪器TPS3103K33DBVR低功耗电压监控器IC电源管理芯片详细解析
1. 基本介绍 TPS3103K33DBVR 是 德州仪器(Texas Instruments, TI) 推出的一款 低功耗电压监控器(Supervisor IC),属于 电源管理芯片(PMIC) 类别,主要用于 系统复位和电压监测。 2. …...
React与原生事件:核心差异与性能对比解析
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...
