视觉 SLAM 的可学习线段描述符
Vakhitov A, Lempitsky V. Learnable Line Segment Descriptor for Visual SLAM[J]. IEEE Access, 2019.
作者Alexander Vakhitov 谷歌学术Victor Lempitsky 谷歌学术
三星 AI 实验室(莫斯科) 作者主页演示视频
期刊:IEEE Access  开源期刊,JCR分区:Q1   IF:4.199
作者另外几篇点线结合的论文:
ECCV 2016:Accurate and linear time pose estimation from points and lines
ICRA 2017:PL-SLAM: Real-time monocular visual SLAM with points and lines
ECCV 2018:Stereo relative pose from line and point feature triplets

Learnable Line Segment Descriptor for Visual SLAM

【C】 穷理以致知,一文而四问

  • 1. 针对什么问题?
    • 传统线段匹配基于手工制作,并不是最优的;
  • 2. 采用什么方法?
    • 在既深而又轻量级的完全卷积神经网络使用自动收集的匹配和非匹配线段的数据集来训练参数,改进 L2_Net 提出 LLD - Net 构造学习的描述符
    • 点-线 SLAM 中采用最小线参数,用两个端点的非最小参数方便构造 BA 优化项,但参数更多,本文利用最小参数构造了 BA 的优化项
    • 构造三元组结构,在学习过程中采用难例挖掘 hard-negative 的思想;
  • 3. 达到什么效果?
    • 卷积网络仅对每帧图像应用一次,而不管在 I 中检测到的线段的数量,从而描述符在一帧图像的多条线段中可以共享,实现高效运行;
    • 在描述符提取阶段实验显示用 1080Ti GPU 显卡计算一帧图像的描述符仅需要 17 毫秒
    • 不仅在独立的线段匹配时效果更好,放在实时运行的 SLAM 系统中效果也更明显;
    • 在线段学习网络上基于 L2_Net 做了一些改进(3.1节),并通过实验验证了其与其他变体的优越性(表 5);
    • 在 KITTI 数据上相对于 ORB-SLAM RMSE 和相对旋转误差减小了 10—20% ,在 EuROC 数据集上平均误差减小了 40% 以上
  • 4. 存在什么不足?
    • 3.4.4 节线段剔除机制过于简单,缺乏说服力,可以通过实验先证明一下,或者有什么理论依据;
    • 点线之间共享相同的卷积结构

0. 摘要

  • 问题:传统的间接视觉运动估计和 SLAM 系统基于点特征,近年来,提出了几种使用线元素的 SLAM 系统,尽管线段匹配带来了额外的稳健性和准确性,但这种系统中使用的线段描述符是手工设计的,因此并不是最优的;
  • 方法:在本文中,建议应用描述符学习来构建针对匹配任务优化的线段描述符,本文展示了如何在既深而又轻量级的完全卷积神经网络之上构造这样的描述符使用自动收集的匹配和非匹配线段的数据集来训练该网络的系数;
  • 优势:
    • 使用完全卷积网络可确保计算描述符所需的大部分计算在同一图像中的多个线段之间共享,从而实现高效运行;
    • 本文展示了学习的线段描述符不仅在单独情况下(即用于区分匹配和非匹配线段的子任务)优于先前提议的手工线段描述符,而且当内置到 SLAM 系统中时也表现更好;
  • 贡献:
    • 本文在最先进的仅含有点特征的系统上构建了基于线的 SLAM 线程
    • 概括了用于自动驾驶和室内微型飞行器导航的两个数据集的描述符网络参数的学习

1. 简介

  • 引入线段的必要性:大多数机器人都在由人类创建或大量修改的环境中运行,例如建筑物内部或城市街道,因此在这样的环境中进行可靠的视觉导航以及定位建图等相关工作是一项至关重要的任务;
    • 如今,大多数实际使用的视觉 SLAM 系统都基于点特征,虽然点特征经过充分研究并且在数学上和算法上相对容易处理,但是人类改造的环境中的特征点通常达不到足以跟踪的数量
    • 同时,人工修改的环境通常包含视觉上与众不同的直线段,当机器人在环境中移动时,可以从多个视角检测和匹配这些直线线段
    • 在这种人造情况下,点匹配与线匹配的结合能够大大提高运动估计和 SLAM 的准确性与鲁棒性 [1-4]
  • 手工线段描述符:为了跨帧进行线段匹配,需要使用线段描述符,即将线段的外观映射适合于基于距离匹配的高维空间的功能;
    • 良好的线段描述符对端点的改变应具有鲁棒性,即同一线段的重叠线段对的描述符应该是相似的
    • 以前的工作使用手工制作的线段描述符,如文献 [5] 中的 Line Band descriptor (LBD) 或文献 [6] 中的尺度不变的均值标准偏差线段描述符(scale-invariant meanstandard deviation line segment descriptor,SMLSD);
    • 手工线描述符的灵感来自 SIFT,并且在纹理良好的场景中运行良好,但在用于重复和低纹理场景时可能毫无用处。
  • 学习方式描述符:现有的线描述符基于流行的尺度不变特征变换(SIFT)点描述符 [7],虽然SIFT是一种非常成功的算法,但它的点匹配精度已经被基于机器学习的描述符所超越 [8-13]
    • 其背后的思想是收集匹配和非匹配特征对的数据集,并使用这些配对以有区别的方式学习描述符函数的参数
    • 虽然最初的基于学习的架构相对较浅 [8-10],但最近的架构 [11,12] 使用基于梯度的学习来训练使用 Siamese 架构 [13] 和相关损失函数的更深层架构;
    • 通常,通过更好地利用视觉的大量统计数据,与 SIFT 和相关的手工特征相比,基于学习的描述符能够提高视觉匹配的准确性和稳健性
  • 本文可学习的线段描述符:本文表明了基于学习方式获取的深度描述符可以以类似于点特征的方式提高线段特征的匹配精度
    • 为此,本文设计了一种架构为图像中的一组直线段计算判别描述符,该框架不局限于特定的线检测器,因为它可以适应所有检测器在学习过程中的特点。
  • ① 网络:在测试时,所提出的架构采用输入图像以及一组检测到的线段,通过完全卷积神经网络 [14] 传递图像,获得与输入图像分辨率相当的一组卷积图
    • 然后使用沿线段的固定数量的卷积特征的平均池(average-pooling)来获得每个单独线段的描述符如图 1 所示;
    • 重要的是,输入图像仅通过卷积网络传递一次,因此大部分计算在多个线段之间共享,而不是每条线段运行一次卷积网络,这使得本文方法更高效。
  • ② 数据:卷积网络参数的训练是在匹配和非匹配线段对的数据集上自动挖掘的;
    • 在本文的实现中,这样的挖掘是在两个流行的数据集上执行的(Kitti [15] ,Euroc Mav [16]),使用了数据集提供的帧的 ground truth 姿态。
  • ③ 评估:然后对这些数据集的剩余部分进行评估(尽管它们之间存在显著差异,但两个数据集使用相同的参数);
    • 作为基于 RANSAC 的运动估计模块和完整 SLAM 系统 [17] 中的一个组成部分,本文评估了新的描述符及其变体,以及用于区分匹配和非匹配线段的基线
  • 主要贡献:
    • 引入了一种新的高效深度卷积结构,可以生成可学习的深度线段描述符
    • 展示了如何从具有已知 ground truth 相机姿势的数据集中挖掘本系统所需要的学习数据
    • 基于最先进的间接双目 SLAM 系统使用最小的 3D 线参数化构建点线 SLAM 线程
    • 评估了通过学习获得的线段描述符,并展示了其在包括完整 SLAM 在内的多个任务中相对于先前提出的线段描述符的优势。
  • 在本文的其余部分安排如下:
    • 在第二部分的相关工作讨论之后,将详细介绍本文的方法,包括网络架构,学习过程,挖掘过程以及第三部分中点 + 线 SLAM 系统的变体
    • 然后,在第四部分中介绍了学习线段描述符的评估,最后,我们在第五节进行简短讨论。

2. 相关研究

2.1 线段匹配

  • 虽然线段匹配比点特征匹配研究更少,但仍然可以分为三种不同类别的匹配方法
  • 第一种是依赖几何信息进行初始匹配的方法:
    • 文献 [18] 提出一种用于局部跟踪直线段的早期方法;
    • 文献 [19] 假设图像之间存在已知的极线几何,并使用线段端点将线段对应起来,通过计算图像邻域之间的平均互相关来匹配线;
    • 文献 [20] 提出的线对应的几何验证假设图像三元组之间存在已知的三焦张量;
    • 一般来说,这些方法需要大量关于相机内部和外部校准的额外信息,这限制了它们的适用性。
  • 第二组方法匹配线段组而不是单条线段
    • 文献 [21] 提议在平面上进行 “两条线 + 两个点” 的线段匹配;
    • 文献 [22]线段按空间接近程度分组,然后计算并匹配组的特征(signatures);
    • 文献 [23]共面线段及其交叉点进行操作;
    • 文献 [24] 使用从不同邻近线段的结构信息进行迭代匹配
    • 文献 [25,26] 使用线匹配的三元组提出了联合进行点线匹配
    • 文献 [27] 使用图像中线段相对位置的形状描述符来匹配卫星图像。
  • 第三种与本文工作相关的两视图中的线段匹配描述符
    • 与点匹配类似,此类方法构造各个线段的描述符,并基于这些描述符之间的距离匹配线段
    • 文献 [28] 使用忽略周围图像纹理的线段颜色直方图
    • 文献 [29] 提出了一种均值-标准差线段描述符(MSLD),将线段的邻域划分为重叠的单元网格,并使用梯度方向直方图(一种受SIFT类点描述符启发的方法)描述单个单元;
    • 在各种图像修改场景(模糊,JPEG,旋转或视点变化,噪声,光线)中,MSLD 与在高曲率点 [40] 中分离的 Canny 边缘一起进行评估,显示其优于基于极线几何的施密德的方法 [19]
    • MSLD 的多尺度版本在文献 [6] 中有描述;
    • 文献 [5] 提出了一种 line-band descriptor(LBD),计算与所考虑的线段平行的频带上的梯度直方图

2.2 可学习的点特征描述符

  • 虽然自最初的 SIFT [7] 以来已经提出了大量的手工描述符 [30] ,但在最近的几年里,重点一直放在可学习的描述符上
    • 用于学习的数据集最初使用 Phototourism dataset [31] ,调整了当时流行的手工制作描述符 Daisy [32] ,另一种数据集集合涉及合成图像 [33]
  • 之后通过利用大型自动生成的图像块对的数据集,学习具有大量可调参数的特征点描述符成为可能;
    • 文献 [34] 使用凸优化学习两层描述符
    • 文献 [10,11,12][35] 使用非凸局部优化来调整深度网络参数;
    • 文献 [36] 学习并评估了用于图像匹配和图像块检索的压缩二进制 patch 描述符
    • 但是尽管深度学习高级计算机视觉信息 [37] 以及一些密集匹配任务(如立体和光流匹配 [38] )取得了巨大成功,但至今深度学习应用于点特征描述符并没有从根本上改进现有技术
    • 实际上,根据最近的一项比较 [39] ,在某些情况下,手工设计的特性仍然与基于深度学习的描述符的竞争性相当

2.3 可学习的全局描述符

  • 本文发现线描述方法与通过在整个图像 [40] 或边界框 [41]汇集卷积特征来构建全局图像或区域描述符的方法密切相关。

2.4 点-线 SLAM

  • 在文献 [2] 中,作者使用最小的 3D 线参数化 [42] 并提出了一个仅有线特征的双目 SLAM 方案,然而,由于依赖于每帧中大量线特征的可用性,该系统在公开的数据集上表现不佳
  • 非最小线参数的优势与缺陷:最近,文献 [4],[43] - [46] 研究分析了基于现行优化的点线融合方案在 SLAM 中的作用;
    • 在这些工作中,使用非最小线参数,因为它允许更容易地与基于点的位姿图优化集成
    • 然而,非最小线参数化会产生问题,因为无限的参数值集可以编码相同的 3D 线,同时导致不同的重投影成本值
  • 作为修正,文献 [45] 提出了一种 “线切割”算法,它基本上限制了有效线参数集并提高了准确性;
  • 本文中展示了使用最小线参数化的方法也可以在标准 SLAM 基准测试中成功使用

3. 可学习的线段描述符

  • 本节讲解方法的具体实现:
    • 首先介绍描述符的结构,然后描述如何从匹配和非匹配线段对的数据集中学习它;
    • 由于本文工作的基于学习的性质,挖掘匹配和非匹配线段是该方法的重要部分;
    • 将学习的线段描述符集成到可视 SLAM 系统中的方法将在本节末尾介绍;
    • 在第四节中有关于描述符的评估。
  • 符号:使用粗体大写来表示图像和立体图像,3D 目标使用大写,2D 目标使用小写,\(\left \| \cdot \right \|_{p}\) 表示 \(l^{p}\) 的范数。

3.1 线段描述符的结构

  • 在测试时,单目灰度图像 I 通过卷积神经网络 \(f_{\theta }\),其中 \(\theta\) 是训练集上学习的参数;
    • 该网络具有如下所述的全卷积结构,并且网络处理 \(\mathcal {F}=f_{\theta }\left ( I \right )\) 的结果具有与输入图像 I 和 64 通道相同的空间维度;
    • 映射 \(f_{\theta }\)每个图像像素 \((x,y)\) 分配一个 \(q=64\) 维度的特征向量 \(\mathcal {F}\left ( x,y \right )\)
  • 给定卷积表示 \(\mathcal {F}\) ,然后使用简单的池化操作来计算各个线段的描述符,详细描述:
    • 给定线段 \(l\) ,将其均分\(T\) 个子段( \(T\) 是算法的参数);
    • 然后选择每个子段的中心,并使用双线性插值 [47] 为其获取特征向量
    • 再通过对与采样点对应的 T 个特征向量(64 维)求平均来获取线段描述符 \(d^{\theta }\left (l \right )\)
    • 在实验中, T ≥ 5 提供了一个很好的选择。
  • 表 1 给出了网络 \(f_{\theta }\) 的结构,该网络基于文献 [11] 计算点描述符的 L2_Net ,然后对其结构进行了如下修改
    • 添加了一对卷积和跨步卷积层
    • 还在归一化层之前插入了一个 8× 上采样层,这确保了表示 \(\mathcal {F}\) 和输入图像 I 具有相同的空间分辨率
    • 将最后一个卷积的滤波器大小从 88 变为 77;
    • 与 L2_Net 类似,以标准化层结束,标准化层将每个像素的描述符转换为单位 \(l_{2}\) 范数
    • 将本文框架称为 LLD - Net(Learnable line segment descriptor network),并通过实验验证了其背后的选择。
  • 本文方法最吸引人的特性是卷积网络 \(f_{\theta }\) 仅对图像 I 应用一次,而不管在 I 中检测到的线段的数量
    • 实验显示用 1080Ti GPU 显卡计算一帧图像的描述符仅需要 17 毫秒
    • 通过诸如张量因子分解/可分离卷积 [48]低位量化 [49]群体稀疏化 [50] 等技术,可以进一步显着加速。

3.2 描述符学习

  • 本文的主要目标是学习一个在 SLAM 或 VO 系统中运行良好的线段描述符,它主要考虑输入视频序列中的附近帧匹配;
    • 因此,本文关注的是在小时间跨度进行匹配时表现最佳的描述符,例如,五帧以内;
    • 本文形成了一个由双目训练序列中的 11 个后续立体图像组成的迷你序列数据集,迷你序列中的中间帧对和任何其他帧对之间的时间间隔小于等于 5,故小序列包含 2 × 11 = 22 个单眼图像。
  • 然后在小批量的图像对 \(\left ( I,\mathcal{J} \right )\) 上训练卷积网络 \(f_{\theta }\)
    • 每个小批量图像包括迷你序列的 中间双目像的左图像(在随后的推导中表示为 I) 和迷你序列中剩余的 21 个图像的子集;
    • 将整个子集表示为 \(\mathcal{J}\)子集中的独立图像表示为 J
    • 采样 b(≤ 21) 张图像作为 \(\mathcal{J}\) ,从而将迷你序列转换成 b 对小批量的图像对 \(\left ( I,J \in \mathcal{J} \right )\)
  • 接下来,假设线段检测器已经识别出每个图像中的多个候选线段
    • 在学习过程期间,对于采样图像 I 中的每个 2D 线段 \(l\),使用网络的当前状态来计算线段的描述符 \(d^{\theta }\left ( l \right ) = AvgPool\left ( f_{\theta }\left ( I,l \right ) \right )\)
  • 现在描述线段候选的三元组采样过程,其中三元组的前两个元素对应于计算同一 3D 线段的 3D 线段投影的描述符(如图 2 下所示);
    • 令 L 为一条 3D 线,\(l_{a}\) 是 2D 线段,是图像 I 中线段 L 的投影;
    • \(J \in \mathcal{J}\) 的图像上,将线段 L 投影到 J 上得到 2D 线段 \(l_{+,j}\)
    • 对于 \(J \in \mathcal{J}\)每张图像都有一个集合 \(\mathbf{l}_{-j} = \left \{ l_{-,j,i} \right \}_{i}\) 包含不是 L 上任一线段投影的 2D 线段
  • 对每条 3D 线段 L 和图像 $J $ 考虑以下三元组结构
    • 在图像 I 锚 anchor 的描述符\(d_{a}^{\theta } = d^{\theta }\left ( l_{a} \right )\)
    • 在图像 J 上匹配的描述符\(d_{+}^{\theta } = d^{\theta }\left ( l_{+,j} \right )\)
    • 在图像 J 上所有不匹配的描述符的集合\(d_{-}^{\theta } = \left \{ d^{\theta}\left ( l_{-,j,i} \right ) \right \}_{l_{-,j,i\in \mathbf{l_{-}}}}\)
    • 3.3 节详细介绍了查找匹配线段和识别不匹配线段集的过程。
  • 计算文献 [51] 提出的 hard-negative 三元组损失函数,在本文中定义为:
  • 将具有可用 ground truth 的 KITTI 和 EuRoC 数据集分成训练和验证集以及实验部分中描述的测试集
    • 训练过程使用批量的 b 个图像对,计算所有选定帧中所有线段的描述符,然后对通过损失(公式1)计算并累加的三元组进行抽样
    • 然后反向传播累计损失,以便更新参数。

3.3 匹配滤波

  • 上述学习过程是本文的主要贡献,但要成功,需要一个匹配和非匹配对的大型数据集
    • 为了避免昂贵的注释过程,本文利用 ground truth 相机位姿自动从训练序列中挖掘每个三元组中的匹配和非匹配对(参见图 2 上),这可以被视为弱监督的训练;
    • 如图 4 中所示,首先找到几何一致的四条线段组成的种子线,将种子线所在的视图为 第 6,7 对双目视图,并挖掘在四个视图中具有匹配的所有线段;然后在相机的每一帧位姿时,对 3D 线进行三角测量并将其投影到 mini-sequence 的其他帧上,然后寻找足够接近投影(轨迹增长)的匹配线段
  • [如线段检测与剔除方法]:对每帧图像,使用文献 [52]EDLine 线段检测算法在四个图像金字塔上检测图像中的线段,其中尺度步长\(\sqrt{2}\)
    • 剔除长度小于 \(w\) 像素(以原始图像分辨率测量)的二维线段检测;
    • 注意本文算法可以与任何线段检测器一起使用,并且可以在描述符学习过程中根据其特点进行调整
  • 如何从给定的 mini-sequence 中挖掘 positive(匹配)对,包括种子构建(seed constructionand)和轨迹增长(track growth)两步:
    • 种子构造使用中间(第六)和相邻(第七)帧的双目图像对;
    • 轨迹增长使用 mini-sequence 的剩余帧;
      • 该过程的结果是一组轨迹 \(\mathcal{T} = \left \{ t_{i} \right \}_{i=1}^{n}\),每个轨迹都是一组三元组 \(t_{i} = \left \{ \left ( \mathbf{I}_{j},l_{j},\mathbf{l}_{j}^{-} \right ) \right \}_{j =1}^{n_{i}}\)(其中第一项是 anchor descriptor,第二项在图像 J 下的 positive detection,第三项是一系列的 negative matches)。
  • 线段投影关系及参数对于一帧图像 I ,考虑 3D 线 L 和投影 2D 线段 \(l\) 的两个端点 \(a,b\)
    • 设点 \(X,Y\subseteqq L\) 是线段 L 上的 3D 点,通过 ground truth 的相机位姿将这两个 3D 点投影到图像 I 得到 2D 点 \(x,y\)
    • 通过选择 X,Y 最小化在图像坐标系中 \(x,y\)\(a,b\) 的距离,然后将选择出的 X,Y 构成的 3D 线段称为 \(l\) 到 L 的反投影
    • 将直线 \(l\) 和图像坐标的水平正轴之间的顺时针角度定义为 \(\phi \left ( l \right )\)
    • 定义 2D-3D 最大线距离\(\rho \left ( l,L \right ) = \max \left \{ \left \| x-a \right \|,\left \| y-b \right \| \right \}\)
             \(l^{2}\) 距离\(\rho_{2} \left ( l,L \right ) = \left \{ \left \| x-a \right \|^{2},\left \| y-b \right \|^{2} \right \}\)
  • 数据集挖掘算法的不同阶段中检查以下条件:
    • ① 手性 Cheirality: 如果 \(l\) 到 L 的 3D 重投影位于用于线段检测的相机前面,则手性成立;
    • ② 重投影 Reprojection: 如果在对应于 \(l\) 的图像金字塔层级中重投影误差 \(\rho \left ( l,L \right ) < \epsilon\) (预定的阈值 \(\epsilon =3\)),则满足重投影;
    • ③ 角度一致性 Angle consistency: 如果满足 $| ( l ) - ^{’} | < $ (预定阈值 \(\delta = 10^{\circ}\)\(\phi^{'}\));
    • ④ 三维重叠 3D overlap: \(\frac{\left | \left ( X,Y \right )\cup \left ( X^{'},Y^{'} \right ) \right |}{\left \| X,Y \right \|} > \xi\),预定义 3D 线 \(\left ( X^{'},Y^{'} \right ),X^{'},Y^{'}\in L\) 和阈值 \(\xi = 0.25\)
  • 仅缺少上面列出的条件之一表明 L 和 \(l\) 之间的匹配不确定并且可能是偶然的,因此不影响学习过程。

3.3.1 种子构造

  • 从中间(第六对)图像对构建数据集,为了检查 2D 线的集合是否与 3D 线相对应,需要至少三个图像,因此在此阶段使用另一个相邻的双目图像(第七对)。因此,我们采取两个连续的双目图像,即 mini-batch 内的第六对和第七对;
    • 相应的左右帧分别定义为:\(\mathbf{I}_{l},\mathbf{I}_{r}; \mathbf{J}_{l},\mathbf{J}_{r}\)
    • 给定 \(\mathbf{I}_{l},\mathbf{I}_{r}\)\(\mathbf{J}_{l},\mathbf{J}_{r}\) 中线段检测集合,,考虑所有可能的成对匹配;
    • 对于每对可能的匹配 \(\left ( l_{l} ,l_{r}\right )\),对 3D 线段 L 进行三角测量,然后检查 \(l_{l},L\)\(l_{r},L\)手性,并用 \(\phi ^{'} = \phi \left ( l_{l} \right )\) 检查 \(l_{r}\)角度一致性
    • 如果一对匹配满足了上述两个条件,则从 \(\mathbf{J}_{l},\mathbf{J}_{r}\) 中寻找相应的线段;
    • 通过最小化 \(\rho \left (l_{l}^{*},L\right )\rho \left (l_{r}^{*},L\right )\) 满足重投影和三维重叠条件来选择 \(l_{l}^{*}\in \mathbf{J}_{l}\)\(l_{r}^{*}\in \mathbf{J}_{r}\)
  • 为每一组 \(\left ( l_{l} ,l_{r},l_{l}^{*},l_{r}^{*}\right )\) 添加一个新的轨迹,将 negative 集合定义为:\(\mathbf{I}_{j}^{-}=\left \{ l_{j} \in \mathbf{I}_{j}:\rho \left ( l_{j},L \right )< \psi \right \}\),其中 \(\psi =12\) 像素。
  • 种子构造过程大约一秒处理一对双目图像,每帧检测几百条线段。

3.3.2 轨迹增长

  • 在这个阶段的开始,每个轨迹恰好有 4 个元素,因为在种子构造阶段,只有在两个双目图像对的每个视图中都存在相同 3D 线投影时才创建轨迹;
    • 按照以下方式以与中间(第六)帧对增加绝对时间差的顺序处理未在种子构造阶段中使用的 mini batch 的帧 J;
    • 对于每条 3D 线段 \(L_{i}\),使用重投影条件来找到可能的匹配候选线段;
    • 在不属于其他任何轨迹的线段中,挑选出具有最低重投影误差 \(\rho \left ( l_{j},L_{i} \right )\)\(l_{j}\) ,其对应的三元组 \(\left ( \mathbf{J},l_{j},\mathbf{l}_{j}^{-} \right )\) 也被加到新的轨迹中;
    • 通过最小化整个轨迹中的 \(\rho _{2}^{2}\left ( l_{j} ,L\right )\) 之和来细化反投影得到的 3D 线 \(L_{i}\)
  • 轨迹增长过程的结果提供了积极的匹配,然后可以用于构建三元组并训练 LLD 网络

3.4 带有线特征的 ORB-SLAM2

  • 本文将线段特征添加到 ORB-SLAM2 中,使其基本上成为点 + 线融合系统;
    • 使用线段描述符匹配线段特征;
    • 然后描述添加之后的 ORB-SLAM2 系统,注意这一部分独立于具体描述符(与使用 LBD 描述符的基本系统步骤相同);
    • 对于不管是由 LLD 描述符还是实际的 LBD 描述符描述的线段 \(l_{i},l_{j}\),在匹配阶段都使用标准的欧几里得距离 \(\mu \left ( d^{\theta }\left ( l_{i} \right ),d^{\theta }\left ( l_{j} \right ) \right )=\left \| d^{\theta }\left ( l_{i} \right ),d^{\theta }\left ( l_{j} \right ) \right \|_{2}\)

3.4.1 线段检测与双目匹配

  • 线特征的结合起始于包含左图像 \(\mathbf{I}_{l}\) 和右图像 \(\mathbf{I}_{r}\) 的立体对中的线检测,在学习过程中,过滤掉短于 \(w\) 像素的线段(在图像金字塔的第 0 级);
    • 在 2D 线空间中形成非重叠的 50 * 50 的网格,其中每条线段由一对 \(\left ( \gamma ,\nu \right )\) 表示\(\gamma\) 是线与图像水平轴之间的角度, \(\nu\) 是线段到图像中心点的距离;
    • 在网格中的每个单元格只保留最长的前 \(N_{g}\) 条线段
    • 迭代来自 \(\mathbf{I}_{l}\) 的检测,并以贪婪的方式将他们\(\mathbf{I}_{r}\) 的检测相匹配
    • 对于来自 \(\mathbf{I}_{l}\) 的每条线段 \(I_{l}\) ,从满足手性原则的 \(\mathbf{I}_{r}\) 中选择未匹配的线段 \(\left \{ l_{ri} \right \}\),并在所选择的线段中选择具有最短描述符距离 \(\mu \left ( d^{\theta }\left ( l_{l} \right ),d^{\theta }\left ( l_{ri} \right ) \right )\) 的线段
    • 不存储在右视图中没有匹配的检测 \(I_{l}\)

3.4.2 轨迹初始化

  • 下面描述线段轨迹的初始化(在文献 [17] 中称为“添加到地图”);
    • 通常,地图中包含参与 BA 的几何特征,从而影响机器人位置的最终估计。
  • 与点特征一样,在创建新的关键帧时向地图添加线段特征
    • 如果检测到的线段特征不属于其他轨迹帧,则认为来自于左右帧中的每个匹配对 \(\left ( l_{l},l_{r} \right )\) 符合地图添加条件
    • 然后通过 \(l_{l}\)\(l_{r}\) 对 3D 线 \(L\) 进行三角测量
    • 如果存在来自前一帧的附加线段,使得满足重投影条件( $ $)和三维重叠条件,则初始化轨迹
    • 通过检查这些条件,基本上可以使用几何验证来剔除异常值

3.4.3 将检测与现有的轨迹匹配

  • 给定一对新的双目图像,左视图中检测到的线段 \(l_{l}\) 与右视图检测到的线段 \(l_{r}\) 相匹配,尝试将其与地图中已有的 3D 线段匹配
    • 将对应于该轨迹的地图中的每条 3D 线段 \(L\) 投影到两帧上,并检查 \(\left ( L,l_{li} \right )\)\(\left ( L,l_{ri} \right )\) 是否符合重投影条件;
    • 当地图中已有的几条 3D 线与检测到的匹配时,为形成轨迹的线段选择描述符集合中的中间值 \(d_{med}\),并选择具有最低描述符距离 \(\mu \left ( d_{med},d^{\theta }\left ( l_{i} \right )\right )\) 的检测。

3.4.4 地图中线段剔除

  • ORB-SLAM2 系统维护用于局部 BA 优化过程的活跃的地图元素集,同样,每个线段元素在创建之后保持活跃,直到被移除
    • 在每个时刻,如果它们在三个最近的关键帧中具有少于四个匹配的 2D 线段(每个关键帧可以具有最多两个匹配的线段,两帧中的每一帧都有一个),从活跃地图中移除线段轨迹(line segment tracks);
    • 如果从第一次检测到重投影的整个 3D 线段的长度不在(0.2, 50)米范围,则 track 也从活跃地图中移除,从而从活跃地图中移除太短或太长的线段。

3.4.5 局部 BA

  • 活跃地图中的元素 (点和线段)参与局部 BA 优化过程
    • 在束调整中使用线段需要在 3D 中参数化线段,使用文献 [42] 启发的最小化 3D 线参数
  • 当一条线由一个 3D 点 \(X\) 和一个三维矢量 \(Y\) 参数化时,则线包含点:\(\left \{ X+tY|t\in \mathbb{R} \right \}\)
    • 为了在这种情况下固定尺度自由度,施加条件:\(X^{T}Y=0, \left \| Y \right \|=1\)
    • 但是在 BA 期间难以施加这样的条件。
  • 为了更新线参数,通过旋转矩阵 \(\texttt{R}\left ( L \right )=\begin{bmatrix} Y, & \frac{X}{\left \| X \right \|}, & Y\frac{X}{\left \| X \right \|} \end{bmatrix}\) 和一个常数 \(\alpha \left ( L \right )=\left \| X \right \|\) 构造 L 的新的最小参数化,旋转矩阵和常量唯一地确定线
    • 接下来用四元数进一步参数化矩阵 \(R\left ( L \right )\)
    • 所提出的参数化与文献 [42] 中描述的最小化具有相同的好处,不需要额外地引入约束或自由度,同时,它导致将线条投影到下面描述的图像上具有非零解机制(nontrivial mechanism);
    • BA 优化期间使用新的旋转 + 常量线参数化
  • 为了将直线投影到图像平面,从矩阵 \(\texttt{R}\) 和常量 \(\alpha\) 中解码得到 \(X\)\(Y\)
    • 然后利用函数 \(\pi _{L}\left ( L,\beta \right )\) 使用相机参数计算 3D 线 \(L\) 投影得到定义在 2D 齐次坐标系中的 2D 线 \(l\)
  • 对于 BA 优化过程,使用以下公式计算参数更新的雅克比
    • 首先对于四元数,利用李代数 \(SO3\) 提供的雅克比
    • X 和 Y 关于旋转矩阵和标量的雅克比矩阵可以直接从参数化定义中获得;
    • 如果将 \(J_{\pi ,X}\left ( cot \right )\) 表示为透视投影相对于点参数的雅克比,那么 \(l_{h}\) 关于 X 和 Y 的雅克比为公式(4)(5);
    • 投影函数相对于 \(l_{h}\) 向量的雅克比为公式(5);
    • 最后可以根据链式法则直接获得 \(\pi\left ( L,\beta \right )\) 关于线参数的雅克比
  • [ 如何计算 3D 线的 X 和 Y ]:为获得参数值,从两个不同相机帧检测到的一对 2D 线段 \(l_{i},l_{j}\) 来计算 Y ,然后计算 X
    • 为计算 Y ,注意它是 3D 线的单位范数的方向向量,所以 \(Y=\frac{l_{i}\times l_{j}}{\left \| l_{i} \times l_{j}\right \|}\),其中 \(l_{i}\)\(l_{j}\) 是归一化坐标系中的 2D 线方程;
    • 然后通过公式(6)的线性约束来计算 X
      • 其中 R 和 t 分别是该帧相机的旋转矩阵和平移向量。
  • 本文所提出的线参数化方法类似于文献 [42] 中提出的方法,但略有不同;
    • 文献 [42] 将 \(\left \| X \right \|\) 编码为 2D 旋转矩阵的元素比例,本文将参数 \(\alpha\) 明确地编码 \(\left \| X \right \|\) 的长度
    • 文献 [42] 使用线段 L 与原点 O 构成的平面的法线 N ,本文使用线段的方向向量 Y
    • 注意,虽然通常点线 SLAM 中使用基于端点的参数化,例如文献 [4] ,不是最小参数表达,将导致更简单的投影方程
  • 在本文的实验中,没有修改 ORB-SLAM2 点特征处理方案,保留点特征描述符,点的三角测量和点的投影函数,以及与点特征处理相关的线程的其他部分;
    • BA 目标包含与 ORB-SLAM2 中相同的项,并使用公式(7)定义的线特征重投影残差进行扩充
    • 通过公式优化 $$(仅优化运行状态)或 \(L\)(仅环境路标) 或者同时优化 $$ 和 \(L\)
    • 利用信息矩阵 \(\sum { }^{-1} = \frac{1}{s^{2}}I\) 对运动估计状态和公式(7)的局部 BA 过程的目标进行扩充;
    • Huber 代价中的常数 $$ 与原始 ORB-SLAM2 中用于匹配立体图像中二维点的常数相同。

4. 实验

4.1 数据集

  • 本文使用 KITTI 和 EuROC 两个数据集进行测试,这两个数据集代表 SLAM 的两种不同的流行应用(自动驾驶和微型飞行器),它们在运动统计方面有很大不同(前者运动更平滑,后者运动更加剧烈),应用场景方面也不同(前者室外,后者室内);
    • 在从 KITTI 的 0 - 6 序列和 EuRoC MAV 的 MH01,MH02,MH04,V101,V103,V201,V202,V203 序列的数据集上训练产生适合两种情况的描述符
    • 剩余的序列(KITTI 的 8 - 10 序列和 EuRoC MAV 的 MH01,MH05,V102 序列)用于评估
  • 文献 [52] 的检测器总是在四层的金字塔上使用,尺度步长为 1.44;
    • 本文经历了几个训练阶段,在每个阶段之后,使用验证序列 KITTI 07 上的相对姿态算法 [53] 检查匹配线段的运动估计的准确性,当内部数值最大时停止训练
    • 使用 ADAM [54] 算法学习网络学习率\(10^{-4}\),使用的采样 mini-batches 为 b = 6 张图像
  • 在选择描述符的变体之后,在几个任务上对其进行评估,首先将它与区分匹配和非匹配线段的基本任务进行比较,然后再次对其进行评估,以获得更实际的帧内运动估计任务
  • 最后将其嵌入到 ORB-SLAM2 系统中来评估 SLAM 任务上的新描述符;
    • 使用手工制作的 LBD 描述符 [5] (ORB-SLAM2 + LBD)和不使用任何线路特征的原始 ORB-SLAM2 系统,来评估使用学习的描述符系统(ORB-SLAM2 + LLD)
    • 所有实验,取超过5次运行的误差中值;
    • 实验平台为:i7-4960X 3.6 GHz CPU 和 GT1080 TI GPU 的计算机;
    • 对于新的点线 SLAM 系统,对 KITTI 数据集使用 \(w = 25\) 像素(短线剔除阈值),\(N_{g}=5\)每个网格保留的线段数量) ,对 EuROC 数据集使用 \(w = 75\) 像素,\(N_{g}=2\)
    • 线测量误差项的权重因子两个数据集都设置 \(\lambda =0.5\)与所用的描述符无关
  • 在这一节中比较了框架的集中变体,以证明提出的方案是合理的;
    • 作为比较测量,使用在训练期间未使用的 KITTI 序列 08-10 和 EuRoC 序列比较 SLAM 轨迹的平均均方根误差(RMSE)

4.2.1 下采样层

  • 将使用 ×8 与 ×4 下采样网络的方案进行比较(有关网络架构的描述,请参阅表 2 );
    • 利用由这些网络生成的描述符获得的轨迹重建误差在表 4 中给出;
    • 表 3 中给出了 KITTI 序列(约 1MPix 图像)的立体对的推断时间,可以看出所选择的网络具有 ×8 个输入图像的下采样轨迹精度方面更好并且更快 30%;
    • 准确性方面的优势可以解释为:×8 在计算描述符时具有更大的接受域(在默认体系结构的情况下)。

4.2.2 可学习的 skip connections

  • 本文默认架构最后有一个 8×8 的上采样层,有人可能想知道通过多个层进行更为传统的逐步向上采样是否会导致更好的匹配精度;
    • 为此,本文用一系列 2×2 上采样层和 3×3 的卷积 + BatchNormalization + ReLu blocks 替换了 8×8 上采样层;
    • 这个层重复三次,产生与默认 LLD-Net 架构相同的输出大小;
    • 同时本文还将所谓的 skip-connections 添加到相同分辨率的下采样层,正如 U-Net 架构 [55] 所推广的那样;
    • 结果(表 4 中的“skip”列)显示精度下降,具有 skip-connections 的新变体也显着增加了运行时间

4.2.3 损失函数

  • 本文提出的训练方法与使用最近提出的局部描述符学习损失函数 [12] 的方法进行比较,其中 m = 0.5;
    • 他们的损失函数会对绝对比例的 small negative 距离产生不利影响,而不是对正负距离的接近程度进行惩罚
    • 结果(表 4 中的“loss_ldl”)表明用于训练默认系统的三重态损失的变体对我们的任务更有效

4.2.4 采样密度

  • 为了突出在解算器计算中池化的作用,我们比较了在线段上采样 T = 5 个点的网络与仅使用线段的单个中间点的基本方案;
    • 如预期的那样,结果(表 4 中的 T = 1 列)显示了准确性的下降,证明了特征描述符的基于线的池化的重要性
    • 注意,与计算描述符的成本相比,池化的计算成本可以忽略不计

4.3 线段检索

  • 在针对多种变体验证了默认的 LLD-Net 架构的优势之后,现在将其与基本系统进行比较。
    • 首先根据手工制作的 LBD(线带描述符)基本系统评估可学习描述符,以区分匹配和非匹配描述符;
    • 对于所有的线段,使用 OpenCV 实现和构建的 64 维 lld 描述符计算 72 维的 lbd 描述符
    • 一旦识别出匹配和非匹配对,通过比较描述符与特定阈值 \(\tau\) 之间的距离来测试描述符区分这些匹配的能力(我们期望在合适的条件下,匹配线段描述符之间的距离应该小于 \(\tau\) ,而不匹配线段描述符之间的距离应该大于 \(\tau\) )。
  • 本文比较了原始序列的描述符,以及在训练期间和在测试数据上计算描述符时将强人工噪声(高斯噪声,\(\sigma = 30\))添加到图像的情况;
    • 后续实验测试可学习描述符适应某些传感器特性的能力
    • 图 5 展示了不同匹配阈值 \(\tau\) 获得的召回精度曲线
    • 观察到本文的描述符在相当大的范围内优于基本方案,并且当添加噪声时也只有略微的下降(事实上,在高召回区域中,当添加噪声时,可学习描述符的性能根本不会降低)。

4.4 对相机运动描述不变性比较

  • 现在从更加人为的任务(线段的检索)转向更实际的帧间运动估计任务,比较了描述符对相机运动的不变性,也就是进行基于线特征的相对相机姿态估计
    • 匹配来自左右的帧,右帧数为 n,左帧数为 n+s ,s = 1,3,5 情况下的所有 n;
    • 再次使用剩下的 KITTI 和 EuRoC 序列,并比较 LLD 和 LBD 描述符,对于相对姿态估计,本文在一个阈值为 10 个像素的 RANSAC 循环中使用了一种算法 [53]
    • 图 3 所示的不同 s 的平均 inliers 数,表明 LLD 对于较小和较大的相机运动具有更大的不变性,因此基于LLD的运动估计始终比基于LBD的运动估计产生更多的 inliers

4.5 SLAM 系统中评估

  • 评估这种新的描述符如何影响 SLAM 系统的性能。
  • 将原始的 ORB-SLAM2 方案、与未学习的 LBD 线段描述符结合的方案(ORB-SLAM2+LBD)和本文所提出的系统(ORB-SLAM2+LLD)进行了比较;
    • KITTI 序列的比较结果显示在表 5 中,本文提出的 ORB-SLAM2 + LLD 系统除了在三个序列的相对旋转外其余都优于仅有点特征的 ORB-SLAM2
    • 虽然相对平移误差几乎没有变化,但与仅有点特征相比,ORB-SLAM2 + LLD 的 RMSE 和相对旋转误差减少了10-20%
    • 这是由于基于线的系统中的旋转估计精度的提高,轨迹的旋转部分被更精确地估计,这导致预测轨迹与地面实况的近乎对齐。
  • EuRoC 序列的优势更大,这更具挑战性,并且 ORB-SLAM 的性能不那么接近完美;
    • EuRoC MAV 的结果显示在表 6 中,其中我们在数据集的三个测试序列上测试了 RMSE
    • 与仅使用点的系统相比,使用可学习的线描述符系统时,平均误差减少了 40% 以上,使用基于手工线描述符的系统时,平均误差减少了 20% 以上
    • 图 4 中的一个 EuRoC 序列上显示了获得的轨迹的差异;

5. 总结

  • 本文研究了深度学习在线段描述符训练中的应用,在此过程中,已经证明在流行的 ORB-SLAM2 系统中添加手工线条描述符可以提高其准确性,一旦集成到 ORB-SLAM2 中,使用本文的深度学习方法获得的线段描述符优于手工制作的描述符
  • 学习描述符优于手工制作的描述符的优势在于计算成本,目前每帧对 1080Ti GPU 上的计算价格约为 17 毫秒,在本文系统中,这种计算成本在很大程度上取决于帧中检测到的线段数量
  • 本文目前的系统使用外部线段探测器,因此,它可以被视为面向基于视觉线段 SLAM 的完全可学习的特征方案的迈出了第一步
    • 描述符和检测器的端到端学习可以通过在当前系统中分别训练的模块之间的相互适应来提高最终的精度
  • 另一个前瞻性的方向是研究如何在点和线描述符之间共享相同的卷积结构,从而提高效率;
  • 另一个可能留给未来工作的方法是研究各种加速计算的方法,进一步使用低位量化的权重和量化,纵向可分离和空间可分离的卷积,这可能可以减少层数(潜在的使用扩大卷积,以保持接受域大)。

【R】 参考文献

【Q】 问题

  • 2.1 节线段描述符 MSLD 和 LBD
  • 2.4 节点-线 SLAM 中的最小线参数与非最小线参数
  • 3.3.2 节中轨迹增长,构造三元组是提到 \(\mathbf{l}_{j}^{-}\) 是之前构造的?
  • 3.4.4 节将检测与现有数据匹配是数据关联吗?选择描述符集合中的中间值 \(d_{med}\)这部分不理解;
  • 3.4.5 节雅克比矩阵更新部分没看懂;
  • 3.4.5 节中关于线的参数化,用端点不是最小参数反而产生更简单的投影方程?本文是最小化参数,是四元数 + 一个常数吗?
  • 公式 7 中的信息矩阵,Huber 代价的常数,ORB-SLAM2 中用于匹配立体图像中二维点的常数;

【T】 思考

  • 1. 3.2 节中公式(1)难例挖掘的思想是否可以作为评分依据?误差函数?
  • 2. 3.3 节中反投影的手性原则,在二次曲面那篇论文中也有这样的问题,可以考虑将其作为一个约束项;
  • 3. 3.4.5 节关于线方向的描述,文献 [42] 和 Cube SLAM 采用的是法向量,本文采用的是线的方向 Y;
  • 4. 4.2.4 节关于采样密度,比较了在线段上采样 T = 5 个点的网络与仅使用线段的单个中间点的基本方案,证明了特征描述符的基于线的池化的重要性;

【N】

2019.03.14
wuyanminmax@gmail.com