一种面向自动驾驶汽车定位的基于深度神经网络的大尺度建图方法

来源:公众号“焉知智能汽车”
2021-09-22
1496
编者按:占用栅格地图是无人驾驶汽车的定位和规划模块所需的重要输入。深度神经网络亦是近年来智能驾驶研究的一大热点。所推荐的这篇文章借助深度神经网络生成满足无人驾驶汽车需求的占用栅格地图,并提供丰富的视频材料证明了所提出方法能被成功用于实车无人驾驶。



摘要:本文提出了一种使用名为NeuralMapper的深度神经网络实时创建自动驾驶汽车所需占用地图的新方法。NeuralMapper接收LiDAR传感器数据作为输入,并生成汽车周围的占用栅格地图作为输出。NeuralMapper推算每个栅格地图单元格作为以下三个类别之一的概率:占用、空闲和未知。该系统在两个数据集上进行了测试,平均准确率分别为76.48%和73.81%。本文还使用自动驾驶汽车评估了所提出方法用于定位的效果,大多数定位位姿误差小于0.20m,RMSE 为0.28m,这与其他文献中使用其他栅格地图建立方法的结果接近。

关键词:自动驾驶汽车,建图,深度神经网络

1 引言

在过去的二十年里,自动驾驶汽车取得了长足的进步。2004年,美国国防高级研究计划局(DARPA)发起了第一次自动驾驶汽车竞赛,目标是在没有人为干预的情况下穿越莫哈韦沙漠[1]——在这场比赛中,没有一个参赛者实现了目标。在第一次尝试之后,DARPA在2005年和2007年推动了另外两项竞赛,分别有5辆和6辆汽车完成了提出的挑战。这些事件极大促进了自动驾驶汽车的发展,推动了自动驾驶汽车在今天成为现实。谷歌、沃尔沃和优步等公司正在全球多个城市进行试验,向公众提供自动驾驶服务。

尽管在该领域已经取得了巨大进步,但今天的自动驾驶汽车仍然无法准确应对日常城市交通中遇到的所有情况和天气条件。出于这个原因,世界各地的大学和研究中心都在进行研究,以改进这项技术并提高自动驾驶汽车的自主水平。

IARA(智能自主机器人汽车)自动驾驶汽车,如图2所示,自2009年以来一直由圣埃斯皮里托联邦大学(Universidade Federal do Espírito Santo – UFES, Brazil)的高性能计算实验室(Laboratório de Computação de Alto Desempenho - LCAD)开发。IARA以福特Escape Hybrid为基础,采用了各种传感器和处理单元。其自主系统遵循自动驾驶汽车的典型架构[2],由多个子系统组成,其中包括建图器[3]、定位器[4]、动态障碍物跟踪器[5]、交通标志检测器[6][7]、路线规划器、路径规划器、行为选择器、运动规划器[8]、避障器[9]和控制器[10]等。IARA 使用的地图由LiDAR点云通过在线和离线建图方式生成。考虑到LiDAR测量值可能因环境条件(例如下雨、落叶、反射面不平整)或传感器本身噪声引起的测量误差而不准确,因此建图系统不能完全依赖LiDAR直接测量的距离和位置。因此,对于建图,有必要使用考虑所有这些不确定性的技术来尝试尽可能多地过滤传感器误差。

目前IARA中使用的算法旨在通过LiDAR传感器每次新测量值来更新区块占用的概率。为此,基于贝叶斯滤波器的占用栅格地图(OGM)算法[3]被应用于逐渐增加或减少栅格地图每个单元格的占用置信度。然而,这种方法对于远距离的目标不是很准确。此外,因为所使用的OGM算法没有考虑空间不连续性,有必要使用算法来推断任何传感器均不能观测到的单元格的占用情况。此外,建图算法需要处理数千行代码中的几种特殊情况,以找到正确提取传感器测量数据特征的最佳方法[3]。

图片
图1 NeuralMapper架构概述。左侧的输入显示了LiDAR点云原始数据。NeuralMapper将地面上的原始数据投影为一组2D统计图。统计图经过编码器、Context Module和解码器进行处理,以生成占用栅格地图作为输出。在地图中,未知单元格为蓝色,空闲单元格为白色,占用单元格为黑色。

受IARA建图方法的这些局限性以及深度学习的进步的启发,本文提出了一种基于深度神经网络(DNN)的占用栅格地图实时推断新方法,名为NeuralMapper。NeuralMapper是IARA自主软件架构的一个子系统,它接收LiDAR传感器数据作为输入,并生成汽车周围的占用栅格地图作为输出。在NeuralMapper中,每个LiDAR点云在LiDAR参考系中从球面坐标转换为二维笛卡尔坐标。然后,使用这些数据的统计数据从2D LiDAR数据中计算出五个矩阵(NeuralMapper的输入数据遵循Caltagirone等人[11]采用的数据形式)。这五个矩阵组合成一个五通道张量,用作NeuralMapper DNN的输入。所考虑的统计数据是落入汽车周围栅格地图的一个单元格的激光射线的数量,以及单元格中的被射线所击中的障碍物高度的最大值、最小值、平均值和标准偏差。

图片
图2 自动驾驶汽车典型架构总览[2]。
TSD:交通信号检测 MOT:移动对象跟踪。

网络的输出是一个占用栅格地图,它具有与每个栅格地图单元三个可能类别中每一个的相应概率:未知、空闲或已占用。该地图被转换至汽车参考系并发布到其他IARA的子系统(见图2)。NeuralMapper的框图如图1所示。

本文使用IARA采集实车数据评估了NeuralMapper。该系统使用IARA传感器数据构建的两个数据集进行了测试,第一个数据集的平均准确率为76.48%,第二个数据集的平均准确率为73.81%。本文还通过IARA评估了使用NeuralMapper地图进行定位,大多数IARA的定位误差小于0.2m,RMSE为0.28m。这些结果与其他文献中使用其他栅格地图建立方法的结果接近。

以下部分将通过文献综述和借助IARA的实车实验来评估该方法的能力。

2 相关工作

文献中提出了几种技术,这些技术使用神经网络和从传感器(如激光雷达、雷达、声纳等)获取的点云数据。这些传感器的数据用于多种用途,例如构建占用栅格地图、定位和3D点云语义分割。

桑托斯等人[12]提出了一种系统,该系统使用安装在机器人周围的超声波传感器数据作为前馈神经网络的输入,该网络确定机器人周围的单元格是空闲还是被占用。这项工作仅处理环境先验地图骨架中单元格的占用情况。

古普塔等人[13]建议使用声纳传感器提供的数据创建占用栅格地图。传感器的测量值被转换为环境的概率表示,描述网格单元是空的、被占用的还是未知区域。由于环境的变化会影响转换,因此使用神经网络来学习这些转换,使传感器数据更能适应变化。

韦斯顿等人[14]提出了一种使用原始雷达(radar)数据和LiDAR数据通过DNN创建占用栅格地图的技术。雷达传感器能够检测远距离和部分被遮挡的物体,并且比LiDAR便宜,但众所周知,由于存在多种相关噪声伪影,雷达扫描难以解释,而LiDAR系统提供精确、细粒度的测量。DNN使用由LiDAR数据生成的部分占用标签进行训练,并在动态城市环境中根据5小时的记录数据进行评估。

吴等人[15]提出了SqueezeSeg,这是一种CNN(卷积神经网络),用于对来自LiDAR点云的道路对象(例如汽车、行人和骑自行车者)进行语义分割。

CNN使用来自KITTI数据集[16]标记好的LiDAR点云和来自高保真游戏引擎的模拟LiDAR的数据进行训练。SqueezeSeg的输入是点云,输出是由条件随机场 (CRF) 细化的逐点标签图。每个点云的处理时间为8.7毫秒。Aksoy等人提出的SalsaNet[17]也是一个神经网络,它直接从LiDAR点云中分割出可供驾驶的自由空间和车辆。训练过程使用KITTI数据集[16],但它不提供可供驾驶的自由空间标签,因此他们提出了一个自动系统,使用神经网络MultiNet[18]在点云中对其进行标注。然后点云表示为4D鸟瞰图,其中包含有关最大和最小高度、反射率和投影点数量的信息。该图像用作训练DNN的输入。SalsaNet结果显示平均IoU为79.74%,而SqueezeSeg结果显示平均IoU为69.80%。

卡尔塔吉隆等[11]提出了一种仅使用LiDAR数据检测道路的神经网络方法。

DNN的输入是LiDAR的顶视图图像,其中点以灰度表示,代表平均海拔和密度。然后使用KITTI数据集[16]训练一个快速的全卷积神经网络(FCN),能够以94.15% 的精度检测道路。这项工作中采用的DNN架构基于文献[11]中使用的完全卷积神经网络,但目的和数据集不同。

3 基于LiDAR面向占用栅格地图生成的DNN

首先,应该注意OGM是用于推断地图上每个单元格的占用概率。每个单元格的占用概率可以假设为一个介于0和1之间的连续值,因此可以用来将单元格分类为空闲或已占用单元格。

A. NeuralMapper子系统

NeuralMapper(图1)是一个子系统,它接收IARA的LiDAR传感器数据作为输入,并生成汽车周围的占用栅格地图作为输出。NeuralMapper的输入数据遵循Caltagirone等人[11]所使用格式。首先,每个LiDAR点云在LiDAR参考系中从球面坐标转换为二维笛卡尔坐标。同Caltagirone等人[11]一样,从二维坐标矩阵计算五个统计矩阵,并在0和1之间进行归一化。这五个归一化统计矩阵组合成一个五通道张量,用作网络的输入。所考虑的统计数据是落入单元格的激光射线数量、最大/最小/平均/标准高度。

为了使FCN[11]输出适应IARA的地图,确定网络应返回三个类别的概率图:Occupied、Free和Unknown。因此,神经网络将使输出结果与IARA子系统中广泛采用的概率方法兼容(图1)。

通过这种方式,网络的输出是一个占用栅格地图,每个输出神经元(单元格)三个类中的每一个都具有相应的概率。该地图被转换至汽车参考系并发布到其他IARA的子系统。输出神经元概率按照如下规则转换为占用概率。如果最可能的类别是Unknown,则地图单元格接收值-1,否则类别Unknown的概率为零,并且其他两个类别的概率被归一化,使两者之和等于1。该代码作为IARA的模块可在https://github.com/LCAD-UFES/carmen_lcad获得。

B. 深度神经网络架构

图1显示了FCN的一般架构,它分为三大层,称为编码器、Context Module和解码器。

编码器接收输入并减少输入数据的大小,尝试最大程度地减少信息丢失。为此,两个普通卷积层被使用,它们有3x3大小的卷积核以及使用指数线性单元(ELU)激活函数且步长为1和32的特征映射[19],然后是一个卷积核为2x2步长为 2的最大池化层。

Context Module主要由扩展的卷积层构成。扩展卷积能够增加卷积滤波器的感受野,以增加推断连续地图单元之间连续性的能力。对于障碍物建图,传感器读数在长距离上存在许多不连续性。因此,应用扩展来预测障碍物在更远的地方的延续很有意义,在那里传感器不再非常有效。有8个具有 ELU 激活函数、3x3 卷积核和128个特征图的扩展卷积层。这些层的扩展逐渐增加,因此在最后一层有32x64的扩张。与Caltagirone等人[11]提出的工作不同,本文确定输出地图为正方形,范围为汽车周围60米。因此,每一层使用的扩展具有相同的量级(例如,最后一层具有64x64的膨胀)。

解码器是架构的最后一部分,神经网络处理过的数据通过去池化操作恢复其原始维度。所使用的去池化实现形式[11]保存了在最大池化层中提取的最大值的位置,以便在相同的位置再次插入这些值,同时将其他值设置为零。解码器继续使用另外两个具有3x3卷积核、步长为1、具有32个特征映射的普通卷积层和具有3个通道输出的最后一层。最后,特征图进入一个log softmax层,它返回一个多维图输出,其中每个维度是每个类的对数概率。因此,如第III.A节所述,通过比较网络输出中每个单元的这三个类中的每一个的概率来构建占用图。

4 实验方法

本节介绍了用于评估所提出系统的方法。首先,描述了实验中使用的数据集,然后是训练神经网络的超参数和程序。之后,本文提出了为定位生成真值的方法以及用于评估神经网络性能和定位精度的指标。

A. 数据集

训练深度神经网络需要大型数据集。首先,可以通过手动标记地图单元格或使用平面图来创建数据集。不过,成本较低的解决方案是借助IARA的离线地图系统从传感器数据日志生成输入和输出对。日志中的所有数据都用于生成环境的 OGM。然后,对于每个LiDAR点云,本文在OGM中裁剪一个以汽车姿态为中心、半径为60m的圆。该裁剪圆被定义为LiDAR点云的输出。

每个单元格考虑三个类:未知、已占用和空闲。由于OGM是概率性的,本文使用软标签而不是独热编码(one-hot encoding)。每个类别的概率由单元格的占用概率给出。图4说明了一个点云及其相关的输出。使用离线地图代替在线OGM的优点如下。首先,由于集成了多个瞬时地图,因此更准确。其次,它提供了更多的占用信息,使神经网络能够学习如何填充传感器未观察到的区域。

实验中使用了从传感器数据日志生成的两个数据集。这些数据集将被称为数据集1和数据集2。数据集记录在相同的环境中,即3.5公里的UFES环城公路,并分成三个不相交的区域,如图3所示。

图片
图3 UFES环城公路地图。绿色、橙色和红色分别显示了训练、验证和测试集区域

图片图片
图4 上图是最大高度统计图,是NeuralMapper的五个输入之一,下图是相应真值。两个图像都经过标准化以进行可视化




数据集1中的区域用于训练、验证和测试神经网络,而数据集2中的所有区域用于测试。请注意,在两个数据集中选择了相同的区域,并且数据集2中的区域之一对应于用于训练神经网络的相同区域。

数据集1是从2016年3月26日黎明收集的日志中提取的。数据集1具有1445次扫描和数据增强后(详细信息在下一节中介绍)共计7228 个样本,这些样本分为74%的训练集、10%的验证集和16%的测试集。日志是在黎明时记录的,以尽量减少移动物体的存在。数据集2是从2019年3月10日记录的日志中提取的。由于日志是在用于构建数据集1的日志三年后捕获的,因此随着时间的推移,它呈现出不同的特征,例如植被生长、新建筑物和道路变化。数据集2也有 1445次扫描和7228个带有数据集增强的样本。

车辆每行驶两米就会生成输入和输出对,以防止网络不同区域的数据不平衡。通过这样做,数据库不再有模拟日志中汽车移动较慢的区域的信息。

B. 训练

DNN 输入由五个关于汽车周围点高度的统计图组成。这些统计图由一个浮点张量表示,其中每个单元格代表一个20x20平方厘米的环境。汽车始终位于地图的中心。激光观察到的每个单元格都会存储最大高度、最小高度、平均高度、高度标准偏差和点数。为此,首先将云中的点进行坐标转换,从球面坐标转换为笛卡尔坐标。然后,位于同一单元格的点被分组并用于计算统计数据。最后,这五个统计维度(最大、最小高度、标准偏差和点数)在0和1之间归一化,并用作网络的输入。

为了对地图进行标准化,在使用高度的统计地图的情况下,上限值是LIDAR的高度位置(在本文案例中为1.86米),对于点数,计算了一个单元格内的最大可能点数(在本文案例中为64)。地图的单元格被初始化为-1,这是最小值。

从图4中可以看出,每张图像中障碍单元格的像素数远小于自由和未知单元格。这种现象导致网络倾向于选择最后两个类别而不是第一个类别。为了避免这种情况,使用了与每批中类的像素数成反比的权重,在计算误差时损失函数乘以权重。这种与不太频繁的类别相关的误差“评估”补偿了它们之间的不平衡[20]。

对于数据增强[21],本文对所有训练图像应用水平翻转和每个方向90度旋转,这将数据集增加了3倍。根据Caltagirone等人的工作[11]选择交叉熵损失函数和 ELU 激活函数,此外还有25%的去除率 神经网络训练了50个epoch,初始学习率为0.0005,每15个epoch的学习衰减率为 0.5。训练是在12GB Nvidia Tesla K40 GPU上进行的。

C. 生成定位真值

定位是自动驾驶汽车导航的重要任务。生成用于评估定位的真值非常具有挑战性。一个简单的想法是使用GPS与定位估计进行比较。然而,虽然全球一致,但GPS数据具有大量噪声,并且GPS测量值不一定与地图一致。

本文生成定位真值的方法类似于文献[4]、[22]和[23]中采用的方法。本文使用文献[3]中描述的GraphSLAM技术,使用来自GPS、里程计和LiDAR(用于处理闭环)的数据来估计车辆的位姿。然后,这些位姿用于使用NeuralMapper构建离线地图,之后定位模块用于估计车辆相对于NeuralMapper的位姿。在GraphSLAM优化的第二步中获得位姿真值。在优化的第二步中,除了来自 GPS、里程计和LiDAR(闭环)的数据外,定位模块输出还用作该方法的输入。通过这样做,本文鼓励在使用传感器数据纠正局部定位错误的同时与地图保持一致。

D. 评价指标

评估训练模型的指标是DNN输出中类别的平均准确率。为每个单元格预测的类别与真值进行比较,并在等式(1)中定义:

图片

其中VP是正确预测类别的单元格总数,TOTAL是数据库中的单元格总数VP和TOTAL考虑数据库中的所有图像。

在测试期间用于分析结果的另一个指标是混淆矩阵。每个矩阵行代表类别真值,而列代表网络的预测。因此,可以在视觉上检查预测更好或更差的类别。混淆矩阵的值都是每个类别总数的百分比,所有行的总和为每个类别的100%。矩阵的对角线代表网络关于真值的正确性。

此外,本文在自主导航模式下的真实世界环境中,对使用DNN和IARA自动驾驶汽车生成的离线地图进行了定性评估。

用于评估定位的指标与文献[22]和[23]中使用的相同。使用定位估计的位姿图片与第IV.C节中描述的获得的位姿真值图片进行了比较。选择的评价指标是由方程(2)给出的均方根误差(RMSE):

图片

本文还提供了误差的标准偏差以及定位误差小于阈值的样本百分比。考虑的阈值是0.2m、0.5m、1.0m和2.0m。

5 结果和讨论


为了评估NeuralMapper的性能,本文使用数据集1对DNN进行了50次训练。本文的模型在验证集上达到了76.5%的准确率,在训练集上达到了0.25的损失。图5显示了每个训练时期的训练损失和验证准确率。

使用来自数据集1的测试集,该模型实现了76.48%的平均准确率。表I显示了这个测试集的混淆矩阵。它表明该网络在对被占用单元格进行分类时不太准确,因为它仅正确分类了62.20%的样本。该网络对未知单元格的准确率为80%,对空闲单元格的准确率为73.45%。

表II显示了数据集2的测试区域的混淆矩阵。观察到测试区域与数据集1相同,但在不同的日期。结果显示被占用单元格误差增加,但该数据集的总平均准确度为73.81%。由于不同的车道、沥青和鹅卵石以及不同的海拔高度,测试区域具有挑战性。这可以从表III中给出的结果中看出,该结果显示了考虑数据集2中的所有区域(即数据集1中的训练、验证和测试区域)时的模型混淆矩阵。其达到的准确率为76.90%,这也显示了模型的泛化能力。

尽管测试显示占用类的准确率较低,但对预测的定性分析表明,该网络在道路上是准确的,并且大多数错误发生在外部区域。图6通过展示神经网络预测和真值之间的比较来说明这一事实。由于大多数激光读数集中在中心,因此预计外部区域的误差会在一定程度上出现。

需要注意的是,真值考虑了各种LIDAR的扫描,因为它是使用OGM生成的。这也使得为分割问题选择一个好的评价指标变得很重要。图6和图7比较了NeuralMapper的输出和来自单帧LiDAR扫描的概率占用栅格地图。

离线地图的主要用途是用于定位。因此,本文还评估是否可以使用NeuralMapper来估计自动驾驶汽车的定位。对于此评估,NeuralMapper和数据集1用于构建OGM,数据集2用于测试定位。图8显示了由IARA的定位技术[4] 实现的累积分布函数(CDF)图。92.8%的样本姿态误差小于0.5m,40.26%的样本姿态误差小于0.2m。表IV列出了汇总的指标。定位实现了0.28m的 RMSE,标准偏差为0.017m。这些结果等同于使用其他类型栅格地图的文献[4][22][23],它们表明NeuralMapper可以成功地用于估计自动驾驶汽车的定位。

本文通过使用IARA的自主模式导航平台来验证这些结果。视频(http://tiny.cc/9gqejz)展示了IARA的系统使用NeuralMapper进行定位和规划。规划模块接收地图作为输入,该地图是通过将来自NeuralMapper的信息与LiDAR捕获的瞬时数据合并而获得的。在整个实验过程中,汽车设法导航并保持在正确的车道内。它还成功地应对了移动障碍。该结果表明NeuralMapper可用于定位和规划。

在部分视频中可以观察到汽车轨迹中的一些轻微振荡。这些振荡可以通过运动规划器模块[8]的内部工作原理来解释。它依赖于精确的定位,以将汽车保持在计划的路径上,它的作用是补偿计划和执行轨迹中的不一致。如表4所示,在某些情况下,定位误差大于地图单元格(即 0.2m x 0.2m)。因此,由于这些错误,规划模块可能会采取行动来补偿轨迹中错误识别的不一致,这会导致IARA所遵循的路径中的振荡。

6 总结与展望

这项工作的主要动机是用神经网络替换占用栅格地图(OGM)算法,因为它们能够直接从数据中学习如何处理非线性,并且有可能减少数百行代码。

OGM中通常出现的空间不连续性表明,神经网络有潜力执行比概率映射更好的结果。这是因为当前使用的贝叶斯映射尽管暂时过滤了单元格中的噪声,但并未使用来自相邻空间的信息来估计占用概论。但是,可以合理地相信,对于普通物体,如果一个物体周围的所有单元都被占用,那么该物体也将被占用。另一方面,这种空间连续性自然嵌入在卷积神经网络中。

正如结果所示,即使语义地图结果看起来不如必要的准确,但鉴于汽车周围局部结构的保留,它们足以用于定位,并且也可以通过定位RMSE评价指标来确认。此外,定性结果显示IARA能够使用NeuralMapper以自主模式运行。通过这种方式,当前的OGM算法可以被深度神经网络取代,该网络使用示例来学习任务。

此外,本文的方法可以与其他类型的栅格图一起使用,例如反射率、颜色和多对象语义栅格图,在这些情况下,允许在DNN输入中包含更多信息。
在未来的工作中,必须在更大的数据集和使用几何变换并最小化预处理的不同架构上进行实验。

本文译自:
《A Large-Scale Mapping Method Based on Deep Neural Networks Applied to Self-Driving Car Localization》
文章来源:
2020 International Joint Conference on Neural Networks (IJCNN), 2020
作者:
Vinicius B. Cardoso, André Seidel Oliveira, Avelino Forechi, Pedro Azevedo, Filipe Mutz
原文链接:
https://ieeexplore.ieee.org/abstract/document/9207449



自动驾驶
收藏
点赞
2000