ChipNet: 实时 LiDAR 处理用于 FPGA 上的可驾驶区域分割

摘要

本文提出一种基于卷积神经网络 (CNN) 的可编程门阵列 (FPGA) 设计的分割算法,该算法可实时处理激光雷达 (LiDAR) 数据。对于自动驾驶车辆,可驾驶区域分割是设置规划任务静态约束的必要步骤。传统的可驾驶区域分割算法大多在摄像头数据上开发,因此其性能易受光照条件和道路标记质量的影响。LiDAR 传感器能够以高精度获取车辆周围环境的 3D 几何信息。然而,实时处理大量 LiDAR 数据是一项计算挑战。本文提出并训练了一个 CNN 模型,用于使用 LiDAR 传感器的数据进行语义分割。提出了一种高效的硬件架构,并在 FPGA 上实现,该架构能够在 17.59 毫秒内处理每一次 LiDAR 扫描,速度远快于以往工作。使用 Ford 和 KITTI 道路检测基准评估后,所提出的方案在准确性和实时处理速度上均取得了优异表现。

作者

Yecheng Lyu 电气与计算机工程系,伍斯特理工学院,伍斯特,MA,美国 ORCID: 0000-0002-3077-8214

Lin Bai 电气与计算机工程系,伍斯特理工学院,伍斯特,MA,美国 ORCID: 0000-0002-2324-9779

Xinming Huang 电气与计算机工程系,伍斯特理工学院,伍斯特,MA,美国 ORCID: 0000-0003-0584-3448

出版信息

期刊: IEEE Transactions on Circuits and Systems I: Regular Papers 年份: 2019 卷号: 66 期号: 5 页码: 1769-1779 DOI: 10.1109/TCSI.2018.2881162 文章编号: 8580596 ISSN: Print ISSN: 1549-8328, Electronic ISSN: 1558-0806

指标

论文引用数: 70 总下载量: 2475

资助


关键词

IEEE 关键词: 激光雷达, 道路, 可编程门阵列, 特征提取, 三维显示, 实时系统, 激光束测量

Index Terms: 实时性能, 激光雷达, 神经网络, 卷积网络, 卷积神经网络, 自动驾驶车辆, 语义分割, 任务规划, 硬件架构, 相机数据, 道路标记, 卷积层, 特征图, 图形处理单元, 点云, 卷积核, 顶视图, 卷积神经网络架构, 状态机, 卷积块, 高级驾驶辅助系统, 后处理算法, 片上内存, 车道标记, 点扫描, 三维卷积, 街景, 位长, 输入张量

Author Keywords: 自动驾驶车辆, 道路分割, CNN, LiDAR, FPGA

未定义

第一节. 引言

近年来,我们见证了对自动驾驶车辆 1, 2 的研究兴趣显著增加。自2007年的DAPRA城市挑战赛以来,自动驾驶技术已迅速从研究实验发展到商业车辆原型,得益于人工智能和机器学习领域的爆炸性进展。作为自动驾驶系统的重要任务,对交通场景感知及其在硬件平台上的实现进行研究至关重要。

在交通场景感知中,检测与跟踪算法旨在感知周围环境,并为规划与控制任务设定约束。根据对象类型,交通场景感知任务可分为三个子任务: (1) 道路感知,包括可行驶区域分割和车道检测; (2) 目标检测/跟踪; (3) 交通标志/信号检测。在道路感知中,可行驶区域分割扫描前方区域并寻找可行驶区域,而车道检测在车道标记可见时将规划区域限定为本车道。目标检测与跟踪识别车辆、行人、自行车及动物等移动目标,并测量其位置、尺寸和速度,以避免碰撞。交通标志/信号检测寻找交通标志和交通灯,以感知规划任务的附加约束 3。作为自动驾驶系统的关键组成部分,可行驶区域分割提供驾驶环境的基础认知。可行驶区域分割方案需具备广阔视角、精确结果及实时响应能力。然而,道路场景复杂多变。如 4 所述,道路场景存在三种多样性:(1) 由于车道标记形状变化和相机镜头畸变导致的外观多样性;(2) 由于遮挡与照明导致的清晰度多样性;(3) 由于天气条件导致的可视条件多样性。

已使用多种传感器模态进行可行驶区域分割。567 等视觉模态因两个主要原因常被用于可行驶区域分割:(1) 视觉模态与人类视觉系统相似,且大多数道路标记在视觉域中具有特征;(2) 作为被动传感器,视觉摄像头提供高分辨率且特征丰富的数据。通过多摄像头实施,立体视觉 8 能为可行驶区域分割提供深度信息。然而,由于道路场景的多样性,难以设计出能处理所有视觉情况和光照条件的特征描述子。此外,Shen et al. 提出了一系列聚类超像素的算法,可提升基于视觉的语义分割 910

光检测与测距(LiDAR)是另一种常用于自动驾驶车辆的主要传感器。通过主动发射激光束并使用飞行时间(ToF)测量车辆周围的三维几何,LiDAR 能够在每帧中提供数百万个几何点,精度达到厘米级。除此之外,LiDAR 不受环境照明影响。然而,与视觉模态相比,LiDAR 点稀疏且不包含传统基于视觉算法所使用的任何视觉特征。近年来,一些研究探讨了涉及 LiDAR 模态的交通场景感知,并提出了多种数据排布、特征提取以及与单目视觉的传感器融合方案。需要对 LiDAR 数据排布和特征提取进行更深入的研究,以实现精确且高效的基于 LiDAR 的可行驶区域分割。

过去几十年,可行驶区域分割已经在不同传感器和方法下得到研究。一般方案包含四个组成部分:预处理、特征提取、检测和后处理。预处理包括噪声去除、数据采样和转换。特征提取对预处理后的数据编码局部特征,如颜色、边缘和纹理。检测阶段使用手工定义或基于机器学习的模型来识别道路区域或车道边界。最后,后处理抑制候选结果以给出最终结果。

在传统的计算机视觉算法中,这四个步骤完全分离,且提取的特征通常是可描述的。然而,手工定义的特征和检测器仅在正常条件下表现良好,无法处理道路上的大量变化。机器学习,尤其是基于卷积神经网络(CNN)的算法,将特征提取和检测合二为一。预处理后的数据被输入到一个具有数百万参数的结构良好的 CNN 中。尽管这些特征和检测器几乎无法用视觉方式描述,但基于机器学习的道路感知算法在准确性上相较于传统的计算机视觉方法具有显著优势。

在自动驾驶车辆中,实时处理速度和低功耗都是期望的。图形处理单元(GPU)设备因其并行处理能力而受欢迎,但通常功耗过高。由于电源受限,车辆中通常只能装配一到两块GPU。但数十个感知和规划任务需要同时在GPU上处理。现场可编程门阵列(FPGA)是功耗低、更加适合嵌入式系统的设备。此外,FPGA可以开发为定制集成电路,能够在片上实现大规模并行处理和数据通信。因此,FPGA是我们选择的平台,既满足计算能力要求,又符合功耗约束。

在本文中,我们提出了基于CNN的ChipNet算法及其在FPGA上的实现,用于实时LiDAR数据处理。我们工作的贡献可概括如下:(1) 我们在球坐标系中引入了一种新的数据组织与采样方法,提升了LiDAR点的利用率,并为CNN创建了稠密的输入张量。(2) 我们提出了一个高效的CNN卷积块,既具有硬件友好性,又可扩展。(3) 所提出的可行区分割方法在使用Ford数据集和KITTI基准测试时,达到了行业领先的精度。我们还对Ford数据集进行了标注,以供训练与评估使用。(4) 设计并实现了一个高效灵活的3D卷积模块在FPGA上,能够在有限的硬件资源与功耗下实现实时处理速度。

本文其余部分的组织如下。第二节介绍了道路感知任务的相关工作。第三节描述了所提出的可行区分割算法,并展示了其在基准测试中的性能。第四节展示了FPGA架构和硬件实现结果。最后,第五节对本文进行总结。

第二节:相关工作

A. LiDAR 数据排列

在交通场景感知中,存在多种 LiDAR 数据排列方法。 在 Soquet et al. [^11]、Alvarez 和 Lopez 11、Shinzato et al. 12 与 Liu and Deng 13 的研究中,LiDAR 点云被投射到图像视图,并根据图像块的评估测量手动定义特征。 Han et al. 14 和 Gu et al. 15 也采用了类似的图像视图,随后使用直方图进行特征提取。 González et al. 16 与 Xiao et al. [^18] 从点云生成稠密深度图,然后将该图与摄像机数据结合,用于其基于机器学习的道路边界检测器。 类似地,多视角方法 17 将点云转换为图像视图和俯视图,然后将其与摄像机数据结合,使用 CNN 进行传感器融合。 此外,VoxelNet [^20] 与 3D-FCN 18 在世界坐标系中直接使用卷积神经网络处理稀疏 LiDAR 数据。 LoDNN 19 将点云组织成俯视图,然后输入 CNN 生成热图,表示每个 0.1m\times 0.1m 单元格中可行驶区域的可能性。

除道路感知外,若干研究工作提出使用 CNN 进行基于 LiDAR 的车辆检测 20、[^20]。 为克服训练样本不足的问题,提出了数据增强和粗粒度标注方法以扩大数据集。 VoxelNet [^20] 通过旋转和平移 LiDAR 点与地面真实值一起增强训练数据。 StixelNet 21 利用 LiDAR 点自动生成粗粒度标注用于预训练。

B. 用于道路感知的 CNN

卷积神经网络已成为道路感知任务的活跃方法。从全卷积网络 (FCN) 22 开始,提出了各种网络结构以实现精确的道路检测与分割。SegNet 23 引入了编码器-解码器方案,将特征提取器与检测器分离。它还在编码器与解码器层之间添加了额外的连接,提升了靠近输入的前几层的训练效果。Oliveira et al. 24 遵循编码器-解码器方案,并在独立分支中感知近程与远程,提升了基于视觉的分割精度。RBNet 25 也遵循编码器-解码器方案,但将所有编码器层的输出连接到解码器。其他工作在图像 [^25] 和视频 [^26] 中引入 CNN 用于显著目标检测。最近,CNN 也被引入 LiDAR 基础的道路分割。LoDNN 26、VoxelNet [^20] 与 Multi-view 27 在 LiDAR 基础的感知上提出了不同的技术。

C. 用于道路感知的嵌入式平台

考虑自动驾驶或高级驾驶辅助系统(ADAS)的情境,路面感知算法的处理时间必须满足实时性要求,因此通常在嵌入式平台(如FPGA、ASIC或移动CPU/GPU处理器)上实现。Huval et al. 28 在 Jetson TK1 移动 GPU 平台上部署了一个神经网络。它基于图像检测车道标记,运行速度达 2.5 Hz。同样,[^28] 提出的神经网络能够在 TX1 GPU 平台上以 10 Hz、320p 的图像分辨率分割车辆、行人和人行道等多种目标。两种基于 FPGA 的车道检测方案分别在 [^25] 与 [^20] 中提出,其处理时间分别为 60 Hz 与 550 Hz。

第III节:算法设计

在本研究中,提出了一种硬件友好且可扩展的卷积神经网络,用于利用 LiDAR 数据分割可行驶区域。本节首先介绍了 LiDAR 数据准备方法,作为 CNN 的预处理。接下来,详细描述了所提出的网络架构 ChipNet。此外,我们引入了一种模拟量化方案,将 CNN 的浮点运算转换为定点运算,从而显著加速硬件处理。最后,开发了一种后处理算法,用于从 CNN 输出生成表示可行驶区域的决策图。所提出的方案在 Ford Campus Vision 与 LiDAR 数据集以及 KITTI 路面基准上进行了评估。性能结果在本节末尾给出。

A. LiDAR 数据准备

通常,LiDAR 设备在垂直方向布置若干激光扫描器,并以方位角旋转扫描周围障碍物。假设某 LiDAR 设备包含 N 个扫描器,采样速率为 M 点/秒,旋转速率为 R rpm,则其生成 \frac {R}{60} 帧/秒,每帧测量点数为 \frac {60M}{R},方位角分辨率为 \frac {360NR}{60M}。极坐标分辨率为 \frac {\phi }{N},其中 \phi 表示垂直视场。举例来说,KITTI 路面基准中使用的 HDL-64E LiDAR 29 拥有 64 条扫描通道,采样速率为 133 万点/秒。以 600 rpm 旋转时,它每秒更新 10 帧,每帧测量点数 13.3 万点,方位角分辨率为 0.17°。聚焦于 26.90° 的垂直视场时,极坐标分辨率为 0.42°。在实际使用中,LiDAR 传感器偶尔会在激光束照射低反射表面时产生空洞测量点。

通常,LiDAR 模态生成的每帧数据都是如图 1 所示的表格。在每一行中,对应 LiDAR 点的测量被列为四列,包括 LiDAR 视角的位置信息 x,y,z 以及目标表面的激光反射强度 r。通过将所有点投射到相机视图和俯视图(如图 1 所示),LiDAR 点云稀疏且整个空间点密度变化大。因此,在输入卷积神经网络之前,需要对 LiDAR 数据进行组织和重采样。

Fig. 1. -

图 1. 一般 LiDAR 帧。(a) LiDAR 数据矩阵,(b) LiDAR 点投射到对应图像,(c) LiDAR 点展示在俯视图上。

Fig. 2. -

图 2. 所提出的 LiDAR 处理方案的数据流。

如第二节所述,尚无统一的激光雷达点云数据排列和采样视角方法。表 I 总结了几项将激光雷达数据组织成不同形式的研究工作。在表 I 中,我们可以看到大多数工作将三维空间划分为笛卡尔坐标系,但他们在不同视角下采样点云,例如顶部视角 3031、前方视角 [^20] 或三维视角 32。我们还发现大比例的激光雷达点被编码在其感兴趣区域 (RoI) 中。然而,作为神经网络输入的有序数据是稀疏的,这意味着 CNN 前几层的大部分计算实际上都在处理零值。这从计算角度来看非常低效。

Table I-

表 I

因此,我们建议将激光雷达数据组织为球面视角,就像激光雷达自然扫描周围环境一样,见图 3。感兴趣区域在方位角 [-45°, 45°) 范围内被选取,并且所有 64 条扫描线都参与分割。在每条线段上,扫描点按每 0.5° 进行分组形成单元格。总的来说,RoI 中的所有扫描点落入一个 180\times 64 网格。我们使用 0.5°,因为它是激光雷达方位角分辨率的三倍,从理论上讲,每个单元格至少聚合 2 个扫描点。实际上,当反射面超出范围或低反射率时,可能出现一些空洞扫描。输入张量的宽高与扫描点网格相同,但包含 14 个特征通道。在每个单元格中,前 7 个特征来自距离扫描仪最近的点,后 7 个特征来自距离扫描仪最远的点。这些特征包括笛卡尔坐标 x,y,z、球面坐标 \theta,\varphi,\rho 以及激光反射强度 r

Fig. 3. -

图 3. 所提出的激光雷达数据准备方法的示意图.

在表 I 中,我们将激光雷达数据准备与几项相关工作进行比较。通过在球面视角下采样激光雷达点,我们的工作不仅在 RoI 中拥有更高的激光雷达点使用率,还创建了一个稠密的输入张量,提升了准确率,并使 CNN 的计算显著更高效。

B. ChipNet: 硬件友好且可扩展的 CNN 架构

本节我们介绍了 ChipNet 架构以及在 GPU 上训练时的模拟量化算法。ChipNet 的创新点包括:(1)我们设计了一个等价于 5\times 5 卷积核的膨胀块,但节省了参数和计算量;(2)我们使用该膨胀块设计了可扩展的 CNN 结构;(3)我们提出了模拟量化算法,用于获取硬件实现所需的定点参数。该网络使用 Ford 数据集和 KITTI 道路基准进行评估。

1) ChipNet 卷积块

卷积块是 ChipNet 架构中的关键组件。每个网络块包含三个分支。第一个分支是身份分支,直接将输入复制到输出。如 33 所分析,身份分支在反向传播中贡献了大部分梯度,降低了训练期间梯度消失和爆炸的可能性。第二个分支是一个具有 64 通道输出的 3\times 3 卷积层。第二个分支旨在编码局部特征。第三个分支是一个膨胀的 3\times 3 卷积层 [^31],用于处理更远像素处的特征,但参数和计算量更少。 如图 4 所示,在逐元素相加所有三个分支后,该块等价于一个 5\times 5 卷积层,但在反向传播中具有更稳定的梯度并且参数更少。假设卷积层的输入尺寸为 180\times 64\times 64,输出尺寸也为 180\times 64\times 64,一个 ChipNet 块仅包含 73,856 个参数,并需要 802 million 次乘法运算。相比之下,传统的 5\times 5 卷积层使用 102,464 个参数,需 1,180 million 次乘法运算。结果,所提出的 ChipNet 块将参数减少 28%,乘法运算减少 32%。

Fig. 4. -

图 4. ChipNet 卷积块。(a) 块架构,(b) 它等价的 5\times 5 卷积核。蓝色、红色和棕色的细胞表示在传统 5\times 5 卷积核中对应卷积操作的贡献。

2) ChipNet 网络架构

ChipNet 的整体 CNN 架构如表 II 所示。第一层是一个本地特征编码器,旨在将输入的 LiDAR 数据编码为 64 通道的特征张量。编码完成后,提出的 ChipNet 卷积块在网络中被反复实例化,以执行额外的编码和解码。由于所有 ChipNet 块的输入和输出尺寸完全相同,神经网络可以通过添加更多层方便地进一步加深。在我们的工作中,ChipNet 块被实例化 10 次,以在分割精度和处理延迟之间取得平衡。输出层使用通道级映射来生成最终的决策图,显示相应可行驶区域的概率。与 FCN 和 SegNet 相比,所提出的网络更为简单,更重要的是可扩展。重复的网络结构最适合 FPGA 设计中的硬件复用。

Table II-

表 II

3) 模拟量化

模拟量化对于硬件上网络的训练至关重要。固定点变量、权重和运算在 FPGA 设计中被广泛使用,它们通常使用更少的硬件资源和内存,并且比浮点实现具有更高的时钟频率。然而,CPU 和 GPU 平台通常采用浮点运算,具有无量化误差,并能在训练过程中生成连续梯度。实际上,我们可以在 FPGA 上实现 CNN,用于低功耗嵌入式应用。但我们仍然高度依赖高性能 GPU 来训练神经网络,以生成参数和权重,因为 GPU 机器能够存储数 TB 的训练样本并同时处理数百个线程。

然而,我们不能仅仅把预训练神经网络的所有变量和参数从浮点转换为固定点。由于量化是一个非线性操作,结果不会为固定点神经网络提供最优方案。此外,直接量化变量和参数可能导致梯度丢失。因此,我们提出了一种模拟量化方法,用于训练能够在固定点形式下产生最佳参数的神经网络。这是为在 FPGA 上实现 CNN 做准备的关键步骤。

a) 权重的模拟量化:

我们在此提到的量化并不是将所有权重从浮点数简单地量化为定点数的操作。需要额外的训练来避免对准确率的负面影响。然而,在训练阶段,仍然更倾向于使用浮点权重,因为我们想避免梯度爆炸和消失。在 34 中,提出了一种模拟量化方法,该方法在反向传播训练期间将权重和梯度存储为浮点数,但在前向卷积操作中使用量化后的定点数。其优点在于权重和梯度在连续空间中更新,从而可以避免由于量化导致的局部最优。缺点是需要修改若干关键函数以支持该方法。然而,在诸如 TensorFlow 这样的通用机器学习平台上,修改、维护和分发定制化组件通常是困难的。

在我们的工作中,定义并添加了一种新的权重调节器到现有网络中。该调节器在 Algorithm 1 中描述。其关键创新在于调节器在训练期间对权重进行量化,并在前向操作中使用定点数。与此同时,浮点权重也被存储在内存中,用于反向传播时计算梯度。然而,量化函数不是可微的。因此,我们引入了 StopGradient 函数。StopGradient 是 TensorFlow 的内置函数,能强制其输入的梯度为零。通过应用此函数,梯度保持与浮点反向传播相同,而权重被量化。因此,所提出的量化算法被导入 TensorFlow 平台,作为一个插件调节器。所提出的量化算法和数据流如图5所示,并与 35 中的模拟量化进行比较。

Algorithm 1 Weight Quantization

Data Weights W, Gradients G

Parameter total_bits=N, fraction_bits=F

1: Fraction_scalar \leftarrow ~2^{F}

2: Upper_bound \leftarrow 2^{N-1}-1

3: Lower_bound \leftarrow -2^{N-1}

4: \hat {\boldsymbol {W}} \leftarrow \boldsymbol {W}\times \text{Fraction\_scalar}

5: $\hat {\boldsymbol {W}} \leftarrow round(\hat {\boldsymbol {W}}) $

6:\hat {\boldsymbol {W}} \leftarrow \max(\hat {\boldsymbol {W}},\text{Lower\_bound})

7: \hat {\boldsymbol {W}} \leftarrow min(\hat {\boldsymbol {W}},Upper_bound)

8: \hat {\boldsymbol {W}} \leftarrow \hat {\boldsymbol {W}}/Fraction_scalar

9: \boldsymbol {W} \leftarrow \boldsymbol {W} + StopGradient(\hat {\boldsymbol {W}}-\boldsymbol {W})

10: return {\boldsymbol {W}\boldsymbol {,G}}

Fig. 5. -

Fig. 5. (a) 如[20]所示的模拟量化方法 (b) 本工作提出的量化方法.

Fig. 6. -

Fig. 6. 来自 Ford 数据集的分割结果示例.

b) 变量的模拟量化:

量化变量的方式类似于权重。量化变量被实现为一种新的激活函数,以便可以将其作为自定义定义的函数导入,而不是修改现有平台的主体。如算法 1所述,如果我们将浮点数转换为具有{F}位小数的{N}位定点数,操作是先左移{F}位,然后四舍五入为{N}位整数,随后再右移F位。为了最小化对反向传播训练的负面影响,梯度全部使用浮点数计算。

c) 对量化的评估:

为了评估量化对精度的影响,我们首先使用Ford训练集在浮点数上训练ChipNet,然后使用相同的训练集进行量化和微调。ChipNet的量化版和非量化版均在相同数据集上进行评估。表III列出的结果显示,量化到18位或以上的ChipNet与浮点模型的性能相似,表明我们提出的量化方案不会导致卷积神经网络的精度下降。

Table III-

表 III

C. 可行驶区域视图

网络输出表示球面视图中每个单元可驾驶区域的可能性。在后处理阶段,输出被投影到车辆前方20米宽、40米长区域的俯视图。我们在后处理时选择俯视图,因为它与KITTI基准的输出数据格式相匹配 36,这样我们可以将我们的结果与数据集中报告的其他结果进行比较。

后处理算法如算法2所述。假设可驾驶区域的可能性阈值设为 THR,则网络输出 {P_{i,j}} 中每列 j 的参考点由组 \left \{{ P|_{col=j,\:p < THR}}\right \} 中最近的激光雷达点确定。生成参考点后,可驾驶区域的轮廓成为一个包含所有参考点为顶点的多边形。

算法2:将CNN输出后处理为分割结果 *

Data Input tensor I=\{I_{i,j}\}, output tensor P=\{P_{i,j}\}

Parameter threshold THR.

1: \boldsymbol {I}\leftarrow Threshold(\boldsymbol {I}\geqslant THR)

2: \hat{\boldsymbol {I}}\leftarrow GetLargestConnectedComponent(\boldsymbol {I})

3: \hat{\boldsymbol {I}}\leftarrow Dilation(\hat{\boldsymbol {I}},disk(1))

4: \boldsymbol {B}\leftarrow GetContour(\hat{\boldsymbol {I}})

5: \widetilde{\boldsymbol {B}}\leftarrow ProjectToTargetView(\boldsymbol {B})

5: \widetilde{\boldsymbol {A}}\leftarrow Polygon(\widetilde{\boldsymbol {B}})

6: return \widetilde{\boldsymbol {A}}

后处理方案在 CPU 上使用 GridMap 37 实现,该库是一个通用的网格地图管理库。GridMap 库将地图数据存储为 Eigen 矩阵,并支持矩形、圆形、多边形区域和线段的迭代器,从而实现方便高效的单元格数据访问。在后处理阶段,我们使用 [6, 46] 米的 {x} 坐标范围和 [−10, 10] 米的 {y} 坐标范围初始化网格地图实例。分辨率设为每格 0.05 米,从而网格地图在 x 坐标上有 800 个单元格,y 坐标上有 400 个单元格。当后处理节点接收到网络输出帧时,它将帧存储为 Eigen 矩阵。在 Algorithm 2 中,步骤 1-3 在该矩阵上处理。在步骤 4-5 中,轮廓顶点被导入到多边形迭代器实例中,然后随着多边形迭代,逐格标记可行驶区域。后处理的执行时间为典型 CPU 上每帧 5 毫秒。

后处理影响分割精度的两个方面:(1) 投影到鸟瞰图后,LiDAR 扫描在远距离处非常稀疏,导致投影的 LiDAR 边界与真实可行驶区域边界之间存在失真;(2) Algorithm 2 假设多边形内部空间可行驶,外部空间不可行驶,因此如果可行驶区域存在孔洞,则会出现错误。我们使用 KITTI 训练集定量评估该影响。通过使用后处理算法将球面视角下的地面真实值投影到鸟瞰图,并与鸟瞰图地面真实值进行比较,发现后处理算法将 F1 - score 限制在 95.5%。

为了可视化目的,我们还通过类似的后处理流程在摄像头视角生成可行驶区域地图。

D. 网络训练与评估

ChipNet 的训练平台是一台配备 Xeon 2.4 GHz CPU 和 NVidia K20 GPU 的工作站。软件环境是一个基于 Python 的框架,名为 Keras 38,后端为 TensorFlow 1.4。网络的输入是 180\times 64\times 14 张量,输出是 180\times 64\times 1 张量。该平台的训练速度为每帧 256 毫秒。为评估所提方案的性能,使用了 Ford Campus Vision 和 LiDAR Dataset 39 的子集以及 KITTI road benchmark 40 进行训练和测试。

原始的福特数据集(见 41)包含 3871 帧同步相机数据记录的激光雷达数据。激光雷达数据以 10 Hz 的频率采样。该数据集本身没有标签或注释,因此我们创建了一个子集并手动标注了可行驶区域。为了减少连续帧之间的重叠,我们仅保留每 5 帧中的 1 帧。实际上,该数据集已被下采样到每秒 2 帧。我们还删除了一些越野样本,例如停车场上的车辆,因为我们专注于道路场景。因此,我们从福特数据集中生成了一个 600 帧的子集用于训练和评估。

在该子集中,原始图像从 1243\times 1616 裁剪为与激光雷达点云重叠的 800\times 200 分辨率。数据的排列方式如第 III-A 节所述。为获取激光雷达的地面真实值,采用了如 Algorithm 3 所述的光线追踪方法。从激光雷达坐标到相机坐标的投影方法见 Algorithm 4。在我们的标注子集中,每个样本包含一帧 180\times 64\times 14 激光雷达帧、一张 800\times 200 彩色图像、一帧 180\times 64\times 1 激光雷达地面真实帧以及一张 800\times 200 地面真实图像。我们随机挑选 400 个样本用于训练/验证,其余 200 个样本用于评估。此外,我们通过将视角相对于激光雷达地面真实值旋转 (−10, −5, 0, 5, 10) 度来增强训练样本。因此,我们生成了 2000 个样本的训练集。

Algorithm 3 LiDAR 样本的真实标签生成

Data Input tensor L=\{\boldsymbol {L_{i,j,k}}\}, Ground truth image B=\{\boldsymbol {B_{i,j}}\}

1: {\boldsymbol {\overrightarrow {x_{1}}}}\leftarrow \left [{ {\begin{array}{c} \boldsymbol{L_{i,j,1}} \\ \boldsymbol {L_{i,j,2}} \\ \boldsymbol {L_{i,j,3}} \end{array}}}\right], {\boldsymbol {\overrightarrow {x_{2}}}}\leftarrow \left [{\begin{array}{c} \boldsymbol {L_{i,j,8}} \\ \boldsymbol {L_{i,j,9}} \\ \boldsymbol {L_{i,j,10}} \end{array}}\right]

2: {\hat{\boldsymbol {\overrightarrow {x_{1}}}}}\leftarrow Proj({\boldsymbol {\overrightarrow {x_{1}}}}), {\hat{\boldsymbol {\overrightarrow {x_{2}}}}}\leftarrow Proj({\boldsymbol {\overrightarrow {x_{2}}}})

3: \boldsymbol {G_{i,j,1}}\leftarrow [\boldsymbol {B}(\hat{\boldsymbol {\overrightarrow {x_{1}}}})>0]\times [\boldsymbol {B}(\hat{\boldsymbol {\overrightarrow {x_{2}}}})>0]

4: return \boldsymbol {G}

Algorithm 4 从 LiDAR 坐标到相机坐标的投影

Data LiDAR point P{x_{i},y_{i},z_{i},r_{i}}

Parameter transform matrix \boldsymbol {K} \in R^{3\times 4}

1: \left [{\begin{array}{c} \hat {x_{i}} \\ \hat {y_{i}} \\ \hat {z_{i}} \end{array}}\right]\leftarrow \boldsymbol {K}\left [{\begin{array}{c} x_{i} \\ y_{i} \\ z_{i} \\ 1 \end{array}}\right]

2: \left [{\begin{array}{c} \hat {x_{i}} \\ \hat {y_{i}} \end{array}}\right]\leftarrow \left [{\begin{array}{c} \frac {\hat {x_{i}}}{\hat {z_{i}}} \\ \frac {\hat {y_{i}}}{\hat {z_{i}}} \end{array}}\right]

3: return \left [{\begin{array}{c} \hat {x_{i}} \\ \hat {y_{i}} \end{array}}\right]

交叉熵被选为损失函数,Adam 42 方法在默认设置下被选为优化器。我们首先在未使用量化插件的情况下训练网络 30 个周期,期间训练过程收敛良好。随后,我们在使用量化插件的情况下微调网络 10 个周期,以获得定点权重。初始训练耗时 4.5 小时,微调耗时 1.5 小时。对于每种定义的定点位长格式,我们在微调期间应用相同的仿真量化过程。选择导致最小损失的位长用于 FPGA 实现。

在测试阶段,我们在图像视图中选择了 F1 分数(F1)、平均精度(AP)、精确率(PRE)、召回率(REC)、假阳性率(FPR)和假阴性率(FNR)作为评估指标。指标的计算方式如(1-4)所示。表 III 展示了不同固定点量化位长的评估结果。结果表明,将所提出的网络量化到 16 位或更高位数时,其准确度与浮点结果相当,但当量化位数低于 16 位时,准确度会急剧下降。在我们的工作中,选择了 18 位,因为这是目标 FPGA 平台支持的最佳选项。

\begin{align*} \textit {Precision}=&\frac {\textit {TP}}{\textit {TP}+\textit {FP}} \tag{1}\\ \textit {Recall}=&\frac {\textit {TP}}{\textit {TP}+\textit {FN}} \tag{2}\\ \textit {F1}\,\textit {score}=&\frac {2\cdot \textit {Precision}\cdot \textit {Recall}}{\textit {Precision}+\textit {Recall}} \tag{3}\\ \textit {AP}=&\frac {\textit {TP}+\textit {TN}}{\textit {TP}+\textit {FP}+\textit {TN}+\textit {FN}}\tag{4}\end{align*}

我们还在 KITTI 道路基准 43 中评估了我们的网络。KITTI 视觉基准套件是一个广泛使用的数据集,包含激光雷达、相机、GPS 和 IMU 数据。此外,还提供了从激光雷达坐标到相机坐标的顶点变换。套件中的道路基准包含 289 个训练样本和 290 个测试样本。点云由 64 行 Velodyne 激光扫描仪获取,相机帧则来自 Point Grey 1.4 兆像素相机。为实现更好的传感器融合,激光雷达点云在每个时间步进行去畸变处理,相机帧被裁剪为 375\times 1242 图像。此外,不同传感器的数据帧被同步到 10 Hz。

与在相机视图上评估的 Ford 数据集不同,KITTI 道路基准在俯视图上评估分割结果,其中结果被映射到 400\times 800 图像。该映射图像表示前方 40 米区域(从 6 米到 46 米)以及左右各 10 米的可达性。

在训练阶段,我们首先通过对相应激光雷达真值以 (−10, −8, −6, −4, −2, 0, 2, 4, 6, 8, 10) 度旋转视场来扩充数据集。因此,我们获得了 3179 个样本,其中 3000 个随机选择的样本用于训练,其余 179 个样本用于验证。我们使用来自 Ford 数据集训练的权重,并在量化插件下进行 10 轮微调,然后将结果提交给基准在线评估器。训练时间为 2.05 小时。

对比了多种现有结果,结果展示在表 IV 中。典型结果显示在图 7 中。红色区域表示误判可行驶区域(假阳性),蓝色区域表示遗漏的行驶区域(假阴性),绿色区域表示正确可行驶区域(真阳性),其余区域表示正确禁行区域(真阴性)或不关心区域。我们还在前视视角下评估了 ChipNet,参考 44,未进行量化,该方法需要更长运行时间,但准确率低于球面视角。这表明 LiDAR 数据以球面视角排列可为 CNN 提供更多特征。

Table IV-

表 IV

Fig. 7. -

图 7. KITTI 道路数据集的分割结果示例.

我们提出的方法能够在道路边界附近产生高度可靠的可行驶区域分割,畸变较小。对于道路上的车辆,分割边界与真实边界相匹配,或略向道路中心偏移,这在自动驾驶中是安全的。对于有人行道的道路,如果人行道位于道路表面之上,分割边界与真实边界相匹配。然而,如果人行道与道路表面相等或低于表面,检测到的可行驶区域有时会延伸 1 至 2 米进入人行道,这需要在未来研究中改进。除此之外,我们的方案在暗光环境(如隧道内部或面向强光)下也能返回准确的可行驶区域。相反,基于视觉的方法在这些场景中很少表现良好。

第四节:硬件架构

如第 III 节所述,预处理后的 LiDAR 数据具有 14 通道,输入数据尺寸为 180\times 64。在第一层卷积编码后,得到一个 64 通道的特征图。在接下来的 10 层卷积中,输入和输出特征图尺寸保持为 180\times 64\times 64。最后一层执行通道映射,产生尺寸为 180\times 64 的输出图,每个像素表示可行驶区域的可能性。硬件架构的框图如图 8 所示。系统包括一个 3D 卷积单元、一个 ReLU 块、一个特征图缓冲区和一个中间缓冲区。2D 卷积和加法树嵌入在 3D 卷积块中。由于 ChipNet 每个阶段的特征图尺寸相同,这个 3D 卷积单元被重复使用。一个有限状态机(FSM)被设计用于控制迭代处理步骤。

Fig. 8. -

图 8. ChipNet 卷积神经网络的硬件架构.

A. 零填充

为正确处理边界信息,必须对卷积层输出产生的特征图进行零填充。在我们的系统中,使用双端口 RAM 自动实现零填充。在图9中,所有存储位置都预先加载为零。特征图的像素被写入特征图缓冲区的相应地址位置。从连续地址读取特征图时,数据会自动零填充。该 RAM 充当特征图缓冲区。

Fig. 9. -

图9。硬件中零填充的自动实现。

B. 卷积

如图10所示,3D卷积单元包含64个2D卷积切片。每个2D卷积切片由一个线缓冲区和两个 5\times 5 乘法阵列构成。线缓冲区采用移位寄存器设计,如图11所示。它输出一个 5\times 5 窗口(红框标示)作为乘法阵列的输入。绿色寄存器与扩张的 3\times 3 卷积核相乘,黄色寄存器与常规的 3\times 3 卷积核相乘,中间的寄存器与系数和相乘,如图4所示。

Fig. 10. -

图10。3D和2D卷积单元的框图。

Fig. 11. -

图11。线缓冲单元的框图。

在每个2D卷积块中,输入数据从线缓冲区传入两个乘法阵列,每个阵列后跟一个加法树。2D卷积块采用流水线架构,可并行处理两次卷积核运算。由于每次2D卷积运算包含64个卷积核,相同的特征图会被重新加载并处理32次。所有权重都存储在片上内存中,以避免外部内存访问的延迟。ReLU块由比较器和多路复用器实现。若输入值大于0,则输出原始值;否则ReLU块输出0。

C. FSM 控制器

由于图10中的乘法阵列在FPGA上消耗大量DSP切片,如何在每个卷积层复用它成为控制逻辑设计的关键考量。因此,部署了级联有限状态机(FSM)来控制迭代过程。如图10所示,3D卷积单元可并行执行两次卷积核运算。根据表II,每层需要64次卷积核运算。因此,内部FSM控制3D卷积单元执行相同操作32次,每次使用不同的特征图输入,而外部FSM则控制层次的顺序。

如图 8 所示,在每一层卷积过程中,外部 FSM 首先将输入特征图加载到特征图缓冲区。与此同时,内部 FSM 开始将特征图送入 3D 卷积单元。中间特征图存储在中间缓冲区中。当内部 FSM 完成一层卷积后,外部 FSM 将数据从中间缓冲区移动到特征图缓冲区,然后开始下一层的卷积。

D. 实施结果

目标硬件平台为 Xilinx UltraScale XCKU115 FPGA。图 12 示出了集成测试系统。

Fig. 12. -

图 12. 带有 LiDAR 与 FPGA 加速器的整体系统架构.

LiDAR 帧以 10 Hz 通过 UDP 协议传输到 PC。对每帧 LiDAR,PC 进行预处理并将 18 位特征图发送至 FPGA 中的 ChipNet 神经网络。特征图尺寸为 64\times 180\times 14。参数使用 MATLAB HDL coder 进行移植。系统时钟频率设为 350 MHz。每个卷积块需要约 12,512 个时钟周期生成 2 张特征图。该 CNN 架构的总处理时间约为 12.59 ms。由于 LiDAR 点云帧率通常为 10 Hz,本文的 FPGA 实现满足实时 LiDAR 数据处理的需求。当在 Intel Core i5-5200U CPU 上以软件方式运行 ChipNet 时,处理时间为 549 ms;使用 NVidia K20 GPU 运行 ChipNet 时,处理时间为 162 ms。因此,FPGA 实现相较于 CPU 提升了 43\times 倍,且相较于 GPU 提升了 13\times 倍。

如前所述,目前很少有基于 CNN 的 LiDAR 处理 FPGA 实现,无法与 FPGA 上类似工作的性能和效率进行比较。

我们所提出的神经网络的资源使用情况列于表 V。该设计的总功耗为 12.594 W,估算来源于 Xilinx Vivado 2017.2 功耗分析器,使用后实现仿真.saif(Switching Activity Interchange Format)文件。如表 VI 所示,功耗由 9.747 W 的动态功耗和 2.848 W 的静态功耗组成。我们注意到,大部分功耗被片上存储器消耗,因为它们除了空闲模式外始终处于开启状态。我们强调,所提出的 FPGA 方案仅消耗 NVidia K20 GPU 的 11.8%,即 107 W。

Table V-

表 V

Table VI-

表 VI

第 V 节. 结论

本文将可驾驶区域分割问题视为语义分割任务,通过在 FPGA 上使用卷积神经网络对实时 LiDAR 数据进行处理。LiDAR 数据在预处理阶段以球面视图组织并采样为稠密输入张量。提出了一种高效且可扩展的 CNN 架构 ChipNet 作为主处理器。为 FPGA 实现设计了可重用且高效的 3D 卷积块。该方法使用 Ford 数据集和 KITTI 基准进行训练。评估结果表明,所提出的 LiDAR 处理算法在准确率上实现了最先进水平,并且在 FPGA 上实现了实时处理速度。然而,FPGA 实现仍然消耗大量片上内存。未来工作中,我们将考虑使用递归神经网络进行空间序列解码,以减少片上内存使用。我们还注意到,在基准评估过程中,人行道和铁轨是误报的主要原因。将 LiDAR 与摄像头数据进行传感器融合将被考虑,以进一步提升精度。

参考文献

附加参考文献

  1. L. Chen, J. Yang, and H. Kong, “快速道路和障碍检测的 Lidar-直方图,” in Proc. IEEE Int. Conf. Robot. Autom. (ICRA), May/Jun. 2017, pp. 1343–1348.