RESULT

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

RESULT:只读浏览已录制的评测尝试,支持相机、3D 与图表回放。
RESULT:只读浏览已录制的评测尝试,支持相机、3D 与图表回放。

概览

只要启动配置含有 eval 段,RESULT 即出现。它回放 EVAL 录制的内容;无录制时树为空。

bash
eva --config configs/03_evaluation/ur5e_eval.py

页面分为两栏:

数据从何而来

没有单独的结果文件。每个模型的尝试录制进其自身的数据集文件夹,位于本次运行的输出目录下;各行直接从该数据集读取。

输出目录。默认 work_dirs/<配置路径,去掉开头的 configs/>/——启动 configs/03_evaluation/ur5e_eval.py 写入 work_dirs/03_evaluation/ur5e_eval/。每个模型一个子文件夹。

每条录制的尝试携带 RESULT 展示的字段:

字段含义
尝试身份所属任务与尝试编号。EVAL 按下 RUN 时绑定。未评测的录制无此字段,会被跳过。
prompt · trial哪个任务,第几次重复。
score · 最高分给出的分数,以及该任务的里程碑数量(满分)。
milestones · note逐里程碑勾选与自由文本备注。
打分时间 · 时长打分时刻与运行时长。

重测同一条尝试只保留最新录制。

树中的模型。RESULT 先列出评测配置中指定的模型,再收录输出目录下任何其它含录制的模型文件夹——先前改过名的模型仍会出现。

模型 · 任务 · 尝试树

可折叠的三层树:模型、任务、尝试。同一时刻只展开一个模型和一个任务。每个模型行与任务行显示两个环形仪表:

无打分时仪表显示 ,遇零分转红。展开任务即显示尝试网格,每个尝试槽位一个单元格。

尝试网格

每次尝试一个单元格:

若两条录制落在同一单元格,已打分的胜出,后来的未打分重跑不会遮住分数。任务标签在设置了 prompt_zh 时显示中文,否则显示 prompt_en

选择尝试

右栏起初为空(“展开一个模型与任务,然后选择一条尝试来回放。”)。点击已打分单元格即加载回放;所选单元格在树重绘期间保持高亮。

score% 与 success% 在每层以相同方式汇总:任务的仪表汇总该任务的已打分单元格,模型的仪表汇总该模型各任务下的全部已打分单元格。零分单元格仍计入总数。

回放

回放一次性显示全部面板——没有标签可切换。头部显示提示词、尝试编号、分数与该任务的只读里程碑步骤。所有面板共享同一时间线:

面板内容
camera每个录制到的相机并排排列,每个一段视频。定位逐帧精确。只显示磁盘上有录制的相机。
urdf由录制的关节角度通过正运动学驱动的 3D 回放。若机器人在其配置中未设置 URDF,此面板显示 “no URDF replay”,相机与曲线面板仍可使用。
charts两张逐帧折线图——ACTION(下达的指令)与 STATE(实测)。每条线对应一个关节或坐标轴;可单独开关(默认全开)。

定位滑块与播放按钮驱动同一游标贯穿所有面板,相机、3D 与曲线保持同步。播放按录制本身的帧间时间调速。

浏览其它模型。树中任意已录制模型均可回放,不限于最近运行的那个。打分则只写入 EVAL 上正在运行的那个模型。

配置

RESULT 没有自己的设置——它展示 eval 运行所录制的内容。驱动 EVAL 的同一个 eval_cfg 块填充 RESULT:

一个评测预设 = 一个用于继承的 deploy 配置 + 一个填好的 eval_cfg。完整字段语义见配置 → 评测配置。将下例中的 <…> 替换为你自己的值。

configs/03_evaluation/ur5e_eval.py
# 评测预设:一个用于继承的 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录制帧率;回放定位与曲线游标据它调速。
RESULT 只读,从不启动一次运行。无里程碑的任务满分为零,因此其已打分单元格只计入尝试,不计入 score%success%

完整的 eval 字段参考——cli_modeinference_strategyreset_after_each_trialshuffle_ckptsssh 块,以及可选的 prompt_zhinit_pose——见评测配置