zhicao commited on
Commit
4073cd6
·
verified ·
1 Parent(s): 1b09a92

Scheduled Commit

Browse files
TREX_LEROBOT_V2_FORMAT_SUMMARY.md ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # T-Rex LeRobot v2(含 force)格式 · 一页总结
2
+
3
+ 详细规范:`docs/TREX_LEROBOT_V2_FORMAT.md`(7 节,含 modality.json 模板与 track 升级路径)。
4
+ 参考实现:`data/trex_mini_force`。就绪校验:
5
+ `python scripts/data/check_trex_dataset_ready.py --dataset-root <root> --require-force`
6
+
7
+ ## 骨架
8
+
9
+ 标准 LeRobot v2.1 三件套:
10
+
11
+ ```
12
+ <root>/
13
+ ├── data/chunk-{chunk:03d}/episode_{index:06d}.parquet # 逐帧表
14
+ ├── videos/chunk-{chunk:03d}/{video_key}/episode_{index:06d}.mp4 # 每路一目录
15
+ └── meta/ info.json · stats.json · episodes.jsonl · tasks.jsonl · modality.json · embodiment.json
16
+ ```
17
+
18
+ `info.json` 的 `fps=30` 是 mp4 源率。20 Hz 动作 / 5 Hz 触觉 / 10 Hz 视频的逻辑网格
19
+ 由训练 loader 按 `timestamp` 重采,采集端不做任何降采样。
20
+
21
+ ## 每帧一行,七类列
22
+
23
+ | 类别 | 列 | 形状 / 内容 |
24
+ |---|---|---|
25
+ | 关节 | `observation.state` / `action` | `[58]` = 左臂 7 + 左手 22 + 右臂 7 + 右手 22 |
26
+ | 末端 | `observation.state_eef62`(测量) / `action.eef62_absolute`(指令目标) | `[62]` = 每臂 [3 平移, 6D 旋转(旋转矩阵前两列)] + 22 手关节,**全绝对值** |
27
+ | 力 | `observation.tactile_force` | `[60]` = 10 指 × 6 维 wrench,指主序(左 thumb→pinky,再右手同序),**原始连续物理值** |
28
+ | 时间 | `timestamp` | 秒,**严格递增**——整个格式最重要的不变量 |
29
+ | 索引 | `frame_index` `episode_index` `index` `task_index` | LeRobot 标准 |
30
+ | 语言 | `annotation.task` | 每集一条指令 |
31
+ | 视频 | 3 路 RGB `[180,320,3]` · 10 路触觉 raw `[240,320,3]` · 10 路 deform `[240,240,3]` | 共 23 路 `observation.images.*`,手指顺序与力列一致 |
32
+
33
+ ## meta 关键约定
34
+
35
+ - `modality.json`:`state.eef62 → observation.state_eef62`,`action.eef62 → action.eef62_absolute`,
36
+ 23 路 video key → original_key。
37
+ - `stats.json`:必含 `observation.tactile_force`(60 维展平)与 `observation.state_eef62` 的 q01/q99。
38
+ - `embodiment.json`:本体标签(如 `dexmate_vega1_and_sharpa_wave`)。
39
+
40
+ > **eef62 列可由构建脚本生成**:`scripts/data/build_trex_track_force_v2.py` 会用 T-Rex FK(`assets/trex_camera_calib.json` + `T_REX_ROOT` 运动学)从 58 维关节列算出 `observation.state_eef62` / `action.eef62_absolute`。采集端**最低只需 58 维关节 state/action**;若采集端已有可靠的 eef62 也可直接存。
41
+
42
+ ## 五条铁律
43
+
44
+ 1. 只存绝对值、只存物理单位——归一化 / delta-base / 降采样全部在训练侧。
45
+ 2. `timestamp` 严格递增;episode ≥ 6 s(推荐 8–15 s)。
46
+ 3. 指令与测量分开:`action.*` = teleop 下发目标,`observation.*` = 回读。
47
+ 4. 力列与触觉视频的手指顺序全局一致。
48
+ 5. 缺帧不丢行:值置零,timestamp 连续。
49
+
50
+ ## 后处理才追加(采集端不管)
51
+
52
+ `tracks_trex_track_force_v2/*.npz`(SAM2 + CoTracker 250 点)→ parquet 追加
53
+ `observation.track_xy [250,2]`、`observation.track_visibility [250]` →
54
+ `meta/trex_track_force_manifest.json`、`relative_stats_dreamzero.json`(delta-base 统计)、
55
+ `dataset_ready.json`。
56
+
57
+ ## 微调 joint force-action 模型的额外要求
58
+
59
+ - 力必须连续无量化,逐帧写原始传感器值;力时间戳对齐"执行该动作后测到"。
60
+ - 训练用 `scripts/train/trex_fullmodel_full_training_wan22.sh`,
61
+ 加 `action_head_cfg.config.force_future_loss_weight=0.5`。
62
+
63
+ ## 采集格式 → 可训练格式(一条命令)
64
+
65
+ ```bash
66
+ SOURCE_TREX_DATA_ROOT=<采集数据集> TREX_DATA_ROOT=<输出目录> GPUS=6,7 \
67
+ bash scripts/data/prepare_trex_track_force_training.sh # 加 --run-training 可直接接训练
68
+ ```
69
+
70
+ 它按序:硬链接克隆源数据(视频不占第二份空间)→ SAM2+CoTracker 提取 250 点 track
71
+ → 追加 track/visibility/eef62 parquet 列 → 校验 60 维力列 → 写 stats / relative_stats /
72
+ manifest / dataset_ready → 逐 episode 验证。之后即可用
73
+ `scripts/train/trex_fullmodel_full_training_wan22.sh`(joint 模型)或
74
+ `trex_track_force_training_wan22.sh`(原模型)训练。
docs/TREX_LEROBOT_V2_FORMAT.md CHANGED
@@ -70,6 +70,8 @@ chunk 规则:LeRobot 标准,`chunks_size=1000`,episode_index // 1000 决
70
  }
71
  ```
72
 
 
 
73
  ## 5. 硬性规范
74
 
75
  1. **只存绝对值、只存物理单位**。q99 归一化、delta-base、5 Hz 触觉降采样都是训练时的事;统计换了不必重建数据。
@@ -113,3 +115,16 @@ chunk 规则:LeRobot 标准,`chunks_size=1000`,episode_index // 1000 决
113
 
114
  **微调建议**:用 `scripts/train/trex_fullmodel_full_training_wan22.sh`,并加
115
  `action_head_cfg.config.force_future_loss_weight=0.5`(小规模消融验证:λ_f=0.5 手指速度误差 −46%、位置无偏差;λ_f=1.0 会引入手部姿态偏差)。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
  }
71
  ```
72
 
73
+ > **eef62 列可由构建脚本生成**:`scripts/data/build_trex_track_force_v2.py` 会用 T-Rex FK(`assets/trex_camera_calib.json` + `T_REX_ROOT` 运动学)从 58 维关节列算出 `observation.state_eef62` / `action.eef62_absolute`。采集端**最低只需 58 维关节 state/action**;若采集端已有可靠的 eef62 也可直接存。
74
+
75
  ## 5. 硬性规范
76
 
77
  1. **只存绝对值、只存物理单位**。q99 归一化、delta-base、5 Hz 触觉降采样都是训练时的事;统计换了不必重建数据。
 
115
 
116
  **微调建议**:用 `scripts/train/trex_fullmodel_full_training_wan22.sh`,并加
117
  `action_head_cfg.config.force_future_loss_weight=0.5`(小规模消融验证:λ_f=0.5 手指速度误差 −46%、位置无偏差;λ_f=1.0 会引入手部姿态偏差)。
118
+
119
+ ## 采集格式 → 可训练格式(一条命令)
120
+
121
+ ```bash
122
+ SOURCE_TREX_DATA_ROOT=<采集数据集> TREX_DATA_ROOT=<输出目录> GPUS=6,7 \
123
+ bash scripts/data/prepare_trex_track_force_training.sh # 加 --run-training 可直接接训练
124
+ ```
125
+
126
+ 它按序:硬链接克隆源数据(视频不占第二份空间)→ SAM2+CoTracker 提取 250 点 track
127
+ → 追加 track/visibility/eef62 parquet 列 → 校验 60 维力列 → 写 stats / relative_stats /
128
+ manifest / dataset_ready → 逐 episode 验证。之后即可用
129
+ `scripts/train/trex_fullmodel_full_training_wan22.sh`(joint 模型)或
130
+ `trex_track_force_training_wan22.sh`(原模型)训练。