用于嵌入式视觉SLAM的UHD视频流的高效实时fpga的ORB特征提取
推荐一个开源的slam加速器doslam:https://github.com/19801201/DOSLAM
发表在 Electronics 2022 https://doi.org/10.3390/electronics11142259
Electronics 介绍
不清楚为什么要发布在这个期刊上。
摘要
特征点的检测和描述是许多计算机视觉系统的重要组成部分。例如,在自动驾驶无人机(UAV)领域,这些方法构成了所谓的视觉里程计(VO)和同步定位和映射(SLAM)算法的基础。在本文中,我们提出了一个硬件特征点检测系统,能够实时处理4K视频流。我们使用 ORB 算法——面向 FAST(加速段测试的特征)和旋转简要(二进制鲁棒独立基本特征)来检测和描述图像中的特征点。我们对原始 ORB 算法(以及其他算法)进行了大量修改,我们使用 RS-BRIEF 而不是经典的 R-BRIEF)使其适应高视频分辨率,使其计算效率高,降低资源利用率并实现更低的功耗。我们的硬件实现支持 4 ppc(每个时钟的像素)格式(对 2 ppc、8 ppc 等的简单适应)和 4K 视频流 (UHD-Ultra High Definition, 3840 × 2160 像素)@每秒 60 帧(150 MHz 时钟)。我们使用 Vivado IDE 中的模拟来验证我们的系统,并使用 AMD Xilinx Zynq UltraScale+ MPSoC 设备在 ZCU 104 评估板上实现它。提议的设计仅消耗 5 watts。
1 介绍
近年来,无人机(uav)(为了这项工作的目的,我们将这个术语限制在四旋翼车辆上,如四轴飞行器和六直升机)已经变得非常流行。它们目前用于各种任务,例如电影、运输小品、探索未知空间或各种类型的检查。如今,无人机发展的主要趋势之一是自主的,被理解为在没有(或只有最小的)操作员参与的情况下执行任务的能力。这需要车辆配备几个负责环境感知、导航和控制的系统。此外,在某些任务中,所有计算都需要使用车载计算机执行,例如,探索与基站的高吞吐量连接可能不可用的难以到达的区域。无人机的典型车载计算机的特点是计算能力相对有限(由于重量和可用能量),这对感知和导航系统的开发人员提出了重大挑战。
前面提到的问题之一涉及在没有GNSS(全球导航卫星系统)信号的无人机探索未知空间。在这个任务中,可以使用SLAM(同步定位和映射)算法。它基于车载传感器(如相机、惯性测量单元-IMU)获取的数据,确定无人机的当前位置,并生成未知环境的地图。当GNSS信号不可用或中断时,车辆必须根据它所配备的传感器执行特定任务。其中,相机值得特别注意。特别是,基于视觉的算法可用于检测无人机的位移和旋转,可用于其定位。然而,为此,有必要确定相机捕获的两幅图像之间的几何关系。获得它们最常见的方法是使用特征点的检测和描述。该任务有许多完善的算法。值得一提的是:SIFT (Scale-Invariant Feature Transform)[1]、SURF (Speed-Up Robust Features)[2]和ORB(Oriented FAST和旋转BRIEF)[3]。然后通过比较它们的描述符来匹配检测到的点,从而获得两幅图像中对应的位置(例如,两帧中可见的物体的角)。这允许确定所需的几何关系。得到的结果的准确性取决于两个输入图像中可见的细节(颜色、边缘、形状)的质量
如今,无人机配备了高端4K摄像头。由于分辨率非常高,获得的视频流的特点是大量高质量的细节。这允许更准确地确定几何关系。同时,4K 图像的处理需要更多的计算资源,特别是对于实时实现(每秒超过 30 帧)。在通常用于无人机的嵌入式平台的情况下,这带来了特别的挑战。Chip (SoC) 上的异构系统,集成了不同类型的计算单元,例如 CPU 和 FPGA (FieldProgrammable Gate Arrays),是实现高分辨率视频流处理的示例解决方案,功耗相对较低。
在本文中,我们介绍了为无人机视觉SLAM算法实时实现而开发的ORB算法的硬件实现。我们已经准备了一个完全流水线的系统,使用异构SoC FPGA设备以并行方式运行。我们工作的主要贡献包括实现 FAST 检测器和用于 4K 分辨率视频流 (UHD-Ultra High Definition, 3840 × 2160 像素) @ 60 帧每秒 150 MHz 时钟。由于4K视频流的特点和所使用的硬件平台,我们应用了矢量数据格式(每个时钟周期4ppc-4像素),这对ORB算法施加了不同的硬件架构。我们还提出了 Fast Score 方法的第一个 FPGA 实现。据我们所知,这是此类高分辨率视频流的 ORB 算法的第一个实时实现。
本文的其余部分安排如下。第 2 节介绍了有关 ORB (FAST+BRIEF) 算法的基本信息。然后,第 3 节讨论了 FPGA 中考虑的算法硬件实现中最重要的相关工作。所提出的系统在第 4 节中描述,而获得的结果在第 5 节中总结。文章以结论结束,并对未来的研究进行了讨论。
2 Oriented FAST and Rotated BRIEF
在本节中,我们将简要概述用于特征点检测和描述的 ORB 算法。该解决方案在 2011 年在文章 [3] 中被提出,作为 SIFT 和 SURF 算法之间的一种折衷。它在特征检测任务上执行和SIFT,同时速度快近两个数量级,优于SURF,因为它具有更高的检测质量和计算效率。ORB算法由面向FAST(加速段测试的特征)的角点检测器和BRIEF(二进制鲁棒独立基本特征)旋转特征描述符组成。
在CPU上处理图像时,ORB算法通常由以下步骤组成
1.执行快速加速段测试以确定角(FAST)
2.使用非最大抑制(NMS)进行渗透。
3.消除不可能确定完整上下文31 × 31像素(px)的特征点。
4.特征点的过滤,只保留最好的N个点。
5.Harris分数的计算和特征点的重新过滤。
6.特征点的方向计算(强度质心)。
7.用高斯滤波器确定上下文31 × 31px和模糊。
8.二进制特征描述符(rBRIEF)的确定。
2.1 Oriented FAST Feature Detector
FAST算法是一个角检测器,最初在论文[4]中提出,并在论文[5]中进一步发展。它最重要的优势是计算效率很高(与其他算法相比,即 SIFT 或 SURF),同时保持合理的准确性。出于这个原因,它成功地用于嵌入式平台上的实时图像处理应用。通过将给定图像点的亮度与位于半径为3的周围Bresenham圆中的16个像素进行比较,在7 × 7px的背景下进行特征点检测,如图1所示。如果圆中连续n个像素的亮度同时低于Ip−t或同时高于Ip + t,则认为强度为Ip的中心点为角点,其中t定义了一个强度阈值。[4, 5] 的作者在他们的研究中表明,通过设置 n = 9 可以获得最佳质量结果。它可以被认为是一个一般陈述(无论图像分辨率如何),因为这主要取决于所使用的 Bresenham 圆的固定半径。
此外,该算法假设角点分数的计算来确定检测到的特征点的稳定性。为此,根据特定的实现,使用了几个指标之一,例如 Harris 角点分数、候选点和 Bresenham 圆 [4] 上的像素之间的绝对差异之和或修改称为快速分数的绝对差异之和。
Harris 角点分数由等式 (1) 确定。对于每个角,H(x, y) 的值是根据自相关矩阵 M(x, y) 的行列式和跟踪来计算的。
其中det为矩阵行列式,trace为矩阵迹,k为常数值,k∈[0.04;0.06], (x, y)为图像坐标,h(x, y)为高斯函数,M(x, y)为自相关矩阵,Ix (x, y), Iy(x, y)为空间导数。
绝对差异的总和使用等式 (2) 计算。对于每个 pointx ∈ {1, ., 16} 在圆圈两组上:确定 Sbright 和 Sdark。第一组包含大于或等于 Ip + t 的像素,第二个像素小于或等于 Ip - t。然后,确定每组像素的强度与中心像素强度之间的绝对差异之和,按阈值 t 减小。度量的最终值是得到的两个和的最大值.
OpenCV 库 [6] 中使用了上述对绝对差异总和的修改。在文档中,这种修改称为 Fast 分数。对于Bresenham圆的每组9个连续像素,计算这9个像素和中心点之间的强度绝对差异。然后,确定 9 个获得值的最小值。这些操作对剩余的连续弧集重复,得到 16 个最小值。根据等式(4),特征点的角点分数是 16 个最小值的最大值。
其中:dk是一个连续弧像素集的差值值,Ip为像素值,dk min为相邻弧像素集的最小值,score为角点评分,Fast Score。
ORB算法的下一步是使用上下文 3 × 3 px 进行非最大抑制。它允许消除角点分数较低的候选点,只保留最好的 N 个特征点。
然而,得到的角对图像的旋转角度及其尺度不是不变的。为了解决第一个问题,使用了强度质心[7]作为方向度量。首先,计算给定特征点周围图像补丁的矩。这是由等式 (5) 定义的。矩mpq被确定为给定特征点半径为r的圆内图像像素强度的加权和
其中 x, y 是半径 r 相对于检测到的特征点的圆内的局部坐标,I(x, y) 是给定位置 (x, y) 中像素的亮度。然后,特征点的方向由等式(6)确定:
第二个问题是通过众所周知的多尺度方法来解决的。FAST检测器应用于图像金字塔的每一层,以提高尺度不变性。图像金字塔是通过使用适当的低通滤波器(通常是高斯)平滑图像然后对图像进行二次采样来构建的,通常是通过沿每个坐标方向缩放 2 倍。然后将得到的图像进行相同的过程,重复多次。在金字塔的每一层,执行与上述完全相同的特征点检测操作。非最大抑制可用于消除不同尺度下同一角的多个检测。过滤器掩码的大小取决于缩放因子和尺度的数量。
2.2. Rotated BRIEF Descriptor
Brief描述符首先在论文[8]中提出。基于给定点周围31 × 31像素的图像补丁,该算法返回一个256位的二进制特征向量(描述符)。它是使用一组二进制强度测试 τ 计算的——等式(7)。
其中p是给定特征点(ui, vi)周围的平滑图像补丁,ui, vi是样本对p (ui 6 = vi)的坐标,I(w)是给定位置w = (x, y)中像素的亮度。
特征点的描述符构造为n元位串——式(8)。补丁p必须用高斯滤波器模糊,以减少噪声的影响。
在原始BRIEF描述符中,根据高斯分布在角落的邻域中随机选择256对用于二值强度测试的点。然而,这个描述符不能抵抗大的平面内旋转。为了解决这个问题,论文[8]的作者建议为每个图像补丁计算一组旋转的BRIEF描述符,但这种方法在计算上非常昂贵。因此,在论文 [3] 中,已经提出了对 Brief 描述符的一些修改,以使其更高效和抵抗旋转。作者测试了两种解决方案。在第一种方法中,称为转向BRIEF,根据公式(9),他们沿着预定的方向集旋转一组n对二进制测试的坐标。为此,他们使用角度等于 2π/ 30 (12◦) 的增量。因此,他们构建了预先计算的 Brief 模式的查找表。然而,实验表明,这种方法是无效的,因为它增加了二进制测试集中的相关性。
其中:S是位置(xi,yi)中的n个二进制测试的集合,Sθ是S的引导版本,旋转的n个二进制测试集合,Rθ是对应于特征点方向的旋转矩阵。
为了减少二进制测试集中的相关性,即获得更好的质量描述符,提出了不同的解决方案。作者开发了一种使用机器学习的特殊算法来选择一组尽可能不相关的测试,以获得描述符的高度多样性和良好的性能。该算法是对一组均值接近0.5的不相关测试的贪婪搜索。因此,选择了256对点,然后根据特征点的方向(基于公式(10))旋转,使其对旋转是不变的。这种修改称为旋转感知BRIEF (rBRIEF)。
其中:(x, y)为初始位置,(x ', y ')为旋转后的位置,θ为特征的方向。
旋转感知BRIEF,也称为旋转BRIEF,是ORB算法的一个组成部分。在其众多优点中,值得一提的是,由于其二元结构,匹配特征点具有良好的性能、鲁棒性和计算效率。
相关工作
文献中提出了许多特征点检测和描述算法。然而,在使用Visual SLAM的未知空间探索任务中,ORB算法[9-11]是最常用的。由于并行计算的可能性,这种特征点检测方法具有高加速度的能力。这一观察结果在许多使用异构计算平台(包括 FPGA)描述其硬件实现的出版物中得到了证明。
现有的硬件架构可以分为非流和流处理。非流处理方法,如[9,12],假设存储图像帧的缓冲区的可用性。这使得BRIEF描述符只能计算以检测到的FAST角为中心的补丁。另一方面,[13,14]等流处理架构不需要外部存储器来存储输入视频帧,可以实现更高的吞吐量。然而,在这种方法中,传入的像素是实时处理的,而不存储在帧缓冲区中,需要许多管道和并行处理元素来保持传入像素流的速率。在无人机嵌入式平台上使用算法需要非常高的吞吐量、速度和准确性。还必须考虑低能耗,这涉及到内存和附加缓冲区的边际使用。出于这个原因,根据流处理范式实现 ORB 算法是一个更好的选择。
文章[15 - 17]的作者专注于ORB算法在其基本版本中的硬件实现,仅向确定角点分数值的机制引入更改,并添加负责过滤获得的特征点的模块。图像金字塔也被用来使检测器对图像之间的尺度差异具有鲁棒性。在论文[16,17]中,系统分别以63fps和42fps的速度处理全高清图像(1920×1080像素)。在文章[9,18]中,提出了一种更硬件友好的实现方法。特别是,修改了 Brief 描述符。使用了旋转对称的ORB描述符模式,大大降低了计算复杂度和内存使用。在这个解决方案中,没有必要根据每个图像补丁的特征点方向旋转二进制测试集,也不存储所有离散特征点方向的BRIEF模式,即30组,每组包含256对点。此外,堆排序用于减少检测到的特征点的数量,只留下最稳健的特征点。测试是在分辨率为640 × 480 px的图像上进行的,分辨率为TUM数据集[19]。同样值得注意的是[20]的工作,其中作者提出了FPGA上硬件实现的概念。他们使用来自 OpenCV 库的函数进行了实验,其中他们指出需要进行修改以加快计算速度。
为了计算特征点的简要描述符,通常使用两种方法。第一个假设存储 256 对点并根据等式 (10) 执行旋转。然而,这需要为每个特征点计算 512 个新的坐标值。一种流行的方法是预先计算旋转的BRIEF模式[3],而不是每次直接计算它们。在这种方法中,特征的方向被离散为 30 个不同的值。然后,预先计算旋转后的 30 个简要模式并保存为查找表。这降低了计算成本,但增加了内存利用率,而引入的方向离散化降低了准确性。然而,这两种描述的方法都难以在 FPGA 中实现,并且需要大量的逻辑资源,这也可能会影响能源效率。工作[9]的作者提出使用32倍旋转对称BRIEF模式(RS-BRIEF),这是一种更硬件友好的。他们假设根据高斯分布选择特征周围邻域中的 2 组位置。
这 2 组中的每一个都包含 8 个位置,这些位置每 11.25 度按离散角度值旋转。最终的测试位置包含 256 对坐标,用于确定二进制特征描述符。在迄今为止讨论的作品中,硬件实现适用于处理最大分辨率为 Full HD (1920 × 1080 px) 的数据。这些实现的最重要参数在第5节中收集。在本文中,我们描述了在ZCU 104 SoC FPGA平台上实现的4K UHD分辨率(3840 × 2160 px)的ORB算法的硬件实现,该平台具有AMD Xilinx的Zynq UltraScale+ MPSoC芯片。在我们的 ORB 实现中,我们使用 FAST 检测器和 RS-BRIEF 描述符的修改版本,而无需在后续步骤中过滤点。据我们所知,这是此类高分辨率视频流的 ORB 算法的第一个实时实现。
4.提出的ORB (FAST+BRIEF)实现
在SoC FPGA上处理4K UHD视频流是一项重大挑战。4K 信号包含比 Full HD (1920 × 1080 px) 多 4 × 的数据。假设频率相同(通常为60fps),则需要将所谓的像素时钟从大约150 MHz增加到600 MHz。在目前可用的可重编程设备中使用这样的时钟值是不可能的(除了非常基本的逻辑元素)。因此,有必要以矢量格式处理视频数据——每个时钟22、4或8像素(ppc)。这允许将像素时钟分别减少到300、150或75 MHz[21]。在 ORB (FAST+BRIEF) 算法中实现单个操作时,向量数据格式意味着不同的方法。因此,本文中描述的系统的性能不仅是使用现代SoC FPGA平台的结果,而且是特定计算模块的适当新颖设计。我们的硬件实现的一般方案如图2所示。该体系结构以完全流水线的方式处理视频流,使用AXI4-Stream作为数据总线。该模块的输入是 4 ppc 格式灰度图像流。请注意,在以下小节中,我们以 4 ppc 格式呈现我们的解决方案,但相同的方法可以应用于 2 ppc 或 8 ppc。
如第 2 节所述,ORB 算法包含一个定向 FAST 检测器和一个旋转的 Brief 描述符。我们提出的ORB算法实现包括下面列出的几个组件,形成一个模块化架构。每个模块都可以独立操作,例如黑盒。
在我们面向 FAST 的实现中,我们区分了几个阶段:
1.执行快速加速段测试以确定角 (FAST)。
2.使用非最大抑制(NMS)进行渗透。
3.消除不可能确定上下文 31 × 31 px(边界清理)的特征点。
同样,在我们对旋转BRIEF的实现中,有几个步骤:
1.用高斯滤波器确定上下文31 × 31px和模糊。
2.特征点方向计算(IC角)
3.二进制特征描述符(rBRIEF)的确定。
与最初提出的 ORB 算法相比,我们决定不实现负责确定 Harris 分数和选择最佳 N 个点的模块。这是由一个完全流水线的方法驱动的,需要将算法适应硬件实现。这些修改不会以任何方式影响 ORB 算法的性能,因为计算平台和处理结构需要处理图像帧中所有像素。点的过滤旨在仅在进一步步骤中减少计算的数量。如果需要,可以添加一个模块,该模块通过角点分数全局排序特征点。我们还修改了 Brief 描述符,我们将在第 4.3 节中详细描述。
在我们的硬件实现中,我们使用定点操作。表1收集了连续模块中数据表示的宽度和高度。在每种情况下,我们使用软件模型来选择数字的表示作为资源利用和计算精度之间的权衡。
ORB算法反复使用在给定图像点附近利用像素值的操作。因此,需要从 4K 视频流创建的适当大小的上下文。由于数据流的向量格式(4 ppc),上下文生成的典型方法是不合适的,导致资源消耗增加。在图 3 中,我们展示了大小为 3 × 3 px 的上下文生成示意图(为清楚起见,我们提出了一个小尺寸的上下文,但它可以推广到更大的上下文)。完全流水线模块包含寄存器来存储像素值(9 × 4像素)和使用块RAM (BRAM)的延迟线。
4.2 FAST特征检测
使用 FAST 方法确定特征点需要同时从 7 × 7 px 的上下文中访问像素。为了创建它,我们使用4.1节中描述的模块。在图4中,我们展示了FAST检测器硬件实现的方案。
图4。FAST探测器硬件实现方案。首先,我们生成 7 × 7 像素上下文(4 由于 4 ppc 格式)。然后,对于它们中的每一个,我们测试其中心是否是特征点(特征点标志)并确定其稳定性(分数值)。特征点标志是一个信号,表示已经找到了特征点。值得注意的是,计算的高度并行化(例如,中心点和圆点之间的 16 个比较和与特征点标志同时计算的分数值),此外对所有生成的上下文同时执行。
首先,对每个像素进行角点检查。我们对候选点Ip的亮度进行16次同时比较,像素位于半径为3的Bresenham圆上。如果圆中n个连续像素的亮度同时低于Ip−t,则认为候选点为有效特征点,同时高于Ip+t,其中t为强度阈值。根据论文[3],我们假设 n 为 9,强度阈值为 20。然而,这些参数是完全可配置的。将得到的向量与所有可能的组合进行比较,这些组合表示 16 位向量(也被包裹)中的 9 位不间断序列,例如 001111000001111000000011111。为了得到最终结果,我们进行了逻辑OR操作,它结合了比较获得的结果并返回信息,无论是在任何考虑的案例中,至少出现了一个正确的位模式。发现这意味着给定的像素是可能的特征点。图5显示了确定示例图像补丁特征点标志的方法。
图5。确定示例图像补丁的特征点标志。在这种情况下,Bresenham 圆上的 16 个像素都没有强度高于 Ip + t (t = 20 的 229),而其中 14 个的强度低于 Ip - t (189)。这导致两个 16 位向量,它们与 16 个不同的模式进行比较,每个模式由 16 位组成:9 位和 7 个零。表示强度高于 Ip + t 的像素的向量不匹配任何模式,而第二个向量总共匹配 6 个不同的模式。因此,我们确定中心像素是一个特征点(它满足 FAST 的“低于”条件)。
值得注意的是,在 CPU 的典型实现中,找到特征点的过程以不同的方式执行。首先,研究了顶部和底部像素(Bresenham圆上x坐标与中心像素相同的唯一两个)——其中至少有一个必须满足FAST条件之一。接下来,对外部左右像素执行类似的操作(在Y坐标与中心像素相同的Bresenham圆上只有两个)——其中至少一个必须满足与顶部或底部像素相同的条件。只有在上述两个步骤中进行正验证后,才会检查Bresenham圆上剩余的像素。这种方法有助于使用相对较少的计算(简单比较)拒绝许多候选点,从而显着增加数据处理频率。然而,在完全流水线硬件实现中,这种方法不能以相同的方式工作。我们不能简单地拒绝候选,因为每个像素必须与其他像素同步,以确保不间断的数据流。因此,我们决定一次比较所有像素。由于 FPGA 的能力(并行计算),我们仅在 3 个时钟周期后获得特征点标志,这与 CPU 对拒绝候选者的实现相当,并且明显低于 CPU 对接受候选者的实现。
下一步是确定所选特征点的稳定性。由于 Harris 角点分数的计算复杂度很高,我们决定实现 OpenCV 库中使用的函数——根据公式 (4) 的快速分数。在计算过程中,我们考虑 Bresenham 圆的所有 9 像素弧。在它们中的每一个中,我们确定最小的绝对差异。然后,我们从所有考虑的弧中选择最大值。所有所描述的操作都是并行执行的,以便同时获得 16 个最小值。为了确定最小值和最大值,我们使用二进制比较树。图 6 显示了计算示例图像块的快速分数的方法(与图 5 中的相同)。据我们所知,这是在 FPGA 上该模块的第一个实现。
基于获得的值,我们使用上下文 3 × 3 px 的非最大抑制对确定的特征点进行过滤,从而消除角点分数较低的点。上下文是从角点分数创建的。如果中心值是整个上下文的最大值,我们将非零值(输入快速分数)传递给输出,否则为零以表明给定点被拒绝。然后,我们还丢弃与处理后的图像边缘过于接近的特征向量,因为我们无法创建计算描述符所需的完整上下文 31 × 31 px。为此,我们使用坐标计数器和适当的逻辑条件,从数据流中删除这些特征点
最后一步是根据强度质心确定特征点的方向。在原始ORB算法中,在高斯模糊和二进制描述符计算之前,为此目的所需的图像矩的计算。在我们的实现的情况下,我们决定在计算图像矩之前执行高斯模糊,并将这些操作移动到与BRIEF描述符直接相关的部分。我们的决定的动机是需要减少 FPGA 设备中使用的硬件资源。我们保存了大约 1000 个寄存器,它存储了 31 × 31 px 和 30 个块 RAM 模块的上下文,这些模块存储 30 个图像行(每个都包含 2139 个像素)。此外,我们消除了计算特征点的方向并确定其描述之间的延迟。对于图像矩和描述符计算,使用了相同大小的上下文 31 × 31 px。同时,在确定方向之前对图像进行高斯滤波不会显著影响结果角度的值。论文[9]使用了类似的方法。鉴于此,在已经模糊图像上一次生成上下文是合理的,然后使用它来计算图像矩并确定描述符。
4.3. 简要描述符
如第 4.2 节所述,我们的 Brief 描述符硬件实现的第一步是计算给定点周围图像块的矩。在图 7 中,我们展示了为此目的设计的硬件架构的示意图。我们首先执行窗口大小为 5 × 5 px 的高斯模糊(因为它在 OpenCV 中实现),同时用于视频流中的 4 个像素。然后,我们生成大小为 31 × 31 px 的上下文。为了确定图像矩,我们只使用半径为15像素的Bresenham圆内的像素。在图 8 中,我们展示了 4 个连续的上下文 31 × 31 px 和提到的圆圈。注意,当实时处理4个ppc数据流时,
有必要同时在 4 个上下文上执行计算。如图 8 所示,大多数像素对于四个上下文都是常见的。鉴于此,我们决定将计算分别拆分为公共部分和属于每个上下文的剩余部分。每列和行中的总和使用求和树并行计算。然后我们将得到的和(公共和残差)相加,得到每列和行中像素值的总总和。然后,根据公式(5),它们乘以局部参考系统(其原点在所考虑的点——圆的中心)的相应 x 和 y 坐标。最后,我们使用求和树对所有值求和,并为每个上下文获得矩 m10, m01。值得注意的是,我们如何调整图像矩计算来处理4个ppc视频流。所提出的划分为公共部分和残差部分可以节省大量硬件资源,这些资源将通过处理 1 ppc 流的模块的普通乘法消耗。
图7所示。用于计算图像补丁在给定点周围的图像矩的硬件架构方案。首先,我们使用高斯滤波器对图像进行模糊处理。接下来,我们分析了连续的图像补丁,这些图像补丁覆盖了圆(半径为15px),中心有四个相邻点。对于每个圆,我们确定图像矩m10和m01。为此,我们对所有圆使用公共部分的总和,从而避免重复执行相同的操作,节省硬件资源。
然后,我们需要根据公式(6)确定特征点的方向。在硬件实现中,计算各种三角函数最常用的方法是CORDIC算法(坐标旋转数字计算机)。它基于位移位和加法运算,因此被认为是一种硬件友好的方法。它的主要缺点是使用多次迭代来获得最佳可能的精度。出于这个原因,还提出了一种解决方案,包括创建一个查找表来确定 m01/m10 的方向,并提出了 m10 和 m01 的符号。但是,该方法使用除法操作,这是资源消耗的。因此,在我们的实现中,我们决定不计算方向的确切值。我们不是这样,而是将特征点分配给 32 个区间之一,我们将等式 (6) 转换为不等式序列 (11):
其中:θ(x, y) 是特征方向,m10(x, y),m01(x, y) 是图像矩,tan θi, tan θi+1 是两个相邻区间的切线值,方向将被分配,10 位定点。
正因为如此,为了确定近似方向,我们只需要简单的比较操作,这些操作对硬件友好。此外,我们仅使用切线值作为第一象限,计算中m10和m01的符号信息。它能够进一步减少使用的硬件资源。在图 9 中,我们展示了为特征方向选择合适的区间的机制示意图。
通过计算图像补丁的矩和特征点的方向,我们使用相同的上下文确定BRIEF描述符。遵循论文 [9] 中的提议,我们选择了两个包含 8 个位置的集,并将它们每 11.25 度旋转。在图 10 中,我们展示了简要的模式和我们对 RS-BRIEF 的实现的比较。我们使用生成的 256 点对来确定 256 位特征描述符。
在最后一步中,我们根据特征点的方向移动描述符,这提供了与旋转RS-BRIEF[9]的测试位置相同的结果。假设特征点的方向为 n,其中 n ∈ {0,。, 31},BRIEF 向量应该从描述符的开头位移 8 × n 到结尾。这正是它在硬件实现中实现的,如图 11 所示。
值得注意的是,RS-BRIEF 算法的使用可能会通过增加测试相关性对结果向量的质量产生负面影响。然而,尝试以其原始形式在硬件中实现BRIEF描述符会导致几个问题。这些主要关注根据公式(10)执行测试点旋转所需的计算资源。正如我们之前提到的,这个问题在其他作品中得到了解决,方法是在查找表中离散化方向和存储预先计算的测试模式。然而,这导致使用内存资源显着增加,这是这种方法的主要缺点。鉴于此,我们决定使用 RS-BRIEF。该算法将旋转的复杂实现简化为基本的移位操作,导致使用硬件资源显著减少,而获得的结果仍然令人满意,正如我们在第 5 节中展示的那样。
我们在配备 Zynq UltraScale+ MPSoC EV 设备的 AMD Xilinx ZCU 104 板上实现了第 4 节中描述的 ORB 算法,具有四核 ARM Cortex-A53 应用处理器、双核 Cortex-R5 实时处理器和 Mali400 MP2 图形处理单元。我们使用SystemVerilog HDL(硬件描述语言)来描述我们在AMD Xilinx Vivado 2020.2 IDE(集成开发环境)中的实现。我们的系统允许以每秒 60 帧(150 MHz 时钟)实时处理 4K 分辨率 (UHD, 3840 × 2160 px) 视频。它能够以完全流水线和并行的方式检测和描述特征点。然而,我们的算法只是旋转不变的(我们只使用一个尺度)。
尽管如此,我们以允许我们调整 ORB 算法以使其在未来尺度不变的方式准备我们的硬件实现。首先,它是模块化的,即第 4 节中描述的每个功能都被设计为一个单独的硬件模块。如果必须在多尺度实现中修改其中一个(或多个),这可以通过替换一个(或多个)模块轻松完成。此外,我们的实现很灵活。上述每个模块都是高度参数化的,从而允许直接适应不同的图像大小或向量格式(一般来说 X ppc,其中 X 是 2 的幂)。整个系统能够以 170 MHz 的最大时钟频率运行(使用 Vivado IDE 估计值)。
表 2 显示了 Zynq UltraScale+ ZCU 104 FPGA 平台上逻辑资源消耗摘要。所提出系统的资源使用和其他 FPGA 实现的比较如表 3 所示。我们比较了仅实现 FAST 检测器的硬件实现、仅实现 Brief 描述符、不使用图像金字塔的 ORB 算法以及完全旋转和尺度不变算法。
请注意,在我们的工作中,我们使用向量数据格式 (4 ppc) 并实时处理 4K UHD @ 60 fps 视频流。鉴于此,在使用的硬件资源方面与现有实现进行直接比较不能完全有意义。尽管如此,值得注意的是,我们的工作使用与以前使用多级图像金字塔的实现类似的 LUT 元素和 BRAM。但是,我们使用明显更多的寄存器 (FF) 和 DSP 块。这是由于在单个时钟周期中处理许多像素相关的硬约束,特别是在BRIEF描述符的确定过程中。还应该注意的是,我们的实现使用了所使用的 FPGA 芯片中可用的相对较小的硬件资源部分。因此,在不改变硬件平台的情况下,可以使用附加组件(例如多级图像金字塔)对其进行扩展。特别是,我们的实现可以用作 SLAM 系统的组件之一。
表 2. 我们的实现的资源利用。所提出的逻辑资源的很大一部分被视频通过消耗。DSP块的高利用率与高斯滤波器和IC模块(从31 × 31px的四个上下文中对圆形补丁执行乘法)有关。
将我们提出的解决方案与科学论文中报告的其他算法进行了比较。我们的实现的直接比较只能与也使用视频直通架构的作品进行,即[13,14,16,22 - 24]。与之前的工作相比,我们使用了明显更多的 FF 和 DSP 块。这是因为 Brief 描述符的 4 ppc 实时实现。
5、结果
为了验证我们的硬件实现,我们将结果与软件模型进行了比较。它是使用来自 OpenCV 库的函数构建的,由来自 FLANN 子模块(近似最近邻的快速库)、用于查找内层的 RANSAC 算法和单应矩阵的特征向量匹配组成。作为软件模型的输入,我们使用来自 OpenCV 的 ORB 的输出以及硬件实现的输出。这样,我们可以根据内嵌数、匹配率、旋转误差和平移误差来比较它们——结果如表4所示。请注意,根据我们的算法中使用的修改,特征点的方向在±11.25◦范围内变化。我们使用来自牛津仿射协变特征数据集[29]的序列进行评估。我们从每对图像中提取特征,并尝试使用 FLANN 库通过最近邻搜索找到对应关系(见图 12)。然后,RANSAC算法计算正确匹配的数量。我们使用地面真实单应性与牛津仿射协变特征数据集得到的单应矩阵进行比较,并计算旋转和平移误差。旋转误差是旋转矩阵相似度的度量(值为 0 表示它们相同),由等式 (12) 确定:
其中:RGT为地真旋转,R为估计旋转,Rodrigues为OpenCV中的函数Rodrigues,使用Rodrigues变换[30]将旋转矩阵转换为旋转向量,v为旋转向量,eR为旋转误差。
平移误差度量比较了真实旋转和公式(13)估计的旋转之间的角度差。误差以度表示。
其中:tGT 是基本事实翻译,t 是估计的翻译,eR 是翻译错误。我们必须强调的是,表 4 中显示的结果表明,ORB 算法的提议实现是正确的,获得的结果与 OpenCV 库相似或更好。因此,我们的模块可以成功地用于与 VSLAM 算法相关的任务,例如无人机平台。我们的实现和OpenCV的函数之间产生的不一致(例如,在检测到的特征点的数量中)可能与两种实现之间的微小差异和定点表示的使用有关。
检测到的特征点数量对误差没有影响,但更多的内嵌点会影响旋转和平移确定的准确性。
6 结论
在本文中,我们提出了一种异构SoC FPGA器件中ORB算法的硬件实现。它的两个组件——FAST 检测器和 Brief 描述符——以完全并行和流水线的方式运行。我们实现了 3840 × 2160 @ 60 fps (150 MHz 时钟) 视频流的实时处理,估计能耗约为 5 W。所提出的架构以 4 ppc 向量格式工作,但它可以适应另一种数据格式(一般来说 X ppc,其中 X 是 2 的幂)。
高分辨率图像的使用允许捕获对象的精细细节,从而更准确地描述特征点,从而影响其稳定性和可重复性。特征点的检测越精确,位移(旋转、平移)的确定就越准确。因此,例如,我们可以获得无人机在未知空间中移动的非常精确的轨迹,或者生成更好的环境地图。我们强烈相信我们的工作将对改进和发展其他方法产生重大影响,例如非常高分辨率的视觉里程计 (VO) 或 SLAM。所提出的架构分为独立执行单个任务的模块。它的优点是有可能进一步添加
无需修改整个系统即可改进或方法。它的模块化还允许系统的组件用于其他任务,而无需任何额外的重新调整。作为未来工作的一部分,我们将实现算法的尺度不变版本,能够并行处理图像金字塔的多个尺度。通过设计模块化和灵活的架构,我们将并行多次使用 ORB 模块来实现这一目标。下一步是执行特征匹配和单应性估计来确定相机的位置,这是VSLAM系统的另一个组成部分。我们还相信资源利用和能源消耗可以进一步优化。另一个有趣的研究方向是来自多个来源的数据融合——视觉相机、事件相机和IMU。这将允许在非常具有挑战性的照明条件下获得良好的性能。
问题
1、这里只实现了特征提取,然而单独一个特征提取其实无法完成整个slam任务。
2、这篇文章比较好的地方在于把实现思路和硬件框图都给了,在实现方面给了很好的思路。但是在创新点上面其实很少。最后的实验对比感觉也不是很好。但是感觉学习相关知识是一篇很好的文章。