本文基于 RDA v0.9.7 对 13 个 LeRobot 公开数据集的全量审计结果,详细解读四层审计框架的每层指标含义、跨数据集对比、以及 v0.9.7 判定管线重构的工程决策。

一、背景与实验设置

1.1 为什么要做这个审计?

机器人学习领域的数据集越来越多,但数据质量评估工具严重不足。大多数研究者只检查基本的完整性(缺帧、NaN),对行为特征和训练效率的评估几乎为零。

RDA(Robot Data Audit)是一个面向 LeRobot 格式数据集的独立质量审计工具。本次实验的目标是:

  • 在 13 个真实公开数据集 上运行 RDA v0.9.7
  • 零调参:所有数据集使用完全相同的默认阈值
  • 全量审计:4,940 个 episode 全部检查
  • 分层分析:不只看 PASS/REVIEW,重点分析 L2 行为诊断和 L3 数据画像

1.2 实验环境

表格

项目配置
RDA 版本0.9.7(PyPI)
报告 schema1.2
数据格式LeRobot v3.0
执行模式Fast Audit(默认,含 video metrics)
硬件云端 CPU,无 GPU
数据来源HuggingFace Hub 直接下载

1.3 四层审计框架概览

┌─────────────────────────────────────────────────────┐

│ L1 — Integrity Gate(完整性门控) │

│ 9 个硬检查指标:缺帧、NaN、schema、时间戳、视频完整性... │

│ 可以设置 EXCLUDE verdict │

├─────────────────────────────────────────────────────┤

│ L2 — Trajectory Diagnostics(轨迹诊断) │

│ 8 个观测指标:动作突变、空闲比、视频冻结、视觉质量... │

│ 仅产出 finding(信号),不设置 verdict │

├─────────────────────────────────────────────────────┤

│ L3 — Dataset Profile(数据画像) │

│ 4 个效率指标:空闲比分布、状态分布、覆盖度、时序结构 │

│ 仅产出测量值 │

├─────────────────────────────────────────────────────┤

│ L4 — Dataset Summary(数据集概览) │

│ P10/P50/P90 聚合统计 │

│ 仅用于报告 │

└─────────────────────────────────────────────────────┘

核心设计原则:只有 L1 的硬检查能产生 EXCLUDE 判定;L2/L3 的诊断测量永远不自动升级为 verdict。 这是 v0.9.7 最重要的架构决策。

二、L1 完整性门控:全部通过

所有 13 个数据集的 4,940 个 episode 全部通过 L1 检查:

表格

检查项结果
missing_dropout全部通过
invalid_values (NaN/Inf)全部通过
schema_consistency全部通过
timestamp_validity全部通过
video_frame_integrity全部通过
video_timestamp_alignment全部通过
video_stream_presence全部通过
video_stream_span_consistency全部通过
video_stream_temporal_drift全部通过

结论:13 个公开数据集在数据完整性层面都没有硬伤。

但这只是起点。L1 通过只代表数据「没坏」,不代表数据「好用」。

三、L2 行为诊断:真正的洞察从这里开始

L2 层不做「好/坏」判断,它做的是观测和标记。每个 metric 产出的是 finding(信号),而不是 verdict(审判)。

3.1 idle_ratio:空闲比分析

idle_ratio 是 L2 层覆盖最广的指标——13 个数据集中有 12 个触发了 idle_ratio finding。

但这不是问题。空闲比高不等于数据质量差,它反映的是任务性质。

表格

数据集空闲比中位数有效运动比中位数finding 覆盖
xarm_lift_medium20.8%79.2%72/800 (9%)
xarm_push_medium83.3%16.7%629/800 (78%)
svla_so101_pickplace86.8%13.4%49/50 (98%)
utokyo_pr2_tabletop83.6%16.4%237/240 (99%)
pusht81.7%18.3%202/206 (98%)
cmu_stretch66.7%33.3%135/135 (100%)
libero_1071.7%28.3%379/379 (100%)
droid_10070.8%29.4%97/100 (97%)
jaco_play74.1%25.9%1085/1085 (100%)
aloha_sim_transfer_cube_human71.2%28.8%50/50 (100%)
aloha_sim_insertion_human70.7%29.3%50/50 (100%)
aloha_sim_transfer_cube_scripted64.2%36.1%40/50 (80%)
aloha_sim_insertion_scripted63.7%36.3%49/50 (98%)

关键观察:

  • 11/13 数据集的中位空闲比超过 63% ——训练时 loss 会被结构性地偏向「预测不动」
  • xarm_lift vs xarm_push:同一平台、同一实验室,空闲比从 20.8% 到 83.3%,差了 4 倍。lift 是大幅度动作,push 是小力+等待,任务性质决定行为模式
  • finding 不等于 verdict:在 v0.9.7 中,idle_ratio finding 不会自动将 episode 标记为 REVIEW

3.2 action_discontinuity:动作突变分析

动作突变检测使用 MAD(Median Absolute Deviation)方法识别动作序列中的异常阶跃。

表格

数据集突变 episodes占比中位突变次数/ep特征
aloha_sim_insertion_scripted50100%33脚本控制器的离散指令切换
aloha_sim_transfer_cube_scripted50100%49同上
aloha_sim_insertion_human3876%26遥操作的频繁修正
aloha_sim_transfer_cube_human4794%31遥操作的频繁修正
cmu_stretch7253%22二值夹爪 0↔1 翻转
jaco_play17616%10大部分 episode 平滑
droid_1001919%11大部分 episode 平滑
libero_1000%10无突变 finding
pusht00%5无突变 finding
xarm_lift_medium00%0极其平滑
xarm_push_medium00%1几乎无突变

关键观察:

  • ALPHA scripted 数据 100% 有动作突变:脚本控制器的离散指令切换天然产生阶跃信号,不是数据损坏
  • cmu_stretch 的突变来源:二值夹爪的 0↔1 翻转,是编码特征而非真实物理突变
  • xarm 数据集极其平滑:lift 中位 0 次、push 中位 1 次
  • 如果你的策略使用平滑正则化(smoothness regularization),这个数字直接决定课程学习策略

3.3 video_freeze:视频冻结检测

v0.9.7 新增了视频冻结检测(video_freeze),通过分析连续帧间像素差异识别冻结段。

libero_10 结果: 6/379 episodes 触发 video_freeze finding

表格

Episode帧数任务描述冻结时长
90223turn on the stove and put the moka pot on it~0.5s
198235pick up the book and place it in the back compartment~0.7s
240289put the white mug on the plate and put the chocolate pudding~0.8s
254227put both the cream cheese box and the butter in the basket~0.6s
255291put both the cream cheese box and the butter in the basket~0.9s
300237put both the cream cheese box and the butter in the basket~0.7s

交叉验证: 通过 ffmpeg 逐帧提取两个独立摄像头(agentview + wrist_image)的画面,确认冻结帧同时出现在两个摄像头上,且位于 episode 边界位置。这更可能是机器人自然静止,而非摄像头硬件故障。

RDA 将这些 episode 标记为 REVIEW(「训练前请检查」),而非 EXCLUDE(「数据损坏」)。

3.4 速度/加速度分析

velocity_p95 的跨数据集差异极大,主要受动作空间尺度影响:

表格

数据集velocity_p95 中位数特征
pusht208.12-DOF 仿真,像素空间速度
svla_so101_pickplace190.3SO-100 原始关节值
utokyo_pr2_tabletop118.2PR2 未归一化 RLDS 原始值
xarm_lift_medium9.1xArm 归一化关节
aloha_sim_insertion_scripted1.7ALOHA 仿真双臂
libero_100.32Panda 仿真臂
jaco_play0.09Jaco 低速大范围运动

注意: 这些速度值的绝对数字不能跨平台比较。pusht 的 208 不代表「运动更快」——它使用的是像素空间坐标,而 libero_10 使用的是归一化关节角度。RDA 在 MVP Spec v0.2.0 §1.5 中将 velocity 归为 Tier-2 normalizable 指标,需要平台缩放因子才能跨平台对比。

四、L3 数据画像:训练效率的隐形维度

4.1 状态空间占用率(State Occupancy)

通过 10×10 网格离散化状态空间,计算 episode 覆盖的网格占比:

表格

数据集占用率中位数P10P90
pusht39.0%28.0%51.0%
libero_106.6%4.7%8.3%
utokyo_pr2_tabletop5.0%4.4%5.8%
aloha_sim_transfer_cube_scripted5.0%5.0%5.0%
droid_1004.8%3.2%11.0%
svla_so101_pickplace4.5%4.0%5.0%
aloha_sim_insertion_scripted4.2%3.8%4.4%
aloha_sim_transfer_cube_human3.8%3.2%4.6%
aloha_sim_insertion_human3.8%3.3%4.4%
jaco_play2.8%2.2%3.4%
xarm_lift_medium2.4%2.1%2.5%
cmu_stretch1.9%1.9%2.0%
xarm_push_medium1.7%1.4%2.1%

除 pusht 外,所有数据集的占用率中位数在 1.7%-6.6% 之间。 这意味着同一数据集内的 episodes 在状态空间中高度重叠——探索多样性有限。

如果你的模型需要泛化到未见过的状态,这个指标直接告诉你当前数据集的覆盖是否足够。

4.2 时序结构分析

表格

数据集持续时长中位数(s)状态转移中位数活跃段 P50
cmu_stretch37.623—
utokyo_pr2_tabletop27.010—
libero_1025.829—
pusht12.18—
droid_10015.024—
svla_so101_pickplace7.77—
jaco_play6.96—
aloha_sim_insertion_human10.011—
aloha_sim_transfer_cube_human8.011—
aloha_sim_insertion_scripted8.04—
aloha_sim_transfer_cube_scripted8.04—
xarm_lift_medium1.64—
xarm_push_medium1.62—

持续时长从 1.6s 到 37.6s 不等,状态转移从 2 次到 29 次不等。 这些指标影响序列模型的时间窗口设计和注意力机制的跨度选择。

五、v0.9.7 判定管线重构:为什么 findings 不再自动升级为 verdicts

5.1 旧管线的问题

在 v0.5.x 版本中,idle_ratio 超过阈值会自动将 episode 标记为 REVIEW:

表格

数据集v0.5.x REVIEW 数实际原因
libero_10247/379 (65%)低运动任务是正常现象
pusht163/206 (79%)低运动任务是正常现象
cmu_stretch大量低运动任务是正常现象

交叉验证表明,这些 REVIEW 大多是假阳性——idle_ratio 高是因为任务本身的运动幅度小,不是数据质量差。

5.2 新管线的三层聚合模型

v0.9.7 将判定管线重构为三层聚合:

  1. L1 Hard Checks → 直接决定 PASS / EXCLUDE
  2. L2/L3 Findings → 标记为 RISK_SIGNAL / RISK_LEVEL,不改变 verdict
  3. L4 Summary → 聚合统计,仅用于报告

5.3 效果对比

表格

数据集v0.5.x 结果v0.9.7 结果变化
libero_10132 PASS / 247 REVIEW373 PASS / 6 REVIEWREVIEW 减少 97.6%
pusht43 PASS / 163 REVIEW206 PASS / 0 REVIEWREVIEW 减少 100%
jaco_play部分 REVIEW1085 PASS / 0 REVIEW全部 PASS
其他 10 个数据集各有 REVIEW全部 100% PASS全部 PASS

libero_10 仅剩的 6 个 REVIEW 全部来自 video_freeze 检测——这是一个独立的、更可靠的视频质量信号。

六、盲测验证

6.1 实验设计

  • 数据集:lerobot/pusht(206 episodes)
  • 注入:5 类缺陷 × 10 episodes = 50 个缺陷 episode
  • 对照:156 个未修改 episode
  • 模式:--no-video(Fast Audit)
  • 调参:零调参,全部默认阈值

6.2 注入方法

表格

缺陷类操作预期检出方式
empty删除 data parquet 所有行,保留 meta/episodes_zero_frame_guard
nan_state15 帧 × 2 维 = 30 NaN/episodeinvalid_values
timestamp_reverse后半段 timestamps 反转timestamp_validity
frozenstate + action 冻结为首帧值idle_ratio finding
duplicate_frames5 帧复制追加到尾部timestamp_validit

6.3 结果

表格

缺陷类EXCLUDEREVIEW严格检出宽松检出
empty10/10010/1010/10
nan_state10/10010/1010/10
timestamp_reverse10/10010/1010/10
frozen0/100/100/100/10
duplicate_frames10/10010/1010/10

严格混淆矩阵:TP=40, FN=10, FP=0, TN=156

  • 精确率:1.000(40/40,零误报)
  • 召回率:0.800(40/50)

6.4 已知回归

frozen episode 检测是 v0.9.7 的已知回归。idle_ratio 仍然检测到 RISK_SIGNAL,但不再自动升级为 REVIEW verdict。这是一个需要在后续版本中解决的问题。

复现命令:

pip install robot-data-audit==0.9.7

rda audit <dataset_path> --no-video -v

七、实践建议

基于本次审计结果,对不同使用场景的建议:

7.1 数据集选择

  • 不要只看 L1 完整性,L2/L3 的行为画像直接影响训练效果
  • 空闲比高的数据集需要配合适当的 loss weighting 或 curriculum strategy
  • 状态占用率低的数据集可能需要补充更多样化的采集

7.2 训练策略

  • scripted 数据(如 ALOHA scripted)动作突变率高,建议增加平滑正则化
  • 空闲比 > 70% 的数据集,考虑对「不动」动作降权
  • velocity 指标跨平台不可比,需先做平台归一化

7.3 审计流程

  • 默认使用 Fast Audit(rda audit),覆盖 L1/L2/L3 的大部分指标
  • 需要视频质量检测时加 --video-quality
  • 只需要视频检查时用 --video-only
  • JSON 报告中每个 metric 都有 has_finding 字段,可用于自定义过滤

RDA v0.9.7 已在 PyPI 发布:pip install robot-data-audit==0.9.7

GitHub:github.com/liesliy/rda

完整 benchmark 数据:docs/benchmark.md

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐