查看原文
其他

使用Unity机器学习代理工具ML-Agents进行自动驾驶训练

Unity Unity官方平台 2018-11-15

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训练模型,并将模型输出的命令发送回车辆,控制车辆在虚拟环境中行驶。



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

 

2

Tensorboard观测和超参数调整

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



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中观察训练的结果。训练完成的模型可以控制车辆在虚拟环境中比较平顺的行驶,并且可以保持在车道线内,能够应对十字路口和前方车辆障碍的情况。


下面视频为训练结果演示。


https://v.qq.com/txp/iframe/player.html?vid=o0714oq3scx&width=500&height=375&auto=0

资源下载与参考

NavMesh的相关组件可以从GitHub上下载:

https://github.com/Unity-Technologies/NavMeshComponents


NavMesh教程:

https://unity3d.com/learn/tutorials/topics/navigation/introduction-and-navigation-overview


Particle System教程:

https://unity3d.com/learn/tutorials/topics/graphics/particle-system


总结

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


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


更多Unity机器学习相关内容尽在Unity官方中文论坛(UnityChina.cn)


 

机器学习阅读推荐

官方活动

2018年Unity技术路演-上海站报名开启

7月13日,Unity官方技术团队将在上海交通大学给广大开发者带来Unity 2018最权威的新功能讲解。活动免费,名额有限,赶紧报名吧! [了解详情

活动报名:

https://connect.unity.com/events/jishuluyanshanghaizhan


ChinaJoy 2018 | Made with Unity作品展示招募开启

在历年ChinaJoy Unity展位上,多元化的Made with Unity游戏及应用体验总是吸引人潮的亮点。今年我们将招募精品的Made with Unity作品展示。为优秀的开发团队提供最佳的作品展示机会。[招募详情

申请时间:截至到7月10日

申请表单:http://unity2018.mikecrm.com/yaX19dK


7月Asset Store资源商店促销 

7月,只需在Asset Store资源商店消费满30-199美元,最高可获得价值235美元的5款免费资源,参与活动,获得夏日精选资源包。

活动地址:

https://assetstore.unity.com/g/july-promo-activation-cn



点击“阅读原文”访问Unity官方中文论坛

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存