DeepMind Lab 观测(Observations)体系全解:内置、自定义与调试观测的配置与原理

发布时间:2026/11/14 20:46:51

DeepMind Lab 观测(Observations)体系全解:内置、自定义与调试观测的配置与原理 人工智能强化学习机器学习【免费下载链接】labA customisable 3D platform for agent-based AI research项目地址https://gitcode.com/gh_mirrors/la/lab点击查看免费下载观测observation是智能体从环境中获取信息的唯一通道。在 DeepMind Lab 中每一类观测都有确定的名称、数据类型与张量形状tensor shape它们分别由引擎内置、Lua 装饰器注入或调试接口暴露。本文以仓库中的 docs/users/observations.md 为骨架结合 game_scripts/decorators/custom_observations.lua、game_scripts/decorators/debug_observations.lua 与 engine/code/deepmind/dmlab_connect.c 等源码系统讲解观测的命名规则、形状约定、配置项与底层实现帮助你按需选取、注册并读取观测。观测的两条基础约定在深入各类观测之前先记住 DeepMind Lab 对观测数据的两条全局约定形状约定所有观测的张量形状shape采用行主序row-major排列图像原点所有图像类观测的原点位于左上角top left。此外部分观测的分辨率取决于两个环境配置项width默认320与height默认180。这两个值不仅决定玩家视角图像的大小也决定依赖画面的调试相机观测的输出尺寸。在 engine/code/deepmind/dmlab_connect.c 中可以看到width与height在 C 层解析时被强制要求为大于等于 4 且是 4 的倍数否则环境会通过 error hook 报错——这是设置分辨率时需要留意的一个硬性限制。内置观测Built-in仅玩家端内置观测由引擎直接提供任何关卡脚本都可用。文档给出的完整清单如下观测名称类型 / 形状说明RGB_INTERLEAVEDBytes (height, width, 3)玩家视角画面交错interleaved排列RGBD_INTERLEAVEDBytes (height, width, 4)玩家视角画面 深度交错排列RGBBytes (3, height, width)玩家视角画面平面planar排列RGBDBytes (4, height, width)玩家视角画面 深度平面排列BGR_INTERLEAVEDBytes (height, width, 3)玩家视角画面交错排列BGR 通道序BGRD_INTERLEAVEDBytes (height, width, 4)玩家视角画面 深度交错排列BGR 通道序FRAMES_REMAINING_AT_60Doubles (1)本 episode 剩余帧数按 60 fps 估算提前结束时除外平面Planar与交错Interleaved的本质区别文档用两条注释明确了两种内存排列方式Planar平面每个通道位于最高维major rank。字节按RRR... GGG... BBB...排列即形状(3, height, width)中第一个维度是颜色通道。Interleaved交错每个颜色位于最低维minor rank。字节按RGBRGB...或BGRBGR...排列即形状(height, width, 3)中最后一个维度是颜色通道。如何选择优先 RGB_INTERLEAVED文档给出了一个明确的工程建议优先使用RGB_INTERLEAVED。理由是交错布局读取后无需再做通道分离处理处理开销更小、速度更快。这也与深度学习框架常见的(H, W, C)输入布局一致便于直接送入卷积网络。历史遗留INTERLACED 同义词已弃用由于历史原因引擎至今仍将RGB_INTERLACED与RGBD_INTERLACED作为RGB_INTERLEAVED与RGBD_INTERLEAVED的同义词接受。在 engine/code/deepmind/dmlab_connect.c 的kObservationNames表中这两个名称仍被保留并明确标注为Deprecated。文档提醒它们的支持将在未来版本中移除新代码不应再使用。另外从同一份 C 源码的观测枚举可以看出引擎层还内置了一个文档表格之外的观测MAP_FRAME_NUMBERDoubles (1)用于返回当前地图帧号在 docs/users/python_api.md 的observation_spec()输出示例中也能看到它。这说明dmlab_connect.c中kObservationNames数组engine/code/deepmind/dmlab_connect.c是内置观测名称的权威注册表。自定义观测Custom observations仅玩家端除内置观测外关卡还可以通过custom_observations.decorate(api)注入自定义观测。文档列出的自定义观测如下观测名称类型 / 形状说明VEL.TRANSDoubles (3)玩家相对速度相对朝向的平移速度VEL.ROTDoubles (3)玩家相对角速度INSTRString关卡向智能体发送的文本指令TEAM.SCOREDoubles (2)队伍得分我方对方源码级的注册与回调机制在 game_scripts/decorators/custom_observations.lua 中这套机制的实现路径非常清晰custom_observations.addSpec(name, type, shape, callback)第 34-40 行把观测规格追加到obsSpec表同时把回调函数存进obs[name]同名观测不会重复注册。api:customObservationSpec()第 96-102 行把装饰器内注册的规格追加到关卡原有的观测规格列表之后供引擎枚举。api:customObservation(name)第 126-129 行负责分发若obs[name]存在则调用其回调否则回落到关卡自身的实现。以VEL.TRANS为例其回调velocity()第 42-50 行读取game:playerInfo()的平移速度与偏航角通过sin/cos旋转矩阵把世界系速度投影到玩家朝向坐标系最终返回tensor.DoubleTensor{velx, vely, velz}——这就是玩家相对速度的数学含义。TEAM.SCORE的回调第 60-63 行同样取自playerInfo()的teamScore与otherTeamScore字段构成Doubles(2)观测。语言通道 INSTRINSTR是一个字符串观测作为关卡向智能体下发指令的文本通道。模块内的languageChannel()第 56-58 行直接返回模块级变量instructionObservation而关卡脚本可以通过装饰器暴露的api.setInstruction(text)第 133-135 行随时改写该字符串。这种设计让语言指令类任务如走向红色区域可以实时地把任务文本送入智能体的观测空间。顺带一提FRAMES_REMAINING_AT_60虽然被文档归入内置观测但在 game_scripts/decorators/custom_observations.lua 中它也会由装饰器注册一份同名规格其回调基于timeout.timeRemainingSeconds() * 60计算剩余帧数与 game_scripts/decorators/timeout.lua 的回合计时机制挂钩。调试观测Debug observations玩家端调试观测用于在训练或调参时看到代理看不到的东西。玩家端的调试相机观测默认沿用屏幕分辨率即width/height但可通过两个设置放大输出maxAltCameraWidth相机观测的最大宽度maxAltCameraHeight相机观测的最大高度。实际输出尺寸按文档给出的规则计算altWidthwidth与maxAltCameraWidth中的较大值maxaltHeightheight与maxAltCameraHeight中的较大值max。也就是说调试相机分辨率取主分辨率与上限分辨率的逐维最大值。在 engine/code/deepmind/dmlab_connect.c 中可以看到maxAltCameraWidth/maxAltCameraHeight在 C 层被解析并存入gc-alt_camera_width/gc-alt_camera_height而hasAltCameras布尔设置第 562-566 行会通过set_has_alt_camerashook 通知引擎渲染端默认情况下只有靠近当前玩家的实体才会被渲染开启hasAltCameras后所有实体始终可见。玩家端调试观测清单观测名称类型 / 形状说明DEBUG.CAMERA.TOP_DOWNBytes (3, altHeight, altWidth)自上而下的俯视相机topDownCameraDEBUG.CAMERA.PLAYER_VIEWBytes (3, altHeight, altWidth)玩家视角无 HUD带准星 reticleDEBUG.CAMERA.PLAYER_VIEW_NO_RETICLEBytes (3, altHeight, altWidth)玩家视角无 HUD、无准星DEBUG.POS.TRANSDoubles (3)玩家在世界坐标系中的位置 (x, y, z)单位游戏单位DEBUG.POS.ROTDoubles (3)玩家在世界坐标系中的朝向单位度pitch, yaw, rollDEBUG.PLAYER_IDDoubles (1)当前玩家的 id实现细节渲染与矩阵变换在 game_scripts/decorators/debug_observations.lua 中这些观测的实现值得关注topDownCamera通过game:renderCustomView{width..., height..., poscamera.pos, lookcamera.look}渲染俯视图第 270-283 行随后用两次transpose把交错布局(H, W, 3)转为平面布局(3, H, W)并clone()——这正是文档中 planar 形状(3, altHeight, altWidth)的来源。playerView(reticleSize)同样基于renderCustomViewreticleSize 0时会在画面中央用buffer:narrow(...):fill{200, 200, 200}画出灰色准星第 286-316 行对应PLAYER_VIEW与PLAYER_VIEW_NO_RETICLE的差别。DEBUG.POS.TRANS/DEBUG.POS.ROT分别取自game:playerInfo()的pos与angles第 40-46 行。相机位置可由关卡通过debug_observations.setCameraPos(pos, look)调整第 260-263 行enableCameraMovement第 389-411 行甚至可以把 WASD Ctrl/Space 映射为相机移动用于人工调试时自由巡视场景。此外从源码可以看出该装饰器还额外注册了与文档平面版对应的交错版调试相机观测DEBUG.CAMERA_INTERLEAVED.TOP_DOWN、DEBUG.CAMERA_INTERLEAVED.PLAYER_VIEW、DEBUG.CAMERA_INTERLEAVED.PLAYER_VIEW_NO_RETICLE第 324-332 行以及DEBUG.PLAYERS.VELOCITY、DEBUG.PLAYERS.SCORE、DEBUG.PLAYERS.CAPTURES、DEBUG.PLAYERS.IS_BOT等文档表格之外的玩家聚合观测第 356、360-362 行需要更细粒度调试信息时可查阅该文件获取完整清单。调试观测Debug observations服务器端服务器端调试观测用于获取每个玩家的状态信息。这类观测有一个关键约定形状中任何维度为 0 的条目运行时都会自动扩展为地图中活跃玩家的数量包括机器人 bots。例如DEBUG.PLAYERS.HEALTH的形状是Doubles(0)实际运行时若场上有 4 个活跃玩家则会得到长度为 4 的向量。服务器端观测清单观测名称类型 / 形状说明DEBUG.PLAYERS.ARMORDoubles (0)护甲值DEBUG.PLAYERS.GADGETDoubles (0)当前持有的 gadget武器/道具DEBUG.PLAYERS.GADGET_AMOUNTDoubles (0)当前 gadget 的余量DEBUG.PLAYERS.HEALTHDoubles (0)每个玩家的生命值DEBUG.PLAYERS.HOLDING_FLAGDoubles (0)是否持有旗帜DEBUG.PLAYERS.IDDoubles (0)玩家 idDEBUG.PLAYERS.EYE.POSDoubles (0, 3)玩家眼睛位置未平滑DEBUG.PLAYERS.EYE.ROTDoubles (0, 3)玩家视线方向度DEBUG.PLAYERS.NAMEString玩家名单换行符分隔DEBUG.PLAYERS.TEAMDoubles (0)玩家队伍0None1Red2BlueDEBUG.MAZE.LAYOUTString迷宫布局文本形式DEBUG.MAZE.VARIATIONString迷宫变体文本形式文档指出这些观测的完整实现位于 game_scripts/decorators/debug_observations.lua。从源码可以印证实现方式DEBUG.PLAYERS.HEALTH/ARMOR/GADGET/GADGET_AMOUNT通过遍历玩家库存视图inventory.View的health()、armor()、gadget()等访问器聚合而成第 65-96 行DEBUG.PLAYERS.TEAM通过TEAM_LOOKUP {r 1, b 2}把字符串队伍名映射为数值第 146-153 行DEBUG.PLAYERS.NAME用table.concat(names, \n)拼成换行分隔的字符串第 61-63 行DEBUG.MAZE.LAYOUT/VARIATION则由debug_observations.setMaze(maze)写入第 254-258 行。旗帜观测Flag data服务器端还提供两类旗帜相关观测。第一类是旗帜实时状态观测格式为{posX, posY, posZ, playerId, state}其中state映射为0 NONE不存在1 HOME在基地2 CARRIED被携带3 DROPPED被丢弃观测名称类型 / 形状说明DEBUG.FLAGS.REDDoubles (5)红旗的位置、playerId、状态DEBUG.FLAGS.BLUEDoubles (5)蓝旗的位置、playerId、状态第二类是旗帜出生点home location状态观测格式为{posX, posY, posZ, state}此处state映射为0 NONE不存在1 HOME在基地2 AWAY离开基地观测名称类型 / 形状说明DEBUG.FLAGS.RED_HOMEDoubles (4)红旗出生点位置与状态DEBUG.FLAGS.BLUE_HOMEDoubles (4)蓝旗出生点位置与状态源码中红蓝旗逻辑通过遍历game_entities:entities{team_CTF_redflag}/team_CTF_blueflag实体并查询玩家hasPowerUp(inventory.POWERUPS.RED_FLAG / BLUE_FLAG)实现第 177-236 行旗帜实体可见且位于出生点时记为HOME被玩家携带时用玩家eyePos作为位置并记为CARRIED否则返回(0,0,0,0,NONE)兜底。FLAG_STATE与HOME_FLAG_STATE两张映射表第 170-175、214-218 行与文档中的状态编号完全一致可直接对照阅读。在 Python 环境中选择与读取观测观测的最终消费端通常是 Python 训练脚本。根据 docs/users/python_api.md构造环境时以名称列表声明需要的观测import deepmind_lab observations [RGBD] env deepmind_lab.Lab(lt_chasm, observations, config{width: 640, # 屏幕宽度像素 height: 480, # 屏幕高度像素 botCount: 2}, # lt_chasm 关卡选项 rendererhardware) # 选择渲染器 env.reset()deepmind_lab.Lab(level, observations, config, renderer, level_cache)中observations列表里的每个名字都必须能在observation_spec()中查到包括关卡自定义观测config以字符串键值对形式传入width/height、fps等均在此设置。env.observation_spec()返回所有可用观测的规格每条形如{name: RGB_INTERLEAVED, dtype: type numpy.uint8, shape: (180, 320, 3)}若某维度运行时才确定则显示为 0若秩未知则 shape 为空元组。env.observations()返回以观测名为键、以 Numpy 数组为值的字典其形状与observation_spec()中声明的一致。需要提醒的两点一是 C 层要求width/height必须是 4 的正整数倍见 engine/code/deepmind/dmlab_connect.c二是若使用--define graphicssdl把画面渲染到原生窗口则observations列表里必须包含一个以RGB开头的观测游戏才能正确渲染。测试用例如何验证观测行为仓库提供了针对观测的自动化测试是理解各观测语义的最佳参考python/tests/debug_observation_test.py 定义了完整的玩家调试观测列表PLAYER_DEBUG_OBSERVATIONS并验证了DEBUG.PLAYER_ID与DEBUG.PLAYERS.ID[0]相等、DEBUG.PLAYERS.NAME按换行分隔、射击后GADGET_AMOUNT递减为 0、被打中后HEALTH下降、DEBUG.PLAYERS.SCORE与IS_BOT的取值以及DEBUG.MAZE.LAYOUT与关卡 ASCII 地图逐字符一致test_debug_camera还逐个像素比对DEBUG.CAMERA.TOP_DOWN平面与DEBUG.CAMERA_INTERLEAVED.TOP_DOWN交错的画面内容。python/tests/custom_view_test.py 演示了通过maxAltCameraWidth/maxAltCameraHeight把辅助相机分辨率放大到128的配置方式python/tests/custom_view_test.py。这两份测试从输出形状、取值语义、像素内容三个层面锁定了观测的行为写新关卡或自定义观测时可把它们当作行为契约来对照。总结DeepMind Lab 的观测体系可以归纳为三层引擎内置RGB/RGBD/BGR 系列与FRAMES_REMAINING_AT_60、Lua 装饰器注入的自定义观测VEL.TRANS、VEL.ROT、INSTR、TEAM.SCORE等通过 game_scripts/decorators/custom_observations.lua 的addSpec注册、以及调试观测玩家端相机/位姿 服务器端全玩家状态与旗帜信息。使用时只需牢记三条主线图像的 planar/interleaved 布局与左上角原点、width/height/maxAltCamera*/hasAltCameras对图像尺寸与可见性的影响、以及形状中0维度在运行时的动态扩展语义。掌握了这些约定你就能在训练脚本中精确地选择观测、在关卡 Lua 中自由地注册观测并借助调试观测把训练过程的上帝视角完整记录下来。赞分享人工智能强化学习机器学习【免费下载链接】labA customisable 3D platform for agent-based AI research项目地址https://gitcode.com/gh_mirrors/la/lab点击查看免费下载相关推荐Apache SkyWalking MicroMeter Observations 接入指南Spring 应用观测指标的上报与 OAP 后端配置Apache SkyWalking MicroMeter Observations 接入指南Spring 应用观测指标的上报与 OAP 后端配置 MicroM可观测性后端微服务云原生Ant Design Mentions allowClear 全解析自定义清除按钮的配置、原理与测试验证Ant Design Mentions allowClear 全解析自定义清除按钮的配置、原理与测试验证 Ant Design 的 Mentions提及组前端UI组件设计系统Hunk 主题系统完全指南内置主题、自动检测与自定义配置Hunk 主题系统完全指南内置主题、自动检测与自定义配置 Hunk 是一款面向 Agent 开发者的终端 diff 查看器其主题系统围绕 Shiki 内置主开发工具代码评审CLIAI 应用上一篇JAX 首次运行 JIT 编译特别慢用 jax_log_compiles 与 jax_explain_cache_misses 定位慢在哪下一篇Swift并发编程新选择CollectionConcurrencyKit核心API全解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/13 3:00:06

Java医院挂号系统:Servlet+JDBC实战与并发一致性保障

简介:这是一套基于Java技术栈开发的医院预约挂号系统源码,面向Java Web初学者与中级开发者,聚焦医疗信息化场景下的典型业务实现,如用户认证、医生排班、在线预约、数据持久化与前后端交互。资源包为ZIP格式,大小37.3M…

2026/11/14 10:24:09

UDS多帧传输避坑指南:STmin与BS参数详解及调试技巧

1. 为什么多帧传输是UDS诊断里最容易翻车的一环搞过UDS诊断的人都有一个共识:单帧收发的诊断服务(比如会话控制、读取故障码)基本不会出问题,真正让人抓耳挠腮的,永远是那些数据长度超过7个字节、必须走多帧传输的场景…

2026/11/14 4:20:56

从认知匹配到行为形成:WSaiOS 中能力、知识与行为的匹配理论

从认知匹配到行为形成:WSaiOS 中能力、知识与行为的匹配理论摘要:本文系统阐述 WSaiOS 认知匹配理论中“能力—知识—行为”匹配框架。该框架回应了一个核心问题:一个方法能够被找到,并不等于认知对象能够执行它;一个行…

2026/11/14 20:44:35

安新县电工证报名内容怎么填?全国通用证书不怕被中介坑

安新县电工证报名内容怎么填?全国通用证书不怕被中介坑 你是不是也这样,拿着手机刷了一堆“安新县电工证报名内容”的信息,结果发现五花八门,不知道到底该信哪家?更怕被那些打着“包过”旗号的中介骗了钱,还得不到 全国通用…

2026/11/14 20:44:35

辽阳电工证真证多少钱能拿到?怕考不过白交培训费的看这篇

辽阳电工证真证多少钱能拿到?怕考不过白交培训费的看这篇 怕考不过白交培训费?辽阳电工证真证办理前,这些问题你必须搞清楚。现在市场上打着“包过”旗号的机构越来越多,但真正能拿到应急管理部颁发的电工证、焊工证、高处作业证等特种作业操作证的人却少…

2026/11/14 20:44:35

南京特种工考证班2026河南最新政策下怎么处理过期证书

南京特种工考证班2026河南最新政策下怎么处理过期证书 证书过期了不知道怎么复审延期,这个问题困扰着不少特种作业人员。尤其在2026河南最新政策下,证书的复审和延期流程有了新的变化,很多人开始意识到,证书不是一劳永逸的事。南京特种工考证班的…

2026/11/14 20:44:35

现在考电工证太难了吧 低压电工证多少钱能报上名

现在考电工证太难了吧 低压电工证多少钱能报上名 你是不是也觉得现在考电工证太难了吧?学历不高怕报不上名,担心流程复杂、费用贵,还怕考不过?别急,我来告诉你,现在考电工证真的不是想象中那么难,尤其是低压电工证, 多少钱…

2026/11/14 20:39:34

运城哪里报考电工证好郑州报考避坑指南

运城哪里报考电工证好郑州报考避坑指南 学历不高怕报不上名?别担心,电工证报考门槛其实没有你想象的那么高。在运城,甚至郑州,只要你满足基本条件,照样可以顺利拿到电工证,开启你的职业发展之路。很多人一听说要考试、要学历,就打退堂鼓,其实这是对特…

2026/11/13 22:33:32

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/14 0:06:39

土木特种工考证官方报名入口怎么找 之前考的证在外省能不能转过来

土木特种工考证官方报名入口怎么找 之前考的证在外省能不能转过来 之前考的证在外省能不能转过来?这个问题我太熟悉了,作为一名干了十几年的特种作业证书办理从业者,每年都会遇到不少像你一样在外地考了证,回来却发现无法直接使用的学员。别急,今天我就…

2026/11/14 0:06:39

电工证要多久多钱保姆级教程:工地太忙根本没时间复习考试

电工证要多久多钱保姆级教程:工地太忙根本没时间复习考试 工地太忙根本没时间复习考试,你不是一个人。在信阳浉河区,很多刚进入工地的电工都面临这样的困境:工作强度大,时间碎片化,根本没有系统复习考试的机会。但电工证是上岗的硬门槛,…

2026/11/13 22:32:11

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/13 12:14:39

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑