算力平台跑出200FPS!已知最快最精确的视觉SLAM!吊打ORB+VINS!
bigegpt 2024-10-12 05:37 5 浏览
0. 论文信息
标题:High-Speed Stereo Visual SLAM for Low-Powered Computing Devices
作者:Ashish Kumar, Jaesik Park, Laxmidhar Behera
机构:Indian Institute of Technology (IIT)、Seoul National University (SNU)
原文链接:https://arxiv.org/abs/2410.04090
代码链接:https://github.com/ashishkumar822/Jetson-SLAM
1. 导读
我们提出了一个精确的和GPU加速的立体视觉SLAM设计,称为Jetson-SLAM。它在NVIDIA的低功耗10W Jetson-NX嵌入式计算机上显示出60FPS以上的帧处理速率,在桌面级200W GPUs上显示出200FPS以上的帧处理速率,即使在立体声配置和多尺度设置中也是如此。我们的贡献有三个方面:(1)一种有界校正技术,以防止在快速检测中将许多非角点标记为角点,提高SLAM准确性。(2)一种新的金字塔剔除和聚集(PyCA)技术,通过利用GPU设备,在高速抑制冗余特征的同时,产生鲁棒的特征。PyCA使用我们针对GPU的新的多位置每线程剔除策略(MLPT)和线程高效Warp-Allocation (TEWA)方案,使Jetson-SLAM在嵌入式设备上实现高精度和高速度。(3)Jetson-SLAM图书馆通过数据共享机制实现资源效率。我们在三个具有挑战性的数据集上的实验:KITTI、EuRoC和KAIST-VIO,以及两个高度精确的SLAM后端:Full-BA和ICE-BA表明,Jetson-SLAM是可用的最快的精确和GPU加速SLAM系统。
2. 引言
厘米级精度的局部定位系统对于复杂的机器人和自主飞行系统精确执行导航、控制和视觉伺服任务至关重要。视觉里程计(VO)可用于此目的,但它会丢弃早期的环境观测数据,缺乏全局一致性。这会导致位姿估计随时间漂移,即使智能体在同一区域内导航。
相比之下,视觉SLAM提供了无漂移的定位和建图能力,从而能够精确执行自主任务。在此背景下,立体视觉SLAM因其高度精确的度量性能和低成本的传感器需求而特别引人注目。然而,其计算密集型的前端(特征检测-提取-匹配、立体匹配)和后端(图优化、回环检测、定位和建图)会迅速耗尽低功耗设备的计算能力。此外,这些设备的有限计算能力迫使SLAM系统丢弃中间帧,从而导致帧率降低和跟踪失败。
在数据采集、控制、抓取和计算密集型的深度网络等共存模块共享计算资源的情况下,这种情况会变得更加困难。它很容易导致系统灾难性故障,例如,由于位置反馈延迟,控制系统偏离期望轨迹。因此,基于无人机的自主操纵系统在远程计算机上执行SLAM。其他工作探索了用于SLAM的网络计算,但不适合孤立的机器人系统。
尽管已有加速VO系统的努力,但SLAM仍未受到关注。例如,最近工作仅将现有VO系统的运行时在Jetson设备上进行了基准测试。在VO中,通过将图像划分为网格,并从每个网格中选择一个特征来限制特征数量是一种常用方法。
在多尺度设置中,其不可配置的2倍缩放因子会大幅降低图像分辨率,从而导致特征数量减少,并且无论尺度数量如何,每个网格中的特征都会进一步缩减到仅一个,从而在SLAM中导致特征点不足,造成跟踪失败。此外,当部署到嵌入式计算设备时,对于较小的网格,它效率不高。
ORB-SLAM2、ICE-BA是高度精确的SLAM系统。然而,其复杂的仅CPU工作量使其速度变慢并耗尽低功耗设备的计算能力。SLAMCore是CPU高效的SLAM,但它不是开源的,并且没有与深度网络一起进行基准测试。尽管存在这些限制,但高速SLAM系统是当前时代的需求,在现代自主系统中具有广阔的应用前景。
在视觉SLAM中,速度主要受前端负载的影响,该负载随图像分辨率而变化,在立体模式下(我们关注的模式)会加倍。此外,前端产生的特征数量会影响后端负载。因此,我们从零开始开发了一个GPU加速的前端,该前端利用嵌入式计算机的片上GPU,以高速产生数量足够少但影响较大的特征。然而,在此努力中,GPU核心的稀缺性成为限制可实现最大速度的瓶颈,而核心的低效使用会降低GPU吞吐量。我们通过算法和系统开发的贡献解决了这个问题,从而得出了迄今为止可用的高速、精确且资源高效的GPU加速SLAM系统,称为Jetson-SLAM。
3. 效果展示
(a)Jetson-SLAM的GPU加速且资源高效的前端-中端设计输出;(b)输出轨迹;(c)在Jetson-NX嵌入式计算机上的每秒帧数(FPS)基准测试;以及(d)在KITTI序列上的SLAM性能。
我们注意许多工作将许多非角点错误地分类为角点。这些点本质上是具有类似散粒噪声或微小斑点状外观的统计离群值。由于其高度相似的外观会使立体匹配器产生混淆,因此不能用作地图点。例如,图2a中的所有分割像素都很亮且Nb > Pmin,但它并不是一个角点。图2b展示了一个现实世界的案例。这个问题需要解决,因为前端中的错误会传播到其他SLAM组件。因此,我们旨在在检测阶段本身就丢弃这些点,因为这减少了到达立体匹配器的特征数量,从而降低了匹配时间。为此,我们提出了一种关键改进方法,称为有界校正,它不仅提高了角点质量,还显著提高了Jetson-SLAM的度量精度。
4. 主要贡献
我们的贡献包括:
a) 有界校正:防止将非角点误分类为FAST特征中的角点,并通过产生有影响的角点来提高SLAM的准确性。
b) 金字塔剔除和聚合(PyCA):通过我们的每线程多位置(MLPT)剔除和线程高效扭曲分配(TEWA)来产生高质量的多尺度特征,即使在GPU核心稀缺的情况下也能实现高速度(2000 FPS)和高计算效率。
c) Jetson-SLAM的前端-中端-后端设计:我们开发了一个新的SLAM组件,称为中端,它包含立体匹配、特征匹配、特征跟踪,并执行数据共享,以避免在SLAM组件之间复制和访问所需中间结果的CPU-GPU内存传输开销。
尽管我们在前端和系统设计上做出了贡献,但中端和后端的性能也得到了提升。这使得Jetson-SLAM在达到60FPS以上(分辨率为432×240)时既高效又准确,即使在Jetson-NX的立体模式下达到八个尺度,并且与VGG深度神经网络一起使用时也是如此。高速减少了相机旋转期间的跟踪失败(视频),并促进了仍然依赖外部定位系统的自主无人机的开发。
5. 方法
我们阐述了系统开发的贡献,即新的前端-中端Jetson-SLAM设计(图7)以及为实现信息流优化而进行的战略整合。尽管前端已有所成就,但这些贡献对于实现资源高效利用至关重要,因为当前的SLAM组件是多设备驻留的(CPU和GPU)。
微秒级高效的FAST检测:我们使用两个16位整数Bb和Bd,其中每个位表示Bresenham路径上的16个位置之一。当Bb中的Lp为亮、Bd中的Lp为暗时,对应位为'1',而'0'位则表示Lp相似。为了加速这一过程,我们构建了一个查找表,其中基于所提出的有界校正技术,所有16位组合都已预先计算为角点或非角点。我们使用圆上绝对差值(|Ic?Ip|)的总和作为角点响应。
精简的多尺度检测与提取:我们的前端专注于高速SLAM,但也可以作为仅执行检测的VO前端使用。相比之下,SLAM还需要为地图元素计算描述符,这使得SLAM比VO更慢。多尺度设置计算更为密集,且GPU核心的稀缺性阻止了多个任务的并发执行。因此,我们采用CUDA流以加快执行速度,这样当GPU释放一个尺度的计算资源时,其CPU工作开始,同时GPU被分配给另一个尺度。在提取方面,由于ORB描述符的速度和唯一性,我们选择了它,但现有实现是对每个尺度进行串行提取的。由于我们已经准备好了多尺度关键点,因此我们一次性对所有尺度进行提取。为此,我们通过CUDA流并行化高斯滤波,这对于鲁棒性至关重要。然后,ORB提取(这是一个非常耗时的步骤,会阻止内存合并)一次性在所有尺度上进行,从而实现高速多尺度检测与提取(图10d)。
中端:尽管立体视觉SLAM具有高精度,但它对Jetson类设备造成了很大的计算负担。此外,与VO不同,特征跟踪中的地图点圆锥投影也很耗时。因此,为了实现高吞吐量,我们对两者进行了并行化,它们现在构成了中端。然而,简单地这样做会导致效率低下,因为立体匹配需要描述符和图像存在于GPU内存中。由于它们也被许多SLAM组件使用,因此在资源受限的平台上创建它们的多个副本是不可取的。因此,我们设计了一种信息流,允许前端和中端之间的数据共享(图7)。它通过防止数据重复来节省内存消耗,从而避免了CPU-GPU数据传输的开销。实现这一任务在编程上很复杂,但我们通过下面讨论的同步共享内存来解决它。
同步共享内存(SSM):我们采用了同步内存原语,并在此基础上构建了同步共享内存(SSM),它封装了CPU-GPU传输以及内存分配/释放调用。由于帧之间的特征数量不断变化,立体匹配和跟踪需要可变内存。在这种情况下,SSM通过仅在请求的内存超过当前大小时才执行分配/释放调用,来减少动态内存分配/释放调用。此外,当访问CPU-GPU内存时,SSM会自动将底层数据传输到目标设备,从而降低了框架的复杂性。
6. 实验结果
7. 总结 & 未来工作
我们为低功耗计算设备提出了一种资源高效且精确的GPU加速Jetson-SLAM方法。我们提出了有界校正(Bounded Rectification),以防止在FAST角点检测过程中将非角点误分类为角点,并提出了金字塔剔除与聚合(Pyramidal Culling and Aggregation,PyCA),它能在多尺度和立体设置下以极高的速度生成高质量特征。PyCA基于我们的特征剔除(Feature Culling,FC)、金字塔特征聚合(Pyramidal Feature Aggregation,PFA)、多线程多位置剔除(Multi-Location Per-Thread,MLPT)和线程高效扭曲分配(Thread Efficient Warp Allocation,TEWA)技术。我们还设计了视觉SLAM中的中端部分,并开发了Jetson-SLAM库,该库利用同步共享内存来实现资源高效利用。Jetson-SLAM展现出了非常高的帧率,适用于包含多个子系统的现代自主机器人系统。即使在Jetson设备上的多尺度和立体设置下,Jetson-SLAM的性能也远超许多著名的SLAM流水线。
对更多实验结果和文章细节感兴趣的读者,可以阅读一下论文原文~
相关推荐
- 得物可观测平台架构升级:基于GreptimeDB的全新监控体系实践
-
一、摘要在前端可观测分析场景中,需要实时观测并处理多地、多环境的运行情况,以保障Web应用和移动端的可用性与性能。传统方案往往依赖代理Agent→消息队列→流计算引擎→OLAP存储...
- warm-flow新春版:网关直连和流程图重构
-
本期主要解决了网关直连和流程图重构,可以自此之后可支持各种复杂的网关混合、多网关直连使用。-新增Ruoyi-Vue-Plus优秀开源集成案例更新日志[feat]导入、导出和保存等新增json格式支持...
- 扣子空间体验报告
-
在数字化时代,智能工具的应用正不断拓展到我们工作和生活的各个角落。从任务规划到项目执行,再到任务管理,作者深入探讨了这款工具在不同场景下的表现和潜力。通过具体的应用实例,文章展示了扣子空间如何帮助用户...
- spider-flow:开源的可视化方式定义爬虫方案
-
spider-flow简介spider-flow是一个爬虫平台,以可视化推拽方式定义爬取流程,无需代码即可实现一个爬虫服务。spider-flow特性支持css选择器、正则提取支持JSON/XML格式...
- solon-flow 你好世界!
-
solon-flow是一个基础级的流处理引擎(可用于业务规则、决策处理、计算编排、流程审批等......)。提供有“开放式”驱动定制支持,像jdbc有mysql或pgsql等驱动,可...
- 新一代开源爬虫平台:SpiderFlow
-
SpiderFlow:新一代爬虫平台,以图形化方式定义爬虫流程,不写代码即可完成爬虫。-精选真开源,释放新价值。概览Spider-Flow是一个开源的、面向所有用户的Web端爬虫构建平台,它使用Ja...
- 通过 SQL 训练机器学习模型的引擎
-
关注薪资待遇的同学应该知道,机器学习相关的岗位工资普遍偏高啊。同时随着各种通用机器学习框架的出现,机器学习的门槛也在逐渐降低,训练一个简单的机器学习模型变得不那么难。但是不得不承认对于一些数据相关的工...
- 鼠须管输入法rime for Mac
-
鼠须管输入法forMac是一款十分新颖的跨平台输入法软件,全名是中州韵输入法引擎,鼠须管输入法mac版不仅仅是一个输入法,而是一个输入法算法框架。Rime的基础架构十分精良,一套算法支持了拼音、...
- Go语言 1.20 版本正式发布:新版详细介绍
-
Go1.20简介最新的Go版本1.20在Go1.19发布六个月后发布。它的大部分更改都在工具链、运行时和库的实现中。一如既往,该版本保持了Go1的兼容性承诺。我们期望几乎所...
- iOS 10平台SpriteKit新特性之Tile Maps(上)
-
简介苹果公司在WWDC2016大会上向人们展示了一大批新的好东西。其中之一就是SpriteKitTileEditor。这款工具易于上手,而且看起来速度特别快。在本教程中,你将了解关于TileE...
- 程序员简历例句—范例Java、Python、C++模板
-
个人简介通用简介:有良好的代码风格,通过添加注释提高代码可读性,注重代码质量,研读过XXX,XXX等多个开源项目源码从而学习增强代码的健壮性与扩展性。具备良好的代码编程习惯及文档编写能力,参与多个高...
- Telerik UI for iOS Q3 2015正式发布
-
近日,TelerikUIforiOS正式发布了Q32015。新版本新增对XCode7、Swift2.0和iOS9的支持,同时还新增了对数轴、不连续的日期时间轴等;改进TKDataPoin...
- ios使用ijkplayer+nginx进行视频直播
-
上两节,我们讲到使用nginx和ngixn的rtmp模块搭建直播的服务器,接着我们讲解了在Android使用ijkplayer来作为我们的视频直播播放器,整个过程中,需要注意的就是ijlplayer编...
- IOS技术分享|iOS快速生成开发文档(一)
-
前言对于开发人员而言,文档的作用不言而喻。文档不仅可以提高软件开发效率,还能便于以后的软件开发、使用和维护。本文主要讲述Objective-C快速生成开发文档工具appledoc。简介apple...
- macOS下配置VS Code C++开发环境
-
本文介绍在苹果macOS操作系统下,配置VisualStudioCode的C/C++开发环境的过程,本环境使用Clang/LLVM编译器和调试器。一、前置条件本文默认前置条件是,您的开发设备已...
- 一周热门
- 最近发表
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- resize函数 (64)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- mybatis大于等于 (64)
- xcode-select (66)
- httperror403.14-forbidden (63)
- logstashinput (65)
- hadoop端口 (65)
- dockernetworkconnect (63)
- esxi7 (63)
- vue阻止冒泡 (67)
- c#for循环 (63)
- oracle时间戳转换日期 (64)
- jquery跨域 (68)
- php写入文件 (73)
- java大写转小写 (63)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)