对于自动驾驶仿真,CARLA是主流的模拟器之一。本文《CARLA: An Open Urban Driving Simulator 》,由CARLA开发者(Intel、Toyota、巴塞罗那计算机视觉中心)撰写,对CARLA做了详细介绍。
摘要:本文介绍了用于自动驾驶研究的开源模拟器CARLA。CARLA的开发从一开始就是为了支持城市自动驾驶系统的开发、训练和验证。除了开源代码和协议之外,CARLA还提供了为此目的而创建的开源数字资产(城市布局、建筑、车辆)。仿真平台支持对传感器和环境条件的灵活定义。我们使用CARLA研究了三种自动驾驶算法的性能:a classic modular pipeline、通过模仿学习训练的端到端模型和通过强化学习训练的端到端模型。这些算法在难度不断增加的场景中进行评估,通过CARLA提供的指标来测试其性能,表明该平台对自动驾驶研究的实用性。
1 简介
三维环境中的感知-运动控制仍然是机器学习和机器人学的一个主要挑战。自动驾驶车辆的发展是这个问题长期研究的一个实例[22,26]。它最困难的形式是在人口稠密的城市环境中导航[21]。这种场景带来更多的挑战,是因为:交通交叉口处复杂的多智能体动态;需要跟踪和响应几十个甚至数百个其他参与者的运动;需要识别街道标志、路灯以及道路标线,并区分多种类型的其他车辆;罕见事件的长尾——道路施工、儿童冲上道路、前方发生事故、其他车辆误入错误车道;以及迅速协调冲突目标的必要性。例如,当一个心不在焉的行人误入前面的道路,而另一辆车正从后面快速驶来,如果刹车过猛,可能会追尾。
城市自动驾驶的研究受到基础设施成本和现实世界中训练和测试系统的后勤困难的阻碍。一辆自动驾驶汽车的检测和操作也需要大量的资金和人力。而且,单辆车远远不足以收集必要的数据,这些数据涵盖了为训练和验证而必须处理的大量corner case。对于classic modular pipeline来说是如此,对于需要大量数据的深度学习技术更是如此。在现实世界中对城市驾驶的自动驾驶模型的训练和验证是大多数研究小组无法实现的。
另一种方法是在仿真中训练和验证驾驶策略。在自动驾驶研究的早期,仿真就被用于训练驾驶模型[22]。最近,赛车模拟器被用做评估自动驾驶的新方法[28,3]。自定义的仿真模拟也被用于训练和bench mark视觉感知系统[2,9,10,11,20,25,27,29]。商业游戏已经被用于获取高质量的数据,用于训练和bench mark视觉感知系统[23,24]。
虽然仿真在自主驾驶研究中的应用非常广泛,但现有的仿真平台有限。开源的赛车模拟器,如TORCS[28]并没有表现出城市驾驶的复杂性:它们缺乏行人、交叉口、交通规则以及其他区分城市驾驶和赛车赛道的复杂因素。高保真度模拟城市环境的商业游戏,如《侠盗猎车手5》[23,24],可自定义的部分很有限。
本文介绍了一种开源的城市驾驶模拟器CARLA(Car Learning to Act)。CARLA从一开始就是为了支持自动驾驶模型的训练、原型设计和验证,包括感知和控制。CARLA是一个开源的平台。独一无二的是,CARLA提供的城市环境内容也是免费的。它包括城市布局、多种车辆模型、建筑物、行人、路标等。该仿真平台支持传感器套件的灵活设置,并提供可用于训练驾驶策略的信号,例如GPS坐标、速度、加速度以及碰撞和其他违规行为的详细数据。CARLA可以定义广泛的环境条件,包括天气和时间。多种环境条件如下图所示。
图1 CARLA构建的四种天气(Town2)
我们使用CARLA来研究三种自动驾驶方法的性能。第一个是一个经典的modular pipeline,包括基于视觉的感知模块、基于规则的规划器和控制器。第二个是一个深层网络,将传感器输入映射到驾驶指令,通过模仿学习进行端到端的训练。第三个也是一个深度网络,通过强化学习进行端到端的训练。我们使用CARLA来模拟难度不断增加的场景。我们设定必须穿越的路线的复杂性、交通流和环境条件。实验结果揭示了这三种方法的性能特点。
2 仿真引擎
CARLA是为了在渲染和物理模拟方面的灵活性和真实性而设计的。它相当于在Unreal Engine 4(UE4)[7]之上涉及了一个开源层,支持未来的扩展。该引擎提供最先进的渲染质量、逼真的物理效果、基本的NPC逻辑和可互操作插件的生态系统。针对非商业用途,该引擎是免费的。
环境。环境由静态对象(如建筑物、植被、交通标志和基础设施)以及动态对象(如车辆和行人)的三维模型组成。所有模型都经过精心设计,以平衡视觉质量和渲染速度:我们使用低重量的几何模型和纹理,但通过精心制作材质和使用可变细节级别来保持视觉真实感。所有的三维模型都有一个共同的比例,它们的大小反映了真实物体的大小。在撰写本文时,我们的资产库包括40个不同的建筑、16个动画车辆模型和50个动画行人模型。
图2 CARLA现有的车辆及行人模型
我们通过以下步骤使用这些资源来构建城市环境:(a)规划道路和人行道;(b)手动放置房屋、植被、地形和交通基础设施;(c)指定动态对象可以出现(生成)的位置。这样,我们设计了两个城镇:Town1的可行驶道路总长度为2.9 km,用于训练;Town2的可行驶道路为1.4 km,用于测试。这两个城镇见下图。
图3 本文创建的两个城镇,Town1(左)和Town2(右)
开发CARLA的一个挑战是非玩家角色的配置(这对仿真的保真度而言非常重要)。我们基于标准的UE4车型(PhysXVehicles)来设计非玩家车辆,其运动学参数调整为现实模式。我们还实现了一个控制非玩家车辆行为的基本控制器:车道跟随、遵守红绿灯、速度限制和交叉路口决策。车辆和行人可以相互察觉和避开。更先进的非玩家车辆控制器将被集成到未来的版本中[1]。
行人根据特定城镇的导航地图在镇上游荡,相互避开,尽量避开车辆。如果汽车与行人相撞,行人将从仿真世界中删除,并在短暂的时间间隔后在不同的位置生成新的行人。
为了增加视觉多样性,我们在将非玩家角色添加到仿真中时对其外观进行随机化。每个行人都穿着从预先指定的衣柜中随机抽取的一套衣服,并可选择配备以下一种或多种物品:智能手机、购物袋、吉他盒、手提箱、雨伞等。每辆车都是根据特定车型的一组材料随机喷漆的。
我们还实现了各种大气条件和照明条件。它们在太阳的位置和颜色、天空漫射的强度和颜色以及环境遮挡、大气雾、云量和降水量等方面存在差异。目前,CARLA支持两种照明条件(正午和日落)以及9种天气条件(不同的云量、降水量和街道上是否有水坑)。这将实现总共18种照明天气组合(为了简洁起见,我们将其称为天气。)
传感器。CARLA允许灵活配置传感器套件。在撰写本文时,传感器仅限于RGB摄像头和提供地面真实深度和语义分割的传感器。如图2所示。摄像头的数量及其类型和位置可由用户指定。摄像头参数包括三维位置、相对于汽车坐标系的三维方向、视野和景深。我们的语义分割伪传感器提供了12个语义类:道路、车道标线、交通标志、人行道、围栏、标杆、墙、建筑、植被、车辆、行人和其他。
图4 CARLA传感器模型,从左到右依次是常规RGB摄像头、深度传感器和语义分割传感器
除了上述传感器模型,CARLA还提供了一系列针对车辆和交通规则的测量值。与车辆相关的测量包括车辆相对于世界坐标系(类似于GPS和罗盘)的位置和方向、速度、加速度矢量和碰撞累积的影响。与交通规则相关的测量包括进入到错误车道或人行道的车辆足迹百分比,以及交通灯状态和车辆当前位置的速度限制。最后,CARLA提供对环境中所有动态对象的精确位置和边界框的访问。这些信号在驾驶策略的训练和评估中起着重要作用。
3 自动驾驶
CARLA支持自动驾驶系统的开发、训练和详细的性能分析。我们使用CARLA评估了三种自动驾驶方法。第一种是一种modular pipeline,它依赖于视觉感知、规划和控制的专用子系统。这种结构符合大多数现有的自动驾驶系统[21,8]。第二种方法基于通过模拟学习进行端到端训练的深度网络[4]。这种方法最近引起了新的兴趣[22,16,4]。第三种方法基于通过强化学习进行端到端训练的深度网络[19]。
3.1 modular pipeline
我们的第一种方法是一个modular pipeline,它将驾驶任务分解到以下子系统中:(i)感知;(ii)规划;(iii)持续控制。由于没有提供几何地图作为输入,视觉感知成为一项关键任务。局部规划完全依赖于感知模块估计的场景布局。
感知部分使用语义分割来估计车道、道路限制、动态对象和其他危险。此外,还使用分类模型来确定交叉口的接近度。规划器使用基于规则的状态机。持续控制由PID控制器执行,该控制器驱动转向、节气门和制动机构。现在我们将更详细地描述这些模块。
感知。我们在这里描述的感知是建立在基于RefineNet的语义分割网络上的[17]。训练网络将图像中的每个像素分为以下语义类别之一:C=froad、sidewalk、lane marking、dynamic object、misscellaneous staticg。该网络使用CARLA在训练环境中生成的2500张标注图像进行训练。根据道路面积和车道标线,利用网络提供的概率分布来估算车道。
此外,我们使用基于AlexNet的二元场景分类器(交叉/无交叉)来估计到达交叉路口的可能性[15]。这个网络是在两个类之间平衡的500幅图像上训练的。
规划器。规划器通过生成一组路径点来实现低级别导航:近期目标状态表示车辆在不久的将来所需的位置和方向。规划器的目标是合成使汽车保持在道路上并防止碰撞的路径点。规划器基于状态机,状态机具有以下状态:(i)道路跟随,(ii)左转,(iii)右转,(iv)交叉路口向前和(v)危险停车。状态之间的转换基于感知模块提供的估计值和全局规划器提供的拓扑信息来执行。路径点连同车辆当前的姿态和速度一起传送给控制器。
持续控制器。我们使用比例-积分-微分(PID)控制器[6],因为它简单、灵活,并且对慢响应时间具有相对的鲁棒性。每个控制器接收当前姿态、速度和路径点列表,并分别驱动转向、油门和制动机构。我们的目标巡航速度为20公里/小时。
3.2 模仿学习
我们的第二种方法是条件模仿学习,这是一种除了感知输入外还使用高级命令的模拟学习[4]。该方法利用城镇中人类驾驶员记录的一个驾驶轨迹数据集。Thedataset D = fhoi; ci; aiig consists of tuples, each of which contains anobservation oi, a command ci, and an action ai. 这些命令由驾驶员在数据采集过程中提供,并指示他们的意图,类似于转向信号灯。我们使用一组四个命令:沿车道行驶(默认),在下一个十字路口直行,在下一个十字路口左转,在下一个十字路口右转。观察结果是来自前向摄像机的图像。为了提高学习策略的鲁棒性,我们在数据采集过程中加入了噪声。
我们已经收集了大约14个小时的驾驶数据用于训练。使用Adam优化器对网络进行训练[14]。为了提高泛化能力,我们进行了数据扩充和删除。
3.3 强化学习
我们的第三种方法是深度强化学习,它基于环境提供的奖励信号训练一个深度网络,没有人类驾驶轨迹。我们使用A3C[19]。该算法在仿真的三维环境中表现良好,例如赛车[19]和三维迷宫中的导航[19,13,5]。该方法的异步特性使多个线程能够并行运行,这对于深度强化学习的高样本复杂度非常重要。
我们训练A3C进行目标导向的导航。在每一次训练中,车辆必须在拓扑规划器的高级命令指导下达到目标。当车辆到达目标时,当车辆与障碍物相撞时,或当时间预算用尽时,事件终止。奖励是五项的加权和:朝目标行驶的速度和距离(正加权)、碰撞(负加权)、与人行道重叠(负加权)、与对面车道重叠(负加权)。
该网络使用10个并行线程进行训练,总共进行1000万个simulation steps。因为仿真所带来的计算成本,我们将训练限制在1000万个simulation steps。这相当于以每秒10帧的速度连续驾驶12天。
4 实验
我们评估了三种方法——模块化流水线(MP)、模拟学习(IL)和强化学习(RL),在六种天气条件下,在两个可用城镇中的每一个进行四项越来越困难的驾驶任务。我们按照增加难度的顺序组织任务如下:
•直线:目的地位于起点正前方,环境中没有动态对象。到目标的平均行驶距离,Town1为200米,Town 2为100米。
•一个转弯:目的地离出发点只有一个转弯;没有动态物体。到目标的平均行驶距离, Town1为400米,Town 2为170米。
•导航:不限制目的地相对于起点的位置,无动态物体。到目标的平均行驶距离, Town1为170米,Town 2为360米。
•存在动态障碍物的导航:与上一个任务相同,但使用动态对象(汽车和行人)。
实验在两个城镇进行。Town1用于培训,Town2用于测试。我们考虑六种天气条件进行实验,分成两组。训练用的天气集包括晴天、晴朗的日落、下雨的白天和雨后的白天。测试集的天气是训练集不包含的,包括多云的白天和细雨的日落。
对于一个任务、一个城镇和一个天气集合的每一个组合,都要进行超过25次的测试。在每一次测试中,目标是到达指定的目标位置。如果在预定时间内达到目标,则认为事件成功。预定时间为以10 km/h的速度沿着最佳路径达到目标所需的时间。违规行为:如在人行道上驾驶或产生碰撞,不会导致事件终止,但会记录和报告。
5 结果
表1报告了在四种不同情况下成功完成任务的百分比。
表1 三种自动驾驶方法在四种不同情况下成功完成任务的百分比。
表1中的结果表明了几个一般性结论。总的来说,即使是在最简单的直线驾驶任务中,所有方法的性能都不完美,对于更困难的任务,成功率进一步下降。对新天气的泛化要比对一个新城镇的泛化容易得多。模块化流水线和模拟学习在大多数任务和条件下都能达到同等水平。强化学习相对于其他两种方法表现不佳。现在我们将更详细地讨论这四个关键发现。
四项任务的表现。令人惊讶的是,在训练条件下,即使是在空旷的街道上笔直行驶这一最简单的任务,也没有一种方法能完美地发挥作用。我们认为,这一现象的根本原因是:输入的可变性。训练条件包括四种不同的天气条件。在训练过程中的精确轨迹不会在测试中重现。因此,完美地完成这项任务需要鲁棒的泛化,这对现有的深度学习方法是有挑战的。
对于更高级的任务,所有方法的性能都会下降。在人口稠密的城市环境中的导航任务,两种最好的方法(模块化流水线和模拟学习)在所有条件下的成功率都低于90%。这些结果清楚地表明,即使在训练条件下,性能也远未达到饱和,并且在新环境下的泛化是一个严重的挑战。
泛化。我们研究两种类型的泛化:对以前没遇到的天气条件和以前没遇到的环境。有趣的是,这两者的结果截然不同。对于模块化流水线和模拟学习来说,“新天气”条件下的性能与训练条件下的性能非常接近,有时甚至更好。然而,推广到一个新城镇对这三种方法都提出了挑战。在两个最具挑战性的导航任务中,当切换到测试城镇时,所有方法的性能下降了很多。这种现象可以解释为这样一个事实,即模型已经在多种天气条件下训练,但只在一个城镇训练。不同天气下的训练结果可以支持对以前没遇到的天气进行泛化,但对使用不同纹理和3D模型的新城镇则不适用。通过在不同的环境中进行训练,这个问题可能会得到改善。总的来说,我们的结果强调了泛化对基于学习的感觉运动控制方法的重要性。
模块化流水线vs端到端学习。分析模块化流水线和模拟学习方法的相对性能具有一定的指导意义。令人惊讶的是,在大多数测试条件下,这两种系统的性能非常接近:这两种方法的性能相差不到10%。这个结论有两个例外:一是模块化流水线在“新天气”条件下比在训练条件下表现更好。这是由于训练和测试天气的特定选择:感知系统恰好在测试天气下表现更好。另一个是,模块化流水线在“新城镇”条件下的导航任务表现不佳,在“新城镇和新天气”下的直线任务表现不佳。这是因为感知算法在新环境的复杂天气条件下系统性地失效。如果感知算法无法可靠地找到可驾驶路径,则基于规则的规划器和经典控制器将无法以一致的方式导航到目的地。因此,如果感知算法正常工作,整个系统工作正常;否则它将完全失败。从这个意义上说,模块化流水线比端到端方法更脆弱。
模仿学习与强化学习。我们现在对比两个端到端训练系统的表现:模仿学习和强化学习。在所有任务中,强化学习训练的表现都比模仿学习的要差。尽管如此,强化学习的训练使用的数据量要大得多:强化学习的数据是驾驶12天的,而模仿学习的仅是14小时的。为什么这一次强化学习表现不佳,而在Atari游戏[18,19]和迷宫导航[19,5]等任务上取得了很好的成绩?一个原因是众所周知强化学习是脆弱的[12],并且it is common to perform extensivetask-specific hyperparameter search,例如Mnih等人报告的每个环境50次试验[19] 。当使用模拟器时,这种extensive hyperparameter search变得不可行。我们根据文献证据和迷宫导航的探索性实验选择hyperparameters。另一种解释是,城市驾驶比以前用强化学习解决的大多数任务更困难。例如,与迷宫导航相比,在驾驶场景中必须处理混乱动态环境中的车辆动态和更复杂的视觉感知。最后,强化学习泛化能力差的原因可能是:与模拟学习相比,强化学习的训练没有数据扩充或规则化。
违规分析。CARLA支持驾驶策略的细粒度分析。现在,我们将研究三个系统在最困难的任务上的行为:存在动态对象的导航。我们通过以下五种违规行为中任意两种行为之间的平均行驶距离来评价这三个系统:在相反车道上行驶、在人行道上行驶、与其他车辆相撞、与行人相撞和撞击静止物体。
表2报告了两次违规之间的平均行驶距离(以公里为单位)。所有的方法在训练中都表现得更好。在所有情况下,模仿学习最不常进入相反车道,而强化学习在该指标中最差。令人惊讶的是,强化学习与行人碰撞的次数最少,这可以解释为这种碰撞所产生的巨大的负回报。然而,强化学习在避免与汽车和静态物体的碰撞方面并不成功,而模块化流水线通常在这方面表现最好。
表2 两次违规之间的平均行驶距离(以公里为单位)
6 结论
我们介绍了CARLA,一个开源的自动驾驶模拟器。除了开源代码和协议外,CARLA还提供了专门为此目的创建的数字资产,并且可以自由复用。我们利用CARLA的仿真引擎和内容来测试三种自主驾驶方法:经典的模块化流水线、通过模拟学习进行端到端训练的深度网络以及通过强化学习训练的深度网络。CARLA为我们提供了对自动驾驶系统进行开发和训练的工具,然后在受控场景中对其进行评估。我们希望CARLA能够帮助大家积极参与自动驾驶驾驶研究。模拟器和相关资产将在http://carla.org