Skip to content

yuanzhongqiao/GibsonEnv

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

用于具有现实世界感知的具体主动代理的 GIBSON ENVIRONMENT

你不应该整天玩电子游戏,你的人工智能也不应该!我们构建了一个虚拟环境模拟器 Gibson,它为学习感知提供了真实世界的体验。

摘要: 感知和活跃(即具有一定程度的运动自由度)密切相关。在物理世界中学习主动感知和感觉运动控制非常麻烦,因为现有算法太慢,无法有效地实时学习,而且机器人脆弱且成本高昂。这使得模拟学习取得了丰硕的成果,从而提出了如何转移到现实世界的问题。我们开发的 Gibson 环境具有以下主要特征:

一、来自现实世界,通过虚拟现实空间反映其语义复杂性,
二.具有转移到现实世界的内置机制(护目镜功能),以及
III。代理的体现,并通过集成物理引擎(Bulletphysicals)使其受到空间和物理的约束。

命名:吉布森环境以James J. Gibson命名,他是《视觉感知的生态方法》一书的作者,1979 年。“我们必须感知才能移动,但我们也必须移动才能感知” – JJ Gibson

请访问网站( http://gibsonenv.stanford.edu/ ) 了解更多技术细节。该存储库旨在用于分发环境和安装/运行说明。

“Gibson Env:体现代理的真实世界感知” CVPR 2018 [Spotlight Oral]

吉布森摘要视频

发布

这是 0.3.1 版本。我们鼓励并赞赏错误报告、改进建议以及社区发展。 更改日志文件

数据库

完整的数据库包括 572 个空间和 1440 个楼层,可以在此处下载。在这里可以看到吉布森所有空间的多样化可视化。为了使核心资产下载包对用户来说更轻松,我们包含了一小部分空间 (39)。用户可以下载其余空间并将其添加到资产文件夹中。如果您希望将 Gibson 的模拟器与这些数据集一起使用,我们还将斯坦福 2D3DSMatterport 3D集成为单独的数据集(在此处访问)。

目录

安装

安装方法

安装 gibson 有两种方法,A. 使用我们的 docker 镜像(推荐)和 B. 从源代码构建。

系统要求

最低系统要求如下:

对于 docker 安装(A):

  • 乌班图16.04
  • Nvidia GPU,显存 > 6.0GB
  • Nvidia 驱动程序 >= 384
  • CUDA >= 9.0,CuDNN >= v7

对于从源头构建(B):

  • 乌班图 >= 14.04
  • Nvidia GPU,显存 > 6.0GB
  • Nvidia 驱动程序 >= 375
  • CUDA >= 8.0,CuDNN >= v5

下载数据

首先,我们的环境核心资产数据可以在这里获取。您可以按照下面的安装指南正确下载并设置它们。gibson/assets文件夹存储运行gibson环境所需的数据(代理模型、环境等)。用户可以添加更多环境文件以gibson/assets/dataset在更多环境中运行gibson。访问数据库自述文件以下载更多空间。使用Gibson的数据库之前请签署许可协议。

A.快速安装(docker)

我们使用docker来分发我们的软件,您需要先安装dockernvidia-docker2.0

运行docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi以验证您的安装。

您可以 1. 从我们的 docker 映像中提取(推荐)或 2. 构建您自己的 docker 映像。

  1. 从我们的 docker 镜像中提取(推荐)
# download the dataset from https://storage.googleapis.com/gibson_scenes/dataset.tar.gz
docker pull xf1280/gibson:0.3.1
xhost +local:root
docker run --runtime=nvidia -ti --rm -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -v <host path to dataset folder>:/root/mount/gibson/gibson/assets/dataset xf1280/gibson:0.3.1
  1. 构建您自己的 docker 镜像
git clone https://github.com/StanfordVL/GibsonEnv.git
cd GibsonEnv
./download.sh # this script downloads assets data file and decompress it into gibson/assets folder
docker build . -t gibson ### finish building inside docker, note by default, dataset will not be included in the docker images
xhost +local:root ## enable display from docker

如果安装成功,您应该能够运行docker run --runtime=nvidia -ti --rm -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -v <host path to dataset folder>:/root/mount/gibson/gibson/assets/dataset gibson来创建容器。请注意,我们不会在 docker 镜像中包含数据集文件以保持镜像精简,因此您需要在启动容器时将其安装到容器中。

在无头服务器上部署的注意事项

Gibson Env 支持在无头服务器上部署以及使用x11vnc. 您可以使用上面的 docker 文件构建自己的 docker 镜像Dockerfile。在无头服务器上运行 gibson 的说明(需要运行 X 服务器):

  1. 按照入门指南安装 nvidia-docker2 依赖项。安装x11vncsudo apt-get install x11vnc.
  2. 让 xserver 在您的主机上运行,​​并x11vnc在 DISPLAY :0 上运行。
  3. docker run --runtime=nvidia -ti --rm -e DISPLAY -v /tmp/.X11-unix/X0:/tmp/.X11-unix/X0 -v <host path to dataset folder>:/root/mount/gibson/gibson/assets/dataset <gibson image name>
  4. 使用python <gibson example or training>内部 docker 运行 gibson。
  5. 访问您的host:5900,您应该能够看到 GUI。

如果您没有运行 X 服务器,您仍然可以运行 gibson,请参阅本指南了解更多详细信息。

B. 从源头构建

如果你不想使用我们的docker镜像,你也可以在本地安装gibson。这将需要安装一些依赖项。

首先,确保您安装了 Nvidia 驱动程序和 CUDA。如果从源代码安装,则不需要 CUDA 9,因为它适用于 nvidia-docker 2.0。然后,让我们安装一些依赖项:

apt-get update 
apt-get install libglew-dev libglm-dev libassimp-dev xorg-dev libglu1-mesa-dev libboost-dev \
		mesa-common-dev freeglut3-dev libopenmpi-dev cmake golang libjpeg-turbo8-dev wmctrl \
		xdotool libzmq3-dev zlib1g-dev

安装所需的深度学习库:推荐使用python3.5。可以先创建一个python3.5环境。

conda create -n py35 python=3.5 anaconda 
source activate py35 # the rest of the steps needs to be performed in the conda environment
conda install -c conda-forge opencv
pip install http://download.pytorch.org/whl/cu90/torch-0.3.1-cp35-cp35m-linux_x86_64.whl 
pip install torchvision==0.2.0
pip install tensorflow==1.3

克隆存储库、下载数据并构建

git clone https://github.com/StanfordVL/GibsonEnv.git
cd GibsonEnv
./download.sh # this script downloads assets data file and decompress it into gibson/assets folder
./build.sh build_local ### build C++ and CUDA files
pip install -e . ### Install python libraries

如果您需要运行训练演示,请安装 OpenAI 基线。

git clone https://github.com/fxia22/baselines.git
pip install -e baselines

卸载

卸载 gibson 很简单。如果你使用docker安装,只需运行docker images -a | grep "gibson" | awk '{print $3}' | xargs docker rmi清理镜像即可。如果您从源安装,请使用卸载pip uninstall gibson

快速开始

xhost +local:root首先在您的主机上运行以启用显示。您可能需要export DISPLAY=:0先跑步。使用 进入 docker 容器后docker run --runtime=nvidia -ti --rm -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -v <host path to dataset folder>:/root/mount/gibson/gibson/assets/dataset gibson,您将获得一个交互式 shell。现在您可以运行一些演示。

如果您是从源代码安装的,则可以使用以下命令直接运行它们,而无需使用 docker。

python examples/demo/play_husky_nonviz.py ### Use ASWD keys on your keyboard to control a car to navigate around Gates building

您将能够使用键盘上的 ASWD 键来控制汽车在盖茨大楼周围导航。此特定演示中不会显示相机输出。

python examples/demo/play_husky_camera.py ### Use ASWD keys on your keyboard to control a car to navigate around Gates building, while RGB and depth camera outputs are also shown.

您将能够使用键盘上的 ASWD 键来控制汽车在盖茨大楼周围导航。您还可以看到 RGB 和深度相机输出。

python examples/train/train_husky_navigate_ppo2.py ### Use PPO2 to train a car to navigate down the hallway in Gates building, using visual input from the camera.

通过运行此命令,您将开始训练哈士奇机器人在盖茨大楼中导航并使用 RGBD 输入沿着走廊行走。每集结束后,您将在终端中看到一些 RL 相关的统计数据。
python examples/train/train_ant_navigate_ppo1.py ### Use PPO1 to train an ant to navigate down the hallway in Gates building, using visual input from the camera.

通过运行此命令,您将开始训练蚂蚁在盖茨大楼中导航并使用 RGBD 输入沿着走廊行走。每集结束后,您将在终端中看到一些 RL 相关的统计数据。

吉布森帧率

以下是 Gibson Environment 在不同平台上的帧率基准。请参阅fps 分支以获取重现结果的代码。

平台 在 Intel E5-2697 v4 + NVIDIA Tesla V100 上测试
分辨率 [nxn] 128 256 第512章
RGBD,预网络f 109.1 58.5 26.5
RGBD、后网络f 77.7 30.6 14.5
RGBD,后小网络f 87.4 40.5 21.2
仅深度 253.0 197.9 124.7
仅表面法线 207.7 129.7 57.2
仅语义 190.0 144.2 55.6
非视觉感官 396.1 396.1 396.1

我们还在Intel I7 7700 + NVIDIA GeForce GTX 1070TiTested on Intel I7 6580k + NVIDIA GTX 1080Ti平台上进行了测试。每个任务的 FPS 差异在 10% 以内。

平台 在 Intel E5-2697 v4 + NVIDIA Tesla V100 上测试多进程 FPS
配置 512x512 剧集同步 512x512 帧同步 256x256 剧集同步 256x256 帧同步 128x128 剧集同步 128x128 帧同步
1 进程 12.8 12.02 32.98 32.98 52 52
2个过程 23.4 20.9 60.89 53.63 86.1 101.8
4道工序 42.4 31.97 105.26 76.23 97.6 145.9
8道工序 72.5 48.1 138.5 97.72 113 151

网页用户界面

运行 Gibson 时,您可以使用 启动 Web 用户界面python gibson/utils/web_ui.py python gibson/utils/web_ui.py 5552。当您无法物理访问运行 gibson 的计算机或在无头云环境中运行时,这非常有用。您需要更改mode配置文件才能web_ui使用 Web 用户界面。

渲染语义

当模型被语义注释时,Gibson 可以提供逐像素的逐帧语义掩码。截至目前,我们已为此目的整合了斯坦福 2D-3D-语义数据集Matterport 3D的模型。您可以在Gibson 中访问它们。我们建议您参考原始数据集的参考,以获取其语义类和注释的列表。

有关 Gibson 中渲染语义的详细说明,请参阅语义说明。作为安装附带的入门数据集中的一个示例,space7包括斯坦福 2D-3D-Semantics 风格注释。

机器人代理

Gibson 提供了一组基本代理。请在此处查看这些代理的视频及其相应的感知观察。

为了(可选)抽象出低级控制和机器人动力学来执行高级任务,我们还为每个代理提供了一组实用且理想的控制器。

代理名称 自由度 信息 控制器
穆乔科蚂蚁 8 开放人工智能链接 扭矩
穆乔科人形生物 17 号 开放人工智能链接 扭矩
哈士奇机器人 4 活性氧,制造商 扭矩、速度、位置
小牛机器人 8 机器人页面制造商 正弦控制器
兔子杰克 2 斯坦福项目链接 扭矩、速度、位置
海龟机器人 2 活性氧,制造商 扭矩、速度、位置
四旋翼飞行器 6 位置

起始代码

examples/demo更多演示示例可以在文件夹中找到

例子 解释
play_ant_camera.py 使用键盘上的 1234567890qwerty 键控制蚂蚁在盖茨大楼周围导航,同时还会显示 RGB 和深度相机输出。
play_ant_nonviz.py 使用键盘上的 1234567890qwerty 键来控制蚂蚁在盖茨大楼周围导航。
play_drone_camera.py 使用键盘上的 ASWDZX 键控制无人机在盖茨大楼周围导航,同时还会显示 RGB 和深度相机输出。
play_drone_nonviz.py 使用键盘上的 ASWDZX 键控制无人机在盖茨大楼周围导航
play_humanoid_camera.py 使用键盘上的 1234567890qwertui 键来控制人形机器人在盖茨大楼周围导航。开个玩笑,用键盘控制人形太难了,只能眼睁睁看着它掉下来。按 R 重置。还显示了 RGB 和深度相机输出。
play_humanoid_nonviz.py 观看人形物体坠落。按 R 重置。
play_husky_camera.py 使用键盘上的 ASWD 键控制汽车在盖茨大楼周围导航,同时还会显示 RGB 和深度摄像头输出。
play_husky_nonviz.py 使用键盘上的 ASWD 键控制汽车在盖茨大楼周围导航

更多训练代码可以在文件夹中找到examples/train

例子 解释
train_husky_navigate_ppo2.py 使用 PPO2 使用摄像头的 RGBD 输入来训练汽车沿着盖茨大楼的走廊行驶。
train_husky_navigate_ppo1.py   使用 PPO1 使用摄像头的 RGBD 输入来训练汽车沿着盖茨大楼的走廊行驶。
train_ant_navigate_ppo1.py 使用 PPO1 训练蚂蚁通过摄像头的视觉输入沿着盖茨大楼的走廊导航。
train_ant_climb_ppo1.py 使用 PPO1 通过摄像头的视觉输入来训练蚂蚁爬下盖茨大楼的楼梯。
train_ant_gibson_flagrun_ppo1.py 使用 PPO1 训练蚂蚁追逐盖茨大楼中的目标(红色立方体)。每当蚂蚁到达目标(或超时)时,目标就会改变位置。
train_husky_gibson_flagrun_ppo1.py 使用 PPO1 训练汽车追逐盖茨大楼中的目标(红色立方体)。每次汽车到达目标(或超时)时,目标都会改变位置。

ROS配置

我们在这里提供了使用 ROS 配置 Gibson 的示例。我们以turtlebot为例,在Gibson中训练策略后,只需进行最少的更改即可部署到turtlebot上。有关更多详细信息,请参阅自述文件。

编写 RL 代理的代码

您可以按照我们的约定对您的 RL 代理进行编码。我们的环境的接口非常简单(请参阅本节末尾的一些示例)。

首先,您可以通过在文件夹中创建类的实例来创建环境gibson/core/envs

env = AntNavigateEnv(is_discrete=False, config = config_file)

然后用 进行一步模拟env.step。并重置env.reset()

obs, rew, env_done, info = env.step(action)

obs给出机器人的观察结果。它是一个字典,每个组件作为键值对。它的键由用户在配置文件中指定。例如obs['nonviz_sensor']是本体感受传感器数据,obs['rgb_filled']是RGB相机数据。

rew是定义的奖励。env_done标志着一集的结束,例如机器人死亡时。 info给出此步骤的一些附加信息;有时我们用它来传递额外的非视觉传感器值。

在设计 RL 算法和环境的接口时,我们主要遵循OpenAIgym惯例。为了帮助用户更快地开始使用该环境,我们在Examples/train中提供了一些示例。我们使用的强化学习算法来自openAI 基线,并进行了一些调整,以处理混合视觉和非视觉感官数据。特别是,我们使用了PPO和PPO的速度优化版本。

环境配置

每个环境都配置有一个yaml文件。文件示例yaml可以在文件夹中找到examples/configs。该文件的参数解释如下。有关 Bullet 物理引擎的更多信息,您可以在此处查看文档。

参数名称 示例值 解释
环境名称 AntClimb环境 环境名称,确保与环境的类名相同
型号_id 空间1-空间8 场景id,在测试版中,从space1-space8中选择
目标_orn [0, 0, 3.14] 欧拉角(弧度)导航目标方向,参考系为世界系。对于非导航任务,该参数被忽略。
目标位置 [-7, 2.6, -1.5] 导航的目标位置(以米为单位),参考系为世界系。对于非导航任务,该参数被忽略。
初始_orn [0, 0, 3.14] 导航的初始方向(以弧度为单位),参考系为世界系
初始位置 [-7, 2.6, 0.5] 导航的初始位置(以米为单位),参考系为世界系
视场 1.57 相机的视野,以弧度为单位
使用填充剂 真假 是否使用神经网络填充器。建议将此参数保留为真。请参阅吉布森环境网站了解更多信息。
显示用户界面 真假 Gibson 有两种显示视觉输出的方式,要么在多个窗口中,要么将它们聚合到一个 pygame 窗口中。该参数决定是否显示pygame ui,如果在生产环境(训练),则需要将其关闭
显示诊断 真假 显示叠加在 RGB 图像上的诊断信息(包括 fps、机器人位置和方向、累积奖励)
用户界面编号 2 要显示多少个 ui 组件,这应该是 ui_components 的长度。
用户界面组件 [RGB_FILLED,深度] 这是 ui 组件,从 [RGB_FILLED、DEPTH、NORMAL、SEMANTICS、RGB_PREFILLED] 中选择
输出 [nonviz_sensor、rgb_filled、深度] 将环境输出到机器人,从 [nonviz_sensor、rgb_filled、深度] 中选择。这些值与 无关ui_components,因为ui_components它决定了显示内容并output决定了机器人接收的内容。
解决 第512章 从 [128, 256, 512] 分辨率中选择 RGB/深度图像
初始_orn [0, 0, 3.14] 导航的初始方向(以弧度为单位),参考系为世界系
速度:时间步长 0.01 一个物理模拟步骤的长度(以秒为单位)(如Bullet中所定义)。例如,如果 timestep=0.01 秒,frameskip=10,并且环境以 100fps 运行,则它将是 10 倍实时。注意:将时间步设置为高于 0.1 可能会导致当前版本的 Bullet 模拟器不稳定,因为对象在一个时间步内的移动速度不应超过其自身半径。您可以将时间步长保持在较低值,但增加跳帧以更快的速度进行模拟。有关详细信息,请参阅“离散碰撞检测”下的项目符号指南。
速度:跳帧 10 渲染帧时要跳过多少时间步。请参阅上行的示例。对于不需要高频控制的任务,可以将frameskip设置为更大的值以获得进一步的加速。
模式 图形用户界面/无头/web_ui gui 或 headless,如果在生产环境(训练),则需要将其转为 headless。gui模式下,会有视觉输出;在无头模式下,不会有任何视觉输出。除此之外,如果将模式设置为 web_ui,它将像无头模式一样运行,但视觉效果将呈现到 Web UI 服务器。(更多信息
冗长的 真假 在终端中显示诊断信息
fast_lq_render 真假 如果 yaml 文件中有 fast_lq_render,Gibson 将使用较小的填充网络,这将渲染速度更快,但生成质量稍低的相机输出。此选项对于快速训练 RL 代理非常有用。

打造您的定制环境

Gibson 提供了一组方法供您定义自己的环境。您可以按照里面现有的环境进行操作gibson/core/envs

方法名称 用法
机器人.render_observation(姿势) 根据姿势渲染新的观察结果,返回字典。
机器人.get_observation() 以当前姿势进行观察。需要在robot.render_observation(pose)之后调用。这不会引起额外的计算。
机器人.get_position() 获取当前机器人位置。
机器人.get_orientation() 获取当前机器人方向。
机器人.眼睛.get_position() 获取当前机器人感知相机位置。
机器人.眼睛.get_orientation() 获取当前机器人感知相机方向。
机器人.get_target_position() 获取机器人目标位置。
机器人.apply_action(动作) 对机器人应用动作。
机器人.reset_new_pose(pos, orn) 将机器人重置为任意姿势。
机器人.dist_to_target() 获取机器人到目标的当前距离。

护目镜:将代理转移到现实世界

Gibson 包含一个名为 Goggles 的内置域适应机制,用于在 Gibson 中训练的代理将被部署到现实世界中时(即根据来自机载摄像头的图像进行操作)。该机制本质上是一种学习的逆函数,它将来自真实相机的帧更改为通过吉布森渲染的帧,从而消除域间隙。

更多细节:由于点云渲染存在所有缺陷,事实证明很难通过神经网络修复来获得完全逼真的渲染。剩下的问题使得合成图像和真实图像之间存在域差距。因此,我们将渲染问题表述为形成一个联合空间,确保渲染图像和真实图像之间的对应关系,而不是尝试(不成功地)渲染与真实图像相同的图像。这为穿越这些域提供了一条确定性的路径,从而消除了差距。我们为目标图像(I_t)添加另一个网络“u”,并定义渲染损失以最小化f(I_s)和u(I_t)之间的距离,其中“f”和“I_s”代表填充神经网络和点云渲染分别输出(参见上图的损失)。我们对 f 和 u 使用相同的网络结构。函数 u(I) 经过训练,可以改变现实世界中的观察值 I_t,使其看起来像相应的 I_s,从而消除间隙。我们将 u 网络护目镜命名为 u 网络护目镜,因为它类似于现实世界中部署的代理的矫正镜片。该机制的详细阐述和讨论可以在论文中找到。您可以下载函数 u 并在现实世界中部署训练有素的代理时应用它。

为了使用护目镜,您最好需要一个带有深度传感器的相机,我们在这里提供了Kinect 的示例。训练好的护目镜函数存储在 中assets/unfiller_{resolution}.pth,并且每一个函数都与一个填充函数配对。您需要根据使用的填充函数来使用正确的填充函数。如果您没有带深度传感器的相机,我们在这里也仅提供 RGB 的示例。

引文

如果您使用 Gibson Environment 的软件或数据库,请引用:

@inproceedings{xiazamirhe2018gibsonenv,
  title={Gibson {Env}: real-world perception for embodied agents},
  author={Xia, Fei and R. Zamir, Amir and He, Zhi-Yang and Sax, Alexander and Malik, Jitendra and Savarese, Silvio},
  booktitle={Computer Vision and Pattern Recognition (CVPR), 2018 IEEE Conference on},
  year={2018},
  organization={IEEE}
}

About

吉布森环境:实体代理的真实世界感知

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 45.6%
  • Python 33.0%
  • C++ 17.6%
  • Cuda 2.4%
  • CMake 0.9%
  • Shell 0.4%
  • Other 0.1%