摘要
我们训练了一个卷积神经网络(CNN),将单个前向摄像头的原始像素直接映射到转向指令。这种端到端的方法证明了其惊人的能力。系统仅需最少的人类训练数据就能在有或没有车道标记的本地道路上以及高速公路上驾驶。它还在视觉引导不清晰的地方运行,例如在停车场和未铺设的道路上。
系统自动学习必要的处理步骤的内部表示,例如检测有用的道路特征,仅以人为转向角度作为训练信号。我们从未明确训练它去检测道路轮廓。
与问题的显式分解相比,例如车道标记检测、路径规划和控制,我们的端到端系统同时优化所有处理步骤。我们认为这最终将导致更好的性能和更小的系统。更好的性能将产生,因为内部组件自我优化以最大化整体系统性能,而不是优化人为选择的中间标准,例如车道检测。这些标准可以理解地被选为便于人类解释,这并不自动保证最大系统性能。更小的网络是可能的,因为系统学习以最少的处理步骤解决问题。
我们使用NVIDIA DevBox和Torch 7进行训练,并使用运行Torch 7的NVIDIA DRIVETM PX自动驾驶汽车计算机来确定驾驶方向。系统以每秒30帧(FPS)运行。
1 引言
卷积神经网络(CNN)[1]已经彻底改变了模式识别[2]。在CNN广泛采用之前,大多数模式识别任务都是通过一个初始阶段的手工特征提取,然后是一个分类器来完成的。CNN的突破在于它能够自动从训练样本中学习特征。CNN方法在图像识别任务中特别强大,因为卷积操作能够捕捉图像的二维特性。此外,通过使用卷积核扫描整个图像,与总操作数量相比,需要学习的参数相对较少。
尽管具有学习特征的CNN已经商业使用超过二十年[3],但由于两个最近的发展,它们在过去几年中的采用量激增。首先,像大规模视觉识别挑战赛(ILSVRC)[4]这样的大型、标记好的数据集已经变得可用于训练和验证。其次,CNN学习算法已经在大规模并行图形处理单元(GPU)上实现,这极大地加速了学习和推理过程。
在本文中,我们描述了一个超越模式识别的CNN。它学习了引导汽车所需的整个处理流程。这个项目的基础是在10多年前的国防高级研究计划局(DARPA)的一个幼苗项目中完成的,该项目被称为DARPA自主车辆(DAVE)[5],其中一个缩小比例的无线电遥控(RC)车穿过了一个充满垃圾的小巷。DAVE在类似的但并不完全相同的环境中接受了数小时的人类驾驶训练。训练数据包括两个摄像头的视频,以及人类操作员的左右转向命令。
在很多方面,DAVE-2受到了Pomerleau [6]开创性工作的启发,他在1989年构建了神经网络中的自主陆地车辆(ALVINN)系统。它证明了经过端到端训练的神经网络确实可以在公共道路上驾驶汽车。我们的工作不同之处在于,25年的进步让我们能够将更多的数据和计算能力应用于这项任务。此外,我们对CNN的经验让我们能够利用这项强大的技术。(ALVINN使用了一个全连接网络,按照今天的标准来看是很小的。)
尽管DAVE展示了端到端学习的潜力,并且确实被用来证明启动DARPA地面机器人应用学习(LAGR)计划[7]的合理性,但DAVE的性能还不够可靠,无法为越野驾驶提供一种完全的模块化方法的替代方案。DAVE在复杂环境中的平均撞车距离约为20米。
九个月前,NVIDIA开始了一项新的努力,旨在建立在DAVE的基础上,为公共道路驾驶创建一个稳健的系统。这项工作的主要动机是避免需要识别特定的人为指定特征,如车道标记、护栏或其他汽车,以及避免基于对这些特征的观察创建一系列“如果,那么,否则”的规则。本文描述了这一新努力的初步结果。
2 系统概述
图1展示了DAVE-2训练数据收集系统的简化框图。三台摄像机安装在数据采集车的挡风玻璃后面。与人类驾驶员应用的转向角度同步的时间标记视频被同时捕获。这个转向命令是通过接入车辆的控制器局域网(CAN)总线获得的。为了使我们的系统独立于汽车的几何形状,我们将转向命令表示为1/r,其中r是米为单位的转弯半径。我们使用1/r而不是r来防止在直线行驶时出现奇点(直线行驶的转弯半径是无限大)。1/r从左转弯(负值)到右转弯(正值)平稳过渡。
训练数据包含从视频中采样的单个图像,与相应的转向命令(1/r)配对。仅使用人类驾驶员的数据进行训练是不够的。网络必须学会如何从错误中恢复。否则,汽车会慢慢偏离道路。因此,训练数据通过添加显示汽车在车道中心不同偏移和从道路方向不同旋转的额外图像来增强。
图1:数据收集系统的高级视图。
可以通过左右摄像机获得两个特定的偏中心偏移图像。通过最近摄像机的图像的视点转换来模拟摄像机之间的所有额外偏移和所有旋转。精确的视点转换需要我们没有的3D场景知识。因此,我们通过假设地平线以下的所有点都在平坦的地面上,地平线以上的所有点都在无限远的地方来近似转换。这对于平坦地形效果很好,但是它为地面以上的物体,如汽车、杆子、树木和建筑物引入了失真。幸运的是,这些失真对于网络训练并不是一个大问题。转换图像的转向标签被调整为将在两秒内将车辆引导回期望位置和方向的转向。
图2展示了我们的训练系统的框图。图像输入到CNN中,然后计算出建议的转向命令。建议的命令与该图像的期望命令进行比较,CNN的权重被调整以使CNN输出更接近期望输出。权重调整是使用Torch 7机器学习包中实现的反向传播完成的。
图2:训练神经网络。
一旦训练完成,网络可以从单个中央摄像机的视频图像生成转向。图3显示了这种配置。
图3:使用单个前向中央摄像机生成转向命令的经过训练的网络。
3 数据收集
训练数据是通过在各种道路和不同的光照及天气条件下驾驶来收集的。大部分道路数据是在新泽西州中部收集的,尽管高速公路数据也从伊利诺伊州、密歇根州、宾夕法尼亚州和纽约州收集。其他道路类型包括有和没有车道标记的双车道道路、有停放车辆的住宅道路、隧道和未铺设的道路。数据收集在晴朗、多云、雾天、下雪和下雨的天气中进行,包括白天和夜晚。在某些情况下,太阳在天空中的位置很低,导致从路面反射的眩光和从挡风玻璃散射。
数据是通过我们的线控测试车收集的,这是一辆2016年的林肯MKZ,或者使用2013年的福特福克斯,摄像头放置在与林肯相似的位置。该系统不依赖任何特定车型或型号。驾驶员被鼓励保持完全警觉,但除此之外,像平常一样驾驶。截至2016年3月28日,大约收集了72小时的驾驶数据。
4 网络架构
我们训练网络权重,以最小化网络输出的转向命令与人类驾驶员的命令或偏移中心和旋转图像的调整转向命令之间的均方误差。我们的网络架构如图4所示。网络由9层组成,包括一个归一化层、5个卷积层和3个全连接层。输入图像被分割成YUV平面并传递给网络。
网络的第一层执行图像归一化。归一化器是硬编码的,在训练过程中不进行调整。在网络中执行归一化允许归一化方案随着网络架构而改变,并通过GPU处理加速。
卷积层设计用于执行特征提取,并通过一系列变化层配置的实验来经验性选择。我们在前三个卷积层中使用步幅为2×2和5×5核的步幅卷积,在最后两个卷积层中使用3×3核大小的非步幅卷积。
我们在五个卷积层之后跟随三个全连接层,导致输出控制值,即转弯半径的倒数。全连接层被设计为作为转向的控制器,但我们注意到,通过端到端训练系统,不可能清晰地划分网络的哪些部分主要作为特征提取器,哪些作为控制器
5 训练细节
5.1 数据选择
训练神经网络的第一步是选择要使用的帧。我们收集的数据被标记为道路类型、天气条件和驾驶员的活动(保持在车道上、变道、转弯等)。为了训练一个CNN进行车道跟随,我们只选择驾驶员保持在车道上的数据,并丢弃其余部分。然后我们以10 FPS的速率对视频进行采样。更高的采样率将导致包含非常相似的图像,因此不会提供太多有用的信息。
图4:CNN架构。该网络拥有大约2700万个连接和25万个参数。
为了消除对直线驾驶的偏见,训练数据包括了更高比例的代表道路弯曲的帧。
5.2 增强
在选择最终帧集后,我们通过添加人工偏移和旋转来增强数据,以教网络如何从不良位置或方向中恢复。这些扰动的幅度是从正态分布中随机选择的。该分布的均值为零,标准差是我们用人类驾驶员测量的标准差的两倍。随着幅度的增加,人工增强数据确实会添加不需要的伪影(见第2节)。
6 模拟
在实际道路测试训练有素的CNN之前,我们首先在模拟中评估网络的性能。模拟系统的简化框图如图5所示。
模拟器采用人类驾驶的数据收集车辆上的前置摄像头录制的预先录制的视频,并生成图像,这些图像近似于如果CNN在驾驶车辆时会出现的情况。这些测试视频与人类驾驶员生成的记录转向命令同步。
由于人类驾驶员可能不会一直驾驶在车道中心,我们手动校准与模拟器使用的视频中的每个帧相关的车道中心。我们称这个位置为“地面真实情况”。
模拟器转换原始图像以考虑与地面真实情况的偏差。请注意,这种转换还包括人类驾驶路径与地面真实情况之间的任何差异。转换是通过第2节中描述的相同方法完成的。
模拟器访问录制的测试视频以及在捕获视频时发生的同步转向命令。模拟器将所选测试视频的第一帧,调整为任何与地面真实情况的偏差,发送到训练有素的CNN的输入。然后CNN返回该帧的转向命令。CNN的转向命令以及记录的人类驾驶员命令被输入到车辆的动态模型[8]中,以更新模拟车辆的位置和方向。
模拟器然后修改测试视频的下一帧,以便图像看起来像是按照CNN的转向命令驾驶的车辆的位置。然后这个新图像被馈送到CNN,过程重复进行。
模拟器记录虚拟车辆的偏心距离(车辆与车道中心的距离)、偏航和行驶距离。当偏心距离超过一米时,会触发虚拟人类干预,并将虚拟车辆的位置和方向重置为与原始测试视频的相应帧的地面真实情况相匹配。
图5:驾驶模拟器的模块图
7 评估
我们的网络评估分为两个步骤,首先是在模拟中,然后在实际道路测试中。
在模拟中,我们让网络在我们的模拟器中为一系列预先录制的测试路线提供转向命令,这些路线对应于在新泽西州蒙茅斯县大约三个小时和100英里的驾驶。测试数据在不同的光照和天气条件下采集,包括高速公路、本地道路和住宅街道。
7.1 模拟测试
我们估计网络能够驾驶汽车的时间百分比(自主性)。该指标是通过计算模拟人类干预的次数来确定的(见第6节)。这些干预发生在模拟车辆偏离中心线超过一米时。我们假设在现实生活中,实际干预需要总共六秒钟:这是人类重新控制车辆、将其居中,然后重新启动自动驾驶模式所需的时间。我们通过计算干预次数,乘以6秒,除以模拟测试的经过时间,然后从1中减去结果来计算自主性百分比:
图6:模拟器交互模式的屏幕截图
见第7.1节有关性能指标的解释。左侧的绿色区域由于视点转换而未知。地平线下方突出显示的宽矩形是发送到CNN的区域。
因此,如果我们在600秒内有10次干预,我们的自主性值将是:
7.2 道路测试
在训练有素的网络在模拟器中表现出良好的性能后,网络被加载到我们的测试车辆中的DRIVE™ PX上,并进行道路测试。在这些测试中,我们通过测量汽车自主转向的时间比例来衡量性能。这个时间不包括变道和从一条路转到另一条路的转弯。对于从我们在新泽西州Holmdel的办公室到Atlantic Highlands的典型驾驶,我们大约有98%的时间是自主的。我们还在花园州公园大道(一条有多条车道的分隔高速公路,有上下匝道)上行驶了10英里,没有干预。
可以在[9]看到我们的测试车辆在不同条件下驾驶的视频。
7.3 内部CNN状态的可视化
图7和图8显示了两个不同示例输入的前两层特征图的激活情况,一个是未铺设的道路,另一个是森林。在未铺设道路的情况下,特征图激活清楚地显示了道路的轮廓,而在森林的情况下,特征图主要包含噪声,即CNN在这张图像中没有发现有用的信息。
这表明CNN能够自己学习检测有用的道路特征,即仅以人为转向角度作为训练信号。我们从未明确训练它去检测道路的轮廓。
图7:CNN如何“看到”一条未铺设的道路。上部:发送到CNN的摄像机图像的子集。左下角:第一层特征图的激活。右下角:第二层特征图的激活。
这表明CNN自行学会了检测有用的道路特征,即仅以人为转向角度作为训练信号。我们从未明确训练它去检测道路的轮廓。
图8:没有道路的示例图像。
前两层特征图的激活看起来主要包含噪声,即CNN在这张图像中没有识别出任何有用的特征。
8 结论
我们已经通过实证表明,卷积神经网络(CNN)能够学习整个车道和道路跟随任务,而无需手动分解为道路或车道标记检测、语义抽象、路径规划和控制。少量的训练数据,来自不到一百小时的驾驶,就足以训练汽车在多样化的条件下运行,在晴朗、多云和下雨的天气条件下的高速公路、本地和住宅道路上。CNN能够从非常稀疏的训练信号(仅转向)中学习有意义的道路特征。
例如,系统学会检测道路的轮廓,而无需在训练期间需要显式的标签。
需要更多的工作来提高网络的鲁棒性,找到验证鲁棒性的方法,并改善网络内部处理步骤的可视化。