0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一种能和OpenAI gym相比的环境,用来训练Unity模拟器中的Donkey Car

zhKF_jqr_AI 来源:未知 作者:李倩 2018-09-16 09:37 次阅读

介绍

Donkey Car是一种为模型车开源的DIY自动驾驶平台,它利用一个带有相机的树莓派单片机,让模型车可在赛道上自动驾驶,Donkey Car会学习你的驾驶方法,在训练后懂得自动驾驶。对于那些没有背景知识的人来说,该平台能提供你所需要的必要细节,它既包含硬件也带有软件。阅读完这一教程,你也可以无需硬件背景知识组装一辆自己的自动驾驶汽车。

现在,训练汽车进行自动驾驶最常见的方法就是行为克隆和路线跟随。在高级层面,行为克隆是利用卷积神经网络学习汽车前方摄像机所拍摄的图像之间的映射,并通过监督学习控制方向和油门大小。而路线跟随是利用计算机视觉技术跟踪路线,并且利用一个PID控制器让小车跟着该路线。我尝试了两种方法,它们都很有用!

用行为克隆训练Donkey Car避开障碍物

用强化学习训练Donkey Car

重要的一点是,Donkey Car的目标是搭建一辆在比赛中跑的最快的车(能以最快速度跑完一圈)。我认为强化学习是训练的好方法,只需设计一种奖励,让汽车的速度达到最快,并且让它能一直保持在轨道内即可。听上去很简单对吧?但事实上,很多研究表示在实体目标上训练强化学习是很困难的。强化学习主要通过试错法训练,放在汽车身上,我们只能保佑车子不会在一次次的实验中撞碎。另外,训练时长也是一个问题,通常,强化学习智能体都要训练个几百回合才能掌握些许规律。所以,强化学习很少用在现实物体中。

模拟现实

最近有一些科学家们研究对现实进行模拟,即先用强化学习在虚拟模拟器上训练小车,然后将其迁移到现实世界里。例如,最近OpenAI就训练了一个灵活的机械手臂,可以做出多种动作,整个过程就是在虚拟中训练的。除此之外,谷歌大脑也曾训练过一个四足机器人,可以用模拟现实的技术学习灵活的动作。在虚拟器中学习控制策略,然后再将其部署到真正的机器人上。这样看来,若想用强化学习训练Donkey Car,一个可行方案就是先用模拟器训练,再把学到的策略用在真的小车上。

OpenAI训练的机械手

Donkey Car模拟器

第一步是先为Donkey Car建造一个高保真度的模拟器。幸运的是,Donkey Car社区里一位爱好者在Unity中创建好了一个模拟器。但是它设计的目的主要针对行为学习(即将相机中的图片保存在对应的控制角度和油门大小文件中以进行监督学习),但是和强化学习无关。我希望的是有一个类似OpenAI Gym那样的交互界面,可以用reset( )重置环境、对其进行操作。所以,我决定在现有的Unity模拟器基础上对其进行修改,让它更适合强化学习。

4.1 创建一种能用Python和Unity沟通的方法

因为我们要用Python书写强化学习代码,所以我们首先要找到一种方法能让Python在Unity环境中使用。结果我发现这现有的模拟器也是用Python代码进行沟通的,但它是通过Websocket协议进行的,Weosocket和HTTP不同,它支持服务器和客户端之间进行双向通信。在我们的案例中,我们的Python“服务器”可以直接向Unity推送信息(方向和油门),而我们的Unity“客户端”也可以反向对服务器推送信息(状态和反馈)。

除了Websocket,我还考虑使用gRPC,这是一种高性能服务器-客户端通信框架,用谷歌在2016年八月开源。Unity将其用于机器学习智能体接口通信的协议。但是它的设置有点麻烦,并不高效,所以我还是选择Websocket。

4.2 为Donkey Car创建一个定制化的环境

下一步是创建一个类似于OpenAI gym的交互界面,用于训练强化学习算法。之前训练过强化学习算法的人可能对各种API的使用很熟悉。常见的就是reset( )、step( )、isgameover( )等。我们可以将OpenAI gym的种类进行扩展,然后用上面的方法创建自己的gym环境。

最终成果能和OpenAI gym相媲美,我们科用类似的指令与Donkey环境交互:

env = gym.make("donkey-v0")

state = env.reset()

action = get_action()

state, action, rewards, next_state = env.step(action)

环境同样可以让我们设置frame_skipping,并且用headless模式训练智能体(也就是无需Unity GUI)。

同时,Tawn Kramer还有3中Unity场景可用:生成道路、仓库和Sparkfun AVC,都可以用于训练。在我们开始运行自己的强化学习算法之前,我们要么自己搭建Donkey Car的Unity环境,要么下载预先搭建好的环境可执行程序。具体的环境设置和训练指导可以在我的GitHub中找到:github.com/flyyufelix/donkey_rl

4.3 用DDQN训练Donkey Car

准备好了对强化学习友好的环境,我们现在就可以搭建自己的强化学习算法啦!我采取的是用Keras书写的Double Deep Q学习算法,这是DeepMind开发的经典强化学习算法,易于测试,编写简单。我已经在OpenAI gym中的cartpole和VizDoom中测试了,所以如果有什么问题,应该是Unity环境的问题,算法没有问题。关于DQN的文章,大家可以参考我之前的博文。flyyufelix.github.io/2017/10/12/dqn-vs-pg.html

4.3.1 状态空间

我们用Donkey Car前方安装的摄像机所拍摄的像素照片,执行以下转换:

将尺寸从(120, 160)改为(80, 80)

变为灰度图像

框架堆叠:去前面几个步骤中的4个框架堆在一起

最后的状态维度应该是(1, 80, 80, 4)。

4.3.2 动作空间

现实和虚拟世界中的Donkey Car都是将持续的方向控制和油门数值作为输入。为了简介,我们将油门数值设为常量(例如0.7),仅仅改变控制方向。控制方向的值从-1到1,但是,DQN只能处理分离的动作,所以我将方向的值分为15个种类。

4.3.3 Q网络框架

我们的Q网络是一个3层卷积神经网络,以堆叠的框架状态为输入,输出表示方向值分类的15个值。

4.3.4 奖励

奖励是有关汽车偏离中线程度的函数,它由Unity环境所提供。奖励函数用以下公式表达:

其中maxcte是一个归一化常数,所以奖励的范围在0到1之间。如果abs(cte)大于maxcte,循环即终止。

4.3.5 其他重要变量

Frame skipping设置为2以稳定训练。Memory replay buffer的值为10000.Target Q网络在最终训练时会更新。CNN训练时的Batch size为64。贪婪函数用于探索。Epsilon初始值为1,逐渐在10000次训练后会成为0.02。

4.3.6 结果

经过上面的设置,在单个CPU和一个GTX 1080 GPU上,我训练了DDQN差不多100次。整个训练用了2到3个小时。可以从上面的视频中看到,小车跑得很好!

去除背景噪声

我们想让我们的强化学习智能体只根据路线的位置和方向进行决策输出(即方向控制),不要受环境中的其他因素影响。但是,由于我们的输入是全像素的图像,它可能对背景模式过度拟合,而无法认出行进路线。这在现实中尤其重要,因为旁边的车道可能会有障碍物(例如桌子、椅子、行人等)。如果我们想从虚拟世界将学习策略进行迁移,我们应该让智能体顾略背景中的噪音,只关注于车道。

为了解决这个问题,我创建了一个预处理通道,可以将行车路线从原始像素图像中分离出去,再输入到CNN中。分割过程受这篇博文的启发(https://medium.com/@ldesegur/a-lane-detection-approach-for-self-driving-vehicles-c5ae1679f7ee)。这一过程概括如下:

Canny Edge检测器检测并提取所有边框

用Hough直线转换确定所有直线

将直线分成positive sloped和negative sloped两类

删除所有不属于车道的直线

最终转换出的图片应该有最多2条直线,具体情况如下:

接着我把分割后的图像重新调整到(80, 80)的,将4个连续的框架堆叠在一起,用它们作为新的输入状态。我使用新状态再次训练了DDQN,生成的强化学习智能体可以学习良好策略进行驾驶!

然而,我注意到不仅仅训练时间会变长,学习策略也会变得不稳定,车子会经常在转弯的时候摇晃。我想可能是因为在训练的时候丢掉了有用的背景信息。不然的话,智能体应该不会过度拟合。

下一步

在这篇文章中,我们介绍了一种能和OpenAI gym相比的环境,用来训练Unity模拟器中的Donkey Car。还用DDQN训练它自动成功地自动驾驶。接下来,我计划让小车通过训练加速到最大值,并且将这一策略迁移到现实中。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 计算机视觉
    +关注

    关注

    8

    文章

    1600

    浏览量

    45616
  • 自动驾驶
    +关注

    关注

    773

    文章

    13032

    浏览量

    163216
  • 强化学习
    +关注

    关注

    4

    文章

    259

    浏览量

    11114
  • Unity
    +关注

    关注

    0

    文章

    126

    浏览量

    21531

原文标题:教程 | 如何在Unity环境中用强化学习训练Donkey Car

文章出处:【微信号:jqr_AI,微信公众号:论智】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    汽车驾驶模拟器介绍 汽车驾驶模拟器座舱

    提示学习,学习正确的操作顺序。被动驾驶文件实行全自动配置,只要教练在模拟器上操作遍后,系统自动录制并配置相应的提示声音。 网络互动:通过中央控制台可以最多连接30台驾驶舱,实现联网训练,场景
    发表于 09-06 17:48

    一种基于FPGA的飞行模拟器通信接口设计流程介绍

    的必需设备,它是一种由计算机实时控制、多系统协调工作、模拟真实飞行环境模拟设备。相较于利用飞机的飞行
    发表于 06-18 05:00

    一种基于FPGA嵌入式系统的雷达信号模拟器系统设计

    系统和环境进行模拟,可重复性高,可以多次模拟情况下雷达的性能,便于分析。目前对雷达信号模拟器的研究比较多,通用的方式是软硬件相结合,使系
    发表于 07-10 07:30

    一种基于SIMULINK工具的太阳电池阵列模拟器的仿真模型设计

    设计一种成本较低,能够代替实际光伏电池阵列来进行各种光伏实验的太阳电池模拟器。本文所设计的太阳电池模拟器以BUCK电路为基础,采用ARM
    发表于 07-16 07:17

    一种自主产生式的雷达回波模拟器中频部分的设计论述

    本文论述一种自主产生式的雷达回波模拟器中频部分的设计实现方法,该模拟器可产生脉冲单频、脉冲线性调频、步进频、步进频+线性调频等多种波形的雷达回波信号,并可产生双目标和参数可控的带限高斯白噪声,可
    发表于 07-19 07:26

    一种基于多通道实时CAN模拟器的设计方案介绍

    及实时响应的场合,单通道CAN总线不能满足实际通信的要求。为此,介绍一种基于多通道实时CAN模拟器的设计方案。
    发表于 07-19 08:15

    一种基于TS101的SAR回波信号模拟器设计

    ,是获取地面信息的重要手段,因而在军用和民用领域中都获得了广泛的应用。合成孔径雷达模拟技术是一种模拟的方法来研究SAR的技术,在SAR的研究和研制工作具有十分重要的作用。该技术
    发表于 07-22 06:29

    平台罗经训练模拟器设计介绍

    水平,本文设计了平台罗经训练模拟器,研制成本仅约为实装的十分之,而且可以设定多种工作方式和工作环境,提高了训练效果,具有显著的军事意义和经
    发表于 07-23 07:30

    飞行模拟器的运动系统

    `飞行模拟器,顾名思义也就是模拟飞行飞行的设备。用来应对真实世界在飞行过程中会遇到的空气动力、气象、地理环境、飞行系统等,并且将仿真操控和
    发表于 09-07 17:20

    怎样去设计一种汽车驾驶模拟器控制系统?

    汽车驾驶模拟器控制系统的原理是什么?汽车驾驶模拟器控制系统的功能有哪些?怎样去设计一种汽车驾驶模拟器控制系统?
    发表于 05-17 06:36

    如何去设计一种多路CCD图像信号模拟器

    一种基于CPLD的CCD相机图像信号模拟器的设计
    发表于 06-04 06:13

    基于开物2000、PLC 和I/O 扩展的训练模拟器Based ControX2000, P

    介绍了一种在大规模数字I/O 扩展的基础上由通用监控系统支撑软件ControX( 开物)2000 和FP0_C32 型PLC 控制的训练模拟器。运行结果表明,该训练
    发表于 06-03 08:00 12次下载

    基于DSP的某型供输弹系统训练模拟器设计_葛玉

    基于DSP的某型供输弹系统训练模拟器设计_葛玉
    发表于 03-19 11:45 0次下载

    R-Car DNN模拟器的介绍

    本篇文章我们将介绍瑞萨为R-Car V4H提供的三种类型的DNN开发模拟器,以及它们的使用情况和特点。
    的头像 发表于 02-02 11:06 672次阅读

    工程师说 | R-Car DNN模拟器的介绍 (2)

    摘要 在瑞萨提供的R-Car SoC相关的一些DNN模拟器中,本文将重点介绍 能够实现与实际硬件等价运算的Accurate Simulator ,并说明如何应用它来 分析和提高神经网络的精度
    的头像 发表于 07-13 18:15 250次阅读
    工程师说 | R-<b class='flag-5'>Car</b> DNN<b class='flag-5'>模拟器</b>的介绍 (2)