多模态学习这个词这两年被提得很多,但真正把视觉、听觉、触觉三路信号放在同一个模型里跑通的人并不多。大部分团队停在"图文对齐"这一步,再往前接音频就开始头疼时间同步,接到触觉基本就卡在数据标定和采样率对不齐上。我在几个模拟项目里反复折腾过这套东西,从机械臂抓取到设备状态监测,踩的坑足够写一本小册子。这篇文章就把视觉、听觉、触觉三模态学习的整体设计、编码细节、融合策略、实操流程和排查经验一次讲透,适合已经做过单模态模型、想往多模态方向走的开发者,也适合做机器人、工业检测、可穿戴设备的朋友参考。读完之后你至少能判断:自己的场景到底值不值得上三模态,上了之后融合层该怎么搭,触觉这一路的数据该怎么处理才不至于拖后腿。
1. 三感融合的整体设计与选型思路
1.1 单模态模型的天花板到底在哪
先说说为什么非要折腾多模态。单看视觉,模型在光照稳定、遮挡少的场景下表现很好,但一旦遇到反光、透明材质、严重遮挡,准确率会断崖式下跌。单看听觉,声音能反映设备内部的摩擦、撞击、气流变化,可它极易被环境噪声污染,而且很难定位"是哪一颗螺丝松了"。单看触觉,信号最直接、最贴近物理接触,但触觉传感器覆盖面积小、标定麻烦、数据量天生就少。
这三者的短板恰好能被彼此补上。视觉提供全局空间定位,告诉你"东西在哪、长什么样";听觉提供内部状态和事件时序,告诉你"什么时候发生了异常";触觉提供接触面的力学真值,告诉你"到底用了多大力、滑没滑"。我在一个模拟的装配检测项目里做过对比,纯视觉方案在反光金属件上的漏检率接近两成,加入听觉的瞬时冲击特征后降到一成出头,再把触觉的接触力曲线接进去,漏检率压到了百分之五以下。这个递进关系很能说明问题:每加一路模态,模型拿到的都是别人看不到的信息。
但要注意,模态不是越多越好。三模态意味着三套采集设备、三套预处理管线、三倍的对齐工作量。如果业务场景里某一路信号本身就不可靠,硬塞进去反而会引入噪声,让模型学到错误的关联。我见过一个团队在强噪声车间里硬上音频分支,结果模型把车间底噪当成了判别特征,换一个车间就彻底失效。所以第一件事不是选模型,而是判断每一路模态在你的场景里是否真的"可观测、可复现、可区分"。
1.2 视觉、听觉、触觉的本质差异与互补逻辑
理解三者的差异,比记住几个融合公式重要得多。视觉是二维网格上的空间信号,采样率通常三十帧每秒,数据冗余度高、语义密度低,一张图里真正有用的信息可能只占几个像素区域。听觉是一维时序波形,采样率动辄十六千赫兹,信息密度极高但冗余也极大,一秒音频里大部分是静默或者稳态噪声。触觉则介于两者之间,它通常是多通道的时序信号,采样率从几十赫兹到上千赫兹不等,通道之间还有明确的空间对应关系。
这三种信号在时间尺度上的差异是融合时最大的障碍。视觉一帧三十毫秒,音频一帧十毫秒,触觉一次采样可能只有一毫秒。如果直接把它们拼在一起,模型会被高频的那一路牵着走,低频的那一路几乎起不到作用。我的处理原则是:先在各自的时间尺度上做局部编码,把每一路压成"语义 token",再在统一的 token 序列上做跨模态注意力。这样每一路的原始采样率被抽象掉了,模型看到的是同等粒度的语义单元。
互补逻辑可以这样理解:视觉负责"在哪、是什么",听觉负责"何时、何种状态",触觉负责"多大力、什么材质、滑没滑"。在机器人抓取场景里,视觉先框出目标物体,触觉在接触瞬间判断是否打滑并调整夹持力,听觉则在整个过程中监听有没有异常碰撞声。三者配合起来才是一个闭环,而不是简单地把特征拼在一起做分类。
1.3 方案选型的几个关键分岔口
真到动手的时候,有几个选择必须提前定下来,不然后面返工很痛苦。
第一个分岔口是融合时机。早期融合就是把原始信号或者浅层特征直接拼接,实现简单,但对齐要求极高,而且不同模态的尺度差异会让模型训练很不稳定。晚期融合是各自训练一个模型,最后在决策层做加权投票或者堆叠,鲁棒性好、容错率高,但丢掉了模态之间的细粒度交互。中期融合是在编码器和决策层之间插入融合模块,用注意力或者门控机制做交互,效果最好但工程复杂度最高。我一般建议先用晚期融合跑通基线,拿到各路模态单独的性能上限,再决定要不要上中期融合。
第二个分岔口是是否用预训练模型。视觉和听觉都有成熟的预训练权重可用,触觉几乎没有。我的做法是视觉、听觉分支加载预训练权重后冻结浅层,只微调深层;触觉分支从头训练,但用一个轻量的对比学习目标先做自监督预训练,把触觉编码器"预热"一下,再接入主模型。这样三路分支的收敛速度能拉到一个量级上,不至于触觉还没学会表征、视觉已经过拟合了。
第三个分岔口是同步方式。硬同步要求所有传感器共用同一个时钟源,硬件成本高但数据质量最好;软同步靠时间戳对齐,成本低但会引入几十毫秒的误差。触觉和视觉的接触事件对时间精度要求很高,我建议至少在触觉和视觉之间做硬同步,音频可以用软同步补齐,因为音频特征的时间容差相对宽松。
2. 三路模态的编码基础与关键细节
2.1 视觉分支:从像素到语义 token
视觉分支的活儿相对成熟,但也不是随便套个骨干网络就完事。输入分辨率要跟你的任务粒度匹配:如果是判断整体姿态,二百二十四见方足够;如果要看清细小的缺陷或者抓取点,至少得三百八十四甚至五百一十二。我一般用十六像素的 patch 切分,二百二十四的图会得到一百九十六个 token,加上位置编码后送入 Transformer 编码器。
视觉分支最容易出问题的地方在数据增强与模态对齐的冲突。随机裁剪、翻转这些增强对单模态分类很有用,但在多模态场景下可能破坏空间对应关系。比如触觉阵列贴在夹爪内侧,它对应的是图像的某个固定区域,你把图像随机翻转了,触觉和视觉的空间关系就乱了。我的处理是把几何增强限制在"不影响跨模态对应"的范围内,颜色抖动、亮度扰动可以放开,裁剪和翻转要么关掉,要么在触觉侧做同步变换。
另一个细节是时序视觉的处理。如果输入是视频而不是单帧,不能简单地把每帧单独编码再平均,那样会丢掉运动信息。我通常用两种方式:一是对连续帧做时间维度的卷积或者注意力,二是直接提取光流或者帧差作为额外的运动通道。在抓取任务里,帧差通道对"物体是否开始滑动"的判断非常有效,比纯 RGB 输入的反应快好几帧。
2.2 听觉分支:波形、频谱与自监督表征
听觉分支的核心问题是怎么把一维波形变成有语义的表示。最直接的做法是短时傅里叶变换转梅尔频谱,采样率十六千赫兹,窗长二十五毫秒,帧移十毫秒,取一百二十八维梅尔滤波器组,得到的就是一张"时频图",可以复用视觉的二维卷积或者 Transformer 结构。这条路成熟稳定,我大多数项目都这么干。
但梅尔频谱有个明显缺陷:它丢掉了相位信息,而相位对某些任务很关键,比如判断撞击的方向、区分不同的摩擦类型。如果任务对瞬态事件敏感,我建议再加一路原始波形的编码分支,用一维卷积堆叠,感受野覆盖几十毫秒,专门捕捉冲击和瞬变。两路特征拼接后再做融合,效果比单用频谱好不少。
听觉分支还有一个坑是环境噪声的鲁棒性。训练集里的底噪和部署现场的底噪往往不一致,模型很容易把底噪当成捷径特征。我的做法是在训练时做频谱增强:随机叠加不同信噪比的背景噪声、随机做频率掩蔽和时间掩蔽,迫使模型关注那些在噪声下依然稳定的谐波结构。另外,音频分支的预训练权重尽量选在多样化声学场景下训练的版本,泛化性会明显好于在单一数据集上训练的权重。
采样率的选择也要注意。十六千赫兹足够覆盖大部分机械声和语音,但如果你要检测的是高频摩擦或者细微裂纹扩展,可能需要四十八千赫兹。采样率翻三倍,数据量和计算量也跟着涨,得权衡清楚。
2.3 触觉分支:最容易被低估的一路
触觉是整个三模态里最麻烦、也最有价值的一路。先说传感器类型,常见的有压阻式、电容式、压电式和基于视觉的光学式。压阻式成本低、阵列容易做密,但存在迟滞和漂移;电容式灵敏度高,但对电磁干扰敏感;压电式响应快,适合测动态力,但测不了静态力;光学式能同时拿到法向力和切向力的分布,信息最丰富,但体积大、帧率受限。
我在模拟项目里用得最多的是压阻阵列加一路单点力传感器。阵列是十六乘十六,采样率一百赫兹,单点力传感器采样率一千赫兹。两者的时间尺度差十倍,不能直接拼。我的处理是把高频那一路做滑动窗口统计,每十毫秒算一次均值、方差、峰值,压到和阵列同样的时间粒度,再一起送入编码器。
触觉编码器的结构跟视觉、听觉都不一样。阵列信号本质上是"小尺寸图像序列",可以用二维卷积逐帧提特征,再用一维卷积或者时序注意力建模演化。单点力信号是一维时序,用一维卷积加门控循环单元就够。两路特征在通道维拼接后,过一个投影层映射到和视觉、听觉相同的维度,通常是七百六十八或者一千零二十四,这样后续才能做跨模态注意力。
触觉分支最大的难点是标定和漂移。压阻传感器的输出会随温度、湿度、使用时长缓慢变化,今天标定好的零点,下周可能就偏了。我的经验是每次采集会话开始前做一次空载标定,记录基线,采集过程中每隔一段时间插入一次已知载荷的校准动作。数据处理时先减去基线,再做归一化,能消掉大部分漂移。如果条件允许,尽量用差分信号而不是绝对信号,漂移的影响会小很多。
2.4 时间对齐与采样率统一的工程做法
三路信号的时间对齐是整个管线里最容易出错、也最难排查的环节。视觉三十帧每秒,音频十六千赫兹,触觉一百到一千赫兹,三者要落到同一个时间轴上。我的做法是选一个"锚定时间轴",通常选触觉的采样率或者一个折中的五十赫兹,然后把其他两路重采样到这个轴上。
具体操作:视觉帧保留最近邻,不做插值,因为图像插值会引入伪影;音频按锚定时间点取前后各二十五毫秒的窗做频谱,窗与窗之间可以重叠;触觉如果是高频信号,就取对应时间窗内的均值和峰值作为该时刻的表示。锚定轴的频率不能太低,否则触觉的瞬态特征会被抹平;也不能太高,否则视觉会大量重复帧。五十赫兹是个比较稳妥的起点,一秒切成五十个时间步,每个时间步上三路各有一个 token。
对齐精度要靠时间戳来保证。每个传感器采集时都要打上单调递增的时间戳,不能依赖各自设备的本地时钟。我在一个项目里遇到过视觉和触觉相差八十毫秒的情况,查了半天才发现两边的采集程序启动时间不同,各自从零开始计时。后来统一用一个外部触发信号做起点,问题才解决。这类问题在数据上看不出来,只有模型怎么训都学不好跨模态关系时才会暴露,所以前期一定要做对齐验证:录一段有明确同步事件的数据,比如一次敲击同时出现在三路信号里,然后检查峰值位置是否重合。
提示:对齐验证不要只看平均值,要逐个样本看峰值偏移的分布。偏移稳定说明是固定延迟,可以在预处理里补偿;偏移忽大忽小说明是时钟抖动,得从硬件层面解决。
3. 融合策略的取舍与实现细节
3.1 三种融合范式的机理对比
早期融合的实现最简单,把三路特征在通道维拼起来直接送分类头。它的优点是模型能学到最细粒度的跨模态交互,缺点是要求三路特征在空间和时间上严格对应,而且一旦某一路缺失,整个输入就废了。我在数据质量很高、三路都稳定的场景下会用这种方式,但作为基线对比,不作为最终方案。
晚期融合是各自独立出预测,最后加权。权重可以是固定的,也可以用一个小的门控网络根据输入动态生成。它的鲁棒性最好,某一路传感器坏了,把对应权重调零就行,系统还能降级运行。缺点是模态之间的交互只发生在决策层,细粒度信息被丢掉了。我一般用它做兜底方案,尤其是在工业现场这种传感器可能随时出问题的环境里。
中期融合是主流做法,在编码器和分类头之间插入融合模块。最常见的是跨模态注意力:把三路 token 拼成一个序列,加模态类型嵌入和位置嵌入,然后用标准的 Transformer 编码器做全局注意力。这样每个 token 都能看到其他模态的 token,交互是细粒度且可学习的。代价是序列长度变成三倍,计算量按平方增长,得控制 token 数量。
3.2 跨模态注意力与对比对齐的组合拳
单纯用注意力有个问题:模型可能学到"伪相关"。比如训练集里所有抓取失败样本的触觉信号都偏弱,模型就把"触觉弱"当成失败的原因,实际上可能是那一批数据采集时传感器没贴紧。这种捷径学习在多模态里特别常见,因为模态多、自由度大,模型总能找到一条偷懒的路。
我的应对是加一个辅助的对比对齐损失。思路是:同一个时间步上的三路 token 应该在被投影后的空间里彼此靠近,不同时间步或者不同样本的 token 应该彼此远离。用 InfoNCE 类的损失,温度系数取零点零七,正样本对就是同一时刻的视觉-触觉、视觉-听觉、听觉-触觉,负样本从同一个 batch 里随机采。这个辅助损失不参与最终推理,只在训练时起作用,但它能显著提升跨模态表征的一致性。
损失权重要调。任务损失是主损失,对比损失作为正则项,权重从零点一开始试,太大反而会压制任务学习。我在模拟项目里最终定在零点三,配合五千步的 warmup,训练曲线比较稳。
# 融合模块核心结构示意(伪代码,框架无关) class TriModalFusion(nn.Module): def __init__(self, dim=768, depth=6, heads=12): super().__init__() self.modality_embed = nn.Embedding(3, dim) # 0视觉 1听觉 2触觉 self.blocks = nn.ModuleList([ TransformerBlock(dim, heads) for _ in range(depth) ]) self.norm = nn.LayerNorm(dim) def forward(self, vis_tokens, aud_tokens, tac_tokens): # 各路 token 已投影到统一维度 dim tokens = torch.cat([vis_tokens, aud_tokens, tac_tokens], dim=1) m_ids = torch.cat([ torch.zeros(vis_tokens.size(1), dtype=torch.long), torch.ones(aud_tokens.size(1), dtype=torch.long), torch.full((tac_tokens.size(1),), 2, dtype=torch.long), ]).to(tokens.device) tokens = tokens + self.modality_embed(m_ids).unsqueeze(0) for blk in self.blocks: tokens = blk(tokens) return self.norm(tokens)3.3 模态缺失与不对齐情况下的鲁棒设计
真实部署里,模态缺失是常态而不是例外。摄像头被挡住、麦克风坏了、触觉传感器没贴上,这些情况都得让系统能降级运行。训练时就要模拟这种缺失:以一定概率随机丢弃某一路模态的 token,用一个可学习的"缺失嵌入"替代。丢弃概率不要设太高,每路百分之十五到二十比较合适,太高会让模型学不到完整的跨模态关系。
不对齐的情况也要考虑。音频和视觉之间可能有几十毫秒的延迟,触觉和视觉之间可能有几毫秒的偏差。训练时对每一路 token 做小范围的时间抖动,比如正负两个时间步的随机平移,让模型对这种偏差不敏感。这个技巧看起来不起眼,但在实际部署里能救回不少性能。
注意:模态 dropout 和随机平移只在训练阶段开启,验证和推理阶段必须关闭,否则评估结果会不稳定,不同次跑出来的数字对不上。
4. 三模态原型的完整实操记录
4.1 数据采集与传感器布置
我拿一个模拟的抓取任务做演示。硬件构成:一个固定视角的工业相机,三十帧每秒;一个麦克风,十六千赫兹采样;一个十六乘十六的压阻阵列贴在夹爪内侧,一百赫兹采样;一个单点力传感器装在指尖,一千赫兹采样。所有设备共用一个外部触发源,保证时间戳同源。
采集流程是:物体放在台面上,夹爪从上方接近,接触、闭合、抬起、移动、放下,每个动作持续三到五秒。每个物体重复三十次,换不同姿态和光照,总共采集两千条左右的序列。每条序列保存成三个文件加一个时间戳文件,时间戳用统一的单调时钟。
传感器布置有两个细节值得说。相机要稍微俯视,保证夹爪和物体都在视野内,同时避免直射光在金属件上形成强反光;麦克风要远离夹爪电机,否则电机噪声会淹没接触声,我把它放在台面侧方三十厘米处,指向接触区域。触觉阵列贴之前要压实,边缘用胶带固定,否则接触时阵列会轻微位移,导致通道对应关系漂移。
4.2 数据预处理与同步落地
预处理分四步走。第一步是清洗,剔除明显异常的序列:触觉基线跳变超过阈值、音频出现削波、视频帧数不足的,全部丢掉。第二步是时间对齐,以五十赫兹为锚定轴,把三路信号重采样到统一时间步。第三步是归一化,视觉用 ImageNet 统计量,音频频谱做逐样本的均值方差归一化,触觉先减基线再做 min-max 归一化到负一到一。第四步是滑窗切分,两秒一个窗,步长一秒,得到带标签的训练样本。
触觉的基线处理要单独说。我用的做法是每条序列开头留出半秒空载,算这段的均值和标准差作为基线,整条序列减去基线再除以标准差。这样能消掉大部分温漂和装配差异。单点力传感器的信号做同步处理后,每二十毫秒取一次均值、最大值和标准差,三个统计量拼成一个三维向量,和阵列特征一起送编码器。
音频的频谱参数:窗长二十五毫秒,帧移十毫秒,FFT 点数五百一十二,梅尔滤波器一百二十八个,频率范围五十到八千赫兹。算完之后得到一张一百二十八乘以时间步的时频图,把它当成单通道图像处理,用二维卷积提特征。
视觉这边我做了个取舍:不用原始高分辨率图像,统一缩放到二百二十四见方,patch 十六像素,得到一百九十六个 token。为了控制总序列长度,视觉 token 做了空间上的二乘二池化,压到四十九个,音频 token 压到二十五个,触觉 token 二十五个,总共九十九个 token,融合层完全吃得下。
4.3 模型骨架与训练配置
骨架是三个独立编码器加一个共享的融合 Transformer。视觉用预训练的 ViT 小模型,听觉用预训练的音频 Transformer 的浅层,触觉是自己搭的四层一维卷积加两层 Transformer。三路输出都投影到七百六十八维。
训练配置:优化器 AdamW,学习率视觉听觉分支用一e-5,触觉分支用一e-4,融合层用五e-5,分层设置是因为触觉分支从头训练需要更大的步长。权重衰减零点零五,batch size 六十四,warmup 两千步,总训练轮数五十,早停耐心十轮。损失是交叉熵加零点三倍对比损失。
显存占用方面,九十九个 token、七百六十八维、六层融合,单卡二十四吉显存跑 batch 六十四刚好,再大就得开梯度累积。训练一轮大概四分钟,完整跑下来三个多小时,这个成本对原型验证来说可以接受。
训练过程有个明显现象:前五轮视觉分支的损失下降最快,触觉分支几乎不动;到第十轮左右触觉开始跟上;二十轮之后三路损失曲线趋于平行。如果在第十五轮触觉还没动静,基本可以断定是学习率太小或者触觉数据预处理出了问题,得停下来查。
4.4 评估指标与消融设计
评估不能只看总体准确率,要分模态组合看。我设计了五组评估:三模态全开、去掉触觉、去掉听觉、只留视觉、随机丢弃一路模拟传感器故障。每组都看准确率、F1 和混淆矩阵。
结果上看,三模态全开的准确率比纯视觉高十二个点左右,比视觉加听觉高五个点左右,触觉的增益在"是否打滑"这个二分类子任务上尤其明显,提升了将近二十个点。去掉触觉后模型对反光金属件的误判明显增多,说明触觉确实补上了视觉的短板。
消融还要看融合方式。我对比了晚期融合和中期融合,中期融合整体高三个点,但训练时间是晚期的两倍多。如果算力紧张、对精度要求没那么极致,晚期融合完全够用。
5. 踩坑实录与排查速查
5.1 触觉信号漂移与标定失效
最常见的坑是触觉漂移。表现是模型在训练集上表现很好,换一天采集的数据就崩。排查思路:先把同一批物体在不同日期采集的数据拿出来,看触觉信号的基线分布,如果均值偏移超过百分之十,基本就是漂移。
解决办法有三层。第一层是硬件层,采集前预热传感器十分钟,让温度稳定;第二层是数据层,每条序列做基线扣除和标准化;第三层是模型层,在训练时加入随机基线偏移的增强,让模型对这种漂移不敏感。三层做完,跨天性能下降能从二十个点压到五个点以内。
5.2 模态竞争与梯度失衡
第二个坑是某一路模态"压死"其他路。表现是训练损失正常下降,但拆开看某一路的梯度接近零,模型基本没在用它。原因通常是这一路的特征尺度太大或者学习率太高,把融合层的注意力全吸走了。
排查方法是统计各路 token 在融合层里获得的注意力权重。如果某一路长期占八成以上,就是失衡了。处理手段:给各路分支做梯度裁剪,阈值设一;调整分层学习率,让强势那一路学慢一点;在融合层加模态 dropout,强迫模型学会在没有强势模态时也能工作。
5.3 常见问题速查表
| 现象 | 可能原因 | 排查动作 | 处理办法 |
|---|---|---|---|
| 三模态不如单模态 | 对齐错误或某路噪声过大 | 检查同步事件峰值偏移 | 修正时间戳,剔除低质量模态 |
| 训练损失震荡 | 学习率过大或 batch 太小 | 打印每步损失 | 降学习率,开梯度累积 |
| 验证集性能骤降 | 触觉漂移或底噪不一致 | 对比训练与验证的基线分布 | 加基线校正与噪声增强 |
| 某一路注意力占比过高 | 特征尺度失衡 | 统计注意力权重 | 分层学习率加模态 dropout |
| 推理延迟超标 | 序列过长或融合层过深 | 逐层测耗时 | 池化 token,减融合层数 |
| 换场景后全面失效 | 学到了场景相关的捷径特征 | 做跨场景消融 | 加强数据增强,引入对比对齐 |
提示:排查多模态问题时,永远先怀疑数据和同步,再怀疑模型。我经手的问题里,七成以上出在对齐和标定上,模型结构本身出问题的比例反而很低。
6. 应用场景与落地边界
6.1 机器人操作中的视触听协同
机器人抓取是三模态最自然的落点。视觉负责目标检测和抓取点预测,触觉负责接触力控制和滑移检测,听觉负责异常碰撞和物体破碎的预警。三者协同的价值在于闭环:视觉给出初始策略,触觉在执行中实时修正,听觉在事后提供故障信号。我在模拟项目里做过一个简单验证,加入触觉反馈后,易碎物体的抓取成功率从七成提升到九成以上,加入听觉后,碰撞导致的意外损坏又降了一半。
落地的难点在实时性。触觉控制回路要求几十毫秒内出结果,而融合 Transformer 的推理延迟通常在十几到几十毫秒,得做模型蒸馏或者剪枝才能塞进控制回路。我的做法是把融合模型拆成快慢两路:快路只用触觉和轻量视觉特征,跑在控制器上;慢路用完整三模态,跑在上位机,负责策略更新。
6.2 工业质检中的多源信号融合
产线上的设备状态监测是另一个典型场景。视觉看外观缺陷,听觉听内部异响,触觉测振动和接触力。三路信号从不同角度反映同一台设备的健康状态,融合之后对早期故障的敏感度明显提升。
这个场景的特点是数据不平衡,正常样本远多于异常样本。训练时要用加权采样或者焦点损失,评估时看召回率而不是准确率。另外产线环境噪声大,音频分支要做专门的降噪预处理,或者干脆只用高频段特征,避开人声和低频机械噪声。
6.3 可穿戴设备与人机交互
可穿戴场景里,视觉往往缺席,主要是听觉加触觉,或者加一路惯性信号。这时候融合策略要简化,用晚期融合或者轻量级中期融合就够了,功耗是硬约束。触觉在可穿戴里更多是"输出"而不是"输入",比如用振动反馈传递信息,这时候模型的任务变成了"什么时候、以什么模式给反馈",跟前面的感知融合是反过来的。
6.4 落地边界与成本权衡
说点实在的。三模态不是万能药,它的成本摆在那里:三套传感器、三套采集管线、三倍的数据标注、更长的训练时间、更高的推理开销。如果单模态或者双模态已经能满足业务指标,没必要硬上三模态。
判断标准可以简化成三条:第一,单模态的失败模式是否能被另一路模态直接观测到;第二,多出来的这一路数据是否能在合理成本内稳定采集;第三,业务对精度提升的收益是否覆盖了增加的成本。三条都满足才值得动手,缺一条就先做双模态验证。
还有一个常被忽略的点是维护成本。三模态系统的传感器越多,故障点越多,标定周期越短。产线环境里,触觉阵列可能每周都要重新标定,这个人力成本得提前算进去。我见过团队把模型做得很好,最后卡在维护上,系统跑了三个月就没人愿意校准了。
注意:做方案汇报时,把维护成本和标定周期写进去。很多项目不是败在算法上,是败在没人持续维护数据质量上。
我个人在实际操作中的体会是,三模态学习真正难的不是模型结构,而是让三路数据在时间、尺度、质量上都对得上。模型可以换、超参可以调,但数据管线一旦有系统性问题,再好的模型也救不回来。所以每次开新项目,我会先花一周时间专门做数据对齐和标定验证,把同步事件、基线漂移、采样率一致性这些东西全部测一遍,确认没问题再动模型。这一周看起来是浪费,实际上省下了后面无数次的返工和玄学调参。另外一个小技巧:把每一路模态单独训一个基线模型,记住它的性能上限,融合之后如果某一路的贡献明显低于预期,回头查数据比查模型快得多。