BC 场景多样性实验 · 数据分析
验证「多场景训练是否优于单场景」的行为克隆(BC)实验的数据侧准备。源数据来自 coScene 项目 auto-annotation-dataset(org coscene-hy,共 1029 条记录、4 个场景),已用「一刻」原子技能标注切分。
01概览
实验核心问题:在 3 个场景上训练的 BC 策略,迁移到未见场景时,是否比仅在 1 个场景上训练的策略更高效?
这套数据为什么适合做这个实验
- 场景均衡:4 个场景各约 250 条记录,天然支持等样本量的 A/B 对照。
- 已切分:「一刻」标注把每条记录切成原子技能片段(pick/place/transfer/…),附带自然语言指令——子回合边界问题已解决,无需用夹爪开合反推。
- 抓取回合充足:9,577 个 pick→place 循环,中位时长 3.5–9.6s,正好落在标准 BC 回合区间。
需要在设计阶段正视的三点
- 物体集合与场景完全混叠:15 种物体每种只出现在 1 个场景,无法构造「物体匹配」对照组——「场景多样性」与「物体多样性」不可分离。
- Logistics 是单臂场景:0 次 transfer,而其他三场景双臂交接密集。若选它做单场景基线,会引入一个与处理变量叠加的巨大行为差异。
- 机器人本体混杂:8 台机器人,但
2000064跨越全部 4 个场景(241 条),「同机器人」对照可构造。
02数据集
项目 auto-annotation-dataset,4 个场景近乎完美均衡,每条记录恰好带 1 个场景标签。
| 场景 | 记录 | 时长 | 数据量 | 中位时长 | 采集期间 |
|---|---|---|---|---|---|
| 试管分拣 | 263 | 8.8 h | 1,162 GB | 122 s | 05-11 → 05-18 |
| Logistics sorting | 254 | 4.8 h | 558 GB | 68 s | 04-14 → 04-27 |
| 清理桌面垃圾 | 262 | 4.8 h | 544 GB | 66 s | 05-06 → 05-13 |
| 吧台碗碟收入洗碗槽 | 250 | 3.5 h | 402 GB | 51 s | 05-16 → 05-25 |
| 合计 | 1,029 | 22.1 h | 2,665 GB | — | — |
流水线标签健康:oss-success / success-translate / success-upload 均 100%;failed-translate 仅 61 条(5.9%,其中 48 条在试管分拣)。本项目无任何质检自定义字段——无质检结果、无采集员、无不通过原因。版本标签(2.0.1场景 等)与场景 1:1 对应,是 SOP 版本而非独立维度。
03一刻(原子技能)普查
28,844 个标注片段,9 种技能。pick 与 place 数量几乎完全相等(9,577 vs 9,570),说明 pick→place 配对干净。
| 技能 | 数量 | 占比 | 中位时长 | p95 | 总时长 | wall-clock 占比 |
|---|---|---|---|---|---|---|
| pick | 9,577 | 33.2% | 2.8 s | 5.0 s | 467 min | 36% |
| place | 9,570 | 33.2% | 2.5 s | 4.3 s | 392 min | 31% |
| rotate | 2,839 | 9.8% | 1.0 s | 2.6 s | 59 min | 5% |
| navigate | 2,744 | 9.5% | 2.5 s | 6.5 s | 141 min | 11% |
| transfer(双臂交接) | 2,555 | 8.9% | 2.7 s | 4.1 s | 120 min | 9% |
| flip | 1,006 | 3.5% | 2.5 s | 5.0 s | 45 min | 4% |
| wipe | 255 | 0.9% | 7.0 s | 11.5 s | 31 min | 2% |
| push | 250 | 0.9% | 5.0 s | 8.7 s | 22 min | 2% |
| adjust / 解析异常 | 48 | 0.2% | — | — | 1 min | 0% |
74% 的时间机器人在抓取操作
夹爪致动片段(pick+place+transfer)共 21,702 段,占 979 / 1,280 min ≈ 77% 的 wall-clock 时间。死时间占比低,数据利用率高。
差异化技能按场景分布:rotate/flip 仅在 Logistics(扫码翻转);wipe/push 仅在吧台(微波炉门、台面擦拭)。这构成场景间的「技能指纹」。
04抓取回合(pick→place 循环)
这是实际训练 BC 的天然回合单元。一条记录 ≠ 一个回合——真实回合数是记录数的 4–14 倍。
| 场景 | 记录 | 抓取片段 | pick→place 循环 | 每记录 | 循环中位时长 | 抓取占比 |
|---|---|---|---|---|---|---|
| 试管分拣 | 263 | 8,667 | 3,671 | 14.0 | 7.5 s | 87% |
| Logistics sorting | 254 | 5,620 | 2,804 | 11.0 | 3.5 s | 53% |
| 清理桌面垃圾 | 262 | 5,167 | 2,101 | 8.0 | 7.2 s | 92% |
| 吧台碗碟收入洗碗槽 | 250 | 2,248 | 1,001 | 4.0 | 9.6 s | 61% |
| 合计 | 1,029 | 21,702 | 9,577 | — | — | 77% |
「只取夹取部分」会丢掉一半 Logistics
对 试管/桌面,切到 grip-only 只丢约 13%(安全)。但 Logistics 会丢 49%——它的 rotate(2,839)和 flip(1,006)就是扫码任务本身,不是死时间。吧台同理(wipe/push = 微波炉与台面工作)。结论:不要无脑切到夹取段,按场景取舍。
05边界审计:标注起点偏晚
用一条 Logistics 探针记录(12 次 pick)对照 mini.mcap 中的夹爪真实闭合时间。结论:标注的 pick 起点系统性偏晚,且可全自动修正。
关键发现
| 夹爪闭合相对 pick 起点的延迟 | +0.76 s(中位) |
| pick 结束相对闭合的时间 | +1.02 s |
| pick 标注时长 | 1.78 s |
即标注的 pick = [闭合 − 0.76s, 闭合 + 1.02s]。起点落后 0.76s——这段不是「朝目标伸手」,而是「最终接近」,reach 阶段被截掉了。终点含提举起始但不含稳定持握。
审计可全自动,无需人工看 200 段视频
mini.mcap(178 MB/条,~8s 下载)含/astribot_gripper_{left,right}/joint_space_states@ ~250 Hz,夹爪position≈0 张开 / ≈97 闭合——闭合时刻可直接测量。- 左/右臂标签免费得到:夹爪严格右/左/右/左 交替,包裹箱时双爪同闭。原本需推断的 §6.3 现可精确求解。
对齐方法(已修正的两个坑)
两个会导致对齐错误的陷阱
- 时间对齐:
metadata.yaml的recordingStartTime偏 86s,不可用。正确公式:video_t = moment_epoch − mcap_start_epoch,已逐帧验证。 - ffmpeg 定位:这些 MP4 的 GOP 约 100 帧(10s),
ffmpeg -ss <t> -i …(input seeking)最多偏 10s。必须先解码再索引(output seeking)。
该方法已可在任意样本上无人值守运行。探针为单条记录,扩展到全量即可给 9,577 个回合打上精确的闭合时刻与左/右臂标签。
06场景特征化
物体集合:场景间零重叠
15 种物体,每种只出现在 1 个场景。场景与物体集合完全混叠。
| 物体 | 试管 | Logi | 桌面 | 吧台 | 合计 |
|---|---|---|---|---|---|
| 包裹袋 parcel bag | 0 | 1,998 | 0 | 0 | 1,998 |
| 红试管 / 蓝试管 | 1,439 / 1,179 | 0 | 0 | 0 | 2,618 |
| 包裹箱 parcel box | 0 | 806 | 0 | 0 | 806 |
| 黑盒 / 蓝盒 | 526 / 526 | 0 | 0 | 0 | 1,052 |
| 纸巾 / 瓶子 / 纸团 | 0 | 0 | 527 / 525 / 523 | 0 | 1,575 |
| 零食包装 / 塑料袋 | 0 | 0 | 263 / 263 | 0 | 526 |
| 钢碗 / 抹布 / 绿碗 / 白碟 | 0 | 0 | 0 | 251 / 251 / 250 / 249 | 1,001 |
物体匹配对照组不可构造
§6.4 设想的「物体匹配」对照在本数据集中根本无法构造——混淆因素 A 不是「部分混淆」,而是完全混叠。
双臂交接:Logistics 是唯一单臂场景
| 场景 | pick | transfer | transfer/pick | 双臂证据 |
|---|---|---|---|---|
| 试管分拣 | 3,670 | 1,337 | 0.36 | 密集 |
| 清理桌面垃圾 | 2,101 | 970 | 0.46 | 密集 |
| 吧台碗碟收入洗碗槽 | 1,001 | 248 | 0.25 | 存在 |
| Logistics sorting | 2,804 | 0 | 0.00 | 无(单臂) |
pick 时长:Logistics 是另一种节律
| 场景 | 中位 pick 时长 | < 1.5s 占比 |
|---|---|---|
| Logistics sorting | 1.8 s | 27% |
| 清理桌面垃圾 | 2.8 s | 2% |
| 试管分拣 | 3.3 s | 0% |
| 吧台碗碟收入洗碗槽 | 3.5 s | 1% |
Logistics 的 pick 更短、无双臂、外加独有的 rotate/flip——它是一个不同 regime 的场景。
指令多样性:很低
每场景仅 4–6 条不同的 pick 指令,2–5 种物体,1–2 个取物位置。吧台 250 条记录反复执行同样的 4 次 pick(钢碗/抹布/绿碗/白碟)。这把单场景臂会严重过拟合到固定的物体集与布局——有利于「多样性更好」的预期,但也意味着结论可能退化为「15 种物体胜过 2 种」,是物体多样性而非场景多样性。需预先决定主张哪一条。
07混淆因素一览
| 混淆因素 | 状态 | 能否控制 |
|---|---|---|
| 物体集合 ⊥ 场景(零重叠) | 完全混叠 | 物体匹配对照不可构造 |
| 机器人本体跨场景 | 8 台,2000064 跨全部 4 场景 | 同机器人对照可构造 |
| Logistics 单臂 vs 其他双臂 | 行为差异巨大 | 选单场景基线时避开 Logistics |
| 场景 ≡ 采集员(jiaofu1) | 本项目无采集员字段 | 不可分离,需在结论中声明 |
| 指令/布局多样性低 | 4–6 指令/场景 | 结论可能退化为物体多样性 |
机器人分布
| 序列号 | 试管 | Logi | 桌面 | 吧台 | 合计 |
|---|---|---|---|---|---|
| 2000064 | 27 | 32 | 67 | 115 | 241(全 4 场景) |
| 2000025 | 0 | 158 | 0 | 0 | 158 |
| 2000063 | 71 | 0 | 0 | 86 | 157 |
| 2000061 | 0 | 0 | 115 | 0 | 115 |
| 2000060 | 97 | 0 | 0 | 0 | 97 |
| 2000095 | 0 | 64 | 0 | 23 | 87 |
| 2000059 | 0 | 0 | 79 | 0 | 79 |
| 2000070 | 43 | 0 | 0 | 0 | 43 |
用 2000064 的 241 条记录可构造「同机器人、跨场景」对照,把本体效应从场景效应里部分剥离——这是目前唯一可构造的对照。
08实验设计建议
留出目标(测试场景)
吧台碗碟收入洗碗槽。视觉最独特(厨房台面/水槽),1,001 个 pick 足够做 k-shot 池 + 评测;其 push/wipe 在 pick 回合之外,不引入新原语;机器人 2000064 在此有 115 条,可做同机器人对照。
训练源场景
试管分拣 + 清理桌面垃圾 + Logistics。N=900 pick/臂可行——每个源单独 ≥2,101 pick。
单场景基线
试管分拣 与 清理桌面垃圾。Logistics 作为第三基线但标注为离群值——单臂 + 半长 pick,是「单场景」的差劲代表。
等量原则(关键)
A 臂 = 3 场景 × k 回合;B 臂 = 1 场景 × 3k 回合。相同回合数、相同梯度步数、相同种子。否则测的是数量而非多样性。
评测协议:k-shot 曲线(而非纯 zero-shot)
纯 zero-shot 大概率两边都 ≈0%(pick-place 迁移到未见厨房布局太难),得到死空对照。k=0 即 zero-shot,是曲线第一点;再在 k ∈ {0, 25, 100} 上微调并画曲线。预训练每臂只做一次(贵),每个 k 只是短微调(便宜),增量约 +20% 算力而非 3×。
| 要检出的效应 | 每臂 rollout 数 |
|---|---|
| 20% → 50%(30pp) | ~36 |
| 20% → 40%(20pp) | ~79 |
| 20% → 30%(10pp) | ~290 |
每臂 ≥50 rollout 是实际下限(只能分辨 ≥28pp 差异)。3 臂 × 3 个 k × 50 rollout × 3 种子 ≈ 1,350 次——先估机器人时间。离线 action MSE 与任务成功相关性差,只用于选 checkpoint,不用于下结论。
分阶段执行
| 阶段 | 内容 | 门槛 |
|---|---|---|
| Stage 0 | 数据准备:子回合切分(已有一刻)、头尾修剪、解码为训练格式;动作=joint_space_command,观测=1 外视 + 2 腕视 | 得到每场景真实回合数 + 1 个 450 回合/臂的等量集 |
| Stage 1 | 仅离线:两臂训练,干净 QC,易目标,报 held-out action error | 任一臂学到非平凡策略?否则问题在数据准备 |
| Stage 2 | 仿真(若有):完整 k 网格、两目标、3 种子 | 易目标上两臂有无分离?无则效应太小,止损 |
| Stage 3 | 真机:仅 Stage 2 存活条件,50 rollout/臂,易目标优先,吧台作硬探针 | — |
对预期效应保持校准
文献中「多样性提升泛化」的结论出现在数百场景、数千小时尺度。本实验 3 场景、~450 回合/臂,零结果或小效应是非常合理的诚实结局——但仍值得跑,前提是设计成「零结果也可发表/可决策」而非含糊。
09文件与复现
所有脚本与原始 dump 位于会话目录(未提交至仓库;49M JSON 不宜直接提交)。
| 文件 | 说明 |
|---|---|
aad-records.json (5.2M) | auto-annotation-dataset 全 1029 条记录 |
moments-all/ (1029 文件, 21M) | 每条记录的「一刻」标注 |
meta/ (1029 文件) | 每条记录的 metadata.en.yaml(含机器人序列号、SOP 步骤) |
exp_v1/grasp_episodes.csv | 9,576 个抓取回合(arm/grasp_success 待 mcap 补全) |
exp_v1/scene_object_matrix.csv | 场景 × 物体矩阵 |
exp_v1/scene_instruction_matrix.csv | 场景 × 指令矩阵 |
exp_v1/scene_arm_stats.csv | 双臂交接统计 |
exp_v1/grasp_boundary_audit_sample.csv | 244 个 pick 的分层审计样本 |
grip-stats.ts / characterize.ts | 抓取普查与场景特征化脚本 |
gripper-boundary.py | 夹爪闭合边界审计(mcap 解码) |
fetch-moments.sh / fetch-metadata.sh | 可断点续传的拉取脚本 |
会话目录:sessions/year=2026/month=08/2026-08-08-jiaofu1-label-stats/(路径名沿用首问,与当前内容不完全一致)。数据拉取经 cocli,org coscene-hy,项目 auto-annotation-dataset。