先记住一句话

数据 pipeline 是模型定义的一部分:同一批 episode 经过不同切窗、采样、归一化和 mixture weight,会训练出不同 policy。

raw logsvalidate / alignsplittrain-only statshierarchical sampleaugment + mask
Dataset$P(D)$
Task$P(task|D)$
Episode$P(ep|task)$
Window$P(w|ep)$
每一级 sampling probability 都在定义优化器实际看见的训练分布。

1. 一个可靠 pipeline 的顺序

raw logs
  → schema validation
  → timestamp alignment / resampling
  → calibration & action conversion
  → episode quality filters
  → split by scene/object/session
  → statistics on train split only
  → temporal window sampling
  → augmentation / padding / masks
  → batch

顺序很重要。先全数据算 normalization stats 再切 split,会把 eval 分布信息泄漏进训练;先压成低帧率再检查 drop,又可能掩盖原始采集问题。

2. 清洗不只是删失败

  • 结构检查:长度一致、timestamp 单调、必需字段存在、图像能解码。
  • 物理检查:关节/EEF 在合理范围、速度跳变、夹爪命令合法。
  • 时序检查:帧率、drop、重复帧、action lag、跨 episode 污染。
  • 语义检查:指令与视频一致、成功标签可信、任务阶段合理。

硬过滤应可追溯:保留 reject reason 和 pipeline version。失败数据是否保留取决于训练目标,而不是统一删掉。

3. 切窗决定模型的时间感受野

设当前索引为 t,可以读取历史图像 [-4, -2, 0],监督动作 [0…39],监督未来帧 [8, 16]。这三个选择分别定义历史记忆、action horizon 和 world prediction horizon。

均匀抽 frame 适合缓慢阶段,却会低估短暂接触事件。可对夹爪切换、接触、任务 phase 边界做 event-aware sampling,但必须修正采样权重,避免 policy 误判事件先验。

4. Mixture 的单位是什么

按 frame 均匀会让长 episode/高帧率数据统治训练;按 episode 均匀会过采短轨迹;按 dataset 均匀又会过采很小的数据源。更明确的层级是:

P(sample) = P(dataset) · P(task | dataset)
          · P(episode | task) · P(window | episode)

每一层都应有可见配置和统计 dashboard。常见策略是给高质量目标域固定最低占比,再对大规模预训练源 temperature sampling。

5. 归一化、增强与 mask

  • state/action 按 embodiment 和维度统计 quantile/mean/std,记录单位与反归一化方式。
  • 图像 color jitter、crop 可提高视觉鲁棒性,但不能破坏精确空间关系或让不同视角不一致。
  • language paraphrase 能增广表达,必须保持对象指代和左右关系。
  • camera、action dimension、episode end、无 action 数据都需要独立 mask;一个 valid 位通常不够。

6. DataLoader 也要验收

随机抽 100 个最终 batch,反归一化并做成视频:把输入历史、目标未来、EEF 轨迹、夹爪和文本一起画出来。只看原始数据或 tensor shape 无法发现切窗后的语义错误。

7. 四个 pipeline 计算

例 1:过滤后的有效规模

原始 100k episodes,结构错误 3%、时序错误 5%,两类近似独立,剩余 $100k×0.97×0.95=92{,}150$。

例 2:mixture batch 配额

Batch 256,目标域/大规模源/恢复数据权重 0.5/0.4/0.1,期望分别 128、102.4、25.6 个;可实现为 128/102/26 并长期检查频率。

例 3:z-score 与反归一化

某动作均值 0.02 m、标准差 0.01 m,真实 0.05 m 标准化为 $(0.05-0.02)/0.01=3$;模型输出 1.5 反归一化为 0.035 m。

例 4:event-aware 重要性权重

接触帧真实占 10%,采样时提升到 40%。估计原分布 loss 时接触样本权重比为 $0.10/0.40=0.25$,普通帧为 $0.90/0.60=1.5$。

最小可复现记录:

dataset revision、filter version、split manifest、stats 文件、mixture weights、sampler seed 和所有 temporal offsets,缺一项都可能让实验无法解释。

自测

1. 为什么不能默认按 frame 均匀采样?

它隐式偏向更长、更高频的轨迹,不一定符合希望的任务或数据源权重。

2. stats 为什么只在 train split 计算?

避免把测试分布信息泄漏进训练变换。

3. event-aware sampling 的副作用是什么?

改变事件出现先验,若不加权可能让模型过早或过频触发抓取等动作。

实践资料

LeRobotDataset v3 把视频、Parquet、episode metadata 和统计量组织成可扩展格式;DROID schema 是理解训练前字段的具体例子。