Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >COLMAP-SLAM:一个视觉里程计的框架

COLMAP-SLAM:一个视觉里程计的框架

作者头像
点云PCL博主
发布于 2023-11-27 07:27:40
发布于 2023-11-27 07:27:40
7910
举报
文章被收录于专栏:点云PCL点云PCL

文章:COLMAP-SLAM: A FRAMEWORK FOR VISUAL ODOMETRY

作者:L. Morelli , F. Ioli, R. Beber , F. Menna, F. Remondino , A. Vitti

编辑:点云PCL

代码:https://github.com/3DOM-FBK/COLMAP_SLAM

欢迎各位加入知识星球,获取PDF论文,欢迎转发朋友圈。文章仅做学术分享,如有侵权联系删文。

公众号致力于点云处理,SLAM,三维视觉,高精地图等领域相关内容的干货分享,欢迎各位加入,有兴趣的可联系dianyunpcl@163.com。侵权或转载联系微信cloudpoint9527。

摘要

SLAM技术越来越多地与其他传感器集成,用于室内和室外的导航。在这个研究领域中,特别关注使用深度学习局部特征进行图像匹配、关键帧选择方法,以及对新的IMU和GNSS解决方案进行测试。在其他广泛使用的SLAM实现(如ORB-SLAM)上集成和测试新的方法可能并不是一项简单的任务。因此,我们提出了对COLMAP的扩展,以实时作为基于特征的视觉SLAM,并可以与其他传感器配合使用,选择COLMAP是因为其模块化性和庞大的社区,这确保了仓库的持续性。本文提出了一个主要用于实时评估基于学习的配准点和新SLAM特征的流程,适用于单目、双目和多摄像机系统。还展示了基于深度学习局部特征的关键帧选择算法的示例,以及IMU集成的简单示例。GitHub仓库:

https://github.com/3DOM-FBK/COLMAP_SLAM。

主要贡献

为促进新的图像匹配算法在SLAM中的集成,本文提出了COLMAP-SLAM,这是一个基于COLMAP APIPython开源框架。它提供了一个用于开发新SLAM算法的模块化软件,特别适用于快速集成和评估基于特征的SLAM/VO的新本地特征。实现了单目和立体/多摄像机情况,支持人工制作和基于深度学习的局部特征。关键帧选择基于使用ORB或ALIKE特征计算的光流的创新,但其他特征也可以轻松集成。目前,仅支持单目场景的闭环检测。如果GNSS数据存储在图像的EXIF标签中,将用于地理参考相机轨迹。该工程是模块化的,允许独立研究每个单一任务。主要框架使用Python编写,新功能也可以使用其他语言添加,然后通过Python作为包装器调用。所提出的方案在EuRoC Machine Hall数据集上进行了评估,并与基于ORBSLAM2的VSLAM框架OpenVSLAM进行了比较。

本文的目的是了解COLMAP在实时运行时的潜力,重点关注计算工作量和恢复的相机姿势的准确性,据作者所知,这是COLMAP的首个开源实现,用于执行V-SLAM任务,包括多摄像机支持、对不同局部特征的支持以及GNSS数据的集成。类似地,Nocerino等人提出了一个3D重建流程,用于在多用户同时或分离采集会话期间使用智能手机进行视频采集和云中的几何3D重建。另一个类似的项目是使用COLMAP的离线Python SLAM的项目,但尚未公开发布。最后虽然我们依赖于COLMAP API,但基于PYCOLMAP的类似工作最近在GitHub上发布,但尚未与我们的方法进行比较。

内容概述

提出的用于实时导航和建图的流程建立在COLMAP的基础上。具体而言,利用其API来提取RootSIFT本地特征、进行GPU匹配以及增量束调整/重建。选择COLMAP引擎是因为其模块化性和易于集成自定义本地特征和匹配。

图1:拟提出的COLMAP-SLAM方案概述

总体流程的流程图如图1所示,其关键点包括:

• 从单个摄像机或同步的多摄像机系统中保存的帧被本地保存,按摄像机分组。尽管COLMAP可以进行自校准,为了限制计算时间并提高准确性,应提供每个摄像机的校准参数。

• 以固定时间间隔搜索新帧,并且关键帧选择模块仅选择在关键点分布方面提供足够新的帧,关键帧选择仅在选择为主摄像机的摄像机上执行。在未来,我们计划将关键帧选择扩展到其他从摄像机。实际上,可能在主摄像机上关键点分布方面不足够新,而在其他摄像机上创新可能显著不同,例如由于不同的视角。为了节省计算时间,一个选项是在主摄像机上对所有帧运行关键帧选择,并在其他摄像机上以较低的帧速率运行。

• 主摄像机的关键帧在不同时间中依次匹配,而从摄像机的帧仅与同步的主关键帧匹配。

• 所有匹配都保存在SQLite数据库中,然后使用COLMAP映射器API注册新关键帧,三角测量新的关键点,最后调整3D点和相机姿势。该过程不断重复:在新可用的帧中搜索新关键帧,并使用新的特征和相机姿势更新先前的地图。

• 在关键帧选择期间提取关键点的算法可以与用于增量注册新关键帧的算法不同。如果关键帧选择所需的特性(精度、计算资源等)与图像注册期间所需的特性不同,则这可能是有用的。

• 支持不同的摄像机传感器配置,例如单目、立体和多摄像机。目前,当使用RootSIFT本地特征时,仅支持单目情况下的闭环检测。

• 图像的第一批定义了参考系统。如果在EXIF数据中提供了GNSS数据,它将用于地理参考轨迹,目前,尺度因子是仅从GNSS数据或立体基线中的初始图像批次计算的。如果仅使用一个摄像机而没有来自其他传感器的附加信息,则摄像机轨迹已知,但尺度因子是未知的。

• 对于实时应用程序中的匹配,可以选择RootSIFT、ORB或ALIKE,而对于离线模拟或后处理的图像序列,可以使用其他本地特征。目前,支持SuperPoint和Key.Net + HardNet。引入离线选项是为了测试在实时提取速度太慢的本地特征,或作为集成和测试局部特征的更简便的方法。实际上,可以事先提取目标文件夹中所有帧的本地特征,然后在需要时COLMAP-SLAM将查找关键点。

• COLMAP的sequential_matcher API用于在k个图像的自定义窗口上进行匹配,对于n个非定向图像,匹配窗口扩展到k+n,以增加确保图像跟踪不受图像方向失败中断的机会,这种方法通过自适应匹配增加了重新定位的能力,克服了场景中可能的临时障碍或照明突变。

关键帧选择

关键帧选择基于最后一个关键帧与当前帧之间的光流创新,基于相应的局部特征。因此,关键点的光流被定义为最后一个关键帧中关键点的坐标与当前帧中相同关键点的坐标之间的2D欧氏距离(以像素为单位)。在SLAM循环的每次迭代中,当有新帧可用时,使用传统的ORB检测器或ALIKE,一种先进的可微分关键点检测算法,能够实现亚像素精度并且在商业级GPU上以每秒95帧的速度运行,提取局部特征。然后,通过使用余弦相似性方法对检测到的局部特征进行匹配,该方法评估提取的描述符的n维向量的相似性。然后基于极线约束使用Pydegensac过滤对应的匹配。为了决定新帧是否为SLAM定位带来足够创新并且因此应选择为关键帧,计算中位匹配距离(MMD)(见图2)并与阈值进行比较。这是当前帧和上一个关键帧中匹配的关键点之间的2D欧氏距离的中值。此外,算法还检查当前帧中是否找到足够的新匹配特征,以避免将其拒绝。ORB和ALIKE的性能相似:使用ORB和ALIKE,关键帧选择算法大约需要0.05秒来评估新帧并确定是否应将其指定为关键帧。

图2: (a) 从EuRoC Machine Hall (MH) 02数据集中选择的关键帧示例,相对于上一个关键帧的中位匹配距离(MMD)为105.74像素。红色点表示当前帧中特征的位置,而绿色矢量表示上一个关键帧中相应特征的位置;(b) 未被选择为关键帧的帧示例(MMD = 11.05像素),因此被剔除。

IMU集成

陀螺仪和加速度计的流行度在过去几年中显著增加,现在它们普遍存在于智能手机、相机和机器人玩具中。通过微机电系统(MEMS)技术的改进,这些传感器的微型化成为可能,从而获得了增强性能的传感器。惯性测量单元(IMU)包括3个测量角速度的陀螺仪和3个测量加速度的加速度计,以及重力方向。虽然IMU参考系统中的角速度和加速度测量作为单独的观测值具有价值,但通过传感器融合算法将它们进行集成可提高IMU机体框架方向的估计准确性,而不仅仅是通过陀螺仪数据进行集成得到的估计。此外,如果磁力计与IMU一起使用,就可以建立相对于磁北的方向的绝对测量,从而便于创建姿态和航向参考系统(AHRS)。

表1. EuRoC Machine Hall数据集的五个子集的示例帧和总帧数

实验

COLMAP-SLAM的准确性已在EuRoC Machine Hall数据集上进行了测试,该数据集由作者根据难度递增分为五个子集,从易到难分别为easy、medium和difficult。这些子集的挑战在于速度变化、高速和慢速移动以及静止序列。为了评估SLAM方法的性能,还提供了精确的地面真实轨迹。图像序列被输入COLMAP-SLAM,模拟实时采集。计算相机位姿的准确性采用了Root Mean Square Error(RMSE),该误差是通过COLMAP-SLAM轨迹与地面真实轨迹之间的Helmert变换获得的。

单目SLAM的准确性评估

首次测试是针对EuRoC Machine Hall 01数据集的单目情况,测试中使用了简单的关键帧选择方法,将20 Hz的流降采样到1 Hz。启用了回环检测时,COLMAP-SLAM的RMSE为3.3厘米,几乎是使用OpenVSLAM时6.2厘米的两倍。这个结果可能归因于COLMAP-SLAM的RootSIFT,据文献报道,与OpenVSLAM中使用的ORB相比,RootSIFT更准确。在没有循环检测的情况下,COLMAP-SLAM的RMSE相对于使用循环检测的情况差了两倍,考虑到没有循环检测,这是可以接受的结果。

单目 vs. 双目 VO的准确性

使用Machine Hall数据集2和3进行了单目和双目的比较,在双目情况下,RMSE是通过cam0的估计轨迹和地面真实轨迹之间的6参数变换计算的,因为已知尺度因子的估计,单目情况下的RMSE是从与立体相同的轨迹计算的,而不修正尺度。该测试对于评估轨迹和尺度估计的准确性非常有用,单目RMSE显示了轨迹形状的质量,即使尺度因子估计不准确。

表3:COLMAP-SLAM单目与双目情况。地面真实轨迹用连续的蓝线表示,而关键帧用红色点表示

关键帧选择

表4对关键帧选择的作用进行了测试,仅使用EuRoC Machine Hall 01的左摄像头。在这个初步测试中,采用了简单的时间选择方法,将20 Hz的初始输入流从1 Hz和5 Hz进行比较。

表4:COLMAP-SLAM在MH_01_easy数据集上处理关键帧数量对比,真值轨迹用连续的蓝线表示

总结

该论文提出了一个用于开发新型SLAM算法的开源框架,特别关注了学习型检测器和描述符的纳入和评估。该框架采用Python编写,基于COLMAP API进行RootSIFT局部特征的提取、基于GPU的匹配以及增量式的捆绑/重建。它能够实时运行,设计上是模块化的,以便有针对性地开发特定任务。该平台支持单目和多摄像头系统。结果显示,所提出的流程可以取得令人满意的结果,其准确性可与OpenVSLAM相媲美。我们计划在各个方面扩展该框架:

  • 包括合作式SLAM,其中由多个移动平台执行地图构建。
  • 将回环检测扩展到除RootSIFT之外的其他描述符,以及多摄像头系统。目前,仅支持在单目场景下使用RootSIFT进行回环检测。
  • 改进和扩展GNSS数据的集成,不仅用于初始化图像的尺度定义。
  • 改进多摄像头系统的尺度估计算法,目前仅利用前30个图像的批次来估计摄像头之间的基线。
  • 添加与Kornia的兼容性,以使用已有的大量局部特征,并添加更多最新的局部特征。
  • 目前,关键帧选择仅在主摄像头上执行,我们计划将关键帧选择扩展到其他从摄像头。
  • 将IMU恢复的方向集成到提出的流程中。
  • 包括使用扩展卡尔曼滤波器的传感器融合。
  • 提高效率和计算时间。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-11-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 点云PCL 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
数据挖掘机器学习[四]---汽车交易价格预测详细版本{嵌入式特征选择(XGBoots,LightGBM),模型调参(贪心、网格、贝叶斯调参)}
 题目出自阿里天池赛题链接:零基础入门数据挖掘 - 二手车交易价格预测-天池大赛-阿里云天池
汀丶人工智能
2022/12/21
1.2K0
数据挖掘机器学习[四]---汽车交易价格预测详细版本{嵌入式特征选择(XGBoots,LightGBM),模型调参(贪心、网格、贝叶斯调参)}
模型建立与调参
本篇文章将会从简单的线性模型开始,了解如何建立一个模型以及建立完模型之后要分析什么东西,然后学习交叉验证的思想和技术,并且会构建一个线下测试集,之后我们会尝试建立更多的模型去解决这个问题,并对比它们的效果,当把模型选择出来之后,我们还得掌握一些调参的技术发挥模型最大的性能,模型选择出来之后,也调完参数,但是模型真的就没有问题了吗?我们还需要绘制学习率曲线看模型是否存在过拟合或者欠拟合的问题并给出相应的解决方法
mathor
2020/04/03
2K0
数据挖掘机器学习[六]---项目实战金融风控之贷款违约预测
因为文档是去年弄的,很多资料都有点找不到了,我尽可能写的详细。后面以2021年研究生数学建模B题为例【空气质量预报二次建模】再进行一个教学。
汀丶人工智能
2022/12/21
1.7K0
数据挖掘机器学习[六]---项目实战金融风控之贷款违约预测
数据挖掘实践(金融风控):金融风控之贷款违约预测挑战赛(下篇)xgboots/lightgbm/Catboost等模型--模型融合:stacking、blend
通过组合多个学习器来完成学习任务,通过集成方法,可以将多个弱学习器组合成一个强分类器,因此集成学习的泛化能力一般比单一分类器要好。
汀丶人工智能
2023/05/17
4.3K0
数据挖掘实践(金融风控):金融风控之贷款违约预测挑战赛(下篇)xgboots/lightgbm/Catboost等模型--模型融合:stacking、blend
LightGBM+Optuna 建模自动调参教程!
在kaggle机器学习竞赛赛中有一个调参神器组合非常热门,在很多个top方案中频频出现LightGBM+Optuna。知道很多小伙伴苦恼于漫长的调参时间里,这次结合一些自己的经验,给大家带来一个LGBM模型+OPTUNA调参的使用教程,这对可谓是非常实用且容易上分的神器组合了,实际工作中也可使用。
Python数据科学
2023/08/29
1.5K0
LightGBM+Optuna 建模自动调参教程!
机器学习算法之XGBoost及其自动调参(算法+数据+代码)
本文将利用一个excel数据对常见机器学习算法(XGBoost、Random Forest随机森林、ET极度随机树、Naïve Bayes高斯朴素贝叶斯、KNN K近邻、Logistic Regression逻辑回归、Decision Tree 决策树)的使用过程进行简单的介绍,并对XGBoost算法的自动调参方法进行详解,机器学习算法的详细讲解在机器学习专辑里都有介绍。
Minerva
2020/07/06
48.6K1
LightGBM 如何调参
本文结构: 什么是 LightGBM 怎么调参 和 xgboost 的代码比较 ---- 1. 什么是 LightGBM Light GBM is a gradient boosting framew
杨熹
2018/06/19
3.8K0
工程能力UP!| LightGBM的调参与并行
【这里必须说一下,lightbg的参数的同义词实在太多了,很多不同的参数表示的是同一个意思,不过本文中使用“/”分开】
机器学习炼丹术
2020/07/23
2.5K0
数据挖掘神器LightGBM详解
这些系统下的 XGBoost 安装,大家只要基于 pip 就可以轻松完成了,在命令行端输入命令如下命令即可等待安装完成。
算法进阶
2023/12/26
1.4K0
数据挖掘神器LightGBM详解
LightGBM实战
[LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [99] valid_0's multi_logloss: 0.264218 [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [100] valid_0's multi_logloss: 0.264481 [0, 1, 1, 0, 2, 1, 2, 0, 0, 2, 1, 0, 2, 1, 1, 0, 1, 1, 0, 0, 1, 1, 2, 0, 2, 1, 0, 0, 1, 2] 0.9666666666666667
西西嘛呦
2021/02/25
1.9K0
LightGBM实战
【数据挖掘实战】 房价预测
本次竞赛有 79 个解释变量(几乎)描述了爱荷华州艾姆斯住宅的各个方面,需要预测每套住宅的最终价格。
机器学习司猫白
2025/01/21
1390
【数据挖掘实战】 房价预测
突破最强算法模型,LightGBM !!!
LightGBM呢,是微软开发的一个机器学习工具,擅长处理大数据和高维数据。LightGBM是基于决策树的提升方法,通过不断调整和优化预测模型来提高精度。与其他算法相比,LightGBM速度更快、内存占用更少、准确率更高,并且能处理类别特征。
Python编程爱好者
2024/07/12
5410
突破最强算法模型,LightGBM !!!
【白话机器学习】算法理论+实战之LightGBM算法
如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,在这简单的先捋一捋, 常见的机器学习算法:
石晓文
2020/06/28
7.7K0
数据挖掘机器学习[五]---汽车交易价格预测详细版本{模型融合(Stacking、Blending、Bagging和Boosting)}
 题目出自阿里天池赛题链接:零基础入门数据挖掘 - 二手车交易价格预测-天池大赛-阿里云天池
汀丶人工智能
2022/12/21
6970
数据挖掘机器学习[五]---汽车交易价格预测详细版本{模型融合(Stacking、Blending、Bagging和Boosting)}
【推荐收藏】模型评估与调参(Python版)
“管道工作流”这个概念可能有点陌生,其实可以理解为一个容器,然后把我们需要进行的操作都封装在这个管道里面进行操作,比如数据标准化、特征降维、主成分分析、模型预测等等,下面还是以一个实例来讲解。
Sam Gor
2019/07/08
1.9K0
LightGBM 可视化调参
大家好,在100天搞定机器学习|Day63 彻底掌握 LightGBM一文中,我介绍了LightGBM 的模型原理和一个极简实例。最近我发现Huggingface与Streamlit好像更配,所以就开发了一个简易的 LightGBM 可视化调参的小工具,旨在让大家可以更深入地理解 LightGBM
Ai学习的老章
2022/04/11
1.5K0
LightGBM 可视化调参
还在当调参侠?推荐这三个超参优化库【含示例代码】
在传统的算法建模过程中,影响算法性能的一个重要环节、也可能是最为耗时和无趣的一项工作就是算法的调参,即超参数优化(Hyper-parameter Optimization,HPO),因此很多算法工程师都会调侃的自称"调参侠"。近期在研究一些AutoML相关的论文和实现,而在AutoML中的一个核心组件就是HPO。借此机会,本文梳理总结Python中三种常见的可实现HPO的库,并提供一个简单的示例。
luanhz
2021/08/20
7930
万字长文总结机器学习的模型评估与调参
选自 Python-Machine-Learning-Book On GitHub
Sam Gor
2019/10/17
8780
【机器学习】集成学习代码练习
课程完整代码:https://github.com/fengdu78/WZU-machine-learning-course
黄博的机器学习圈子
2022/05/25
4730
万字长文详解模型调参神器-Hyperopt
①随机搜索算法 ②模拟退火算法 ③TPE算法 来对某个算法模型的最佳参数进行智能搜索,它的全称是Hyperparameter Optimization。
用户8949263
2022/05/23
3.8K0
万字长文详解模型调参神器-Hyperopt
推荐阅读
相关推荐
数据挖掘机器学习[四]---汽车交易价格预测详细版本{嵌入式特征选择(XGBoots,LightGBM),模型调参(贪心、网格、贝叶斯调参)}
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档