返回专辑
·Johan·4 分钟阅读

SLAM 数据集指南:EuRoC、TUM 与 KITTI 怎么用才不自嗨

对比 EuRoC、TUM、KITTI 的传感器配置与评价协议,强调失败序列报告、参数隔离与真机迁移时的常见陷阱。

SLAM 数据集指南:EuRoC、TUM 与 KITTI 怎么用才不自嗨

1. 数据集 SOTA 不等于能部署

EuRoC MH_05 上 ATE 0.05 m,换到自家仓库直接丢跟踪——我复现论文时吃过这个亏。公开 benchmark 的价值是可复现的回归,不是排行榜数字。只报最佳序列、为每条轨迹单独调参、隐藏 FAIL,等于把算法自嗨包装成工程结论。下文按数据集讲清传感器契约、评价对齐与验收该量什么。

2. EuRoC MAV:VIO 的事实标准

Machine Hall (MH) 与 Vicon Room (V1/V2) 共 11 条序列,双目 + IMU + 部分真值。难度标 easy/medium/difficult:MH_01 慢速纹理好,易过拟合默认参数;MH_04 快速运动模糊,测曝光与 IMU 饱和;MH_05 暗光弱纹理,特征法易 LOST;V1/V2 纹理较好,尺度可观性比 MH 宽松。

评价协议:双目/VIO 有米制尺度,对齐用 SE(3),报 ATE RMSE。工具 evo_ape euroc_eval 是事实标准。必须 11 条全报——若论文只晒 8/11,我会直接看失败 3 条的失败模式:初始化挂、跟踪丢,还是回环假阳性。

3. TUM RGB-D 与 TUM-VI

TUM RGB-D:Kinect 深度 + 手持轨迹,室内为主,适合 RGB-D SLAM 与稠密方法。真值来自 motion capture,但不同论文对齐方式不一,数字不可直接横比。

TUM-VI:鱼眼 + IMU,快速旋转与曝光变化比 EuRoC 部分序列更狠。鱼眼模型必须正确——硬套针孔会在边缘产生系统性误差,ATE 看起来「还行」其实是模型错配。

TUM 工具链 associate.py 做时间戳对齐。不对齐就评,数字无意义。常见错误:用 arrival time 而非 capture time 关联 RGB 与 depth;深度帧滞后 30 ms 未补偿,RPE 在转弯段爆炸。

4. KITTI Odometry

车载双目 + GPS/IMU,户外驾驶。Seq 00–10 有真值,11–21 测试集无真值(在线提交)。大尺度、主要是 forward motion,回环少——评 RPE 比 ATE 更有意义。运动模式单一,不适合评 VIO 初始化鲁棒性。激光里程计 benchmark 另评点云方法,别把视觉 odometry 数字与 LO 数字混谈。

5. 怎么用才不造假

报告失败,不是可选:

text
序列    ATE(m)   状态
MH_01   0.04     OK
MH_05   FAIL     跟踪丢失 @ 120s
成功率: 9/11

参数隔离:调参集与测试集分开(至少 MH vs V1 交叉验证);同一份 yaml 跑全部序列,不为单条轨迹调参;算法含随机性时固定种子,报均值与方差。

实时性:报 ATE 同时报平均 CPU/GPU、是否实时(> sensor rate)、端到端延迟。离线 BA 调到 0.01 m 不能实时,没有工程意义。

消融公平:去掉 IMU 后 ATE 恶化 300%,可能是初始化策略绑死了 IMU——每个消融只改一个变量。

6. 从数据集到真机的鸿沟

数据集有真机常缺
精确时间同步软件 stamp、无硬件 trigger
出厂标定安装后未重标
固定光照自动曝光、频闪
无动态障碍人、车、门
ground truth只有 GPS/人工测量

我的做法:数据集验证算法逻辑与 CI 回归;真机用独立场景验收。维护 2–3 条代表序列(MH_05 + V1_03 + 一条 TUM 失败序列)固化进 CI:同一套 yaml,ATE 恶化 >10% 就拦。

7. evo 对齐与常见踩坑

evo_ape 默认 SE(3) 对齐;单目必须加 --correct_scale 做 Sim(3),否则 ATE 无意义。对齐只估一个全局变换——若轨迹中间段 drift 模式与首尾不同,ATE 会「好看」但 RPE 暴露问题。我习惯同时报 ATE 与 segment RPE(每 100 m 一段),失败序列附丢跟踪时刻与当时特征数/内点数。

时间戳对齐是 TUM RGB-D 的头号坑:associate.py--offset--max_difference 要按 bag 实测,不是抄论文默认值。EuRoC 的 IMU 与相机硬件同步,但自录 bag 往往只有软件 stamp——在数据集上刷出来的参数,换到自录数据可能对齐全错而 ATE 仍「正常」。

8. baseline 对比的公平性

与 ORB-SLAM3/VINS-Mono 对比时,必须同一评价脚本、同一对齐方式、同一序列子集。只换算法不换前端特征数/后端迭代次数,结论不可比。我会固定 --params 文件 hash 写进报告,避免「后来手改 yaml 忘了」。

9. 验收

  • 全序列 ATE/RPE 表格 + FAIL 标记与失败模式分类
  • 初始化成功率、跟踪丢失次数
  • 噪声 ×2 / ×0.5 时 ATE 变化(参数敏感性)
  • 运行时间与内存峰值
  • 与 baseline 在相同评价脚本下的对比
  • 报告计算资源:是否实时、平均延迟
  • segment RPE 与丢跟踪时刻诊断字段

数据集是尺子,不是奖杯。尺子用错(对齐错、参数泄漏、隐藏 FAIL),再低的 ATE 也预测不了真机会不会挂。

← 全部文章

johan's blog