EVAL

在真机上做检查点对比:每条任务指令对每个检查点重复几次,通过点击里程碑打分。

EVAL:Model A/B/… 检查点对比——选择任务、跑一次 trial、按里程碑评分。

前置条件

启动 EVAL

EVAL 与 RESULT 标签页仅在启动的配置含有非空 eval_cfg 时出现;普通部署配置两者皆无。

bash
eva --config configs/03_evaluation/arx_r5_eval.py --web-port 8080

在浏览器打开 http://localhost:8080,点击 EVAL。控制台立即连接 Model A 的策略服务器;复位到起始姿态与预热被推迟到第一次 RUN。

MODEL 选择器

每个检查点对应顶部一个按钮,标为 Model A / Model B …,旁边显示真实检查点名;可通过 shuffle_ckpts 打乱顺序。

点击模型按钮会连接该模型的策略、重置会话并开启全新录制,使每个模型的运行分开保存;先前保存的分数会重新载入。运行进行中无法切换。

只列出一个检查点时只显示一个按钮;省略 checkpoints 则基于基础配置运行一个匿名模型。

任务指令与试次

左栏列出每条任务指令(有中文标签时显示中文,否则显示英文),每条指令对应一行试次格(默认五个)。点击指令跳到它第一个未测试的试次。

每条 tasks 条目:

任务字段含义
prompt_en发给模型的英文指令;也用作该格标识,请保持稳定。
prompt_zh可选的中文标签,仅用于显示。
milestones有序的 (id, label) 对,作为打分依据。
init_pose可选的起始关节角度(弧度,按关节顺序)。省略则用 home 姿态。建议从已经移动过的姿态复制。

运行并为一个试次打分

试次循环:

RESET ⟲ 可随时重新执行复位。若 reset_after_each_trial=True,STOP 自动复位;否则下次 RUN 在开始前先复位。

预热。第一次尝试要加载模型并用一帧测试观测校验它,会有显著延时,并非卡住;看徽章判断进度。后续试次跳过此步(skip_warmup_after_first)。

里程碑打分

打分是阶梯,而非自由勾选清单:里程碑分级,点击机器人达到的最高那一级——其下全部自动点亮,其上全部清除。再点一次最高那级即可撤销。

score=达到的级数,max=里程碑总数。仅当 score 等于 max 时该试次才算成功

SAVE SCORE · NEXT 将评分写入已录制片段本身(无单独的结果文件),并自动前进。保存后该格显示分数;若仍为空白则未保存成功。

打分需要已录制片段。对未运行过的试次打分会被拒绝并提示「先运行它」。运行进行中打分控件锁定。

重跑试次会录制一段新的、未打分的片段。网格每格只显示一条记录并优先取已打分的那条,重跑不会遮盖已保存的分数。

回看试次与 INIT 面板

右栏默认显示实时机械臂与相机。点击一个已有录制片段的试次,右栏切换到回放:相机视频、3D 视图、关节图表在同一时间线上一起播放。与 RESULT 用同一个播放器,单模型与并排对比的分数表都在那里。

EVAL 下的 INIT 面板可在运行前把机械臂开到选定的起始姿态。无 init_pose 时起始姿态即 home。

把模型放在另一台机器上服务(可选)

策略服务器在远程时,EVAL 可按不同模型端口各开一条 SSH 隧道。在评测段配置:

enable_ssh_forwardTrue 开启隧道;每个不同模型端口一条。
ssh.host远程机器地址。
ssh.user远程登录用户名。
ssh.port远程 SSH 登录端口(通常 22)——不是策略服务器端口。
ssh.remote_sync_dir可选。若填写,结果会从该远程目录拷回。

必须已能基于密钥免密 SSH 登录。隧道打不开则策略连接如同服务器不可达——请先手动 ssh 确认能连上。

EVAL的配置

以上一切由 Python .py 配置中的 eval_cfg 段驱动。评测配置通过 _base_ 继承一份部署配置(机器人、相机、传输、策略),再叠加 eval_cfg 给出检查点与任务列表。

复制现成文件(如 configs/03_evaluation/arx_r5_eval.py)改其中标注的值;下面的骨架展示形状。

configs/03_evaluation/my_eval.py
# 从一份部署配置继承机器人与策略。
_base_ = ['<路径/deploy 配置.py>']   # ← 你的部署配置

eval_cfg = dict(
    trials_per_prompt=5,            # 每条指令重复几次
    cli_mode='real',             # 'real' 或 'sim'
    inference_strategy='async',    # 无特别需求保持 'async'

    checkpoints=[                  # 每个模型一条
        dict(
            name='<模型名>',            # ← 在 EVAL 选择器中显示在槽位字母(Model A/B/…)旁边作为标签
            config='<路径/deploy 配置.py>',  # ← 该模型的部署配置
            port=<端口>,              # ← 策略服务器端口
        ),
        # …更多模型再加 dict(...) …
    ],

    tasks=[                        # 每条指令一条
        dict(
            prompt_en='<英文指令>',       # ← 发给模型的指令
            milestones=(                  # 要打分的步骤,由易到难
                ('approach', 'approach the object'),
                ('pick',     'pick it up'),
                ('place',    'place it down'),
            ),
        ),
    ],
)
非空 eval_cfg 启用 EVAL/RESULT;空段视为「不评测」,两个标签页都不出现。

eval_cfg 的全部字段

每条 tasks 的字段见任务指令与试次

字段默认值含义
tasks[]要测试的指令。每项为 {prompt_en, prompt_zh?, milestones?, init_pose?},至少一条。
trials_per_prompt5每个模型下每条指令重复多少次。
checkpoints[]检查点对比中的各模型。完全省略则基于基础配置运行一个匿名模型。
cli_mode'real''real''sim'
inference_strategy'async'推理策略中定义的名称之一。
reset_after_each_trialFalseTrue:STOP 自动复位;False:下次 RUN 开始前复位。
skip_warmup_after_firstTrueTrue:只有第一个试次预热。
storagedict(fps, save_queue_max)fps=保存帧率;save_queue_max=写盘队列上限。
shuffle_ckptsFalse随机化各检查点的试跑顺序。
shuffle_seed42试跑顺序的随机种子,用于复现。
enable_ssh_forwardFalse为每个模型端口开一条 SSH 隧道;需要 ssh(见把模型放在另一台机器上服务)。
sshdict(host, user, port, remote_sync_dir?);见该节

每个 checkpoints 条目:

检查点字段含义
name检查点的真实名称;在选择器中以槽位字母(Model A / B / …)+ 真实检查点名展示,并用于落盘记录。
config该模型的部署配置路径。
port策略服务器端口。
host可选,默认为 127.0.0.1
机器人、传输、策略和动作空间各项设置来自继承的部署配置——见配置传输后端动作空间