文章发表于 2015,部分内容随着时代的更迭已经不再先进,例如目前大多数模型使用的方法为深度强化学习,而不是深度学习。但作为自动驾驶的入门者,本文依然值得阅读。

1. 简介

本文的主要贡献是提出了一个深度学习自动驾驶的范式。在此之前,基于视觉的自动驾驶系统有两种主要的范式:解析整个场景以做出驾驶决策的中介感知方法 (Mediated Perception),以及直接将输入图像映射到回归器的驾驶动作的行为反射方法 (Behavior Reflex)。而本文提出的范式介于两者中间,是通过输入图片获取少量的指标,进而控制驾驶动作的方法。

自动驾驶系统的三种范式

2. 自动驾驶系统介绍

2.1 驾驶感知系统

本文中的方法使用 TORCS 驾驶游戏进行模拟训练。该游戏可以提供的指标性参数有:自主车辆的速度,相对路中心线的距离,与其他车辆之间的距离。通过对游戏以单一人称视觉的录屏作为训练集,使用当时最先进的卷积网络 (ConvNet)模型,训练一个可以从驾驶图片中获取上诉指标参数的 AI。

本文的测试场景是高速公路。因此对驾驶行为有影响因素最多只涉及到以自主汽车为中心的三条车道。

此外驾驶模式 (mode) 主要分为两种:1) 沿着车道中心线行驶;2) 变道或减速以避免与前车发生碰撞。为了使得两种模式之间有着平滑的过度,在场景中为这两个模式设置了重叠区域,如图 3(f) 所示。

并为此设计了两组感知器:1) 车道感知;2) 汽车感知

驾驶情况的指标有:1) 航向角;2) 到附近车道标记的距离; 3) 到前车的距离

以上指标在驾驶场景中的情况如下图所示,共 13 个指标:

驾驶场景中的指标演示

关于这些指标的详细解释请看下表:

指标说明

以上指标为 ConvNet 的输出量,同时也是驾驶控制系统的输入量。这些指标中,除了航向角外,这些条件对驾驶控制的影响都需要一些条件来激活。比如在 沿着车道中心线行驶时,到最左侧车道线,和最右侧车道线的感知的输出就会被关闭。或者当车辆行驶路段只有一条车道时,也会关闭对最左或最右车道的感知输出。

2.2 驾驶控制系统

转向控制:由汽车的位置和姿态来计算,目的是最小化汽车当前位置和车道中心线之间的距离,其计算公式如下。当汽车改变车道线时,该参数的中心线也会随之改变。

[公式]

其中,[公式] 是一个随驾驶环境改变而改变的系数。

预期的速度:系统会计算一个时间步长 (Time step) 计算一次预期速度 [公式],然后会有一个控制器来使车辆的真实速度得到预期。预期速度有一个基础值,为 72km/h。如果汽车需要转向,则会减少,如果需要超车则会加速。如果需要跟随前车,则预期速度则由与前车之间的距离决定,其公式如下:

[公式]

其中,[公式] 为与前车的距离。[公式]  [公式] 为矫正系数,为了使得车辆的速度平稳变化。

控制系统的逻辑

3. 实施

感知系统的卷积神经网络是一个由 Caffe 构建的标准 AleNet 架构。共有 5 个卷积层 和 4 个全连接层。分别输出 4096, 4096, 256, 13 个维度。最后的那个 13 即我们的 13 个指标,并将这 13 个指标统一化到范围: [0.1, 0.9] 。最后使用 Euclidian loss 作为损失函数。

之后文章讲解了一下模拟器的设置,这里就不说了,总之是为了尽可能的模拟真的交通场景。

训练过程可以通过直接获取游戏内置的驾驶场景。但这些驾驶场景比较单一,因此通过人为的控制,可以收集到一些极端情况,比如:将车开到车道外,或与障碍物相撞。从而使得神经网络更加鲁棒。

训练集共有 484,815 张图片,初始学习率为 0.01,mini-batch 为 64 张随机的图片。模型共迭代了 140,000 次。

在测试的软件为 TROCS,自动驾驶系统的输入信息为第一人称的车前窗驾驶图片,以及当前车速。由于输入量只有一个前方的场景图片,因此无法判断在超车时,后方是否会出现追尾情况。为了避免追尾,将模拟环境中的车辆速度都设置为低于自主车辆,因而可以完成安全的超车行为。

模型的实际效果如下:

实际效果

视频链接 Youtube | DeepDriving: Learning Affordance for Direct Perception in Autonomous Driving

4. 总结

关于该模型的性能这里就不评估了,因为和当前最先进的技术相比差远了。

该模型提出了使用深度学习的方式来做感知器,从而获取足够的控制指标。控制指标通过一段基于逻辑的控制系统完成对汽车的自动驾驶控制。

本文使用 Zhihu On VSCode 创作并发布