目标是抓桌面正中那个米色纸杯。数据盘完之后结论很清楚:现役的 0826 右臂模型一集都没覆盖过中位,而 0903 左臂那批覆盖最好、开头干净、视角和现在的标准预置位一致。今晚不需要做任何数据处理,直接开训。
y=0 是两肩正中(左肩 y=+0.133、右肩 y=−0.133 m),杯子放桌面正中就是 y≈0。下面的 y 是每集闭爪那一刻指尖的横向位置,也就是杯子当时站在哪。
| 数据集 | 臂 | 集 | 闭爪 y 范围(cm) | 离中位 <5cm | 头 tilt | 开头跳变 |
|---|---|---|---|---|---|---|
| 0826(现役模型用的) | 右 | 40 | −31.2 ~ −8.6 | 0 | 49.8° | 5.5°,6 帧稳 |
| sep2-trim(0902) | 右 | 51 | −28.4 ~ +2.1 | 8 | 37.5° | 已裁 |
| sep3-clean(0903) | 左 | 54 | −6.2 ~ +16.9 | 23 | 50.1° | 2.9°,3 帧稳 |
三条理由,全部指向同一批:
xlerobot-right-pick-cup-sep2-trim-20260906),但那是右臂、而且是 37.5° 视角,今晚用不上。| 项 | 结果 |
|---|---|
| 语言指令 | Pick up the cup with the left arm. —— 试跑必须一字不差下发这句 |
verify_dataset.py | USABLE 54 集 / 13693 帧,行数 = 视频 = 索引,全对得上 |
| 相机 | 3 路;head 240×424,和试跑一致;fps 30 |
| Hub | 已在 xlerobot-team/xlerobot-left-pick-cup-sep3-clean-20260905 |
和现役模型完全同一套超参(b16 / 20k 步 / freeze_vision_encoder / train_expert_only / lr 1e-4 / chunk 50),只换数据集 —— 这样跑出来能和 0826 那版直接比。
tmux new -s train # 家里网断不影响它;Pod 不停也不停计费
lerobot-train \
--policy.path=lerobot/smolvla_base \
--policy.input_features=null --policy.output_features=null \
--dataset.repo_id=xlerobot-team/xlerobot-left-pick-cup-sep3-clean-20260905 \
--batch_size=16 \
--num_workers=8 \
--steps=20000 \
--dataset.eval_split=0.0 \
--policy.scheduler_decay_steps=20000 \
--dataset.video_backend=torchcodec \
--policy.device=cuda --policy.push_to_hub=false \
--save_freq=2000 --log_freq=100 \
--job_name=left_sep3_b16_u20k \
--output_dir=/workspace/outputs/train/left_sep3_b16_u20k
--steps=20000 临时改成 --steps=40 --save_checkpoint=false 跑一遍。健康的样子是 step/s 约 4–5、mem_gb 约 4.6、loss 在降。确认了再开正式的。/workspace(持久卷),别存容器盘。--eval_split=0.0 是故意的:0.2 是按集号顺序切最后 20%,而集号和杯位相关,会把整片区域切进验证集 —— 08-23 踩过。Pick up the cup with the left arm.== task string (read from the training dataset ...)。看到那行就是对的。cup-grasp-v0 / trial)[home] left span … 然后 [home] 到位,最大偏差 x.x°。左臂归位真机没跑过没核过,第一次盯一下。| 能 | 「中位的杯子,位置覆盖补上之后抓不抓得到」—— 这是 0826 从来回答不了的,因为它一集都没见过中位 |
| 能 | 和 0826 那版直接比:同超参、同流程、只换数据,差异就是数据的差异 |
| 不能 | 光照。sep3-clean 是夜里录的偏绿数据,白天跑测又是另一个分布 |
| 不能 | 控制频率。回路 2.4 Hz vs 训练 30 Hz,这是我们和「复现成功」的人最大的工程差别,换数据集解决不了 |
| 不能 | 纠错行为。全部数据都是 success-only,没有一集录过「抓偏了再抓一次」 |
后两条要怎么办,见 「SmolVLA 复现不出来 vs 微调效果好」那一页的五个实验。
左臂另有 sep2 的 51 集(1819 三十四集 + 1928 十七集),但头 tilt 是 37.5°,和 sep3 的 50.1° 混在一起就是两个视角。按复现清单「一次只改一个变量」,先训 sep3-clean 单独这一版(54 集,正好是复现帖推荐的 ~50 集量级)。要加的话,流程是:裁掉开头跳变(trim_episode_starts.py,约 50 分钟)→ 合并 → 推 Hub → 当第二个变体去比。
03-software/scripts/{arm_home.py, trim_episode_starts.py, demo_coverage.py}。