RESULT
对评测录制的只读查看器:模型 → 任务 → 尝试三层树,加上对任意已打分尝试的相机 / 3D / 曲线同步回放。

概览
只要启动配置含有 eval 段,RESULT 即出现。它回放 EVAL 录制的内容;无录制时树为空。
eva --config configs/03_evaluation/ur5e_eval.py
页面分为两栏:
- 树(左)——三层浏览器,
模型 → 任务 → 尝试。每个模型行与任务行显示两个环形仪表(score% 与 success%);展开任务即铺开尝试单元格。 - 详情 / 回放(右)——所选尝试的相机画面、3D 运动与曲线。
数据从何而来
没有单独的结果文件。每个模型的尝试录制进其自身的数据集文件夹,位于本次运行的输出目录下;各行直接从该数据集读取。
work_dirs/<配置路径,去掉开头的 configs/>/——启动 configs/03_evaluation/ur5e_eval.py 写入 work_dirs/03_evaluation/ur5e_eval/。每个模型一个子文件夹。每条录制的尝试携带 RESULT 展示的字段:
| 字段 | 含义 |
|---|---|
| 尝试身份 | 所属任务与尝试编号。EVAL 按下 RUN 时绑定。未评测的录制无此字段,会被跳过。 |
| prompt · trial | 哪个任务,第几次重复。 |
| score · 最高分 | 给出的分数,以及该任务的里程碑数量(满分)。 |
| milestones · note | 逐里程碑勾选与自由文本备注。 |
| 打分时间 · 时长 | 打分时刻与运行时长。 |
重测同一条尝试只保留最新录制。
模型 · 任务 · 尝试树
可折叠的三层树:模型、任务、尝试。同一时刻只展开一个模型和一个任务。每个模型行与任务行显示两个环形仪表:
- score%——该行已打分尝试的所得总分 / 可得总分。
- success%——已打分尝试中拿到满分的比例。无里程碑(满分为零)的任务不计入。
无打分时仪表显示 —,遇零分转红。展开任务即显示尝试网格,每个尝试槽位一个单元格。
尝试网格
每次尝试一个单元格:
- 已打分单元格按分数比例填充,显示
score/max。零分单独标记。 - 未打分的尝试被调暗,标注
trial N,不可点击。 - 点击已打分单元格,右栏打开其回放。
若两条录制落在同一单元格,已打分的胜出,后来的未打分重跑不会遮住分数。任务标签在设置了 prompt_zh 时显示中文,否则显示 prompt_en。
选择尝试
右栏起初为空(“展开一个模型与任务,然后选择一条尝试来回放。”)。点击已打分单元格即加载回放;所选单元格在树重绘期间保持高亮。
score% 与 success% 在每层以相同方式汇总:任务的仪表汇总该任务的已打分单元格,模型的仪表汇总该模型各任务下的全部已打分单元格。零分单元格仍计入总数。
回放
回放一次性显示全部面板——没有标签可切换。头部显示提示词、尝试编号、分数与该任务的只读里程碑步骤。所有面板共享同一时间线:
| 面板 | 内容 |
|---|---|
| camera | 每个录制到的相机并排排列,每个一段视频。定位逐帧精确。只显示磁盘上有录制的相机。 |
| urdf | 由录制的关节角度通过正运动学驱动的 3D 回放。若机器人在其配置中未设置 URDF,此面板显示 “no URDF replay”,相机与曲线面板仍可使用。 |
| charts | 两张逐帧折线图——ACTION(下达的指令)与 STATE(实测)。每条线对应一个关节或坐标轴;可单独开关(默认全开)。 |
定位滑块与播放按钮驱动同一游标贯穿所有面板,相机、3D 与曲线保持同步。播放按录制本身的帧间时间调速。
配置
RESULT 没有自己的设置——它展示 eval 运行所录制的内容。驱动 EVAL 的同一个 eval_cfg 块填充 RESULT:
checkpoints→ 模型行。tasks→ 每个模型下的任务行及其尝试网格。trials_per_prompt→ 每个任务的尝试单元格数。- 每个任务的
milestones→ 满分,以及回放面板上方的只读步骤列表。
一个评测预设 = 一个用于继承的 deploy 配置 + 一个填好的 eval_cfg。完整字段语义见配置 → 评测配置。将下例中的 <…> 替换为你自己的值。
# 评测预设:一个用于继承的 deploy 配置 + 一个填好的 `eval_cfg` 段。 _base_ = ['<你的 deploy 配置路径,例如 ../01_deploy/ur5e/openpi_qpos.py>'] eval_cfg = dict( storage=dict(fps=20, save_queue_max=15), # 录制帧率,决定回放调速。 trials_per_prompt=5, # 每个任务的尝试数 = 网格宽度。 cli_mode='real', # 真实机器人或仿真,见评测配置。 inference_strategy='async', # 动作定时方式,见推理策略。 checkpoints=[ # 每一项对应一个模型行。 dict( name='<你的模型名称>', # 决定磁盘文件夹名与树中行的标签。 config='<该模型的 deploy 配置路径>', port=9000, # 策略服务器端口,每个模型一个。 ), ], tasks=[ # 每一项对应一个任务行。 dict( prompt_en='<指令>', milestones=( # (键, 描述) 二元组;数量 = 满分。 ('<键>', '<这一步完成了什么>'), ('<键>', '<这一步完成了什么>'), ), ), ], )
| 字段 | RESULT 如何使用它 |
|---|---|
checkpoints[].name | 输出目录下的模型文件夹名,以及模型行上的标签。先前运行中改名或多出来的文件夹仍会被发现。 |
tasks[].prompt_en | 显示为任务行,并出现在回放头部。设置 prompt_zh 时树中改显中文。 |
tasks[].milestones | (键, 描述) 二元组。数量 = 满分;描述以只读形式渲染在回放面板上方。 |
trials_per_prompt | 每个任务的尝试单元格数。 |
storage.fps | 录制帧率;回放定位与曲线游标据它调速。 |
完整的 eval 字段参考——cli_mode、inference_strategy、reset_after_each_trial、shuffle_ckpts、ssh 块,以及可选的 prompt_zh 与 init_pose——见评测配置。