eSLAM: FPGA平台上实时ORB-SLAM节能加速器
本片论文发表于:2019年 DAC CCF-A
推荐一个开源的slam加速器doslam:https://github.com/19801201/DOSLAM
摘要
同步定位和映射 (SLAM) 是自主导航的关键任务。然而,由于SLAM算法的计算复杂度,在低功耗平台上很难实现实时实现。我们提出了一种基于实时ORB(面向FAST和旋转BRIEF)的视觉SLAM系统的节能架构,通过加速FPGA平台上特征提取和匹配的最耗时的阶段。此外,原始的 ORB 描述符模式被重新形成为旋转对称方式,这更加硬件友好。进一步利用重调度和并行化等优化来提高吞吐量并减少内存占用。与 TUM 数据集上的 Intel i7 和 ARM Cortex-A9 CPU 相比,我们的 FPGA 实现实现了高达 3 倍和 31× 的帧速率改进,以及高达 71× 和 25 倍的能效改进。
一、介绍
同时定位和映射(SLAM)[3]是自主导航系统构建/更新周围环境的地图并估计其在该地图中自己的位置的关键技术。SLAM是路径规划和导航等高级任务的一个基本问题,广泛应用于自动驾驶汽车、机器人、虚拟现实和增强现实等应用中。
最近,与其他视觉 SLAM 方法相比,基于特征的视觉 SLAM 因其对大运动和光照变化的鲁棒性而受到特别关注,例如光流法或直接法。在基于特征的方法中,ORB(Oriented-FAST 和 Rotated-BRIEF)[8] 因其高效率和鲁棒性而被广泛采用的特征。然而,特征提取和匹配的高计算强度使得在无人机和移动机器人等低功耗嵌入式平台上运行基于ORB的视觉SLAM非常具有挑战性,用于实时应用。
之前已经做出了一些努力来加速低功耗平台上的视觉 SLAM,但到目前为止,还没有在此类平台上提出完全集成的基于 ORB 的视觉 SLAM。在[2]和[4]中,在FPGA上分别加快了视觉SLAM系统的特征匹配和ORB提取。
基于 SIFT 特征的 SLAM 在 FPGA [6] 上实现,其中只涉及矩阵计算,但不涉及最耗时的部分特征提取。基于光流的视觉惯性里程计是在ASIC[11]上实现的,计算量相对较小,但在有变分照明或大运动/位移的情况下可能会失败,因为在这些情况下,光流方法的基本假设是无效的[5]。
eSLAM被提出作为基于ORB的视觉SLAM系统的异构架构。在FPGA上加速特征提取和匹配最耗时的过程,而其余的任务包括姿态估计、位姿优化和地图更新,在主机ARM处理器上执行。本文的主要贡献如下
1、提出了一种新的基于ORB的视觉SLAM加速器,用于节能FPGA平台上的实时应用。
2、利用旋转对称ORB描述符模式使我们的算法更加硬件友好。
3、进一步利用重调度和并行化的优化来提高计算吞吐量
本文的其余部分安排如下。第 2 节介绍了基于 ORB 的视觉 SLAM 框架和引入的旋转对称描述符。第 3 节说明了 eSLAM 的详细架构。第 4 节对所提出的 eSLAM 的实验结果进行了评估。结束语在第 5 节中给出。
2 基于ORB的视觉SLAM系统
2.1 ORB-SLAM框架
基于ORB的视觉SLAM系统采用RGB-D (RGB和深度)图像进行映射和定位。其框架如图1所示,由特征提取、特征匹配、姿态估计、位姿优化和地图更新五个主要程序组成。这项工作、特征提取和特征匹配在FPGA上加速,其余任务在ARM处理器上执行。
特征提取:在这个函数中,从输入的 RGB 图像中提取 ORB 特征。ORB是FAST(加速段测试的特征)关键点和BRIEF(二进制鲁棒独立基本特征)[1]描述符的一种非常有效和健壮的组合。它计算每个特征的方向,并相应地旋转描述符模式,使特征旋转不变。为了获得尺度不变性,从原始图像生成 4 层金字塔。为了高效地在硬件上实现ORB算法,本文提出了一种硬件友好、旋转对称的BRIEF描述符模式,如第2.2节所示。
特征匹配:在特征匹配中,当前帧中检测到的每个特征根据其BRIEF描述符之间的距离与全局地图中的三维地图点进行匹配。BRIEF 描述符是二进制字符串,它们的距离由汉明距离描述。
姿态估计:我们将PnP (Perspective-n-Points)方法应用于匹配的特征对,以估计相机的平移和旋转。RANSAC(随机样本一致性)用于消除不匹配。
位姿优化:在这个函数中,通过最小化观测地图点的重投影误差来优化PnP估计的相机姿态。假设当前帧中特征的像素坐标为 (c1, c2,…, cn ),匹配映射点的位置为 (g1, g2,…, gn ),相机的位姿为 p,h(gi , p) 是指 gi 在投影到当前帧时的像素坐标。重投影误差 E 可以定义为以下公式:
迭代应用Levenberg-Marquardt方法[7]来最小化E,同时调整相机姿势p。
地图更新:地图更新仅在关键帧中执行。关键帧是一组帧,其中相机的平移或旋转大于阈值。当检测到关键帧时,关键帧中的 3D 地图点被添加到全局地图中,并且从全局地图中删除长时间不匹配的地图点,以防止它变得太大。
2.2 旋转对称BRIEF(RS-BRIEF)
为了计算特征的简要描述符,周围邻域中的 2 组位置。LS (S1, S2,…, S256) 和 LD (D1, D2,…, D256) 被引入。在ORB算法中,为了使特征对旋转是不变的,LS和LD根据特征的方向旋转,记为LSR (SR1, SR2,…,…, SR256) 和 LDR (DR1, DR2,…, DR256)。描述符 T (B1, B2,…, B256) 是一个 256 位二进制字符串。如果 I (SRi ) > I (DRi ),则 Bi 为 1,否则为 0,其中 I (SRi ) 和 I (DRi ) 是位置 SRi 和 DRi 上的像素强度。
最初,LS 和 LD 根据高斯分布在邻域中随机选择。旋转后的每个位置都需要使用以下公式计算:
其中(x, y)为初始位置,(x ', y ')为旋转后的位置。由于需要旋转512个位置来计算每个特征的描述符,因此旋转过程是相当计算密集型的。
为了减少旋转过程的计算成本,一种流行的方法是预先计算旋转的BRIEF模式[8],而不是每次直接计算它们。在这种方法中,特征的方向被离散为30个不同的值,即12度、24度、36度等。然后预先计算旋转后的30个BRIEF模式,并将其构建为查找表。查找表用于在必要时获取描述符,以便显着降低计算成本。
上述方法的一个缺点是精度下降。由于特征的方向是离散的,因此与真实值的偏差高达 6 度(12 度的一半)。然而,考虑到测试位置是从半径为15像素的圆形补丁中选择的,测试位置的最大误差在平滑图像上约为1像素。因此,对准确性的影响几乎可以忽略不计。
尽管预计算方法可以在算法级别显着降低计算成本,但直接在硬件平台上实现它们仍然很困难。对于 FPGA 硬件实现,所有 30 个 Brief 模式都需要预先计算并存储为查找表,这将引入大量额外的资源,使其仍然不能满足所需的能源效率。
为了使描述符计算更加硬件友好,我们提出了一种选择测试位置的特殊方法,并提出了一种32倍旋转对称BRIEF模式(RS-BRIEF)。生成 RS-BRIEF 模式的过程如下。首先,
它选择 2 组位置 LS1(S1, S2,…, S8) 和 LD1(D1, D2,…, D8),根据高斯分布在特征周围的邻域中。2 组中的每一个都包含 8 个位置。然后,它以每 11.25 度的增量旋转 LS 1 和 LD1,即 11.25、22.5。…, 348.75 来生成 LS 2, LS 3,。…, LS 32 和 LD2, LD3。…, LD32。两组 L′S (LS 1 ∪ LS 2 ∪。. ∪ LS 32) 和 L′D (LD1 ∪ LD2 ∪。… ∪ LD32) 是最终的测试位置。RS-BRIEF 模式可视化并与图 2 中的原始简要模式进行比较。
综上所述,旋转对称模式(RS-BRIEF)是通过旋转两组种子位置LS 1和LD1生成的。为了计算RS-BRIEF模式的描述符,可以减少旋转测试位置的操作,改变这些位置的顺序或移动生成的描述符。因此,它可能比原始的BRIEF描述符更友好,因为它可以在不引入额外内存占用的情况下显著减少计算。
3、eSLAM架构
所提出的基于 ORB 的视觉 SLAM 加速器 eSLAM 的整体架构如图 3 所示。它在 FPGA 的可编程逻辑上部分加速,并由 ARM 处理器托管。实现了 ORB Extractor 和 Brief Matcher 来加速特征提取和匹配,这解释了一般计算平台上超过 90% 的运行时间。采用图像调整大小模块逐层生成 ORB Extractor 的图像金字塔。当 ORB Extractor 处理一层时,Image Resizing 模块在同一层上应用最近邻下采样来生成下一层,直到处理整个图像金字塔。ARM处理器执行姿态估计、位姿优化以及地图更新。
3.1 ORB提取器
ORB Extractor 旨在从图像中提取 ORB 特征。它通过AXI总线从SDRAM读取数据,并使用本地缓存计算ORB特征。在特征提取完成后,它将结果发送回 SDRAM,并将特征的描述符发送到 Brief Matcher。ORB特征提取的原始工作流程可以总结如下:
(1) 从输入图像中检测关键点。假设检测到Mkeypoints
(2) 过滤关键点。过滤后,只保留具有最佳 Harris 分数的 N 个关键点,其中 N < M。
(3) 计算剩下的N个关键点的描述符。
显然,在硬件平台上实现原始工作流时有两个主要问题。首先,检测和过滤过程可以并行执行,而描述符计算过程必须空闲,直到过滤完成。此外,在计算描述符时,它需要大量的片上缓存来存储中间数据。为了提高计算吞吐量和减少内存消耗,将ORB特征提取的工作流程重新调度为流方式,如下所示:
(1) 从输入图像中检测关键点。假设检测到Mkeypoints
(2) 计算检测到的M个关键点的描述符。
(3) 过滤并保留具有最佳 Harris 分数的 N 个特征。
在重新调度后,描述符计算过程在过滤过程之前执行,以便它们可以同时运行并流水线化流关键点。与原始工作流程相比,计算 M - N 个额外的关键点会引入一些开销,但由于消除的空闲状态,延迟已经显着优化。此外,根据流处理方式,所需的片上缓存也大大降低。
ORB Extractor的详细架构如图 4 所示。它连接到 AXI 接口,包括一个 FAST 检测模块、图像平滑器、NMS(非最大抑制)模块、BRIEF 计算模块、方向计算模块、BRIEF 旋转器、堆和缓存(图像缓存、分数缓存和平滑图像缓存)。这些模块的详细信息如下所示:
AXI接口:AXI接口支持通过AXI总线访问sDRAM。输入图像通过AXI总线从sDRAM读取,存储在图像缓存中,而存储在Heap中的计算结果写回sDRAM。
FAST检测:FAST检测模块将图像缓存中的一个7×7像素补丁作为输入。它在这个像素补丁上检测FAST关键点,并为每个关键点计算Harris角点分数。如果检测到 FAST 关键点,则将相应的 Harris 分数写入 Score Cache。
图像平滑器:该模块对原始图像的7 × 7像素patch应用高斯模糊操作进行平滑处理。然后使用平滑后的图像计算特征的描述符和方向。
NMS:NMS模块对FAST检测模块的结果应用非最大抑制。它删除了彼此太近的FAST关键点,并且只保留了任何3×3像素补丁中具有最大Harris分数的关键点。
方向计算:该模块确定每个特征的方向。方向定义为从特征中心到圆形斑块质心的向量。质心的位置 (u, v) 定义为:
其中 C 表示圆形补丁,I (x, y) 表示位于 (x, y) 处的像素的强度。方向计算模块构建一个查找表来确定 v/u 的方向以及 u 和 v 的符号。由于测试位置的模式是 32 折交叉验证的,因此特征方向被离散化并用积分标签表示,范围从 0 到 31,其中 0 表示 0 度,1 表示 11.25 度,2 表示 22.5 度等。
简要计算:BRIEF 计算模块采用平滑像素的圆形补丁来计算特征的描述符。它用于生成描述符的测试位置遵循我们提出的旋转对称模式。
BRIEF Rotator:BRIEF Rotator 根据特征方向移动描述符,这提供了与旋转 RS-BRIEF 的测试位置相同的结果。假设特征方向为 n,BRIEF Rotator 从描述符的开头移动到结尾移动 8 × n 位。
Heap:创建 Heap 来存储和过滤特征的描述符、坐标和 Harris 分数。为了过滤掉一些多余的特征,利用最大堆结构来保证仅保留具有最佳 Harris 分数的 1024 个特征。一旦特征提取完成并存储在堆中,描述符和坐标通过AXI接口发送到SDRAM,描述符也传递给BRIEF Matcher。
缓存:ORB Extractor中有 3 个缓存,包括存储输入图像的像素的图像缓存、存储关键点的 Harris 分数的 Score Cache 和存储平滑图像的平滑图像缓存。这些缓存是设计的
通过“乒乓机制”的方式,可以同时处理流数据。图像缓存被用作解释数据 I/O 机制的示例。图像缓存由3条缓存行组成,每条缓存行存储8列图像像素。如图 5 所示,3 个缓存行轮流接收输入数据。缓存行的数据 I/O 由有限状态机 (FSM) 控制。FSM 是通过在缓存线 A 和 B 中预存储 16 列像素来初始化的。对于每个 FSM 状态,一个缓存行接收输入数据,另外两个缓存行发送数据作为输出。
3.2 BRIEF匹配器
在 BREIF Matcher 模块中,从当前帧中提取的特征与全局地图的地图点进行比较。特征描述符是从 ORB Extractor 获得的,全局地图的描述符是通过 AXI 总线从 SDRAM 获得的。最后将匹配结果发送回 SDRAM。
Brief Matcher的体系结构如图6所示。它连接到AXI接口,包括一个描述符缓存、一个距离计算模块、一个比较器和一个结果缓存。匹配过程从 ORB 提取开始。假设 2 组描述符 DA(DS1, DS2,…, DSn ) 和 DB (DD1, DD2,…, DDM ) 已预先存储在 Descriptor Cache 中,其中 DA 是从当前帧获得的描述符,DB 是全局地图中地图点的描述符。对于每个描述符 DSiin DA,距离计算模块计算 DSi 和 DB 中的每个描述符 Ddj 之间的汉明距离。使用计算的汉明距离 H D(Hi1, Hi2,…, Him ),比较器通过 HD 搜索并找到最小值来确定匹配结果并将它们存储到结果缓存中。
3.3 并行化机制
由于eSLAM是一个异构系统,ARM处理器作为主机控制器,FPGA作为加速模块,并行化机制对于提高计算吞吐量至关重要。利用的并行流程如图7所示。对于正常帧处理,虽然ARM处理器执行位姿估计和位姿优化,但触发ORB Extractor和BRIEF Matcher对下一帧进行特征提取和特征匹配。然而,处理关键帧不同,因为在位姿估计和位姿优化后,在ARM处理器上执行地图更新。ORB Extractor 与 ARM 处理器并行在 FPGA 上执行特征提取,但 Brief Matcher 不会开始工作,直到映射更新完成。
通过上面的并行化机制,可以在管道中有效地执行几个阶段。对于正常帧,特征提取和匹配运行与姿态估计和优化并行。对于关键帧,特征提取与姿态估计和优化并行运行。这些并行处理方式可以显着改善整个计算。
4 实验结果
4.1 实验装置
硬件实现:提出的eSLAM系统在Xilinx Zynq XCZ7045 SoC[12]上实现,该SoC集成了ARM Cortex-A9处理器和FPGA资源。ARM处理器的时钟频率为767 MHz,加速模块的时钟为100 MHz。该系统的资源利用率如表1所示。由于XCZ7045上只使用了大约1/4个资源,因此可以将它们的原型到资源较少、价格较低的soc上,如XCZ7030/XCZ7020。
数据集:所提出的 eSLAM 在 TUM 数据集 [10] 上进行评估。它包含 RGB 图像和深度信息,广泛应用于视觉 SLAM 社区。图像分辨率为640 ×480。数据集中的五个不同序列,fr1/xyz, fr1/desk,fr1/room, fr2/xyz和fr2/rpy用于评估。每个序列都包含一个由高精度动作捕捉系统获得的地面实况轨迹。
4.2 精度分析
视觉SLAM系统的精度是通过轨迹误差来衡量的,这意味着地面真实轨迹和估计轨迹之间的差异。如图 8 所示,在 TUM 数据集的五个序列上,平均轨迹误差与原始基于 ORB 的 SLAM 实现进行比较。
对于 fr1/xyz、fr1/room 和 fr2/xyz 序列,原始 ORB 的实现比 RS-BRIEF 描述符具有更好的准确性。然而,在 fr1/desk 和 fr2/rpy 序列上进行评估时,使用 RS-BRIEF 描述符的实现可能比原始 ORB 具有更好的准确性。在五个序列中,基于 RS-BRIEF 的实现的总平均误差约为 4.3 cm,原始的基于 ORB 的实现约为 4.16cm,这表明 RS-BRIEF 描述符的准确性与原始描述符相当。
同时,将基于RS-BRIEF的实现和原始ORB的实现估计的轨迹也与fr 1/desk序列的地面真实轨迹进行比较,如图9所示。为了清晰地显示轨迹,只选择其中一块,如图9所示。
4.3 绩效评估
将所提出的eSLAM系统的性能与XCZ7045 SoC和Intel i7-4700mq处理器[9]集成ARM Cortex-A9处理器上的软件实现进行了比较。运行时比较如表2所示。ORB Extractor 和 Brief Matcher,eSLAM 中特征提取和匹配过程的延迟分别减少到 9.1 ms 和 4 ms。与 Intel CPU 和 ARM 相比,eSLAM 在特征提取方面可以实现 3.6 倍和 32 倍的加速,特征匹配速度提高了 4.9 倍和 61.6 倍。
表 3 比较了每帧的平均运行时间、帧速率、每帧消耗的能量、eSLAM 与 ARM 处理器和 Intel CPU 的功耗。对于正常帧,eSLAM 与姿态估计 (PE) 和优化 (PO) 同时执行特征提取 (FE) 和匹配 (FM)。平均运行时间是 PE 和 PO 的处理时间之和,17.9 毫秒。对于关键帧,FE 与 PE 同时执行。eSLAM的平均运行时间为31.8 ms,即FM、PE、PO和MU处理时间之和。与ARM处理器相比,eSLAM在处理关键帧时实现了约17.88倍的加速,正常帧的加速比为31倍。与 Intel i7 处理器相比,它可以实现 1.7 倍到 3 倍的加速。
在能耗方面,与 ARM 和 Intel CPU 相比,所提出的 eSLAM 也显示出很大的优势。尽管由于额外的 FPGA 加速模块,eSLAM 的功耗比 ARM 处理器增加了约 23%,但每帧消耗的能量仍然根据关键帧速率降低 14 倍到 25 倍。与 Intel i7 处理器相比,能耗降低了 41× 到 71×。
4.4 讨论
如表3所示,eSLAM的关键帧率为31.45 f ps,正常帧率为55.87 f ps,远小于Navion[11]实现的171f ps。这一差距主要是由于采用了不同的算法。Navion采用光流法,只检测关键点,但不需要描述符计算和特征匹配。然而,在光流方法可能会失败的许多场景中,eSLAM中采用的基于特征的方法更加健壮。因为光流方法只能有两个基本假设:存在恒定的照明和小的运动/位移[5]。
与[4]中FPGA上实现的ORB提取器相比,eSLAM中的ORB提取器部署了硬件友好的优化,如RS-BRIEF和工作流重调度。因此,eSLAM 中特征提取的延迟比 [4] 的延迟低约 39%,即使 eSLAM 中处理了 48% 的像素,因为图像金字塔中涉及额外的两层。
5、结论
本文提出了一种基于异构ORB的视觉SLAM系统eSLAM,用于节能和实时应用,并在Zynq平台上进行了评估。ORB算法首先被重新表述为旋转对称模式,用于硬件友好的实现。同时,FPGA上加速了最耗时的阶段,即特征提取和匹配,以显著降低延迟。eSLAM 还被设计为流水线方式,以进一步提高吞吐量并减少内存占用。TUM 数据集的评估结果表明,与 Intel i7 CPU 相比,eSLAM 在帧速率上实现了 1.7 倍到 3 倍的加速,能效提高了 41× 到 71×。与 ARM 处理器相比,eSLAM 可以在帧速率上实现 17.8 倍到 31× 的加速,能效提高 14 倍到 25 倍。
6、提问
1、这个ORB SLAM算法部分对比原版的ORB SLAM应该做了很多简化,才能达到这样的时间和效果。如何更改算法可以让精度保持一个比较好的效果?
2、测试的数据集,是TUM,这个误差在这个数据集上的效果如何怎么查看?
数据集介绍
TUM是慕尼黑大学的数据集,主要包含多视图数据集、3D物体的识别分割、场景识别、3D模型匹配、vSALM等各个方向的数据。
这是纯算法ORB SLAM 论文中所给出的参数
类型 | orb slam | eslam | orb slam2 |
---|---|---|---|
fr1/xyz | 0.90 | 1.9 | 无 |
fr2/xyz | 0.3 | 3.4 | 0.4 |
fr2/desk | 1.69 | 4.1 | 0.9 |
论文中没有给出具体数据只是大概估算,elsam相比ORB SLAM,让整个算法简单了很多。精度也有所下降。如果使用原版ORB SLAM加速不可能得到这么好的加速效果,因为在原版得ORB SLAM中特征提取加特征匹配的时间占比可能很少。但是如果进行部署的话这样很难,尤其是使用FPGA进行加速所以必须要对算法进行修改,减少一部分无关紧要的算法,牺牲一些精度。