1. 什么是 Modality-Pre-Fusion?
在 sVLM,也就是小型视觉语言模型中,modality-pre-fusion / 模态预融合可以理解为:
在视觉信息进入小型 LLM 主干之前,先把图像特征、文本提示、检测/OCR/结构信息等进行一次轻量级跨模态融合,使小模型接收到的是“已经压缩、对齐、任务相关”的多模态 token,而不是原始、冗长、未筛选的视觉 token。
它和普通 LLaVA 式结构的区别在于:
普通结构多是Vision Encoder → Projector → LLM;
而模态预融合会在Projector 之前或 Projector 内部增加一层“图文交互 / 语义筛选 / token 压缩”。
典型位置如下:
普通 sVLM: Image → Vision Encoder → Projector → Small LLM → Answer Modality-Pre-Fusion sVLM: Image → Vision Encoder │ Text Prompt → Text Embed / Query │ ▼ Pre-Fusion Module 图文对齐 / token筛选 / ROI聚合 / 语义压缩 │ ▼ Projector / Adapter │ ▼ Small LLM → AnswerLLaVA 这类模型主要通过 projection layer 把视觉特征映射到语言模型 embedding 空间,并采用特征对齐和视觉指令微调两阶段训练;MobileVLM 则面向移动端,使用视觉编码器、轻量 projector 和小型 LLM 组成端侧 VLM;TinyLLaVA 也强调 vision encoder、connector 和 small-scale LLM 的模块化组合。([GitHub][1])
2. 在 sVLM 中为什么需要预融合?
sVLM 的核心问题是:
模型小 → 推理能力弱 显存小 → 不能保留太多视觉 token 上下文短 → 图像 token 会挤占文本上下文 projector 弱 → 图像与语言空间对齐不足 边缘端算力有限 → 不能堆很深的 cross-attention所以,模态预融合的目标不是“让模型更复杂”,而是:
在进入小型 LLM 前,提前完成视觉 token 的筛选、压缩、语义对齐和任务相关增强,降低小 LLM 的理解负担。
这和 BLIP-2 的思路有相似性:BLIP-2 用轻量 Q-Former 在冻结视觉编码器和冻结 LLM 之间桥接模态差距,并把视觉信息压缩成对语言模型更有用的表示。([arXiv][2])
3. sVLM 中的具体应用方式
3.1 Prompt-aware Visual Token Selection
这是最常见、最适合 sVLM 的预融合方式。
传统方式:
图像 → ViT patch tokens → 全部送入 LLM预融合方式:
图像 patch tokens + 文本 prompt │ ▼ 根据问题筛选相关视觉 token │ ▼ 只送入和问题相关的视觉区域例如:
Prompt: “第二层左侧有几瓶可乐?”模型不需要关注整张图,而应该优先关注:
第二层 左侧区域 瓶装商品 可乐包装 数量特征结构示意:
V = VisionEncoder(image) # N 个视觉 token Q = TextEncoder(prompt) # 文本 query A = softmax(Q @ V.T) # prompt 对视觉 token 的注意力 V_select = topk(A, V) # 选出最相关 token V_fused = Fuse(V_select, Q) # 图文预融合优势:
- 减少视觉 token 数量;
- 提升问题相关性;
- 降低小 LLM 的上下文压力;
- 对视觉问答、商品识别、OCR 问答、区域计数非常有用。
3.2 Q-Former / Query-Based Pre-Fusion
这是 BLIP-2 风格的做法。
核心思想:
固定数量的 learnable query │ ▼ 从图像特征中抽取最有用的信息 │ ▼ 输出少量 multimodal query tokens │ ▼ 送入 LLM结构:
Image → Frozen Vision Encoder → Visual Tokens │ Learnable Queries ────────────────┘ │ ▼ Q-Former / Cross-Attention │ ▼ K 个融合视觉 token │ ▼ Small LLMBLIP-2 的 Q-Former 被设计成视觉编码器和 LLM 之间的信息瓶颈,用于抽取对语言生成最有用的视觉表示。([Proceedings of Machine Learning Research][3])
对 sVLM 来说,这种方法非常有价值,因为它可以把几百到上千个 patch token 压缩成几十个 query token。
适合:
- 小模型 VQA;
- 图像描述;
- 图像分类解释;
- OCR 场景理解;
- 工业质检;
- 商品柜/货架图像理解。
3.3 ROI-Aware Pre-Fusion
对于你的自动售货柜 / SKU / YOLO / SAM / OCR 场景,最实用的是ROI-aware pre-fusion。
流程:
Image │ ├── YOLO / SAM → bbox / mask / shelf ROI ├── OCR → text region ├── M2结构对齐 → shelf_id / layer_id / perspective │ ▼ ROI Feature Pooling │ ▼ ROI token + class prompt + OCR token + position token │ ▼ Pre-Fusion Module │ ▼ sVLM例如每个商品区域可以构造成:
{"roi_id":17,"bbox":[x1,y1,x2,y2],"shelf_id":2,"position":"left","det_class":"bottle","ocr_text":"Coca Cola","visual_embedding":"...","prompt":"判断该区域商品是否为可乐"}然后送入预融合模块:
ROI视觉特征 + OCR文字 + 位置编码 + 类别prompt │ ▼ fused ROI token │ ▼ Small LLM这比整图直接问 sVLM 更稳定,因为它把低层视觉任务交给 YOLO / SAM / OCR,把 sVLM 主要用于语义确认和异常判断。
3.4 Spatial-Structure Pre-Fusion
在货架、柜体、机器人场景中,空间结构很重要。
例如:
第几层 左中右位置 上下遮挡 商品排列关系 同类商品连续区域 柜体透视变形可以把 M2 几何结构结果编码成 spatial tokens:
shelf_token_1 shelf_token_2 left_region_token right_region_token mask_region_token bbox_position_token然后与视觉 token 预融合:
Visual ROI Token + Spatial Token + Text Prompt │ ▼ Structure-aware Fusion │ ▼ Small LLM对自动售货柜场景,这类预融合非常重要,因为问题往往不是“图里有什么”,而是:
第二层左侧缺了什么? 某一排是否少放? 该 SKU 是否摆错位置? 目标商品是否被遮挡? 是否需要补货?3.5 OCR-Enhanced Pre-Fusion
sVLM 小模型通常 OCR 能力弱。可以在预融合阶段加入 OCR token:
Image → OCR Engine → text boxes + recognized text Image → Vision Encoder → visual tokens Prompt → text query │ ▼ OCR-aware Pre-Fusion │ ▼ Small LLM示例:
ROI视觉特征: 红色瓶装饮料 OCR文本: Coca Cola / 可口可乐 Prompt: 判断该商品SKU预融合后,小模型不需要完全依赖视觉图案,可以结合 OCR 结果判断 SKU。
适合:
- 商品包装识别;
- 票据理解;
- 屏幕 HUD OCR;
- 工业铭牌;
- 药盒/食品标签识别。
3.6 Multi-Scale Pre-Fusion
sVLM 很容易漏掉小目标,所以可以做多尺度预融合:
Global Image Token Local ROI Token Crop Token OCR Token Mask Token Position Token融合方式:
global_token + roi_tokens + crop_tokens + prompt_token │ ▼ Multi-scale Fusion Adapter │ ▼ Small LLM这样可以兼顾:
整图上下文 局部细节 目标位置 文字信息 mask形状对 SKU、货架、自动售货柜、机器人操作场景都很实用。
4. 典型实现结构
4.1 最轻量实现:Concat + MLP
visual_token + text_token + position_token │ ▼ MLP │ ▼ fused multimodal token伪代码:
v=vision_encoder(image)# [B, Nv, Dv]t=text_encoder(prompt)# [B, Nt, Dt]p=position_encoder(bbox)# [B, Nr, Dp]v_proj=visual_proj(v)t_proj=text_proj(t)p_proj=pos_proj(p)fused=torch.cat([v_proj,t_proj,p_proj],dim=1)fused=fusion_mlp(fused)out=small_llm(inputs_embeds=fused)优点:
- 简单;
- 速度快;
- 适合端侧;
- 容易导出 ONNX / TensorRT / MNN。
缺点:
- 跨模态交互能力弱;
- 对复杂空间关系不够强。
4.2 Cross-Attention Pre-Fusion
Text Query attends to Visual Tokens公式:
Q = Wq * text_prompt K = Wk * visual_tokens V = Wv * visual_tokens F = Attention(Q, K, V)伪代码:
classPreFusionAdapter(nn.Module):def__init__(self,dim,num_heads):super().__init__()self.cross_attn=nn.MultiheadAttention(embed_dim=dim,num_heads=num_heads,batch_first=True)self.norm=nn.LayerNorm(dim)self.mlp=nn.Sequential(nn.Linear(dim,dim*4),nn.GELU(),nn.Linear(dim*4,dim))defforward(self,text_tokens,visual_tokens):fused,attn=self.cross_attn(query=text_tokens,key=visual_tokens,value=visual_tokens)fused=self.norm(text_tokens+fused)fused=self.norm(fused+self.mlp(fused))returnfused,attn优点:
- prompt-aware;
- 适合 VQA;
- 能根据问题动态选择视觉区域;
- 比全量 early fusion 更省 token。
缺点:
- 比 MLP 慢;
- 多层 cross-attention 会增加部署成本。
4.3 Learnable Query Pre-Fusion
类似 Q-Former / Perceiver Resampler:
classQueryPreFusion(nn.Module):def__init__(self,num_queries,dim,num_heads):super().__init__()self.queries=nn.Parameter(torch.randn(1,num_queries,dim))self.cross_attn=nn.MultiheadAttention(dim,num_heads,batch_first=True)self.norm=nn.LayerNorm(dim)defforward(self,visual_tokens,batch_size):q=self.queries.expand(batch_size,-1,-1)fused,attn=self.cross_attn(q,visual_tokens,visual_tokens)fused=self.norm(q+fused)returnfused优点:
- 把大量视觉 token 压缩成固定数量 token;
- 对小 LLM 友好;
- 适合端侧;
- 可控制上下文长度。
Flamingo 使用 Perceiver Resampler 把可变尺寸视觉特征变成较少的视觉 token,并通过 gated cross-attention 把视觉信息注入语言模型。([arXiv][4])
5. 与其他融合方式的主要区别
5.1 Pre-Fusion vs Early Fusion
| 对比项 | Modality-Pre-Fusion | Early Fusion |
|---|---|---|
| 融合位置 | 进入 LLM 前的 adapter / projector 阶段 | 模型最早层直接混合图文 token |
| 计算量 | 较低,可控 | 通常较高 |
| 适合 sVLM | 很适合 | 要谨慎,token 多时成本高 |
| 优势 | 压缩、筛选、对齐后再送入小 LLM | 图文交互充分 |
| 缺点 | 表达能力取决于 adapter | 小模型容易算不动 |
MoMa 这类 early-fusion 模型会在预训练中处理任意顺序的图文混合 token,并使用 modality-aware MoE 区分不同模态 token;这类方法交互充分,但通常比 sVLM 常用的轻量 adapter 方案更重。([arXiv][5])
5.2 Pre-Fusion vs Projector-Only
| 对比项 | Projector-Only | Modality-Pre-Fusion |
|---|---|---|
| 典型结构 | Vision Encoder → Linear/MLP → LLM | Vision/Text/ROI/OCR → Fusion Adapter → LLM |
| 是否感知问题 | 通常不感知 | 可以 prompt-aware |
| 是否压缩视觉 token | 有时压缩,有时不压缩 | 通常会压缩 |
| 是否融合 OCR/ROI/结构 | 一般不融合 | 很适合融合 |
| 对小模型友好度 | 中等 | 更高 |
| 适合场景 | 通用图像问答 | 工业、端侧、结构化视觉任务 |
LLaVA 经典结构主要是把 CLIP 视觉特征通过投影层映射到语言模型 embedding 空间;这很简单有效,但对小模型来说,projector-only 往往不足以处理复杂 ROI、OCR、空间结构和 prompt-aware token 选择。([GitHub][1])
5.3 Pre-Fusion vs Cross-Attention Inside LLM
| 对比项 | Pre-Fusion | LLM 内部 Cross-Attention |
|---|---|---|
| 融合位置 | LLM 前 | LLM 多层内部 |
| 计算成本 | 较低 | 较高 |
| 改 LLM 结构 | 通常不需要 | 通常需要 |
| 端侧部署 | 更容易 | 更复杂 |
| 表达能力 | 中等 | 更强 |
| 适合 | sVLM / edge VLM | 大模型 / few-shot VLM |
Flamingo 是典型的“在语言模型内部通过 gated cross-attention 注入视觉信息”的路线,能力强,但工程复杂度和推理成本通常高于轻量预融合。([OpenReview][6])
5.4 Pre-Fusion vs Late Fusion / Post-Fusion
| 对比项 | Pre-Fusion | Late/Post-Fusion |
|---|---|---|
| 融合时机 | LLM 推理前 | 各模型输出后 |
| 是否有 token 级交互 | 有 | 通常没有 |
| 例子 | 图文 token 先融合再回答 | YOLO 输出 + OCR 输出 + LLM 文本总结 |
| 优势 | 语义理解更强 | 工程简单、可解释 |
| 缺点 | 需要训练 adapter | 跨模态推理弱 |
Late fusion 更像:
YOLO检测结果 → 文本化 OCR结果 → 文本化 库存表 → 文本化 LLM → 规则判断Pre-fusion 则是:
视觉ROI token + OCR token + prompt token + 空间token │ ▼ 融合成 multimodal embedding │ ▼ sVLM 推理如果目标只是业务规则判断,late fusion 足够;如果目标是让 sVLM 真正理解图像区域、文字、空间关系,pre-fusion 更强。
8. 核心优势总结
| 优势 | 说明 |
|---|---|
| 降低 token 数量 | 先压缩视觉 token,减少 LLM 上下文压力 |
| 提升视觉 grounding | 小模型更容易知道应该看哪里 |
| 支持 prompt-aware 理解 | 根据问题动态选择视觉区域 |
| 易融合检测/OCR/结构信息 | 特别适合工业视觉和货柜场景 |
| 适合边缘端部署 | 比 LLM 内部多层 cross-attention 更轻 |
| 降低幻觉 | 因为输入给 sVLM 的是经过 ROI/OCR/结构约束的视觉证据 |
| 提升细粒度识别 | 对 SKU、包装、文字、局部区域更有效 |
| 便于蒸馏 | 可以蒸馏 teacher 的 fused token、attention map、ROI 选择结果 |
9. 总结
在 sVLM 中,modality-pre-fusion 的本质不是简单地把图像和文本拼起来,而是:
在小型 LLM 推理前,用轻量模块把视觉、文本、OCR、检测框、mask、空间位置、业务结构信息提前融合成更紧凑、更相关、更容易被小模型理解的 multimodal tokens。
Projector-only 是“把图像翻译成 LLM 能读的 token”;modality-pre-fusion 是“先根据任务把视觉、文本和结构证据融合好,再交给小 LLM 推理”。
参考链接:
[1]: https://github.com/haotian-liu/llava?utm_source=chatgpt.com “haotian-liu/LLaVA: [NeurIPS’23 Oral] Visual Instruction …”
[2]: https://arxiv.org/abs/2301.12597?utm_source=chatgpt.com “BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models”
[3]: https://proceedings.mlr.press/v202/li23q/li23q.pdf?utm_source=chatgpt.com “BLIP-2: Bootstrapping Language-Image Pre-training with …”
[4]: https://arxiv.org/abs/2204.14198?utm_source=chatgpt.com “Flamingo: a Visual Language Model for Few-Shot Learning”
[5]: https://arxiv.org/html/2407.21770v2?utm_source=chatgpt.com “MoMa: Efficient Early-Fusion Pre-training with Mixture …”
[6]: https://openreview.net/forum?id=EbMuimAbPbs&utm_source=chatgpt.com “Flamingo: a Visual Language Model for Few-Shot Learning”