无人车系统从算法模块可分为三个部分,首先是感知通过对传感器数据和环境信息进行计算来解决周围有什么的问题,其次是预测,根据感知信息预测环境下一步将发生什么,最后有规划控制模块综合考虑周围障碍物的预测结果和本车的目的地,来决定接下来本车该做什么。
对于预测模块,综合地图和感知信息来对周围障碍物未来的行动进行估计。预测有三个显著的特点(1)实时性、(2)准确性 (3)可学习性。
首先思考两个问题,
(1)人来驾驶员如何进行预测?
一般来说,人类驾驶员会根据自己的驾驶经验和当时的环境情况,统筹考虑安全和可通行的方式进行驾驶。他自己是不会具体预测出障碍物未来的位置、速度分别是如何的。
(2)算法层面如何进行预测建模?
但是对于无人车的预测算法而言,我们需要对障碍物的风险行为进行具体的量化和建模,给出障碍物未来的预测轨迹,供我们后来的规划控制模块使用。运动障碍物主要有三类汽车,自行车和行人。
下面主要考虑汽车的行为预测建模。
由于地图中的道路是非常复杂的,汽车在道路中的行为包括左转,右转,掉头,出环岛,进环岛等行为,由于道路的复杂性,我们很难对道路方向和汽车行为进行穷举,因此我们需要进一步的抽象。我们的方式是把地图上的所有未来的道路抽象成Lane序列,Lane序列是地图将道路划分的基本单元。对于任意一辆车,在地图中的任意一个位置,我们都可以获得这辆车未来走的一个lane的序列。那么通过障碍物车辆未来会走哪个lane序列进行打分和建模,以此来预测车辆的未来行为。我们会同时输出车辆未来行为的lane概率和加速度。因此将预测问题变为二分类问题和回归问题进行求解。考虑到我们的问题需要判断障碍物历史信息的变化,具有一定的时序性,因此使用递归神经网络进行建模。
下面是我们行为预测学习框图,分为离线部分和在线部分。
在离线端对Record数据进行清洗和标记,同时通过特征提取器,抽取一些原始特征和对一些高阶特征进行选择,结合了我们抽取的特征和样本,我们会训练RNN模型来进行预测。
在线端,我们会实时接收Channel消息,包括感知的数据,地图的数据,定位的数据等等。我们会在线进行特征的抽取和生成,最终调用离线训练出来的RNN模型,实时进行行为预测。
纵上所述,行为预测学习框图可以分为三个部分工作,分别是样本工程,特征工程和模型优化。这三个工作也是机器学习中最重要的三个部分。
下面分别介绍这三部分工作,首先介绍样本工工程的工作。
我们通过对自动驾驶历史数据进行回放,针对障碍物的前20帧数据进行特征抽取,将障碍物未来第30帧的行为进行label程序,以此构成模型的样本。
对于样本,是需要进行合理样本清洗工作的,比如对感知噪声过大的数据进行平滑和过滤,包括感知数据的抖动,短时间内过大的速度,heading变化。其次删除无意义的样本,例如静止的车辆。
另外,还需要进行样本选择的工作,由于我们行为识别当中,绝大多数车辆都是直行,换道的车辆比较少,我们会对直行的车辆进行降采样,确保换道的特征能够被模型学习到。而一般而言,对于深度学习模型,数据量越丰富越好,因此尽可能多地进行样本采集。除此之外我们还需要根据地图标识的变化,感知策略变化等及时更新我们的样本流,确保样本特征分布的一致性。什么是一致性呢?就是说我们要保证线下训练用的数据的版本和我们无人车在路测版本是一致的。
其次是特征工程方面的工作,特征的好坏对机器学习模型效果的影响是巨大的。
我们对障碍物呢抽取了若干特征类特征,第一类是车辆本身的特征,第二类是车辆相对于道路(lane)的特征, 第三类是车辆相对于未来道路的特征。
同时,由于一个障碍物 的行为会受它到周围障碍物的影响,为此,我们还抽取了周边的障碍物特征。我们通过对空间的划分,对车辆周围障碍物的速度,距离,以及预计发生碰撞的时间进行了抽取。我们调研发现,当加入了周围障碍物的特征时,我们的模型能分析出分析出障碍物前方有静止车辆时,它提前换道的意图。我们能够提前近半秒左右对车辆换道的行为进行预测,确保了无人车的安全。
最后是模型优化的工作,对于预测这个时间序列化的建模问题我们采用RNN网络建模,我们也使用传统的LSTM模型。因为网络当中的输入包括了目标障碍物特征,未来道路特征,周围障碍物特征。他们会经过LSTM 输出给后面的MLP网络,同时,对于周围障碍物这样一个非时序的周围障碍物直接输出给MLP网络。整个网络的输出是有两个输出的,分别是目标lane序列的概率及走目标lane序列的加速度的预测值。这就对应刚开始所说的,我们将整个车辆预测的模型分解成了一个二分类的模型和一个回归模型进行预测。最后我们会根据算出来的加速度和速度,画出障碍物的轨迹。
下面看一下未来的规划。
未来的规划主要由三部分组成,首先对于我们预测模块本身,从样本、特征、模型角度继续深度优化,提高精准度,提供更丰富的信息供后面的决策使用,可以适用更加复杂的场景。其次,对于前级的感知,我们预测后续希望引入更多的信息,比如转向灯,进行综合的预测。最后,未来希望输出空间危险区域的概率分布,代替现在的轨迹点,这使得更合理对无人车进行规划。
最后,做一个小结。预测模块主要是解决接下来环境要发生什么的问题。通过对障碍物未来的行为进行了lane序列建模,使得这样的一个问题变成了机器学习的二分类问题和回归问题。对于机器学习的问题,从样本、特征、模型三个角度进行优化,确保无人车的安全与舒适。