3. 动态环境数据集与评测基准
做SLAM这么多年,我踩过最大的坑之一,就是数据集选不对。你想想看,一个在TUM RGB-D静态场景里跑得飞起的算法,放到真实动态环境里,可能直接原地爆炸。所以这一章,咱们就来聊聊动态环境下的数据集和评测基准。
3.1 为什么需要专门的动态数据集?
传统的SLAM数据集,比如TUM RGB-D的静态序列,说白了就是让你在实验室里自嗨。但真实世界哪有那么干净?行人走来走去、车辆穿梭、甚至你自己拿着相机走路时胳膊的晃动,这些都是动态干扰。
我个人习惯把动态场景分成三类:
- 轻度动态:偶尔有人走过,大部分场景静止
- 中度动态:持续有移动物体,但背景仍占主导
- 重度动态:几乎全是动态物体,比如拥挤的街道
我在项目中遇到过最头疼的情况,就是算法在轻度动态下表现不错,一到重度动态就崩。所以评测时,一定要覆盖这三种场景。
3.2 主流动态数据集介绍
3.2.1 TUM RGB-D Dynamic
这个数据集大家应该不陌生。它包含多个动态序列,比如有人坐在桌前、有人走来走去。每个序列都提供了地面真值轨迹,方便你做定量评估。
| 序列名称 | 动态程度 | 主要干扰 |
|---|---|---|
| fr3_walking_xyz | 高 | 人在相机前走动 |
| fr3_sitting_static | 低 | 人坐着轻微晃动 |
| fr3_walking_halfsphere | 中 | 半圆轨迹+动态人 |
嗯,这里要注意:TUM的RGB-D数据是用Kinect采集的,深度图在动态边缘处会有明显的噪声。我早期做实验时,就因为这个噪声吃了不少亏。
3.2.2 KITTI Dynamic
KITTI主要是自动驾驶场景,但它的动态元素非常丰富。车辆、行人、自行车,应有尽有。不过KITTI的ground truth是用激光雷达和GPS做的,精度比TUM差一些。
我个人建议:如果你做的是视觉里程计或者VIO,KITTI Dynamic是个不错的选择。但如果你做的是RGB-D SLAM,那还是优先考虑TUM或Bonn。
3.2.3 Bonn Dynamic
这个数据集是波恩大学出的,专门针对动态环境。它的特点是:
- 场景更真实,比如办公室、走廊、实验室
- 动态物体标注更精细,有语义分割mask
- 提供了动态物体的运动轨迹
我曾经用Bonn数据集测试过一个基于语义的动态剔除算法,效果比TUM上好不少。为什么?因为Bonn的标注更准,你能精确知道哪些像素属于动态物体。
3.3 如何构建自己的动态测试集?
说实话,光靠公开数据集是不够的。每个项目的场景都不一样,你最好自己建一个测试集。我分享一下我的做法:
3.3.1 采集工具
我一般用Realsense D435或者Azure Kinect。这两个设备性价比高,深度图质量也还行。采集时注意:
- 固定帧率,比如30fps
- 同时录制RGB和深度
- 记录IMU数据(如果有)
3.3.2 动态物体控制
你可以用以下方式制造动态干扰:
- 让一个人拿着纸板在相机前走动
- 用遥控小车来回穿梭
- 在场景中放置风扇、摆动的窗帘
我曾经犯过一个错误:只录了单一动态物体。后来发现算法在多个动态物体同时出现时,表现完全不同。所以建议至少录3种动态程度。
3.3.3 地面真值获取
没有ground truth,评测就是耍流氓。获取方式有:
- 用OptiTrack或Vicon动捕系统
- 用激光雷达+ICP做离线优化
- 用COLMAP做SfM重建
我个人推荐OptiTrack,精度高,但贵。如果预算有限,可以用COLMAP,但要注意动态物体会影响重建质量。
3.4 评测指标与基准
评测动态SLAM,不能只看ATE(绝对轨迹误差)。我一般用这几个指标:
- ATE RMSE:整体轨迹精度
- RPE:相对位姿误差,看局部漂移
- 动态物体剔除率:算法能正确剔除多少动态点
- 静态背景保留率:别把静态特征也删了
重要:动态SLAM的评测,一定要同时看动态剔除率和静态保留率。我见过一些算法,为了剔除动态点,把静态背景也砍掉一半,这显然不行。
3.5 知识体系总览
下面这张图,是我对动态环境数据集与评测基准的整体理解:
个人小技巧:我每次做新算法,都会先在TUM上跑一遍,然后在自建测试集上跑一遍。如果两个结果趋势一致,说明算法泛化能力不错。如果差异很大,那就要找原因了。
避坑指南:我曾经在自建测试集上,因为地面真值标定不准,导致算法评测结果虚高。后来发现是OptiTrack的marker贴歪了。所以,一定要多次验证你的ground truth精度。
好了,这一章的内容就到这里。数据集和评测基准是动态SLAM的基石,选对了、建好了,后面的工作才能站得住脚。
公众号:蓝海资料掘金营,微信deep3321