ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

DeepMind Lab 快速上手指南:基于 Quake III Arena 的 3D 强化学习研究环境

DeepMind Lab 快速上手指南:基于 Quake III Arena 的 3D 强化学习研究环境 人工智能强化学习机器学习【免费下载链接】labA customisable 3D platform for agent-based AI research项目地址https://gitcode.com/gh_mirrors/la/lab点击查看免费下载导读DeepMind Lab 是一个基于 id Software 的 Quake III Arena 游戏引擎经由 ioquake3构建的可定制 3D 学习环境专为人工智能研究尤其是深度强化学习设计提供一套具有挑战性的 3D 导航与解谜任务。本文以仓库根目录的 README.md 为主线系统讲解在 Linux 下从零构建 DeepMind Lab、以人类身份试玩、运行随机 Agent 训练、以及通过 Python/C API 与环境交互的完整流程并结合仓库源码说明其内部工作原理帮助读者快速上手并在此基础上开发自己的学习 Agent 与自定义关卡。项目概述与定位DeepMind Lab 是一个 3D 学习环境其核心定位是作为 AI 研究尤其是深度强化学习的测试平台testbed。它并非一个商业游戏而是一套供学习 Agentlearning agent在其中完成 3D 导航navigation与解谜puzzle-solving任务的研究工具。项目自述中明确指出This is not an official Google product这不是谷歌官方产品读者在使用时应留意这一点。项目技术栈上承 Quake III Arena 引擎通过 ioquake3 与一系列开源软件构建而成。在学术引用方面若在研究中使用了该环境官方建议引用 DeepMind Lab 论文arXiv:1612.03801。从仓库结构看整个项目由多个相互协作的部分组成engine/code游戏引擎核心代码client、server、game、renderergl1/renderergl2、qcommon 等模块deepmind环境与引擎之间的桥接层包括 context.cc、callbacks.cc 等负责将 Lua 关卡脚本与游戏引擎连接起来game_scripts用 Lua 编写的关卡脚本与通用模块common、factories、levels 等pythonPython 绑定模块与示例 Agentrandom_agent.pyassets 与 assets_oa游戏资源模型、贴图、地图、shaderq3map2 与 engine/code/bspc地图编译工具链。在 Linux 上快速开始获取 Bazel 并克隆仓库构建 DeepMind Lab 依赖 Bazel 构建系统项目根目录的 WORKSPACE 与 BUILD 定义了全部构建规则。首先从 Bazel 官网安装 Bazel然后克隆本仓库$ git clone https://github.com/deepmind/lab $ cd lab当前仓库即 DeepMind Lab 的镜像/加速副本克隆后进入仓库根目录执行后续命令。运行一个随机 Agent 的完整示例仓库提供了一个可直接运行的随机 Agent 示例用于快速验证环境是否正常lab$ bazel run :python_random_agent --define graphicssdl -- \ --length10000 --width640 --height480该命令会构建:python_random_agent目标其定义见根目录 BUILD 中的py_binary规则使用--define graphicssdl指定图形后端为 SDL用于可视化窗口让随机 Agent 在默认关卡tests/empty_room_test上运行 10000 步观察画面尺寸为 640×480。--define graphics...决定图形实现方式仓库 BUILD 中对应有三组config_settingdmlab_graphics_sdl、dmlab_graphics_osmesa_or_glx、dmlab_graphics_osmesa_or_egl。机器学习的 headless 场景通常使用 OSMesa软件渲染或 EGL/GLX硬件加速渲染而人类试玩则需要 SDL 窗口。启用编译器优化针对真实的训练与评估场景性能至关重要。官方建议在每次bazel build、bazel test与bazel run时附加优化标志lab$ bazel run -c opt :python_random_agent即--compilation_modeopt简写-c opt。为简洁起见本文后续示例省略了该标志但实际训练时应始终加上。更详细的构建文档如果缺少依赖或需要针对特定平台调整构建可参考 docs/users/build.md注该文档在当前仓库中位于 docs/users/build.md。以人类身份试玩启动交互式游戏为了直观感受环境与关卡可以用人类输入控制试玩lab$ bazel run :game -- --level_scripttests/empty_room_test --level_settinglogToStdErrtrue # 或使用短参数形式 lab$ bazel run :game -- -l tests/empty_room_test -s logToStdErrtrue-l/--level_script指定关卡脚本名不含.lua后缀-s/--level_setting以keyvalue形式传入关卡配置。logToStdErrtrue用于把日志输出到标准错误流以便观察去掉该设置即可关闭大部分日志输出。关卡脚本位于 game_scripts/levels 目录例如lt_chasm.lua、seekavoid_arena_01.lua、nav_maze_static_01.lua等tests/子目录下还有专供测试使用的关卡如 empty_room_test.lua。游戏可执行文件:game的 C 源码为 examples/game_main.c其命令行帮助kUsage列出了全部可用参数--level_script、--level_setting可多次、--observation可多次、--num_episodes、--start_index、--print_events、--random_seed、--mixer_seed、--fps等。打印观测值调试环境的观测observation可以在每一步打印出来只需为每个感兴趣的观测追加一个--observation标志。例如在lt_chasm关卡上打印平移速度与旋转速度lab$ bazel run :game -- --level_scriptlt_chasm --observation VEL.TRANS --observation VEL.ROT观测名如VEL.TRANS、VEL.ROT是内置观测的典型代表完整的观测列表可通过 Python API 的observation_spec()获取详见后文。训练一个 Agent示例随机 Agent仓库自带两个随机 Agent 示例可作为实现学习 Agent 的起点python/random_agent.py包含DiscretizedRandomAgent从离散动作表中随机选择与SpringAgent使用临界阻尼弹簧模型平滑演化连续动作两个实现python/random_agent_simple.py更简单的随机动作版本。默认的SpringAgent依据env.action_spec()返回的动作规格每个动作的名称、最小值、最大值在合法区间内采样随机目标动作再通过临界阻尼微分方程生成平滑的动作序列并以小概率1%触发开火、以更小概率0.5%触发跳跃/蹲伏。其主循环逻辑如下env deepmind_lab.Lab(level, [RGB_INTERLEAVED], configconfig) env.reset() agent SpringAgent(env.action_spec()) for _ in six.moves.range(length): if not env.is_running(): print(Environment stopped early) env.reset() agent.reset() obs env.observations() action agent.step(reward, obs[RGB_INTERLEAVED]) reward env.step(action, num_steps1)运行训练lab$ bazel run :python_random_agent在 BUILD 中:python_random_agent是py_binary其依赖python_random_agent_lib通过data字段携带deepmind_lab.soPython 绑定动态库由 python/dmlab_module.c 编译而来。因此random_agent.py中import deepmind_lab直接加载的正是这个.so模块。交互协议与 Python APIAgent 与环境之间的交互使用 Python API。其核心类是deepmind_lab.Lablab deepmind_lab.Lab(level, observations, config{}, renderersoftware, level_cacheNone)level关卡脚本名Lua 脚本相对game_scripts/levelsobservations需要返回的观测名列表config键值字符串对字典用于传递附加设置renderersoftwareOSMesa 软渲染或hardwareEGL/GLX 硬件渲染level_cache可选关卡缓存对象用于避免重复编译地图。环境对象的主要方法方法说明reset(episode-1, seedNone)重置环境episode指定具体集数seed指定随机数种子step(action, num_steps1)推进环境num_steps帧返回累计奖励observations()返回观测字典Numpy 数组observation_spec()返回可用观测的名称、类型与形状action_spec()返回动作规格每个动作的最小/最大值num_steps()自上次reset以来的帧数is_running()环境是否处于运行状态events()返回自上次reset/step以来发生的事件列表fps()环境帧率帧/真实秒的参考指标close()关闭环境并释放底层 Quake III Arena 实例动作规格示例来自 docs/users/python_api.md# [{max: 512, min: -512, name: LOOK_LEFT_RIGHT_PIXELS_PER_FRAME}, # {max: 512, min: -512, name: LOOK_DOWN_UP_PIXELS_PER_FRAME}, # {max: 1, min: -1, name: STRAFE_LEFT_RIGHT}, # {max: 1, min: -1, name: MOVE_BACK_FORWARD}, # {max: 1, min: 0, name: FIRE}, # {max: 1, min: 0, name: JUMP}, # {max: 1, min: 0, name: CROUCH}]step()接受的 Numpy 数组必须为np.intc类型且符合action_spec()的规格否则行为未定义。动作含义可参考 docs/users/actions.md如LOOK_LEFT_RIGHT_PIXELS_PER_FRAME取值范围 [-512, 512]单位是像素相当于 640×480、60fps 下鼠标移动的像素数约 57 个单位可使玩家在一秒内旋转 360 度FIRE、JUMP、CROUCH为 0/1 布尔动作。此外还可用gadgetSelect值域 [0,10]与gadgetSwitch值域 [-1,1]两个扩展动作需在关卡设置中开启对应标志。使用 dm_env 通用强化学习接口除原生 Python API 外仓库还提供对 DeepMind 通用强化学习接口dm_env的绑定适配模块为 python/dmenv_module.py并通过 PIP 包的dmenv_module附加依赖安装pip install /tmp/dmlab_pkg/deepmind_lab-1.0-py2-none-any.whl[dmenv_module]使用时通过from deepmind_lab import dmenv_module导入。注意并非所有 DeepMind Lab 特性都能通过 dm_env 暴露例如 dm_env 的观测规格不支持动态形状而 DeepMind Lab 原生 APIthird_party/rl_api/env_c_api.h支持。构建自包含的 PIP 包如果你希望脱离 Bazel 项目、在普通 Python 环境中使用 DeepMind Lab官方提供了构建自包含 PIP 包的流程详见 python/pip_package/README.mdgit clone https://github.com/deepmind/lab.git cd lab bazel build -c opt --python_versionPY2 //python/pip_package:build_pip_package ./bazel-bin/python/pip_package/build_pip_package /tmp/dmlab_pkg pip install /tmp/dmlab_pkg/deepmind_lab-1.0-py2-none-any.whl --force-reinstall要点用--python_versionPY2或PY3选择构建目标 Python 版本Bazel 0.27 起默认PY3生成的.whl文件名相应包含-py2-或-py3-打包脚本需从 DeepMind Lab 源码根目录运行它依赖当前目录下的bazel-bin安装后即可在任意 Python 脚本中import deepmind_lab若在 virtualenv 中安装需确保 NumPy 版本不低于构建时所用版本对 DeepMind Lab 任何文件新增关卡脚本、模型、贴图、代码的改动都需要重新构建打包脚本并重新安装。安装验证示例来自 pip_package READMEimport deepmind_lab import numpy as np lab deepmind_lab.Lab(demos/extra_entities, [RGB_INTERLEAVED], {fps: 30, width: 80, height: 60}) lab.reset(seed1) # 向前行走 100 步累加每步返回的奖励 print(sum( [lab.step(np.array([0,0,0,1,0,0,0], dtypenp.intc)) for i in range(0, 100)]))该示例在demos/extra_entities关卡上向前移动 100 步最终打印的奖励应为 4.0出生点前方有四个苹果每个价值 1 分。关卡Levels体系DeepMind Lab 自带多种关卡每个关卡针对不同的认知能力设计导航、寻路、目标搜索、解谜等详见 docs/levels.md。所有关卡均为 Lua 脚本可用 Lua API 或 Python API 实例化。关卡脚本位于 game_scripts/levels常用示例lt_chasm.lua激光标签laser tag关卡其配置见 game_scripts/levels/lt_chasm.lua默认botCount 4、地图lt_chasmseekavoid_arena_01.lua寻找/躲避竞技场关卡nav_maze_static_01.lua、nav_maze_random_goal_01.lua等导航迷宫系列stairway_to_melon.lua、lt_space_bounce_hard.lua等其他挑战关卡。关卡支持标准配置项来自 docs/levels.md键默认值说明episodeLengthSeconds90一个 episode一次可能包含多次关卡重开的运行持续多少秒后结束gadgetSelectfalse启用 gadget 选择见 actions 文档gadgetSwitchfalse启用 gadget 切换见 actions 文档allowHoldOutLevelsfalse允许加载被test_only装饰的 hold-out 关卡logLevelINFO日志详细程度取值NEVER/ERROR/WARNING/INFO或任意正整数实现见 game_scripts/common/log.lua在 Python API 中通过config字典传递这些键值例如botCount: 2未被识别的选项会原样传给关卡的 init 函数Lua 侧对应api:init的kwargs.opts。Python API 的 config 参数Python API 文档 中列出了Lab构造函数config字典的标准键选项说明默认值width观测帧的水平分辨率320height观测帧的垂直分辨率240fps每秒帧数60levelDirectory关卡目录的额外路径相对路径相对于 game_scripts/levelsappendCommand传入内部 Quake 控制台的命令mixerSeed与喂给环境的每个 seed 混合以定义互不重叠的种子子集0示例运行带 2 个机器人的 lt_chasm 关卡import deepmind_lab observations [RGBD] env deepmind_lab.Lab(lt_chasm, observations, config{width: 640, # 屏幕宽度像素 height: 480, # 屏幕高度像素 botCount: 2}, # lt_chasm 关卡选项 rendererhardware) # 选择渲染器 env.reset()渲染后端选择--define graphicsoption控制使用哪种图形实现对应根目录 BUILD 中game_lib_sdl、game_lib_headless_osmesa、game_lib_headless_glx、game_lib_headless_egl四个图形库目标--define graphicsosmesa_or_egl默认renderersoftware用 OSMesarendererhardware用 EGL--define graphicsosmesa_or_glxrenderersoftware用 OSMesarendererhardware用 GLX--define graphicssdl渲染到原生窗口此时观测列表中必须包含以RGB开头的观测才能正确渲染。从脚本运行除了命令行:game之外环境也可以从脚本驱动Python 示例见 examples/game_main.py它演示了-l/--level_script、-s/--level_settings可多次传入keyvalue等参数以及env.observations()、env.step()、env.is_running()的完整使用C 语言示例见 examples/game_main.c通过 public/dmlab.h 暴露的 C APIEnvCApi完成同样的交互。从脚本驱动环境的典型代码来自 docs/users/run_from_script.mdimport deepmind_lab # 构造并启动环境 env deepmind_lab.Lab(seekavoid_arena_01, [RGB_INTERLEAVED]) env.reset() # 创建全零动作向量 action np.zeros([7], dtypenp.intc) # 以全零动作推进环境 4 帧 reward env.step(action, num_steps4) # 获取新状态下的观测 obs env.observations() # Numpy 数组字典 rgb_i obs[RGB_INTERLEAVED] assert rgb_i.shape (240, 320, 3)关卡缓存Level Cache对于每个 episode 都重新生成地图的关卡如explore_goal_locations_small向Lab(..., level_cache...)传入缓存对象可复用已编译的关卡显著提升性能。缓存对象需实现两个方法fetch(key, pk3_path)若命中缓存返回True并将缓存的关卡复制到pk3_path否则返回Falsewrite(key, pk3_path)将位于pk3_path的关卡按key写入缓存。一个基于文件系统的实现示例见 docs/users/python_api.md使用os.path与shutil.copyfile实现。上游来源与工程继承DeepMind Lab 建立在多个上游开源项目之上README 的 Upstream sources 一节说明了它们的来源与集成方式bspc取自 github.com/TTimo/bspc修订版 d9a372d...本地几乎没有改动用于生成机器人寻路所需的 AAS 数据源码集成于 engine/code/bspcq3map2取自 github.com/TTimo/GtkRadiant修订版 d3d00345...仅有少量本地修改以增加同步用于地图编译仓库内位于 q3map2ioquake3取自 github.com/ioquake/ioq3修订版 29db6407...代码包含大量本地修改与扩展仓库内位于 engine/code。README 指出来自这些上游项目的 bug 修复与清理工作最好先在上游修复再合并回 DeepMind Lab。外部依赖、前置条件与移植说明DeepMind Lab 目前仅以源码形式分发依赖若干外部软件库按提供方式可分为三类详见 README External dependencies 一节作为外部 Bazel 源引用随仓库附带 BUILD 规则zlib、glib、libxml2、jpeg、png等对应仓库根目录 WORKSPACE 中的http_archive声明与 bazel 目录下的.BUILD文件。这些 BUILD 规则是针对 Linux x86 编写的换平台构建很可能需要修改随包携带的源码消息摘要算法RFC 参考实现位于 third_party/md通用强化学习 API 位于 third_party/rl_api头文件 third_party/rl_api/env_c_api.h 定义了 EnvCApi 接口EGL/KHR 头文件位于 third_party/GL/EGL 与 third_party/GL/KHR取自 Khronos OpenGL/OpenGL ES 注册表并做了去除 X 依赖的少量修改必须由系统提供、仓库不附带的库SDL 2窗口与输入gettextglib 所需OpenGL人类试玩需要硬件驱动与库机器学习 Agent 常用的 headless 场景可根据--define headless...构建设置选择硬件渲染EGL 或 GLX或软件渲染OSMesaPythonPython 2.7其他版本也可能可用需 NumPy、PIL个别测试要求 NumPy ≥ 1.8或 Python 3至少 3.5需 NumPy 与 Pillow。此外构建规则使用了若干 GCC 特有的编译器选项若编译器不识别某些标志通常是与警告抑制相关的标志可能需要手动修改这些标志警告本身嘈杂但无害noisy but harmless。总结通过本文读者应该已经掌握在 Linux 上用 Bazel 构建 DeepMind Lab 并运行随机 Agent 验证环境以人类身份试玩内置关卡并通过--observation观察调试信息使用 Python API 或 C API 编写自己的 Agent理解Lab类、action_spec()、observation_spec()、step()、reset()等核心接口构建自包含 PIP 包并在 Bazel 之外使用 DeepMind Lab了解关卡体系docs/levels.md、渲染后端选择SDL/OSMesa/EGL/GLX与上游工程来源。在此基础上读者可以继续深入 Lua API 参考、关卡创建教程 与 开发者文档自定义关卡与任务将 DeepMind Lab 应用于自己的强化学习研究。赞分享人工智能强化学习机器学习【免费下载链接】labA customisable 3D platform for agent-based AI research项目地址https://gitcode.com/gh_mirrors/la/lab点击查看免费下载相关推荐DeepMind Lab 构建全指南基于 Bazel 从源码编译 3D AI 研究环境DeepMind Lab 构建全指南基于 Bazel 从源码编译 3D AI 研究环境 DeepMind Lab 是一个可自定义的 3D 智能体Agent人工智能强化学习机器学习如何在Neovim中高效嵌入图片img-clip.nvim专业指南如何在Neovim中高效嵌入图片img clip.nvim专业指南 你是否厌倦了在编写技术文档时为了插入一张图片而不断切换窗口、保存文件、复制路径的繁琐流程Open Policy Agent 与 Ceph 对象存储集成指南基于 REST API 的细粒度访问控制Open Policy Agent 与 Ceph 对象存储集成指南基于 REST API 的细粒度访问控制 导读 本文介绍 Open Policy Agent后端认证鉴权云原生创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表