论文解读:Towards Open World NeRF-Based SLAM,迈向开放世界的NeRF-SLAM

news2024/11/28 5:44:29

论文:https://arxiv.org/pdf/2301.03102.pdf

摘要:

神经辐射场(Neural Radiance Fields,NeRF)在同时定位与地图构建(Simultaneous Localization and Mapping,SLAM)任务中提供了灵活性和鲁棒性的地图表示。本文扩展了最新的NeRF-based SLAM算法NICE-SLAM,该算法能够生成高质量的NeRF地图。然而,根据所使用的硬件不同,生成这些地图所需的迭代次数往往使NICE-SLAM无法实时运行。此外,估计的轨迹无法与传统SLAM方法相媲美。最后,NICE-SLAM要求在运行时之前定义涵盖所考虑环境的网格,这使得它难以扩展到以前未见过的场景。本文旨在通过改进鲁棒性和跟踪精度,将NICE-SLAM更具开放世界能力并将地图表示推广到处理无约束环境具体做法包括改进测量不确定性处理、整合运动信息以及将地图建模为具有明确前景和背景。实验证明,这些改变能够提高85%到97%的跟踪精度,具体取决于可用资源,同时也改善了在具有超出预定义网格范围的视觉信息的环境中的地图构建能力。

方法:

文章基于NICE-SLAM 算法进行相关改进,

NICE-SLAM使用一系列具有不同网格分辨率的编码特征的固定大小的体素网格来表示地图。在对给定的RGB-D图像评估像素时,NICE-SLAM使用与[“NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis]相同的射线投射技术,但通过在体素网格中插值采样点来评估射线(类似于[“Plenoxels: Radiance Fields without Neural Networks,”]),使用(较小的)MLP解码每个采样特征,并将结果聚合为估计的像素颜色和深度。

建图(Mapping):地图更新线程负责更新体素网格NeRF地图表示。它通过不断优化体素网格特征和存储的一组相关关键帧的姿态来实现这一点。类似于ORB-SLAM ,关键帧是根据其提供的信息增益级别进行选择,并包括RGB-D图像以及相应的估计相机姿态。对于每次地图更新,基于预测的与当前帧的重叠区域,选择一组关键帧,并将它们与当前帧一起用于构建损失函数。损失函数既有基于深度的组成部分,也有基于颜色的组成部分。在地图更新线程中,每个网格分辨率的基于N个像素的基于深度的损失函数如下:

跟踪(Tracking):跟踪线程执行类似于地图构建线程的优化过程,但只优化当前帧的姿态(即不修改地图)。损失函数中的颜色部分只考虑当前帧。另一方面,跟踪线程中基于深度的损失根据网络中的深度不确定性进行加权。对于每个网格分辨率,基于N个像素计算损失如下:

改进点:

A. 深度不确定性

标准的NICE-SLAM算法不考虑从测量的RGB-D深度dn中得到的深度不确定性。因此,在考虑N个像素时,每个测量的深度像素对于计算的深度损失在建图和追踪阶段的贡献是相等的。尽管根据NeRF生成的深度值的代理不确定性测量对贡献进行了降权处理,但仍然将RGB-D深度值视为具有相等的价值。这种相等的估值不仅与潜在的传感器特定的不确定性波动或偏差相违背,例如由于光圈影响等产生的伪影,而且与基于视觉的深度传感器所产生的测量值通常随深度函数增加而不确定性增加的事实相违背。尽管在深度相对稳定的环境中通常被忽视,但在较大的场景中,这种不确定性可能变得相当显著。为了考虑这种不确定性的变化,重新定义了深度损失函数。将公式1和公式4改进如下:

B. 加入运动数据

运动数据可以作为状态估计的宝贵信息来源。本文在跟踪和地图优化中包含了运动数据,以利用相机姿态之间的时间关系。这些数据通常由惯性测量单元(IMU)提供。然而,迄今用于评估基于NeRF的SLAM方法性能的数据集中并没有包含IMU测量。因此,需要从真实姿态生成运动数据。由于以这种方式生成加速度会产生很多误差,因为存在双重差分,所以考虑的“IMU”测量是线速度v和角速度u。假设这些测量值都受到加性高斯噪声w m ∼ N(0, Σm)的影响,其中m ∈ [v, u]。这里介绍的方法可以类似地扩展到线加速度。

1)利用运动数据进行跟踪:在跟踪目标中添加了基于IMU的损失函数,该损失函数根据当前相机姿态与其上一个姿态之间的运动关系提供一个运动先验。为了简化起见,将上一个相机姿态视为固定的,基于IMU的损失函数按照与IMU噪声对应的因子进行加权。时间为tk时的相机姿态被定义为Xk = (Ck, rk),其中C ∈ SO(3)表示相机的方向,r ∈ R 3表示相机的位置。

2)利用运动数据进行地图构建:为了在地图优化中利用IMU数据,采用了IMU预积分的方法。在[13]中引入的IMU预积分允许将多个IMU测量值组合成相对运动增量(RMI)。然后,RMI作为一个单独的“测量”来定义两个姿态之间的概率性运动约束,这两个姿态可以通过任意数量的IMU测量值分隔。由于每个地图构建步骤使用的关键帧是不确定的,可能会将不同数量的IMU测量值与每个连续的关键帧相连接。IMU预积分极大地简化了这些关键帧之间相应运动约束的计算,并且无需跟踪每个接收到的IMU测量值。由于使用的是相同的信息,因此性能不会改变。

C. 后端模型

对于基于SLAM的算法,将远处的特征编码到地图中可以显著提高方向估计的准确性[“A Unified Framework for Nearby and Distant Landmarks in Bearing-only SLAM]。相反,原始的NICE-SLAM算法只能编码位于(受限制的)边界框内的地图特征。为了将NICE-SLAM扩展到无界环境,而不需要无界的内存资源,给定场景的背景使用球形网格进行编码。这种表示类似于[15“NeRF++: Analyzing and Improving Neural Radiance Fields]中提出的多球体图像(MSI)并在[Plenoxels: Radiance Fields without Neural Networks]中使用的表示方法。

 结论:

通过添加深度不确定性和运动数据,可以改善基于NeRF的SLAM算法的准确性,特别是在需要实时性能的情况下。还证明了当场景过大无法用有界前景NeRF建模时,球形背景模型可以改善NeRF地图的图像重建效果。为了使基于NeRF的SLAM接近现有稠密SLAM算法的可用性,必须能够实时构建真正无界场景的NeRF地图表示。

本文介绍的改进开始朝着这个目标迈进。未来的一个研究方向是借鉴[Vox-Fusion: Dense Tracking and Mapping with Voxel-based Neural Implicit Representation]中的思想,避免使用预定义的网格。此外,这项工作还发现对于基于NeRF的SLAM方法,需要更多的数据集,特别是那些提供户外网格模型、运动数据和完全表征传感器的数据集。

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

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

相关文章

【Leetcode】跳跃游戏 | Jump Jump,Greedy Greedy

55 跳跃游戏 给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标。 不断更新当前能够到达的范围maxReach class Solution {public boolean canJump(int[] nums) …

云原生到底是个啥玩意?从云端降临的超级技术:云原生

目录 福利:文末分享云原生相关全套资料哦 一、云计算?云原生? 二、云原生带来什么好处 7个字:隔离、弹性、自动化。 三、云原生的基础知识 四、云原生中最重要的概念 1、虚机 2、容器 3、容器编排 4、VPC 5、微服务&am…

Lambda表达式 函数式接口 Stream流

目录 一. Lambda表达式 1. 函数式编程思想概述 2. Lambda的优化 3. Lambda的格式 标准格式: 参数和返回值: 省略格式: 4. Lambda的前提条件 二. 函数式接口 1. 概述 格式 FunctionalInterface注解 2. 常用函数式接口 Supplier接口 Consumer接口 Function接口 P…

2023大厂精选 Java 面试真题集锦(含答案),面试一路开挂

前言 跳槽求职时时刻刻都在发生,但是我建议大家跳槽之前,先想清楚为什么要跳槽。切不可跟风,看到同事一个个都走了,自己也盲目的开始面试起来,期间也没有准备充分,到底是因为技术原因,影响自己…

poll函数和epoll函数族

一、IO多路复用 二、多路复用的实现方式 select函数 int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout); poll函数 int poll(struct pollfd *fds, nfds_t nfds, int timeout); epoll 函数族 epoll_create epoll_wai…

(6.2-6.8)【大数据新闻速递】

关 注gzh“大数据食铁兽”,了解更多的大数据快讯 【华为曹冲:聚焦四大战略方向,共建数智金融未来】 6月7日,华为全球智慧金融峰会2023在上海举行。会上,华为数字金融军团CEO曹冲发表《智领睿变,共建数智…

Redis学习总结(一)

Redis 持久化机制 RDB 持久化 Redis RDB(Redis DataBase)是Redis的一种持久化方式。它可以将Redis中的数据快照存储在硬盘上,并在需要时重构该数据快照。因为可以在磁盘上存储和重构数据快照,所以RDB是一种非常高效的Redis数据备…

用于语义分割的动态焦点感知位置查询

文章目录 Dynamic Focus-aware Positional Queries for Semantic Segmentation摘要本文方法Dynamic Focus-aware Positional QueriesEfficient High-resolution Cross-attentionFocus-aware Segmentation Framework 实验结果 Dynamic Focus-aware Positional Queries for Seman…

Servlet运行原理及常见API

文章目录 一. Servlet运行原理二. Servlet常用API1. HttpServlet1.1. Servlet的生命周期1.2. Post请求的构造 2. HttpServletRequest2.1. 获取请求信息2.2. 前端给后端传输数据的三种方式2.2.1. 发送Get请求通过query string传输数据2.2.2. 发送Post请求通过form提交数据2.2.3.…

Python爬虫基础知识点

Python爬虫是使用Python编写的程序,可以自动抓取互联网上的数据。常用的Python爬虫框架包括Scrapy、BeautifulSoup、Requests等。Python爬虫可以应用于众多场合,如大数据分析、信息监测、数据挖掘和机器学习等领域。那么新手应该如何学习python爬虫呢&am…

LLCC68+HC32L110

一、准备 最近研究一下LORA,因为LLCC68是阉割版本的SX126X,所以就选用这颗芯片了 模块:随便选一家都可以我简单做了个测试板,接口如下:只需要注意DIO配置成中断引脚即可 二、程序流程 RX TX初始化 #define RF_FREQ…

springboot openfeign Sentinel统一降级处理

背景 openfeign降级常规操作如下: 此种方式太过于麻烦,每一个方法都要写一个降级逻辑,并且降级逻辑大多是雷同的。 目标 提供默认的降级方式,若openfeign未指定FallbackFactory则走默认降级方式,否则就走自定义的FallbackFact…

C++【unordered_map/set的底层实现-哈希表】—含有源代码

文章目录 前言一、unordered_map/unordered_set容器(1)unordered_map容器介绍及使用(2)unordered_set容器介绍及使用(3)它们和map/set对比 二、容器底层结构(1)哈希表概念&#xff0…

分布式算法之一致性 Hash 算法

tip:作为程序员一定学习编程之道,一定要对代码的编写有追求,不能实现就完事了。我们应该让自己写的代码更加优雅,即使这会费时费力。 💕💕 推荐:体系化学习Java(Java面试专题&#…

第35步 机器学习实战DLC:不平衡数据处理(下)

失踪人口回归的第二期,继续说一说用PSM处理不平衡数据。 一、啥叫PSM PSM全称为Propensity Score Matching,翻译过来就是倾向匹配得分,为了省流,让小Chart介绍一下: 放到我们的数据就是:根据某个特征&…

架构师需要看透公司的用户心智定位

一个架构师要站在用户的角度去思考架构的规划和设计。把注意力放在用户身上,已经有无数案例证明是可以带来重大商业和技术突破的。 很多创业公司,从初创到倒闭,都没搞清楚自己的目标人群和心智。如果一个公司,能锁定目标人群及其…

7个最佳WooCommerce跨境电商社交媒体插件

在互联的早期,您通常可以将产品直接放到网上并出售。但在今天你必须进行营销和做广告。如果没有包括社交媒体在内的可持续营销策略,您的商店可能会被忽视。值得高兴的是,有很多 WooCommerce跨境电商社交媒体插件可以用来传播信息,…

【CMake 入门与进阶(5)】 CMakeLists.txt 语法规则基础及部分常用指令-续(附使用代码)

project project命令用于设置工程名称: # 设置工程名称为 HELLO project(HELLO)执行这个之后会引入两个变量:HELLO_SOURCE_DIR 和 HELLO_BINARY_DIR,注意这两个变量名的前缀就是工程名称,HELLO_SOURCE_DIR 变量指的是 HELLO 工程…

华为推出首款全栈自主数据库 GaussDB,你怎么看?

鸿蒙套壳,鸿蒙套壳完了ERP套,ERP套壳,ERP套壳完了数据库套壳,数据库套壳完了…… 犹记得GaussDB之前一直宣传是基于PostgreSQL研发而来,不知道今天为啥摇身一变为首款全栈自主分布式数据库了。 基于开源研发改不恶心。…

智能设备管理系统

传统设备实施管理难点: 1、日常工作繁琐,手动纸质记录和 Excel 管理设备数据麻烦,后期难以汇总管理,且数据易丢失。 2、需核对设备巡检、保养、故障维修记录,手动更新设备状态和最近维修时间等。 3、无法实时获取设备最…