多模态数据流的时间对齐:同步到毫秒级
横跨视觉、力觉与音频的时间对齐,是多模态机器人数据集中最不起眼的一环,却决定着这些数据究竟教出了什么。
一个机器人伸手去拿瓶子,合拢夹爪,然后抬起。在视频里看起来完美无缺。但在训练数据中,接触产生的力峰值,被记录在了显示手指触到玻璃的那一帧之前 40 毫秒。对模型而言,力如今先于触碰发生。它于是学会了提前用力,而在部署时,它会在还没抓稳瓶子之前就把它捏碎。
没有人写下任何 bug。每个传感器都在正常工作。相机以 30 fps 运行,力-力矩传感器以 1 kHz 运行,关节编码器介于两者之间,而每一路数据流都带着自己的时钟和自己的延迟。失败就藏在它们之间的缝隙里。
时间对齐,也就是把每一种模态放到同一条共享时间轴上,是构建多模态机器人数据集中最不起眼的一环,却也是悄然决定这些数据究竟教的是物理还是虚构的一环。
为什么毫秒会决定策略
操作是一场关于接触事件的博弈,而接触正是时间最不容差错的地方。一次抓取的成败,就在数十毫秒的窗口内见分晓。指尖触到表面的那一刻,力信号骤然跳变,视觉画面几乎没有变化,而正确的动作则从“合拢”翻转为“保持”。
如果力数据流和视频数据流对这一刻发生的时间各执一词,模型学到的就是一种被扭曲的因果关系。以视觉为主的任务能容忍一点误差,富接触的任务则不能。这正是为什么面向接触的数据集,例如 RH20T,会把视觉、力觉与本体感觉之间的同步当作一等设计约束,而不是细枝末节。
这里值得一提音频,因为它正是团队容易忘记对齐的模态。门闩的咔哒声、盒子在桌面上刮擦的声音、连接器卡到位的一声轻响:这些都是精确而富含信息的接触线索,而它们位于声卡内部一个完全独立的时钟上。对齐得好,音频能比视觉更清晰地标出接触发生的确切时刻;对齐得差,它就只是又一路在教错误事件顺序的数据流。
在富接触操作中,40 毫秒的错位不是在增加噪声,而是在教出错误的因果顺序,而策略会忠实地把它学下来。
时钟在哪里漂移
错位不是单一的问题,而是一族问题,而且它们会叠加。
- 不同的原生采样率。 30 fps 的相机每 33 毫秒采样一次,1 kHz 的力传感器每 1 毫秒采样一次。把它们对齐,大多数力样本都没有对应的画面帧。
- 传感器延迟。 一台 USB 相机要先曝光、编码,再传输,画面才会到达。这条流水线的延迟可达数十毫秒,而且每台设备各不相同。
- 时钟域。 每台设备都可能按自己的振荡器打时间戳。两个都以秒为单位的时钟,在一段长时间的采集中依然会彼此漂移。
- 缓冲与丢帧。 一次丢帧或一个满载的缓冲区,如果你按计数而不是按时间来索引,就会让其后的一切整体错位。
单独看,其中任何一个都可控。合在一起,它们会产生一个既不恒定、也不明显的偏移,而且会因采集场次不同而变化。
重采样是常见的应对办法,而它藏着自己的陷阱。为了在对齐好的张量上训练,团队通常会把每一路数据流重采样到同一个名义采样率。把 1 kHz 的力信号降采样到与 30 fps 视频匹配,你就丢掉了正好标记接触的那些峰值;把视频升采样,你又凭空造出了从未被观测到的帧。两种做法本身都没有错,但都是有损的,而损失最大的地方,恰恰是操作成败所在。更稳妥的默认做法,是让每一路数据流保持其原生采样率,并携带显式的时间戳,这样下游用户就能有意识地重采样,而不是被迫继承一个自己无法撤销的选择。
| 数据流 | 典型原生采样率 | 主要对齐难题 |
|---|---|---|
| RGB 相机 | 30 至 60 fps | 曝光与传输延迟、卷帘快门 |
| 力-力矩传感器 | 500 Hz 至 1 kHz | 快速事件落在两帧画面之间 |
| 关节编码器、本体感觉 | 100 至 1000 Hz | 控制回路抖动 |
| 麦克风、音频 | 44.1 至 48 kHz | 独立时钟域、缓冲漂移 |
| IMU | 100 至 1000 Hz | 偏置漂移、自带时钟 |
硬件同步胜过软件的猜测
把多路数据流放到同一条时间轴上有两种办法,而它们并不对等。软件打时间戳记录的是每个样本在共享主机时钟上的到达时间。它很廉价,也总是多少有点错,因为到达时间并不是采集时间。
硬件同步则把各设备绑定到一个共同的触发或时钟信号上,让快门一起触发、样本共享同一参考。它更费功夫去搭建,却是唯一能经得起富接触数据考验的办法。像 Ego-Exo4D 这样的多视角采集工作,正是出于这个原因才依赖细致的跨相机同步;而汇集在 Open X-Embodiment 中的各个操作数据集,其数据流对齐的严格程度差异很大,这也是把它们混合起来比看上去更难的原因之一。像 DROID dataset 这样的大规模遥操作语料会精确记录其相机配置,正是为了让他人能够就对齐问题进行推理。
能测量的偏移,就能修正
一个已知且恒定的延迟并不是问题,你把它减掉即可。危险的是那些可变的偏移:控制回路里的抖动、每分钟漂移一毫秒的时钟、偶尔打嗝的缓冲区。这些无法用一个常数来修正,必须持续测量并逐帧记录,而这只有在采集装置本身就为记录自己的时序而设计时才能做到。
要么信任时间轴,要么什么都别信
多模态数据的卖点,在于承诺力觉、视觉与本体感觉描述的是同一时刻。如果时间轴是错的,这个承诺就是空的,而多出来的那些模态甚至比无用更糟:它们会教出自信的错误。对齐不是后处理时勾一下的复选框,而是让一个多模态数据集真正成为多模态、而不是几段恰好放在同一个文件夹里、彼此无关的录制的东西。
所以,当一个数据集宣称数据流已同步时,要追问是怎么做到的。硬件触发还是软件时间戳。逐帧时序还是一个名义采样率。答案会告诉你,你买到的是物理,还是虚构。