Skip to content

Fail to reproduce DM0 results #1

@yldcs

Description

@yldcs

问题描述

完全按照 README 中的官方配置和官方流程,下载 specialist checkpoint 后通过 execute.py 向 RoboChallenge 平台提交评估,所有 rollout 的 score 均为 0,success_rate 为 0

已在多个任务上复现,以下是 4 次提测记录,分数全部为 0:

Run 任务 结果链接
1 pour_fries_into_plate run_id=89517591
2 pour_fries_into_plate run_id=3bc5d51d
3 plug_in_network_cable run_id=85e51aef
4 pour_fries_into_plate run_id=ad49d86c

参数疑问

  1. default.yamlduration: 0.1 是否是正确的值?训练时实际使用的 duration 是多少?
  2. 各任务的 action_horizonduration 的推荐配置是什么?

复现步骤

  1. 按照 README 安装 dexbotic 包和项目依赖
  2. 下载官方 specialist checkpoint:
    huggingface-cli download Dexmal/DM0-table30_pour_fries_into_plate --local-dir ./checkpoints/DM0-table30_pour_fries_into_plate
  3. 使用官方配置提交评估:
    python execute.py \
      --config-name=specialist/pour_fries_into_plate \
      user_id=YOUR_USER_ID \
      job_collection_id=YOUR_JOB_COLLECTION_ID
  4. 等待 rollout 完成后,查看 RoboChallenge 结果页面,所有 rollout 得分均为 0。

环境信息

  • GPU: NVIDIA A800-SXM4-80GB
  • Conda env: dexbotic_dm0
  • Checkpoint: Dexmal/DM0-table30_pour_fries_into_plate
  • Task: pour_fries_into_plate (aloha, 双臂, 14 维 joint space)

使用的配置(default.yaml + specialist 覆盖)

task_name: pour_fries_into_plate
checkpoint: ./checkpoints/DM0-table30_pour_fries_into_plate
policy_type: dm0          # 默认值
action_horizon: 35        # specialist 覆盖
duration: 0.1             # 默认值
image_size: [728, 728]
postprocess_args:
  gripper_threshold: 0.01
  gripper_open: null
  gripper_close: 0.0

分析与排查

经过详细的离线实验(Phase 1-3),定位到以下几个可能导致分数全 0 的问题:

1. duration / action_scale 不匹配(影响最大)

训练数据采集频率为 30fps(即每步约 0.033s),但 default.yaml 中默认 duration: 0.1,是训练间隔的 3 倍。实际在 robot 端执行时日志显示 duration: 0.04,与配置中的 0.1 也不一致。

这种频率不匹配会导致:

  • action_scale 过度补偿约 25%,每步产生额外的关节角度漂移
  • 50 步累积漂移可达约 5.5°,对精密操作任务(如倒薯条)来说足以导致失败

2. 推理延迟导致 "走走停停"(stop-and-go)

job_worker.pyprocess_job 的循环是串行的——等推理完成后才 post action,期间机器人处于空闲状态。实际 duty cycle 仅约 57%,导致机器人运动模式严重偏离训练时的平滑连续分布。

3. 部分 checkpoint 存在架构声明错误

pour_fries_into_plate 的 checkpoint 中 config.json 声明架构为 DM0ForCausalLM,但实际包含 4 个 DM0ProgForCausalLM 的 progress 权重。使用默认 policy_type: dm0 加载时这些权重被静默丢弃。

经实验验证此因素影响较小(约 1° 差异),不是分数全 0 的主要原因。

4. Gripper 二值化误判

右侧 gripper 的开合二值化存在约 17% 的错误率,可能导致抓取/释放时机不准确。

Ground Truth 评估摘要 (open-loop Phase 3)
Task        : pour_fries_into_plate
Episode     : 0
Eval points : 84
Frame range : [0, 2490]

--- DM0 ---
  MSE           : 0.00007485
  Mean L1       : 0.00453715
  Max |error|   : 0.11870188 (6.80°)
  Pearson r     : 0.999955
  Near-zero     : 0/84 (0.0%)

--- DM0_PROG ---
  MSE           : 0.00012115
  Mean L1       : 0.00624393
  Max |error|   : 0.12858653 (7.37°)
  Pearson r     : 0.999928
  Near-zero     : 0/84 (0.0%)

模型预测精度本身很高(Pearson r > 0.999),说明模型能力没有问题,问题出在执行侧参数配置。

期望行为

按照官方提供的默认配置和 checkpoint,至少在部分 rollout 上应该能够得到非零分数。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions