基于ML-Agents v0.4,在Unity 2018搭建的虚拟城市环境中训练了一辆自动驾驶车辆

电子说

1.2w人已加入

描述

本文基于ML-Agents v0.4,在Unity 2018搭建的虚拟城市环境中训练了一辆自动驾驶车辆。Unity自带传感器,而且考虑到场景中所有物体的状态,例如:分类、尺寸、速度等都是可以提取的,所以在Unity场景中训练模型可以节省大量的人工标记图片的工作,经济性较好。

2018年3月20 日,美国亚利桑那州一位女士推着一辆自行车突然闯入机动车道,被一辆处于自动驾驶模式的Uber无人汽车撞倒并且丧生。根据科技媒体The Information的报道,行人从阴影中出现,而且自行车挡在行人身前,导致车辆判断失误。

这表明:Uber的自动驾驶车辆还没能完成充分的训练,只能识别较为明显的障碍物,而且对于边界场景考虑存在不足。

问题思考 

如果想让一辆Level 5级别的自动驾驶车辆正式上路,到底需要经过多少里程的测试训练呢?2016年兰德智库曾给出答案:110亿英里。

作为自动驾驶圈的领头羊,Waymo在2017年底对自动驾驶测试里程突破400万英里进行了庆祝,然而这个里程离110亿英里还差很远。相对的,谷歌虚拟车辆每天可以跑800万英里。

虚拟仿真可以很可观的加速测试过程,尤其是比较危险边界场景只能在虚拟场景中测试。而且受限于政策与法规,目前可供自动驾驶路测的城市可谓是少之又少,针对于大部分地区无法进行自动驾驶路测的问题,可以通过仿真测试来得到解决。

工具选择

为什么选择使用了Unity 2018,而不是 ADAS 仿真的商业工具,来制作道路环境建模和传感器建模?主要原因:来自世界各地的用户都可以参与到虚拟环境的评估测试中。

这个概念被称为“游戏化和大众参与的虚拟测试”。一般来说,为了评估自动驾驶车辆的实施情况,例如:驾驶员输入,其它车辆行为,道路几何形状等,需要考虑许多情况。通过使用由人类和虚拟用户组成的游戏环境,相比于传统静态测试场景,自动驾驶代码可以进行更广泛地测试。

除了支持多用户平台外,Unity还拥有界面友好的GUI编辑器、3D物理引擎、动画引擎、 3D模型导入以及C或JavaScript脚本。这些功能可以帮助设计和模拟包含道路模型和车辆、行人、摩托车和自行车等其它动态对象的模型城市。Unity拥有庞大的资源库和社区支持,我们可以访问Unity Asset Store资源商店获取大量资源,加快开发速度,这是其它引擎和软件所不具备的。

Unity机器学习代理工具ML-Agents,可以使用游戏和模拟的环境作为训练智能代理的环境。 可以进行强化学习、模仿学习、神经网络或其它机器学习方法, 通过简单易用的Python API对代理进行训练。

TensorFlow是一个开源的机器学习框架,可以运行在台式机、服务器、手机移动端设备上。因为使用的笔记本没有NIVIDA的显卡,所以安装的运行环境是基于CPU运算的,训练时间大概是使用GPU加速的4~5倍。

环境搭建

1

创建城市模型

我们可以从Assets Store资源商店中下载已经搭建好的城市模型或者道路模型组件,自行设计道路系统。

Assets Store 资源商店中有很多已经搭建好的城市模型,所以没有必要花费大量的时间从零开始设计城市模型。如果对道路和城市模型的自定义程度要求较高的话,也可以下载城市建筑物和道路的组建,自己组装城市和道路。

2

使用NavMesh设计城市中的车流

NavMesh是Unity中控制游戏角色进行空间探索和寻路的一个类。我们使用NavMesh设计了行驶在虚拟环境中的AI车流。

车辆整体的运行路线固定,但是因为NavMesh会避开道路上的障碍物重新选择路线,所以环境AI车辆的具体行驶路线会有差别。将NavMeshSurface附到道路平面,并选择可以行驶和不可以行驶的路面,下图中蓝色的部分是车辆可以行驶的路面。

将NavMeshAgent附到环境AI车辆上,并通过在道路上埋下一系列的目标点,来规划车辆行驶的大致路径。在NavMesh下运行的物体会在当前位置和目标位置之间选择最短路径,并且避开障碍物,如同样是NavMeshAgent的物体,所以相同二点之间的路线选择会随路况不同而改变。最短路径选择示意如下图。

3

使用Particle System设计环境变量

Particle System粒子系统可以用来创建难以模拟的现象。例如:火、爆炸、雨、雪等。我们使用Particle System模拟了雨和风二种天气,增加了训练环境的复杂性。效果如下图。

机器学习训练

1

训练模型

基于ML-Agents可以将自动驾驶车辆摄像头获取道路的图片信息,发送给Python的训练模型,利用图像识别提取图片中的参数信息。例如:前方障碍物的分类,距离以及运动方向的判断,发送给PPO训练模型,并将模型输出的命令发送回车辆,控制车辆在虚拟环境中行驶。

Unity

汽车没有预编程知道如何驾驶或学习如何驾驶的步骤。事实上,除了与模拟中的轨道边界和其它汽车碰撞对象的距离外,它并不知道整个世界是怎么样的。它只能不断地试错,根据代理对随机命令输出的奖惩总结经验,最终得到一个可以满足设计需要的模型。

2

Tensorboard观测和超参数调整

为了提取训练的状态参数,实时监控训练的状态,方便训练超参数的调节,我们使用了TensorBoard。TensorBoard是TensorFlow提供的一组可视化工具,可以帮助开发者方便的理解、调试、优化TensorFlow程序。

Unity

3

训练设备和过程

处理器:Intel(R) Core i7-6500U @2.5GHz 2.59GHz

内存:8.00GB(7.87 GB usable)

GPU:Inter(R) HD Graphics 520  (无GPU加速)

系统:64-bit, in10

训练时间:25小时

4

成果展示

可以使用TFSharpPlugin将训练好的模型导入Unity,并在在Unity中观察训练的结果。训练完成的模型可以控制车辆在虚拟环境中比较平顺的行驶,并且可以保持在车道线内,能够应对十字路口和前方车辆障碍的情况。

总结

我们基于ML-Agents v0.4,在Unity 2018搭建的虚拟城市环境中训练了一辆自动驾驶车辆。Unity自带传感器,而且考虑到场景中所有物体的状态,例如:分类、尺寸、速度等都是可以提取的,所以在Unity场景中训练模型可以节省大量的人工标记图片的工作,经济性较好。

我们在以后可以使用ML-Agents的模仿学习,加速训练过程。当然还要进一步完善城市环境和训练模型,提高环境的真实度和模型训练的质量。更重要的是,引入车辆的动力学模型,进行联合仿真训练,训练一个真正可以应用于实际自动驾驶车辆的控制模型。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分