模态预融合(Modality-Pre-Fusion)在 sVLM 中的具体应用、优势及主要区别

1. 什么是 Modality-Pre-Fusion?

在 sVLM,也就是小型视觉语言模型中,modality-pre-fusion / 模态预融合可以理解为:

在视觉信息进入小型 LLM 主干之前,先把图像特征、文本提示、检测/OCR/结构信息等进行一次轻量级跨模态融合,使小模型接收到的是"已经压缩、对齐、任务相关"的多模态 token,而不是原始、冗长、未筛选的视觉 token。

它和普通 LLaVA 式结构的区别在于:

普通结构多是 Vision Encoder → Projector → LLM

而模态预融合会在 Projector 之前或 Projector 内部 增加一层"图文交互 / 语义筛选 / token 压缩"。

典型位置如下:

text 复制代码
普通 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 → Answer

LLaVA 这类模型主要通过 projection layer 把视觉特征映射到语言模型 embedding 空间,并采用特征对齐和视觉指令微调两阶段训练;MobileVLM 则面向移动端,使用视觉编码器、轻量 projector 和小型 LLM 组成端侧 VLM;TinyLLaVA 也强调 vision encoder、connector 和 small-scale LLM 的模块化组合。([GitHub][1])


2. 在 sVLM 中为什么需要预融合?

sVLM 的核心问题是:

text 复制代码
模型小 → 推理能力弱
显存小 → 不能保留太多视觉 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 的预融合方式。

传统方式:

text 复制代码
图像 → ViT patch tokens → 全部送入 LLM

预融合方式:

text 复制代码
图像 patch tokens + 文本 prompt
        │
        ▼
根据问题筛选相关视觉 token
        │
        ▼
只送入和问题相关的视觉区域

例如:

text 复制代码
Prompt: "第二层左侧有几瓶可乐?"

模型不需要关注整张图,而应该优先关注:

text 复制代码
第二层
左侧区域
瓶装商品
可乐包装
数量特征

结构示意:

text 复制代码
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 风格的做法。

核心思想:

text 复制代码
固定数量的 learnable query
        │
        ▼
从图像特征中抽取最有用的信息
        │
        ▼
输出少量 multimodal query tokens
        │
        ▼
送入 LLM

结构:

text 复制代码
Image → Frozen Vision Encoder → Visual Tokens
                                   │
Learnable Queries ────────────────┘
        │
        ▼
Q-Former / Cross-Attention
        │
        ▼
K 个融合视觉 token
        │
        ▼
Small LLM

BLIP-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

流程:

text 复制代码
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

例如每个商品区域可以构造成:

json 复制代码
{
  "roi_id": 17,
  "bbox": [x1, y1, x2, y2],
  "shelf_id": 2,
  "position": "left",
  "det_class": "bottle",
  "ocr_text": "Coca Cola",
  "visual_embedding": "...",
  "prompt": "判断该区域商品是否为可乐"
}

然后送入预融合模块:

text 复制代码
ROI视觉特征 + OCR文字 + 位置编码 + 类别prompt
                  │
                  ▼
          fused ROI token
                  │
                  ▼
              Small LLM

这比整图直接问 sVLM 更稳定,因为它把低层视觉任务交给 YOLO / SAM / OCR,把 sVLM 主要用于语义确认和异常判断。


3.4 Spatial-Structure Pre-Fusion

在货架、柜体、机器人场景中,空间结构很重要。

例如:

text 复制代码
第几层
左中右位置
上下遮挡
商品排列关系
同类商品连续区域
柜体透视变形

可以把 M2 几何结构结果编码成 spatial tokens:

text 复制代码
shelf_token_1
shelf_token_2
left_region_token
right_region_token
mask_region_token
bbox_position_token

然后与视觉 token 预融合:

text 复制代码
Visual ROI Token + Spatial Token + Text Prompt
        │
        ▼
Structure-aware Fusion
        │
        ▼
Small LLM

对自动售货柜场景,这类预融合非常重要,因为问题往往不是"图里有什么",而是:

text 复制代码
第二层左侧缺了什么?
某一排是否少放?
该 SKU 是否摆错位置?
目标商品是否被遮挡?
是否需要补货?

3.5 OCR-Enhanced Pre-Fusion

sVLM 小模型通常 OCR 能力弱。可以在预融合阶段加入 OCR token:

text 复制代码
Image → OCR Engine → text boxes + recognized text
Image → Vision Encoder → visual tokens
Prompt → text query
        │
        ▼
OCR-aware Pre-Fusion
        │
        ▼
Small LLM

示例:

text 复制代码
ROI视觉特征: 红色瓶装饮料
OCR文本: Coca Cola / 可口可乐
Prompt: 判断该商品SKU

预融合后,小模型不需要完全依赖视觉图案,可以结合 OCR 结果判断 SKU。

适合:

  • 商品包装识别;
  • 票据理解;
  • 屏幕 HUD OCR;
  • 工业铭牌;
  • 药盒/食品标签识别。

3.6 Multi-Scale Pre-Fusion

sVLM 很容易漏掉小目标,所以可以做多尺度预融合:

text 复制代码
Global Image Token
Local ROI Token
Crop Token
OCR Token
Mask Token
Position Token

融合方式:

text 复制代码
global_token + roi_tokens + crop_tokens + prompt_token
                │
                ▼
        Multi-scale Fusion Adapter
                │
                ▼
              Small LLM

这样可以兼顾:

text 复制代码
整图上下文
局部细节
目标位置
文字信息
mask形状

对 SKU、货架、自动售货柜、机器人操作场景都很实用。


4. 典型实现结构

4.1 最轻量实现:Concat + MLP

text 复制代码
visual_token + text_token + position_token
            │
            ▼
          MLP
            │
            ▼
      fused multimodal token

伪代码:

python 复制代码
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 复制代码
Text Query attends to Visual Tokens

公式:

text 复制代码
Q = Wq * text_prompt
K = Wk * visual_tokens
V = Wv * visual_tokens

F = Attention(Q, K, V)

伪代码:

python 复制代码
class PreFusionAdapter(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)
        )

    def forward(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))
        return fused, attn

优点:

  • prompt-aware;
  • 适合 VQA;
  • 能根据问题动态选择视觉区域;
  • 比全量 early fusion 更省 token。

缺点:

  • 比 MLP 慢;
  • 多层 cross-attention 会增加部署成本。

4.3 Learnable Query Pre-Fusion

类似 Q-Former / Perceiver Resampler:

python 复制代码
class QueryPreFusion(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)

    def forward(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)
        return fused

优点:

  • 把大量视觉 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 更像:

text 复制代码
YOLO检测结果 → 文本化
OCR结果 → 文本化
库存表 → 文本化
LLM → 规则判断

Pre-fusion 则是:

text 复制代码
视觉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"

相关推荐
fl1768311 小时前
智慧医疗胆囊病理识异常胆管狭窄检测数据集VOC+YOLO格式1210张3类别
人工智能·yolo·机器学习
道可云1 小时前
道可云人工智能&OPC每日资讯|《江苏省“人工智能+文化旅游”行动方案(2026—2028年)》发布
人工智能·旅游
hf2000121 小时前
Agent 应用范式下,企业数据基础设施正在重写:为什么云器 Lakehouse 会成为 AI 时代的数据底座
人工智能·agent
HIT_Weston1 小时前
81、【Agent】【OpenCode】bash 工具提示词(git 提交规则)
人工智能·agent·opencode
是店小二呀1 小时前
利用JiuwenSwarm创建活动规划团队,一句话落地利用JiuwenSwarm创建活动规划团队,一句话落地活动实战
人工智能·prometheus
Finger#0000FF1 小时前
从零上手VibeCoding(ClaudeCode+DeepSeek V4.Pro)
java·人工智能·ai编程·vibe coding·claudecode
GIOTTO情1 小时前
Infoseek字节探索传播溯源技术,解析危机公关舆情拓扑管控方案
架构
Giorno3721 小时前
用 LLM 做数据提取踩了 6 个坑,我加了 6 层防御——15000 张发票的实战总结
人工智能
沉浸式学习ing1 小时前
播客和视频怎么变成知识库里的笔记?音视频转结构化笔记完整方案
人工智能·笔记·gpt·学习·ai·音视频·notion