如果你的数据里只有视频,却想用悟界·RoboBrain Orca 做多模态表征,第一步不是调模型,而是把手里每一路数据的模态名称、采样率、时间戳字段先落到一张对照表上。多模态表征能不能直接落地,通常取决于三件事:视频帧、文本片段、动作标签是否共享同一条时间轴;各模态的时间戳是否来自同一时钟且单位一致;窗口切分后每路数据是否还保得住对应关系。这三件事在训练前用通用脚本打印维度就能验证,不需要先跑通整套模型。
先把数据拆成模态清单,确认每路数据的采样率和时间戳来源;再按统一窗口切分,核对视频帧、文本片段与动作标签的偏移量;最后用通用脚本打印各模态张量维度。能做多模态表征的前提是各模态在同一时间窗口内可对齐且维度自洽;如果时间戳缺失或偏移不可控,应先补齐数据字段,而不是调整模型结构。
把数据源列成模态清单,标出每路数据的采样率与时间戳来源
先把“有什么”写清楚,避免把单一视频数据硬套成多模态任务。对 RoboBrain Orca 这类世界模型表征任务,输入模态通常来自视频、文本、动作三条线,但未必每条线都有完整字段。建议先做一张模态清单,至少记录四列:模态名称、采样率、时间戳字段、缺失情况的记录方式。
- 模态名称:视频帧流、文本描述或指令、动作序列、传感器读数等,按数据实际来源命名,不要合并成“多模态数据”一笔带过。
- 采样率:视频是多少 fps、文本是逐句还是逐帧标注、动作是控制频率还是事件触发,三者频率往往不同,需要分别写清。
- 时间戳字段:字段名是什么、单位是秒还是毫秒、来自采集端还是事后对齐。同一份数据里如果混用两种单位,后期窗口切分会直接错位。
- 缺失情况的记录方式:某段没有文本、某段动作标注中断,建议统一标成空值并记录区段,而不是用前值填充后当作真实对齐。
这张清单本身不能证明数据可用,但可以快速判断任务是否具备多模态输入条件。如果只有视频一路数据、文本和动作都没有,通常应降到单模态表征,而不是强行拼出多模态任务。
按时间轴切出统一窗口,核对视频帧、文本片段和动作标签的对应关系
多模态输入最常见的问题不是维度对不上,而是时间上错位。建议先选定一个统一窗口长度,把所有模态都切到同一时间轴上。窗口长度的选择依据通常是动作标签的最小有效片段长度:如果动作标签平均持续若干帧,窗口就不宜短于这个片段,否则窗口内动作语义不完整;同时也不要长到跨越多个不相关动作。
对齐偏移量的检查方法可以按下面顺序做:
- 取一个窗口区间,打印视频首帧时间戳、文本片段起止时间戳、动作标签起止时间戳。
- 计算三者的相对偏移,看文本和动作是否落在视频帧时间范围内。
- 对多个窗口重复,观察偏移是稳定常数还是随机漂移。稳定常数通常说明基准时钟差一个固定量,可以整体平移校正;随机漂移则可能是采集端时间戳本身不统一。
错位时的排查顺序建议是:先查时间戳单位是否一致,再查各模态是否用了同一采集起点,然后查文本或动作标注是否按帧号而非时间戳存放。不要一上来就改窗口长度,窗口长度只能掩盖错位,不能修复错位。
用通用脚本骨架读取一批样本并打印各模态张量维度
正式训练前先确认加载逻辑正确。下面是一个通用骨架,接口名需要替换成你本地数据读取函数的实际名称,重点是看输出维度而不是依赖具体框架。
# 通用对齐检查骨架,接口名按本地实现替换
WINDOW_SEC = 2.0
STRIDE_SEC = 1.0
def load_sample(video_path, text_path, action_path, t0):
frames = read_video(video_path, t0, t0 + WINDOW_SEC) # 期望 [T, H, W, C]
texts = read_text(text_path, t0, t0 + WINDOW_SEC) # 期望 [N, D_txt]
acts = read_action(action_path, t0, t0 + WINDOW_SEC) # 期望 [M, D_act]
return frames, texts, acts
for t0 in sample_start_times:
f, t, a = load_sample(video_path, text_path, action_path, t0)
print("video", f.shape, "text", t.shape, "action", a.shape)
print("ts", read_start_ts(video_path, t0), read_start_ts(text_path, t0), read_start_ts(action_path, t0))
期望维度输出至少要能解释清楚:视频张量的时间维对应窗口内实际帧数,文本张量的条数对应窗口内文本片段数,动作张量的条数对应窗口内动作事件数。维度不一致时,定位点通常不在模型侧,而在读取函数:视频按毫秒切、文本按绝对时间切、动作按帧号切,三者混用就会出现帧数和标签数对不上的情况。先统一到秒或毫秒,再复跑这段骨架。
记录对齐前后的样本对照,判定当前数据能否进入表征训练
给一个可执行的准入判断,比凭感觉决定“够不够用”更稳。建议抽取若干窗口,记录对齐前后的对照样例:对齐前各模态的原始时间戳区间,对齐后落在同一窗口内的帧数、文本条数、动作条数。
判断阈值可以按数据自身特点设,通用的保守标准是:窗口内视频帧数不为零且连续;文本片段至少能覆盖窗口的主要时间区间,而不是只在开头出现;动作标签在该窗口内有明确起止,不是跨多个窗口的截断片段。如果对齐前后动作标签数量变化明显,通常说明窗口切分把动作切碎了,这时应先补动作标注或调整标签粒度,而不是先补视频数据。
不满足时补数据的优先级建议:先补齐时间戳字段,再补齐缺失模态的片段标注,最后才考虑增加数据量。时间戳不齐的情况下,增加样本量只会放大错位问题。
换成另一组时间窗口参数复跑,观察表征输入是否稳定
窗口选择容易变成一次偶然结果,所以需要换一组参数复跑。参数变更点主要是窗口长度和步长,例如把窗口从 2 秒改成 1.5 秒或 3 秒,步长保持不变或同步调整。复跑时观察项包括:各模态张量维度是否仍在可解释范围内、对齐偏移量是否仍是稳定常数、动作标签被截断的比例是否明显上升。
稳定性判断标准可以这样看:两组窗口参数下,视频帧、文本片段、动作标签的对应关系没有出现方向性变化,偏移量不随窗口长度系统性漂移。如果换参数后偏移从常数变成随机分布,通常说明之前对齐靠的是某个特定窗口的巧合,而不是数据本身时间戳一致,这类数据建议先回到模态清单阶段排查时间戳来源,再决定是否进入表征训练。