基于模仿学习的自动泊车运动规划算法 ResNet+BERT分类模型

333 阅读5分钟

本文使用ResNet+BERT分类模型来实现APA自动泊车算法

首先定义模型的输出动作类别

类别名说明
S0停车
S+直行前进单位距离
S-直行后退单位距离
L+左转前进单位角度
L-左转后退单位角度
R+右转前进单位角度
R-右转后退单位角度

设单位距离为0.05米,单位角度为0.5度。为了降低复杂性,在转弯过程中,方向盘都打到底。

接下来定义模型的输入:
1、障碍物的位置
2、小车的当前位置以及目标位置
3、附加状态:例如上次执行的动作

在本实验中,使用384×384像素的图片来表示障碍物的位置、小车的当前位置以及目标位置,在输入BERT分类模型前需先将2D图片转为1D序列,如下所示:
(B, C_in, 384, 384)
-- ResNet -->
(B, C, 24, 24)
-- Rearrange -->
(B, 576, C)


在建模过程中,主要考虑以下参数:

参数名
车长 Vehicle Length4.360米
车宽 Vehicle Width1.785米
轴距 Wheelbase2.535米
前轮距 Front Track Width1.525米
后轮距 Rear Track Width1.535米
前悬 Front Suspension0.840米
后悬 Rear Suspension0.985米
最小转弯半径 Minimum Turning Radius5.5米

由于算力有限,在生成图片时使用较低的分辨率(20像素/米)。设小车后轴的中心点为小车原点

这个项目中唯一比较麻烦的部分就是训练数据的合成,因为自动泊车的场景太多(例如倒车入库、侧方位停车、斜方位停车),需要针对每一种场景开发对应的数据合成代码。经过几天的开发,我也只合成了几种简单场景下的训练数据,可视化效果如下:

上图中,黑色为障碍物位置,红色为小车当前位置,绿色为小车目标位置

从起始位置到目标位置,小车需执行一系列的动作,例如:

R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-R-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-S-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-L-

为什么要连续密集决策,而不是在一次决策中让小车移动更长的距离呢?因为在现实中存在着不确定性,比如在泊车过程中小车旁边有人行走。

若不考虑附加状态,则模型输入可表示为(3, 384, 384)的张量,其中通道0为小车当前位置,通道1为小车目标位置,通道2为障碍物位置,模型输出为小车下一步该执行的动作类别,如图所示:

输出动作类别:R-
输出动作类别:R-

可以看到问题简化成了一个普通的图像分类问题,我觉得不用BERT模型只用ResNet图像分类模型也是值得尝试的,但考虑到在实际项目中,模型的输入可能来自摄像头、激光雷达、超声波雷达等多个传感器的组合,加入BERT模型后有利于融合多模态的数据。

有了训练数据,接下来就可以训练模型了。训练方法跟普通的图像分类几乎一样,需要一张不低于16G显存的显卡,经过30个小时的训练,得到模型V1.1。

下面对模型V1.1进行指标测试

首先定义泊车成功标准:
1、不与障碍物发生碰撞
2、在规定的步数(800步)内到达目标位置。允许有轻微的偏差,小车当前位置与目标位置的距离小于0.16米,夹角小于1.6度,这里的距离为小车原点之间的距离

随机生成1000条测试样本,统计成功率。
测试结果如下: 成功876个,失败124个(其中5个与障碍物发生了碰撞,119个在规定的步数内未到达目标位置)

泊车成功率为87.6%左右,如果增加训练时间,还可以提升成功率。让我们先看看泊车失败的例子
1、在规定的步数内未到达目标位置,具体又分下面几种情况
1.1、 靠近目标位置,有偏差但偏差不大,这种占绝大部分

1.2、分不清车头车尾

1.3、偏差较大,这种比例很少

2、与障碍物发生了碰撞

从失败的例子可以看出要想提升泊车成功率,还必须增加训练样本的多样性,让模型“见多识广”。我觉得不应该过分要求模型每次转向的时机都刚刚好,而应该在轨迹出现偏差时让模型学会如何调整。

由于在写这篇文章前,本人对无人驾驶技术了解的很少,因此文中难免有错误之处,欢迎读者在评论区指出。

参考文章

下一篇:基于模仿学习的自动泊车运动规划算法 Training Data Is All You Need