本文基于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训练模型,并将模型输出的命令发送回车辆,控制车辆在虚拟环境中行驶。
汽车没有预编程知道如何驾驶或学习如何驾驶的步骤。事实上,除了与模拟中的轨道边界和其它汽车碰撞对象的距离外,它并不知道整个世界是怎么样的。它只能不断地试错,根据代理对随机命令输出的奖惩总结经验,最终得到一个可以满足设计需要的模型。
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中观察训练的结果。训练完成的模型可以控制车辆在虚拟环境中比较平顺的行驶,并且可以保持在车道线内,能够应对十字路口和前方车辆障碍的情况。
总结
我们基于ML-Agents v0.4,在Unity 2018搭建的虚拟城市环境中训练了一辆自动驾驶车辆。Unity自带传感器,而且考虑到场景中所有物体的状态,例如:分类、尺寸、速度等都是可以提取的,所以在Unity场景中训练模型可以节省大量的人工标记图片的工作,经济性较好。
我们在以后可以使用ML-Agents的模仿学习,加速训练过程。当然还要进一步完善城市环境和训练模型,提高环境的真实度和模型训练的质量。更重要的是,引入车辆的动力学模型,进行联合仿真训练,训练一个真正可以应用于实际自动驾驶车辆的控制模型。
-
神经网络
+关注
关注
42文章
4771浏览量
100714 -
AI
+关注
关注
87文章
30728浏览量
268886 -
自动驾驶
+关注
关注
784文章
13784浏览量
166386 -
Unity
+关注
关注
1文章
127浏览量
21806
原文标题:使用Unity机器学习代理工具ML-Agents进行自动驾驶训练
文章出处:【微信号:IV_Technology,微信公众号:智车科技】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论