"); //-->
论文解读:BAD SLAM | 直接法实时BA+RGBD基准数据集(CVPR2019)
本文解读的论文为发表于CVPR 2019的 "Schops, Thomas, Torsten Sattler, and Marc Pollefeys. Bad slam: Bundle adjusted direct rgb-d slam. Proceedings of the IEEE conference on computer vision and pattern recognition. 2019."
虽然这篇论文的主要创新是对SLAM中优化步骤中常用的Bundle Adjustment算法进行改进,本篇文章对BAD SLAM整个SLAM系统进行了介绍,对SLAM中常见的前后端架构,以及其中涉及到的每个步骤都有简单的介绍,利于读者对SLAM系统有大概的认知。
这篇论文还建立了一个RGB-D SLAM的基准数据集,由于论文中提到的它相对于RGB-D SLAM领域常用数据集TUM RGB-D在硬件、评测设置等方面的优越性,该论文的数据集也是RGB-D SLAM领域研究者值得关注、使用的数据集。
主要贡献
提出一个快速的直接法的BA,用于RGB-D SLAM系统中,一个GPU就可以实现实时性能,且效果性能超过其他现有系统
建立并公开了一个RGB-D SLAM的基准数据集,相比以往的数据集,主要优势是数据在采集时就保障了高度同步性,且消除了卷帘快门的影响;此外还在项目官网www.eth3d.net上建立一个排行榜,保留了一部分测试数据没有公开,专门用于测试不同算法的性能
背景介绍
BA(Bundle Adjustment)是SLAM的后端优化中常用的方法,指包括重建的模型和相机的所有参数在内的联合优化。BA通常被用于稀疏特征,这是因为目前公认完整的稠密的BA是做不到实时的,取而代之的是各自近似比如位姿图优化。本文首次提出一种BA算法,能够实时完成稠密BA。
实验表明现有数据集如TUM RGB-D有一定缺陷,如卷帘快门、异步采集的RGB图像和深度图像、深度失真等等。本文从硬件层面解决这些问题,建立一个更精确的基准数据集。
系统与算法介绍
和绝大多数SLAM系统一样,本系统分为前端和后端:前端实时跟踪RGB-D相机的运动,为相机姿势和场景几何的提供初始估计;后端以较低的频率运行,对相机轨迹和场景3D地图进行修正。
本文主要的算法创新在于后端的直接法BA,这里先简要介绍一下前端和后端的大致框架,再详细介绍算法细节。
前端
预处理:深度图双边滤波去噪
里程计:每10秒取一帧为关键帧,对每一帧首先估计它相对上一个关键帧的位姿(直接法几何对齐与光度对齐),本文的一个改进是使用RGB图像的梯度而不是像素值,目的是为了对照明变化更加鲁棒。前端里程计目的是为后续BA提供良好的初始位姿。
回环检测:使用标准的基于Binary feature的bag-of-words方法,找到与当前关键帧m最相似的关键帧k。通过关键点匹配得到m和k的初始相对位姿,通过直接法进行位姿估计修正。在位姿图优化步骤中,使用平均相对位姿作为初始值,然后应用本文的BA策略。
后端
后端的目的是通过联合优化的手段对相机轨迹和场景3D地图进行修正。本文的BA策略基于同时使用深度图像的几何约束和光度约束。为了实现高效的优化,本文方法在优化3D地图和相机位姿之间交替进行,以最大程度地减少每次考虑的参数数量。
在下文中,将先描述我们的数据表示形式,然后再详细说明优化的代价函数和优化过程本身。
数据表示形式:使用稠密surfel表示场景地图,使用关键帧的形式减少BA的输入数据量
关键帧:RGB-D图像及其对应的6自由度的相机位姿。
surfel:有方向的圆盘,由3D中心点,表面法向量,半径,标量视觉描述子构成。选择surfel作为场景表示,是因为可以通过BA对其进行有效融合和更新,并且可以快速变形以适应回环。与基于体素的场景表示相比,surfel可以轻松表示任意比例的薄表面和场景细节。相比于网格,它不需要额外拓扑上的更新。
优化代价函数:优化的总体目的是通过调整上述surfel和关键帧中的参数来最大化整体一致性。优化的参数包含surfel的属性,关键帧的位姿,相机内参(可选)
代价计算是通过将每个surfel投影至每个关键帧上来建立像素对应关系以实现的,具体包含几何约束和光度约束的加权和:
几何约束衡量不同帧中深度图像素的一致性,公式如下所示,其中s是surfel,k是关键帧,ps是surfel中心点在世界坐标系下的三维坐标,经过T转换到当前k帧坐标系下的三维坐标。π将这个三维坐标转换为像素坐标,π-1根据像素坐标和该像素在深度图上对应的深度计算出三维坐标,这个新计算出的三维坐标和直接由T转换至当前帧的三维坐标应该尽可能一致。将上述两个三维坐标作差投影至当前k帧下法向量方向,就得到下面公式的几何约束代价:
光度约束衡量的是RGB像素的一致性,为了尽可能不受不同角度的照明影响,本文主要考虑梯度值而不是RGB值,公式如下所示,ps是surfel中心点在世界坐标系下的三维坐标,s1和s2是surfel圆盘两个边界点在世界坐标系下的三维坐标,边界点投影到图像上去像素坐标对应的像素值,计算像素值差异即为梯度向量,求向量的二范数作为梯度值,和surfel的属性值作差,得到下面公式的光度约束代价:
优化过程
由于surfel和关键帧的数量很大,使用二阶方法如牛顿法联合优化所有参数很慢,我们选择交替优化的策略,如下所示:
创建surfel:第一步,为所有关键帧创建新的surfel。将关键帧划分为4×4像素单元。如果单元格中没有像素对应于现有的surfel,则在单元格中随机选择一个深度以创建新的surfel。从创建的像素p计算surfel属性:中心点三维坐标ps根据像素和深度计算出相机系三维坐标再根据相机位姿转换到世界坐标系下;法向量是通过深度图像上居中的有限差分来计算的;r半径定义为ps与p的4个邻域像素的3D点之间的最小距离;ds初始化为上文中光度约束方程式r_photo中的第一项。创建新的surfels时,仅考虑所有相邻像素都具有深度测量值的像素。
surfel法向量更新:为了限制surfel的更新,本文的更新策略为只允许surfel沿着法向量方向进行更新,因此surfel法向量主要仅影响冲浪允许移动的方向。因此,本文并不是从代价函数中得出更新步骤,而是平均所有相应测量值的法线,然后通过重新归一化为单位长度。
surfel位置和描述子的优化:根据几何约束和光度约束,使用高斯牛顿法联合优化surfel中心位置ps和描述子ds。由于ps仅被允许沿法线移动,ps+t*ns,这里需要优化的参数只有一个t,优化的复杂度下降了,每一个surfel优化是独立的。
surfel合并:在BA方案的第一个迭代中优化位置后,将具有相似属性的surfel合并,以减少不必要的surfel。为了快速找到合并候选者,将surfel投影到所有关键帧中,并考虑将投影到同一单元格的surfel进行合并。
关键帧位姿优化:根据几何约束和光度约束,使用高斯牛顿法优化关键帧的位姿。每一个关键帧的位姿优化都是独立的。
Surfel清理和半径更新:过滤异常surfel。每个surfel的半径都更新为所有相应测量值的最小半径。
数据集介绍
构建动机
TUM RGB-D数据集是目前应用较为广泛的RGB-D数据集,但是本文的实验证明其内参估计、卷帘快门、RGB图像和深度图采集不同步、图像几何变形等问题,会对算法评测造成一定影响。因此本文认为这些问题能在硬件层面得到更好的解决。
TUM RGB-D数据集公布了所有真值,因此无法确定现有算法是否有过拟合这个数据集。本文通过设置非公开测试集解决这个问题。
数据采集
本文采用了同步全局快门照相机Asus Xtion Live Pro以及Xtion的红外****。彩色和深度图像在完全相同的时间点记录。使用主动式立体视觉:通过在两个红外摄像机上进行立体深度估计,立体算法可以利用主动照明和环境红外光。相机位姿真值由运动捕捉系统记录。
本文的SLAM基准数据集包含61个训练数据集和35个测试数据集。下图是示例图像。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。