多模态融合论文综述
多模态融合是构建通用 AI 系统的核心挑战——如何将视觉、语言、音频等不同模态的信息有效整合,实现超越单一模态的理解和生成能力。
融合策略分类
早期融合(Early Fusion)
在输入层融合不同模态:
- Tokenizer 统一:将不同模态映射到共享 Token 空间
- 特征拼接:在嵌入层直接拼接多模态特征
- 代表模型:Gemini、GPT-4V
中期融合(Mid Fusion)
在中间层进行模态交互:
- 交叉注意力:一个模态的 Token 关注另一模态的 Token
- 模态间适配器:通过适配器层连接不同模态
- 代表模型:LLaVA、BLIP-2
晚期融合(Late Fusion)
在输出层融合各模态的独立处理结果:
- 特征加权:加权组合各模态的输出表示
- 投票集成:各模态独立预测后投票
- 代表模型:早期多模态分类系统
python
class CrossModalAttention(nn.Module):
"""交叉注意力融合"""
def __init__(self, d_model, num_heads):
super().__init__()
self.num_heads = num_heads
self.head_dim = d_model // num_heads
self.q_proj = nn.Linear(d_model, d_model)
self.k_proj = nn.Linear(d_model, d_model)
self.v_proj = nn.Linear(d_model, d_model)
self.out_proj = nn.Linear(d_model, d_model)
def forward(self, query_modality, context_modality):
"""
query_modality: 需要增强的模态(如文本)
context_modality: 提供上下文的模态(如图像)
"""
B, T_q, D = query_modality.shape
_, T_kv, _ = context_modality.shape
q = self.q_proj(query_modality).reshape(B, T_q, self.num_heads, self.head_dim)
k = self.k_proj(context_modality).reshape(B, T_kv, self.num_heads, self.head_dim)
v = self.v_proj(context_modality).reshape(B, T_kv, self.num_heads, self.head_dim)
attn = (q @ k.transpose(-2, -1)) / (self.head_dim ** 0.5)
attn = torch.softmax(attn, dim=-1)
out = (attn @ v).reshape(B, T_q, D)
return self.out_proj(out)关键融合架构
Q-Former(BLIP-2)
Q-Former 使用可学习的 Query Token 从冻结的视觉编码器中提取与语言相关的视觉特征:
- 冻结 ViT,仅训练 Q-Former 和 LLM
- 大幅降低训练成本
- 实现视觉到语言的高效桥接
Perceiver Resampler(Flamingo)
使用固定数量的 Latent Token 压缩可变长度的视觉输入:
- 支持多图像输入
- 将任意分辨率/数量的图像压缩为固定维度
- 在 LLM 层间插入交叉注意力
视觉指令微调(LLaVA)
LLaVA 的简洁融合策略:
- ViT 编码图像为视觉 Token
- 线性投影将视觉 Token 映射到语言空间
- 拼接视觉 Token 和文本 Token
- 送入 LLM 进行自回归生成
融合策略的选择
融合策略的选择取决于任务需求和资源限制:早期融合训练成本最高但效果最好,晚期融合最简单但效果有限,中期融合提供了性能与成本的平衡。
对齐与融合
多模态融合的前提是模态间的对齐:
- 表征对齐:不同模态在共享空间中的对齐(CLIP)
- 语义对齐:视觉区域与文本描述的对应(ALBEF)
- 时间对齐:视频帧与文本/音频的时间对应