EVAL
在真机上做检查点对比:每条任务指令对每个检查点重复几次,通过点击里程碑打分。
前置条件
启动 EVAL
EVAL 与 RESULT 标签页仅在启动的配置含有非空 eval_cfg 时出现;普通部署配置两者皆无。
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 姿态。建议从已经移动过的姿态复制。 |
运行并为一个试次打分
试次循环:
- 1. 选一个 Model 按钮。
- 2. 选一条指令与一个试次格。
- 3. RUN ▶——机械臂复位,模型预热,开始尝试。
- 4. 状态徽章显示阶段:复位中… → 预热中… → 校验策略中… → 运行中。
- 5. STOP ■ 关闭并立即保存片段(或自动停止)。
- 6. 点击里程碑,再按 SAVE SCORE · NEXT。
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_forward | True 开启隧道;每个不同模型端口一条。 |
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)改其中标注的值;下面的骨架展示形状。
# 从一份部署配置继承机器人与策略。 _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_prompt | 5 | 每个模型下每条指令重复多少次。 |
checkpoints | [] | 检查点对比中的各模型。完全省略则基于基础配置运行一个匿名模型。 |
cli_mode | 'real' | 'real' 或 'sim'。 |
inference_strategy | 'async' | 取推理策略中定义的名称之一。 |
reset_after_each_trial | False | True:STOP 自动复位;False:下次 RUN 开始前复位。 |
skip_warmup_after_first | True | True:只有第一个试次预热。 |
storage | dict(fps, save_queue_max) | fps=保存帧率;save_queue_max=写盘队列上限。 |
shuffle_ckpts | False | 随机化各检查点的试跑顺序。 |
shuffle_seed | 42 | 试跑顺序的随机种子,用于复现。 |
enable_ssh_forward | False | 为每个模型端口开一条 SSH 隧道;需要 ssh(见把模型放在另一台机器上服务)。 |
ssh | — | dict(host, user, port, remote_sync_dir?);见该节。 |
每个 checkpoints 条目:
| 检查点字段 | 含义 |
|---|---|
name | 检查点的真实名称;在选择器中以槽位字母(Model A / B / …)+ 真实检查点名展示,并用于落盘记录。 |
config | 该模型的部署配置路径。 |
port | 策略服务器端口。 |
host | 可选,默认为 127.0.0.1。 |