Python和VizViewer进行自动驾驶数据集可视化

探索Lyft预测数据集与一个新的可视化工具包

(本篇文章动图超过了CSDN上传限制无法上传,所以请访问原文地址或关注我们的同名公众号deephub-imba查看)

介绍

作为最近发表的论文和Kaggle竞赛的一部分,Lyft公开了一个用于构建自动驾驶路径预测算法的数据集。数据集包括语义地图、自我车辆数据和车辆附近移动物体的动态观察数据。Lyft对这个数据集提出的挑战是使用这个数据来建立一个模型,可以预测移动物体的路径,以及基于AV传感器和感知堆栈的观察得出的自动车辆(AV)应该走的路径。

更具体地说,挑战在于,给定一组关于当前车辆状态及其周围环境的信息,以预测最佳计划—一组动作和行为让车辆安全自主导航。

Lyft在L5预测数据集中提供了大量的训练数据;数以万计25秒的数据序列超过100GB。除了这些数据,Lyft还提供了一组用于解析和可视化数据的工具。

本文将使用这些工具和一个名为VizViewer(简称“VV”)的新数据可视化平台探究L5预测数据集的细节。利用VizViewer平台,我们将揭示有关数据的深刻见解,同时讨论可视化技术对数据集调优和特性工程的好处。最后,我们将预览车道预测可视化效果,该可视化效果可用于解决一般的路径规划问题。

数据集结构

在自动驾驶的背景下,需要考虑两个通用的数据子集:静态环境和动态环境。 前者将包含大部分随时间保持相对固定的数据,例如路网路径,当前道路的车道数量,交通标志和交通信号灯等。后者将包含有关变化的驾驶条件(例如位置)的数据 以及附近行人或车辆的速度,或即将到来的交通信号灯的颜色。

L5数据集提供这两种数据类型的数据。 一种形式是语义图,有时也称为HD图[1],它对有关静态驾驶环境的详细信息进行编码。 第二个是用于动态时间序列数据的庞大“场景”数据库。 Lyft提供的L5套件包括用于从这两个来源提取数据的工具。

语义图概述

在数据集中,静态环境由语义图定义。 可以将其视为环境2D地图,其中已密集地标注了适合驾驶环境的信息。 语义图提供了预期驾驶环境的预定义; 如果没有语义图,则该静态信息将需要由车辆的传感器和CPU不断感知和解释。 因此,语义图是用于预先计算和分担涉及AV规划和预测问题的许多工作的强大工具。

语义图本身包含以下各种属性:

  • 道路及其车道的有向图
  • 道路车道线的物理位置(低至厘米)
  • 停车线,停车标志,交通信号灯,人行横道和其他交通控制元素的物理位置
  • 速度限制
  • 给定交通信号灯的可能状态(例如,红色,绿色,黄色)及其控制交通的车道(例如,左转弯,通过车道,右转弯)
  • 停车区(特别是如果它们共用一条车道)

场景数据库概述

数据集中编码的动态特征包括“自我”车辆(收集数据的AV),“代理”(自由移动的观察对象)和交通灯状态(“红色”,“绿色”, “黄色”)。每个座席还具有“类别”标签,将其描述为一组常见对象类型的概率,例如汽车,行人,骑自行车的人等。这三个数据源被编码并分别以表格形式编制索引。

自我和主体的空间特征包含物体的“姿势”(它们的x,y,z笛卡尔坐标和方向),对于主体而言,它们的“范围”(物体的大小)。每个数据样本都有一个时间戳,所有具有共同时间戳的观察值都代表数据的“帧”。 “场景”由相对于时间的连续观察帧序列组成。场景使用索引列表将其他三个数据表中的每个帧链接到表中的每个记录。

必须注意这种以场景为中心的结构背后的动机。 在许多机器学习问题中,每个基于时间的数据样本都独立用作示例来训练模型。 但是,在此数据集中,整个场景(作为数据样本的集合)是用于训练机器学习模型的数据的原子单位。

其原因应该是相当直观的;要预测一组物体的运动轨迹,样本必须前后一致,并随时间因果关联,以建立对运动的准确描述。如果使用来自不同场景的数据样本的混合物来生成路径,所产生的路径很可能是完全不一致的;物体会以不可能的方式移动,远离真实值。考虑到在路径规划中需要时间上的一致性,我们将使用VizViewer全面检查的数据是如何构建的。

VizViewer是什么呢?

VizViewer是一个用于协作和可视化复杂、多模态数据集的web应用和平台。它由一套通信、数据处理和可视化组件组成,这些组件绑定在一个可访问且易于使用的仪表盘UI中。VV提供了解释数据和加速数据分析工作流生产力的工具。它通过一个内聚的,可配置的,交互的,和通用的工具集来分析不同模式的数据集,同时与Python和jupyter notebook交互。

简而言之,VizViewer是一种有用的编码工具扩展,可用于数据探索和洞察具有不同类型内容的密集数据集。在下一节中,我们将使用VizViewer探索L5预测数据集的特征,以更好地理解数据,构建改进的训练集,并利用它调试和评估模型。

在这里插入图片描述



语义地图可视化

L5预测数据集工具包附带了一个简单的工具,可以将语义地图和场景数据一起可视化。该工具可以采用一组特定的坐标和尺寸来生成道路、车道线和其他标记元素的图像。当车道的交通受到交通灯的影响时,也可以通过将特定车道标记为特定的颜色来渲染车道的动态状态,即当交通灯为红色时,它所控制的车道也被标记为红色。这些图像可以合并成一个短片剪辑的场景,如下所示。

作为替代方案,VizViewer有一个交互式的3D渲染工具包,它可以通过自由的形式探索和特定场景的视图来渲染语义地图。该地图可以像其他在线地图工具一样缩放,并支持卫星和矢量地图层。

使用VV,可以导航和检查地图的细节,这些细节对于训练我们的模型可能很有趣。例如,如果我们正在寻找与向左转向多车道街道相关的示例,我们可以检查地图以找到适合这个情况的街道交叉口,然后根据感兴趣的区域的坐标过滤我们的示例。为了帮助探索,还可以通过单击地图元素来选择它们,以查看有关元素的更多细节。

VV与Python集成,允许使用Python代码聚合和处理数据,然后通过Python API将数据发送到VV进行渲染。例如,VV具有数据查询特性,允许基于感兴趣的特性在3D视图中突出显示对象。特征查询可以在Python中定义;然后,通过API调用,VV指示板将更新、查找并选择满足这些条件的特性。下面的图片显示了语义地图搜索结果,突出显示了最小车道数减少的道路标准。这可以帮助识别为特定驾驶场景(如高速公路、住宅街道、车道、停车场)收集样本的区域。

# example query command for marking roads with 3 to 5 lanes

vv.semantic_query({ "where": 
"msg.kind == 'road' && msg.num_lanes >= 3 && msg.num_lanes <= 5" 
})

总而言之,VizViewer的3D交互式映射工具特性允许数据建模师轻松地检查语义映射中的上下文信息。此外,在语义映射中对特定属性的可视化搜索可以帮助选择训练集和建模工作流。

特性的增广

如前所述,场景数据库包含场景中物体的空间和方向坐标,这些坐标被组织成一个时间序列的帧。坐标描述了相对于语义图的原点的绝对值。我们将探索如何将这些原始数据转换为更有利于数据解释和创建机器学习模型的附加信息。

下面是一个VV图,显示了在一个特定场景中行驶在左曲线上的车辆的各种空间特征。上面的图表使用来自数据集的原始数据,在主要垂直轴上绘制X和Y位置,在另一个垂直轴上绘制偏航(方向)。底部的图表通过绘制场景数据系列中第一帧的delta,提供了关于X和Y值变化的更引人注目的细节。偏航值在两张图中变化相等,表明车辆在最初的10秒内正在转弯。

在机器学习的背景下,特征增强和数据工程是将数据塑造成一种形式,以提高模型的收敛性和准确性的过程。例如,如果特征值被调整到一个更小的范围内,模型可以更快地收敛。上面的示例说明了可以将原始数据转换为在较小的值范围内突出数据中更多的底层细节。在上述情况下,将图由绝对值改为值的增量,在相同大小的图中,时间序列的变化更加明显。此外,调整数据使其与场景相关联可以更容易地解释。对于我们上面的例子,使用场景初始帧的相对值将生成标准化的场景,以便于在检查不同场景时进行比较。

一些有用的特征可以从物体运动的空间数据中得到。这些可以用来为给定的对象类型建立运动模型。例如,因为汽车有轮子,它们应该主要向前和向后移动,而不是自由地左右移动(非完整运动)。因此,一个独立跟踪方向、纵向和横向运动的运动模型是可取的。通过运动模型,可以训练、模拟和测试对象类型的合适的动力学特性。下面是一些可以通过计算来辅助描述运动模型的增强值。

  • 纵向(向前/向后)速度、加速度和抖动(加速度的一阶导数)
  • 横向(侧对侧)速度、加速度和颠簸
  • 偏航率(方向变化),偏航加速度,偏航颠簸

另一组派生特性可以为两个对象之间的关系建模。这些特性将帮助训练模型了解如何根据物体(例如,当你接近一个物体时减速)和环境(例如,当你接近一个转弯或停车标志时减速)之间的动力学情况生成规划的路径。

  • 物体之间的距离和相对速度(自我和行为人)
  • 对象和语义地图特征(交通灯、停车线、人行横道)之间的距离
  • 当前或期望的车道线的方向
  • 当前或希望的泳道内的位置

上面的图来自VV,显示了一些增强的特性,比如速度和加速度。值得注意的是在计算这些派生值时使用了滤波和平滑。虚线代表未过滤的值,实线代表从样条插值方法得到的平滑值。平滑是通过Python代码应用的,以帮助一个训练模型的收敛使用这些特性。下面的代码演示了如何平滑增加的值。

import numpy as np
from scipy.interpolate import splprep

"""
   yaws - numpy array to yaw values for each frame
   t - timestamps for each frame
"""

weights = np.ones(len(t))
smooth = len(self.weights)
# higher order polynomial of odd degree for good fit
degree = 5
tck, u = splprep(yaws, weights, t, k=degree, s=smooth)
yaws_spline = splprep(yaws, t, weights=weights, degree=5, smooth=smooth)
yaw_rate = yaws_spline(deriv=1)
# calculate 2nd order derivatives
yaw_accel = yaws_spline(deriv=2)
# calculate 3rd order derivatives
yaw_jerk = yaws_spline(deriv=3)

使用VizViewer进行数据探索和可视化

在详细描述了数据特性之后,研究和可视化这些特性对于构建ML模型的训练和验证集非常有帮助。我们将深入研究这些数据,描述VizViewer是如何帮助完成这些任务的。

为了进行探索,我们将设置一个仪表盘,以方便查看不同模式的数据。VizViewer提供了一个可配置的仪表板,用于构建最适合数据探索任务的data-viz布局。虽然这种范例不同于Jupyter笔记本中的内联可视化,但是这种替代UI提供了额外的全面性、自定义性和交互性,超出了笔记本代码单元的范围。当一个任务需要比较和综合多个特征数据流到一个内聚的表示时,这是可取的,我们将进一步研究。

此外,可以配置仪表板,以用户选择的最优方式安排可视化组件的面板。例如,要查看空间数据集模式,选择3D映射组件和图表组件来提供整体视图。可配置图表,以各种形式显示数据;时间序列图和直方图用于此特定任务。图和柱状图的复合视图示例如下所示。

查看上面的可视化过程,地图显示了ego vehicle在所有样例数据集场景中所采取的路径(洋红色)。下面,较大的直方图视图显示了特征数据在所有场景中的分布情况。我们可以看到数据集中在一个特定的预定路径。大多数特征的数据服从正态分布,但不是所有情况;速度遵循双峰分布模式,大多数数据样本要么接近零,要么接近13米/秒(30英里/小时),这是大多数城市街道的常见速度限制。下图显示了100个箱子中多个特征的归一化直方图和一个绘制速度值概率分布的非归一化直方图。

数据的整体视图是有用的,但它同样有用的是深入到特定的场景,以探索是否在我们的派生计算跨数据集的一致性。通过VV的可配置选择功能,可以在地图上通过点击路径选择特定的场景,显示更多关于场景时间序列数据的细节。在下面的例子中,当场景路径的一部分在左边的地图上被选中时,右面的ego车辆的运动图就会更新。使用这个特性,数据工程师可以在语义图的不同部分快速验证这些运动值的一致性。例如,速度/加速度应该在急转弯时减速,因此地图将帮助隔离这些潜在的场景以进行验证。

在这里插入图片描述

我们可以看到的细节,车辆的纵向和横向速度为一个选定的场景内的图像上面。对于沿直线路径采集数据的场景,横向速度和偏航率将保持接近于零。但是,如果选择一个转弯或曲线的路径,预期的可视化结果是增加横向速度和偏航率。这幅图像通过地图的不同部分证实了上述两种结果。

热图分析

为了检查速度是如何受到位置的影响,可以使用热图特征分析聚合数据统计。热图收集数据到一个网格,然后分配一个颜色集的数据分布。热图显示了数据样本所在区域的颜色,而颜色本身代表了特征的大小。例如,下面是自我车辆速度的热图。我们可以看到一个模式高速样本(明亮的阴影)收集的特定道路上的地图。相比之下,速度较低(颜色较深)的样本是在较小的街道上采集的。这可以指示地图上快速移动的交通与较慢的、更有管制的交通的区域。

一个需要讨论的重要主题是代理观测的一致性。在每个场景中,可以观察到一组代理;然而,许多代理观察可能是短暂的或零星的,只在很短的时间跨度被标记和跟踪,而不是整个场景长度。下面的热图说明了这一点,显示了当序列帧的最小数目在3秒的间隔内从0增加到9秒时,样本的数目在减少。以25秒为场景长度,代理跟踪序列较长的场景相对稀疏;因此,任何稳健的预测模型都必须在非顺序的数据帧之间进行推断。

无论稀疏性如何,具有较高的代理框架连续性的场景都将是更有价值的代理数据示例用于训练。观察帧的数量越长,在更长的时间范围内对路径的预测就越准确。为了避免基于位置的偏见,从地图的尽可能多的部分收集这些不太常见的例子是很重要的,所以使用热图将有助于完成这项任务。

我们可以直观地观察到的另一个有趣的发现是速度与观察次数的负相关关系。下面的图片显示了两张热图,自我车辆速度(蓝色)和探员观察密度(红色)。在速度较低的地区,可能会导致代理观察计数的增加。虽然这在一开始可能不明显,但当我们观察这些相关性在地图上的哪个位置出现时,原因就应该很清楚了;这些发生在十字路口,那里的速度可能会由于红绿灯或停止标志而降低,因此产生了更高的可能性,从两个街道的交通观察额外的代理。

总之,我们发现了关于数据的一些有用的见解,这是模型构建过程中的一个重要步骤。为了全面回顾数据,我们可以使用工具,如热图和不同比例的直方图来识别可能有利于在我们的模型中捕获的空间模式。能够通过交互选择轻松地访问高层和低层的数据也很有帮助。通过探索过程获得的见解将导致更好地确定数据集中可能存在的相关性和偏差。它还将提供有关特定数据样本的可用性、分布和质量的更好信息。有了这些知识,我们可以更好地特征工程师训练集,避免过拟合或不拟合某个模型驱动的子集的行为。

路径评估与可视化

在从数据探索到模型开发的过渡中,我们将把焦点从数据的全局视图转移到局部场景。我们将探索可视化场景数据和路径数据方面的调试和评估。

如上所示,VizViewer中的本地场景视图提供了车辆及其语义环境的3D模拟,以及代理的标签、车道状态、交通灯状态、代理的标注边框(黄框和蓝框)以及标注的旅行计划路径(蓝框)。各特征图与模型模拟同步,统一布局。VV还提供了一个UI来控制模拟的状态,如播放和暂停按钮、速率控制和离散的时间戳调整。场景摄像机是完全交互式的,允许可视化的场景的不同角度。这些特性在调试场景中的模型行为时非常有用。

作为路径预测模型的一部分,一个子问题是确定给定车辆的当前车道。如果我们能准确地检测到车辆行驶的车道,我们就能建立一个模型,根据姿态和派生的运动特征,预测车辆将会在哪里自信地行驶。此外,还需要语义地图来确定车辆可能通过的环境中的车道。

在这个探索过程中,我能够训练一个具有各种姿态特征和语义地图数据的神经网络,以确定当前车道和可能的下一个车道的估计。使用VizViewer,可以可视化泳道线和候选泳道,并使用来自SVM网络的附加数据进行注释(例如,原始回归值、置信分数)。通过加载一个场景,运行可视化模拟,并使用交互式3D视图,可以检查和测试产生的路径。

蓝色的车道部分突出了可能的预测路径,较深的颜色表示对该路径的信心程度较高。此外,可以单击路径以公开底层数据,比如置信度评分。在上面的示例场景中,车辆接近一个三向停车标志。当它停下来时,对它将继续前进的预测是相当高的。当车辆开始向前行驶时,预测开始转向左转,置信值随着车辆通过转弯而增加。改进后的模型包含更多的数据,比如考虑行人的运动以及停车和转弯之间的延迟,可以更快地做出左转预测。

随着模型的进一步开发,可视化可以帮助确定规划的路径执行得如何。偏离车道可以被检查,与其他物体的潜在碰撞可以被检测并突出显示。这种评估可以同时对自我和代理进行,检测路径何时相交。平滑度对于精确的行为建模也很重要。使用图表功能来显示诸如速度和加速度等属性也将有助于评估预测路径的平滑程度。为了实现这些目标,VV为模型调优和评估提供了一个有益的UI。

最后总结

Lyft预测数据集被证明是一个庞大的数据集,具有一些有趣的模式研究和预测算法的潜力。将自由形式代理观测数据纳入运动预测是有益和有价值的。另外,SDK提供了有用的数据提取工具;但是数据集的结构很容易通过SDK的一个子集导航。

关于数据集软件包有一些问题。 该数据集仅包含针对少数街道类型的自我车辆的预先计划的路径。 希望在将来,Lyft将扩展数据集,以包括从一组异构街道收集的样本。 另一点是代理商标签的质量有时很差; 标签分配不正确或代理中出现明显的异常运动,但这应该是一小部分数据样本所期望的。 此外,尽管L5套件提供了可视化工具,但它作为起点非常有用,但对数据探索的帮助却远远不足。 表面上,提供可视化工具是一种为基于可能的卷积神经网络(CNN)的推理模型生成训练数据的方法,而不一定是为数据探索而设计的[2]。

通过使用L5工具、VizViewer和Jupyter笔记本,我们以新颖而有用的方式探索并可视化了数据集。具体来说,VV提供了创建自定义仪表板的能力,该仪表板可以从Python代码接收数据,以便进行上下文可视化。交互式图表、地图、3D可视化和模拟被合成和同步,以促进数据发现、探索和模型调试过程。此外,与传统的基于笔记本的UI工具(如Matplotlib)相比,VV的交互式可视化特性提供了更自由、更有效地执行这些任务的方法。

参考文献

[1] Lyft Level 5, Rethinking Maps for Self Driving, (2018), Lyft Level 5 Blog.

[2] Houston, Zuidhof, Bergamini, et al., One Thousand and One Hours: Self-driving Motion Prediction Dataset (2020). Baseline motion prediction solution (page 6).

属性:本文中显示的图像使用的数据来自Lyft L5预测数据集。本文提供了关于这个数据集的教育内容和批判性的讨论。

作者:Linda Chen.

deephub翻译组

原文地址:https://towardsdatascience.com/autonomous-driving-dataset-visualization-with-python-and-vizviewer-24ce3d3d11a0

已标记关键词 清除标记
【为什么还需要学习C++?】 你是否接触很多语言,但从来没有了解过编程语言的本质? 你是否想成为一名资深开发人员,想开发别人做不了的高性能程序? 你是否经常想要窥探大型企业级开发工程的思路,但苦于没有基础只能望洋兴叹?   那么C++就是你个人能力提升,职业之路进阶的不二之选。 【课程特色】 1.课程共19大章节,239课时内容,涵盖数据结构、函数、类、指针、标准库全部知识体系。 2.带你从知识与思想的层面从0构建C++知识框架,分析大型项目实践思路,为你打下坚实的基础。 3.李宁老师结合4大国外顶级C++著作的精华为大家推出的《征服C++11》课程。 【学完后我将达到什么水平?】 1.对C++的各个知识能够熟练配置、开发、部署; 2.吊打一切关于C++的笔试面试题; 3.面向物联网的“嵌入式”和面向大型化的“分布式”开发,掌握职业钥匙,把握行业先机。 【面向人群】 1.希望一站式快速入门的C++初学者; 2.希望快速学习 C++、掌握编程要义、修炼内功的开发者; 3.有志于挑战更高级的开发项目,成为资深开发的工程师。 【课程设计】 本课程包含3大模块 基础篇 本篇主要讲解c++的基础概念,包含数据类型、运算符等基本语法,数组、指针、字符串等基本词法,循环、函数、类等基本句法等。 进阶篇 本篇主要讲解编程中常用的一些技能,包含类的高级技术、类的继承、编译链接和命名空间等。 提升篇: 本篇可以帮助学员更加高效的进行c++开发,其中包含类型转换、文件操作、异常处理、代码重用等内容。
©️2020 CSDN 皮肤主题: 技术工厂 设计师:CSDN官方博客 返回首页