不知道怎么用深度学习改进SLAM?DK-SLAM全给你讲明白!
bigegpt 2024-10-12 05:36 5 浏览
来源:3D视觉工坊
添加微信:dddvision,备注:SLAM,拉你入群。文末附行业细分群
0. 这篇文章干了啥?
GCN-SLAM等SLAM系统将ORB特征替换为学习特征,结合了深度学习和几何模型的优势,但泛化性较差。而且由于缺乏低层关键点信息,影响特征匹配性能。此外,基于学习特征的词袋(BoW)也很难训练。
为了解决这些问题,国防科大提出了DK-SLAM,一种基于深度关键点的全新SLAM系统,融合了自适应学习、由粗到细的特征跟踪和在线闭环能力。这种单目视觉SLAM框架利用修改后的基于MAML的训练策略进行强大的深度特征提取。通过整合补丁像素并利用相邻帧补丁构建光度损失,提高了特征匹配的精度,以优化粗略相对姿态估计。具有二进制深度特征的在线BoW模型动态适应新环境,缓解深度学习中的泛化挑战,并在无需额外训练的情况下提高了适应性。
下面一起来阅读一下这项工作~
1. 论文信息
标题:DK-SLAM: Monocular Visual SLAM with Deep Keypoints Adaptive Learning, Tracking and Loop-Closing
作者:Hao Qu, Lilian Zhang, Jun Mao, Junbo Tie, Xiaofeng He, Xiaoping Hu, Yifei Shi, Changhao Chen
机构:国防科技大学
原文链接:https://arxiv.org/abs/2401.09160
2. 摘要
手工特征中不可靠的特征提取和匹配会破坏视觉SLAM在复杂现实场景中的性能。虽然利用CNN学习的局部特征在捕获高级信息方面表现出熟练程度并在匹配基准方面表现出色,但它们在连续运动场景中遇到了挑战,导致泛化能力差并影响回环检测精度。为了解决这些问题,我们提出了DK-SLAM,这是一种具有自适应深度局部特征的单目视觉SLAM系统。MAML优化了这些特征的训练,我们引入了一种由粗到细的特征跟踪方法。最初,直接方法近似连续帧之间的相对姿态,随后是用于精确姿态估计的特征匹配方法。为了应对累积定位误差,一种新颖的基于在线学习二元特征的在线回环模块识别序列中的回环节点。实验结果强调了DK-SLAM的功效,在公开可用的数据集上优于具有代表性的SLAM解决方案,如ORB-SLAM3。
3. 效果展示
KITTI数据集上轨迹精度的定性对比。
4. 主要贡献
(1)提出了DK-SLAM,这是一个具有自适应深度关键点学习的单目SLAM系统。深度特征提取器使用MAML策略进行训练,增强了对不同场景的适应性。
(2)采用了由粗到细的特征匹配策略,通过面片光度损失优化来估计相对姿态,并根据2D-3D关系对其进行优化以提高精度。
(3)引入了基于深度关键点在线学习的词袋(BoW)模型,克服了泛化能力差的问题,确保序列中的正确回环检测。
5. 具体原理
DK-SLAM使用基于SuperPoint的自适应局部特征提取器在多尺度图像金字塔上提取关键点。为了在不同尺度的图像上平衡关键点的数量,实现了一种平均分布策略。为了增强泛化性能,局部特征提取器在训练期间经历了MAML。随后,通过将浮点描述符转换为二进制哈希码来优化内存消耗。最后,引入了一个在线BoW模块,用于建立循环闭合机制,促进闭环检测和全局地图优化。
5.1 自适应局部特征学习
1) 特征提取网络: 受Superpoint启发,DK-SLAM的深度局部特征提取器利用VGG16作为骨干。与Superpoint不同,DK-SLAM在每个卷积神经网络(CNN)后引入BatchNorm层以增强训练收敛性。在骨干之后,出现了两个头,每个包含多层CNN。第一个是检测头,生成与输入图像大小匹配的概率掩码。假设掩码上概率超过设定阈值的位置表示关键点位置。第二个头是描述符头,预测关键点的特征描述符,使用L2范数归一化到256维度。
2) 自监督自适应特征学习: DK-SLAM网络经历了自监督训练,采用多步骤过程。首先,从当前训练图像获得单应性变换后的图像。为了训练关键点检测器,利用预训练的MagicPoint网络获取原始和变换图像的关键点伪标签。在两个图像中,关键点预测和伪标签对检测器损失的形成有贡献,分别表示为Lp和Lwp,交叉熵作为度量标准。转到描述符训练,使用中提出的稀疏描述符损失Ld,涉及获取变换图像和像素级匹配。然后,仅为伪标记的关键点构建描述符损失函数,使用三重损失。稀疏描述符损失由两个组成:单应性匹配描述符损失(Ldm)和非匹配描述符损失(Ldn)。单应性匹配描述符损失为:
使用匹配描述符附近的M对描述符来构建非匹配描述符损失:
描述符损失Ld为:
整体训练损失是上述检测器损失和描述符损失的总和。
3) 用于特征提取器训练的MAML: 由于场景中视觉特征的差异,基于学习的局部特征提取器面临泛化能力差的问题。训练集和未见数据集之间的显著特征差异可能导致灾难性遗忘。为了解决这个问题,DK-SLAM借鉴了模型无关元学习(MAML)的见解,通过元训练来调整网络参数,以提高泛化能力并快速适应新数据,同时防止灾难性遗忘。基于MAML的元训练包括内循环训练和外循环训练。训练集被划分为支持集Ds和查询集Dq,其中Ds参与内循环训练,Dq参与外循环训练。
在MAML训练策略中,原始网络参数θa首先复制到θb。然后,这两个参数在内循环和外循环中都经历训练。在内循环中,支持数据集Ds用于对θb进行迭代更新。这涉及将支持数据集的批次划分为n个不同的任务τ,对每个任务执行m次参数更新。因此,在一个内循环中,参数被更新n * m次,导致更新后的参数θn?m_b。完成一次内循环训练后,使用完整的查询集数据来训练网络。尽管在查询集数据中计算了θn?m_b的梯度▽θn?m_b,但不用于更新θn?m_b;相反,原始的θa被更新。
4) 关键点分布策略: 此外,在特征提取阶段引入了关键点分布策略。DK-SLAM在多尺度图像金字塔上均匀分布整个关键点集。在图像金字塔的每一层,预定义数量的关键点均匀分布在图像的不同区域的网格内。这种分布策略确保关键点在图像的所有尺度和角落之间均匀分散,防止在特定区域集中。
5.2. 粗到细的关键点匹配和跟踪
关键点匹配精度对视觉SLAM性能至关重要。传统方法如ORB-SLAM使用基于相邻帧的运动跟踪模块,假设均匀运动模型。然而,这种假设经常失败,导致难以找到正确的匹配对应关系,并复杂化优化过程。
1) 半直接粗关键点跟踪: 受半直接方法的启发,DK-SLAM引入了基于光度约束的粗跟踪方法。假设相邻帧上匹配关键点周围的光强和纹理相似。上一帧的地图点通过相对姿态投影到当前帧,如果相对姿态准确,投影关键点的补丁的光强损失将最小化。在已知上一帧的地图点和补丁像素值的情况下,调整相对姿以最小化光强损失Lp。
2) 粗到细关键点跟踪: 在初始阶段获得粗略相对姿态后,继续在相邻帧之间匹配地图点,并通过3D-2D投影关系优化当前帧的姿态ξcw。随后,利用粗略相对姿态ξcoarse_lc,将上一帧坐标系中的3D地图点投影到当前帧的像素坐标系。随后,在投影位置附近的固定半径范围内搜索匹配的关键点,利用描述符的汉明距离作为搜索准则。建立3D-2D匹配关系后,构建一个姿态图,利用粗略相对姿态与上一帧姿态共同导出当前帧的初始姿态。
当前帧的姿态作为图中的顶点,顶点数受优化影响。来自当前帧的地图点以及这些关键帧的重投影损失构成边。DK-SLAM仅在跟踪模块内优化姿态,迭代地优化当前帧姿态以最小化重投影损失:
5.3. 基于深度关键点的闭环
DK-SLAM的闭环模块包括检测和校正。为了解决泛化能力差的问题,采用在线学习的基于Bag of Words(BoW)的循环检测器。识别闭环节点,并使用循环相对姿态优化全局地图。
1) 基于在线学习的二进制BoW: 与手工制作的描述符不同,深度描述符占据更大的特征空间。离线训练的BoW模型可能难以捕捉这个空间,使得难以区分BoW叶节点中的深度特征索引。为了解决这个问题,DK-SLAM引入了一种基于在线学习的BoW,仅使用测试场景数据的特征。由于构建具有浮点描述符的类似树状结构的模型具有挑战性,因此DK-SLAM使用二进制哈希变换处理深度特征:
2) 回环节点检测: 如图3所示,闭环检测线程接收来自局部映射线程过滤的关键帧,将它们存储在反向数据库中以构建Bag-of-Words(BoW)。iBoW-LCD利用当前帧Kc的特征描述符与数据库中存储的描述符进行匹配。在iBoW-LCD中,每个关键帧被转换为一个唯一的BoW向量进行表示。我们计算当前关键帧Kc与反向关键帧的BoW向量之间的相似性分数,以识别最相似的候选关键帧Kh。然而,候选关键帧Kh只考虑描述符的数值差异,忽略描述符位置的差异,可能导致不匹配。
首先使用基于Grid-Based Motion Statistics(GMS)的暴力匹配方法在候选闭环节点之间匹配关键点。如果匹配数低于20,将候选循环关键帧分类为不匹配。通过匹配关键点之间的相似性变换矩阵Tsim计算候选闭环节点之间的相似变换矩阵Tsim。随后,使用匹配的地图点对Tsim进行优化。如果优化函数中的内点数量超过20,候选关键帧Kh被视为匹配的关键帧Km。
3) 闭环通过全局地图校正: 优化相似变换矩阵Tsim可以精化当前关键帧的姿态,并调整其共视关键帧的姿态。同时,更新这些关键帧之间的共视地图点的位置。接下来,将匹配关键帧Km及其连接关键帧的地图点与当前关键帧Kc及其连接关键帧的地图点对齐。基于匹配的地图点,更新关键帧之间的可见性图。利用Kc,Km,全局地图点和可见性图,构建并优化本质图。最后,全局BA优化全局地图中所有关键帧和地图点的位置。
6. 实验
KITTI数据集对比: ORB-SLAM3在大多数序列中运行良好。但在序列10中性能下降,这是因为可靠的角点缺失导致跟踪不稳定,影响整体姿态估计的准确性。相反,基于学习的局部特征的LIFT-SLAM在大多数序列中表现不佳,说明学习特征不普遍优于传统特征。
EuRoC数据集对比: DK-SLAM利用两阶段跟踪策略进行精确特征点定位和减少不正确匹配,并且学到的特征在光线较暗的环境中表现出色,保证了稳定的特征跟踪。
消融研究实验:"Ours1"缺乏粗到细的跟踪策略,依赖于关键点匹配的恒定速度运动模型导致错误,导致不准确的对应和跟踪失败。"Ours3"使用了两阶段策略进行稳定跟踪,结合了用于粗略姿态估计的半直接方法和精细特征匹配。原始的Superpoint策略的"Ours2"表现略差于使用MAML训练的"Ours3"。在"Ours3"中,MAML被应用于通过迭代增强对支持和查询集的泛化,从而得到一个强大而适应性的检测器的本地特征提取器的训练。
7. 总结
这项工作介绍了DK-SLAM,这是一种具有自适应学习特性的单目视觉SLAM,具有学得的局部特征检测器、由粗到细的匹配策略以及在线学得的二进制特征BoW。为了增强泛化性能,采用MAML进行自适应训练,产生具有强大能力的特征提取器。通过半直接方法估计帧之间的粗略相对位姿,以实现准确的特征点匹配。在线学得的二进制特征BoW纠正了SLAM累积误差。DK-SLAM在KITTI和EuRoC数据集上优于ORB-SLAM3等代表性的基准。然而,在信息传输到基于CPU的后端时,基于GPU的在线前端面临效率挑战。未来的工作将探讨用于参数压缩的知识蒸馏和SLAM框架修改以提高效率。
对更多实验结果和文章细节感兴趣的读者,可以阅读一下论文原文~
下载
在公众号「3D视觉工坊」后台,回复「 3dcv」,即可获取工业3D视觉、SLAM、自动驾驶、三维重建、事件相机、无人机等近千余篇最新顶会论文;巴塞罗那自治大学和慕尼黑工业大学3D视觉和视觉导航精品课件;相机标定、结构光、三维重建、SLAM,深度估计、模型部署、3D目标检测等学习资料。
3D视觉方向交流群成立啦
目前工坊已经建立了3D视觉方向多个社群,包括SLAM、工业3D视觉、自动驾驶、三维重建、无人机方向,细分群包括:
[工业3D视觉]相机标定、立体匹配、三维点云、结构光、机械臂抓取、缺陷检测、6D位姿估计、相位偏折术、Halcon、摄影测量、阵列相机、光度立体视觉等。
[SLAM]视觉SLAM、激光SLAM、语义SLAM、滤波算法、多传感器融合、多传感器标定、动态SLAM、MOT SLAM、NeRF SLAM、机器人导航等。
[自动驾驶]深度估计、Transformer、毫米波|激光雷达|视觉摄像头传感器、多传感器标定、多传感器融合、自动驾驶综合群等、3D目标检测、路径规划、轨迹预测、3D点云分割、模型部署、车道线检测、Occupancy、目标跟踪等。
[三维重建]NeRF、多视图几何、OpenMVS、MVSNet、colmap、纹理贴图等
[无人机]四旋翼建模、无人机飞控等
除了这些,还有求职、硬件选型、视觉产品落地、最新论文、3D视觉最新产品、3D视觉行业新闻等交流群
大家可以添加小助理v:dddvisiona,备注:加群+方向+学校|公司, 小助理会拉你入群。
相关推荐
- 得物可观测平台架构升级:基于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)