很高兴给大家介绍我们 CVPR 2018 的项目 Gibson Environment。这是一个主要适用于机器人导航任务的模拟平台。我们在传统的图形学渲染 pipeline 基础上进行了创新,使用神经网络作为渲染引擎 (neural network rendering engine),达到了近乎真实环境的渲染效果。通过和物理引擎的融合,我们可以做到在计算机里 1:1 地模拟真实环境:
效果图:我们动态地模拟了斯坦福计算机系 (Gates Building) 一楼的真实场景,让虚拟机器人可以在其中进行探索,学习真实世界。我们在 Gibson Environment 里可以同时「激活」大量类似的机器人。喜欢电影黑客帝国的读者可能对这个概念并不陌生。
通过 Gibson Environment,我们可以把真实的场景 (例如家庭住宅,学校,办公室) 虚拟化,以节约大量在真实环境训练机器人的资源。另一方面,我们可以把虚拟环境中训练出来的机器人部署到真实环境。这为实现真实的强化学习提供了有力的基础。
使用我们的开源平台来探索激活的和真实世界的感知。上图展示了 Gibson 中的两个智能体。这两个智能体是激活的、嵌入式的,并服从物理定律和空间(a,b)的约束。它们源源不断地接收视觉观察,就好像佩戴了摄像头,并以第一人称视角来观察环境(c)。除了(c)中的 RGB 通道模态,它们还能接收其它模态的观察,如(d)深度、(e)语义标签、(f)表面法线。该虚拟环境是通过扫描真实建筑得到的。
项目网址:http://gibson.vision
3D 数据集地址:http://gibson.vision/database
论文地址:http://gibson.vision/Gibson_CVPR2018.pdf
Github 地址:https://github.com/StanfordVL/GibsonEnv
背景
2016 年起,伴随深度强化学习的兴起,计算机视觉领域的研究重心从静态图像处理开始转向动态视觉控制。大量的仿真模拟平台涌现而出 (例如虚拟驾驶平台 Carla, 虚拟无人机平台 Airsim)。
传统机器人领域倾向于将一个复杂的任务分成感知 (perception) 模块和决策 (planning) 模块,而强化学习让我们可以端到端地学习到更复杂的控制 (end to end control/sensorimotor control),即输入传感器信息,然后直接输出控制信号。
目前最前沿的强化学习算法已经在很多端到端任务上获得了的成功,例如在游戏中学会解迷宫,在不平的路面上学会行走。在自动驾驶中,从摄像头拍到的画面,我们可以直接预测方向盘的转角和油门刹车。
这样的任务无法在静态的数据集(例如 ImageNet)中学习。我们需要在一个可交互式的动态环境中训练智能体。
上图涵盖了目前主流的模拟环境,包括游戏类的毁灭战士(VIZdoom)、侠盗猎车(GTA)、驾驶类的 CARLA,物理类的 Roboschool 等。之前提到的解迷宫、行走智能体就出自这些环境。有了这些成果,我们能不能将智能体应用于实际生活中,解决驾驶、机器人行走的问题呢?
事实告诉我们,部署到实际中的智能体往往会因为观测到的像素不同而导致结果不理想,甚至失灵。例如在 GTA 中训练的自动驾驶汽车到了真实世界中,看到从没有见过的场景,会不幸成为马路杀手。
可迁移已训练智能体的学习环境需要具备三个主要特性:(1)来自真实世界并反映其语义复杂性;(2)具有确保在实际部署结果之前不需要进一步的域适应的机制;(3)智能体可在环境中具象化,并服从空间和物理定律的约束。
针对这个问题,我们设计了 Gibson Environment,以解决模拟平台的环境不够真实 (photorealisitic) 的问题。目前大部分的模拟平台都是基于计算机图形学的方法 (例如 THOR, House3D, Carla),而使用这种方法通常很难迁移到真实环境。在我们的工作中,我们使用基于图片的渲染 (IBR) 方法,结合神经网络,达到了高效和真实的渲染。
Gibson Environment 的名字来源于美国认知心理学之父 James J. Gibson。他提出认知 (perception) 和 行动 (action) 具有非常紧密的联系,婴儿需要通过主动玩耍才能学会识别各种物体。这对于人工智能也是一样的。Gibson Environment 的科研价值在于它正是这样一个环境,让智能体可以同时学习认知和行动。
方法
为了渲染出看起来更加真实的画面,计算机图形学领域主要有两条主要的技术线路,一种是通过更仔细的建模和更好的光线追踪算法来实现渲染。这种方法在电影制作中十分常见,通常需要消耗大量的计算资源和资金,不适合用于实时渲染的模拟环境。
另一种方法是直接从真实环境中采集图片,把渲染的问题定义为「视角合成」问题,即给定几个从已有的视角采集的图片,合成一个新的视角。我们采用了这种方法作为渲染方法,示意图如下:
该方法的输入是环境的 3D 模型(比较粗糙)和从一系列视角采集到的图片。对于要渲染的任意一个视点,我们选取周围的 k 个视点,将每个视点的每个像素投射到 3D 模型上,得到一个三维点云。之后,我们对 3D 点云进行简单的双线性插值,得到一个初步的渲染结果。
不同于常见 3D 模型材质渲染的方法,我们对于不同的视点选取材质的方法是自适应的(更近的视点采样更多)。受扫描位置稀疏性、设备、重建算法、伪像等因素的限制,植被和小物体等细节大多数时候都无法正确重建。反射表面,例如窗户和台面,将在重建的网格上留下孔。这些都导致了渲染输出的不完整。
为此,我们使用一个卷积神经网络对渲染进行后处理。我们采用两阶段方法,第一阶段是点云的纯几何渲染。我们的 CUDA 点云渲染器可以以 80fps 渲染 10M 个点的 1024x2048 视频流。
我们项目的另一个创新是把像素级域适应 (pixel level domain adaptation) 的机制嵌入到渲染引擎当中。对于渲染图像 I_s 和真实图像 I_t,我们的后处理网络 f 可以让渲染图像看起来像真实世界中的照片,即 f(I_s)≈I_t。与此同时,我们还训练了另外一个网络 u,让真实世界中的照片看上去像我们的渲染图像,即 u(I_t)≈f(I_s)(此处「≈」仅非严谨地代表「相似」)。
在深度估计任务上的 Gibson 到真实环境的迁移实验结果表明,f(I_s) 域和 u(I_t) 域能很好地对齐。
这样做简化了机器人在真实世界的部署:只需要在机器人的传感器上接入我们的网络,就能给机器人戴上了一副虚拟的「眼镜」(goggles),令其在真实环境中感知和 Gibson Environment 一样的环境。
特性
物理具象化
下图展示了火柴人从楼梯跌落时的场景,上行的火柴人动作轨迹看上去很符合物理定律,下行是对应的火柴人视角的观察。
为了使智能体受到物理和空间的约束,我们将 Gibson 环境与物理引擎相结合。这使我们能够将智能体暴露于物理现象,如碰撞、重力、摩擦等。我们的物理模拟器支持刚体和软体仿真,具有离散和连续的碰撞检测。使用 GPU 和 OpenGL 优化,我们的环境支持以 100 倍实时速度学习物理相互作用。由于扫描模型默认情况下不具备材料属性,因此我们的空间不提供真实的物理属性,例如材料摩擦。我们在物理引擎中默认使用库仑摩擦模型来模拟它。为了降低计算复杂度,除非用户激活,否则我们也不会在物理引擎中对气流进行建模。相对地,我们为刚体运动提供线性阻尼函数。
优化速度
渲染帧数对于强化学习很关键,我们希望能实现更快于实时的模拟帧数。为此,我们实现了 CUDA-优化的渲染 pipeline。在最消耗计算资源的后处理网络执行中,我们在 RGBD 数据上取得了几十到上百帧数的渲染性能。
强化学习任务
该视频展示了在 Gibson Environment 中训练的强化学习策略的一些结果。智能体执行的是视觉局部规划和避障的任务。
数据集
近年来随着实景扫描技术的进步,有大量的楼房、住宅、真实场所被扫描并保存成了虚拟档案。最初,这样的档案主要被应用于房地产网络销售。
斯坦福视觉实验室(Stanford Vision Lab)是最早将这样的数据应用于科研的实验室。在 Stanford 2D3DS 项目中,研究院将斯坦福大学 6 栋主要建筑进行了扫描,并取得了一系列突破。在此之后,被应用于科研的实景扫描数据量呈指数式增长。
Stanford 2D3DS:http://buildingparser.stanford.edu/dataset.html
Gibson Environment 可以模拟任何被扫描过的真实环境,这是它的一个巨大优点。你完全可以扫描自己的房子,然后用 Gibson Environment 为之生成一个虚拟的环境,训练你的扫地机器人。
在我们这次的 release 中,我们收集并开源了 572 个建筑物(1440 层)的扫描。作为现有最大的数据集,我们比同类数据集(例如 matterport3D)大一个数量级。
其中每个建筑物的虚拟环境数据包含了完整的 3D 网格,如下图所示:
当智能体在环境中探索时,可以随自身的探索观察到不同类型的动态视图:
从左到右依次是 RGB 视图、深度视图和表面法线视图。
下图是该环境的全景展示:
目前我们已经在 GitHub 项目中发布了一小部分数据集作为环境 Beta 测试的一部分,主要的数据集将会在近期发布。
讨论
在文中,我们对渲染方法做了各种测试,包括速度、和真实图像的差距、以及域适应能否成功实现等,有兴趣的读者可以参考我们的文章。不过由于时间的限制,在 CVPR 的文章里我们并没有在机器人上做实验,近期我们正在进行这些实验,包括语义导航、语义建图、目标驱动的三维重建等任务。
ROS Demo
由于面向的是机器人的应用,我们集成了 Gibson 模拟环境和机器人操作系统,ROS 的用户可以方便地使用 Gibson Env 作为模拟器,来模拟摄像头或者 kinect 输入。下图是用 Gibson 模拟器模拟机器人建图 (mapping) 的一个简单 demo: