Visual Funnel: Resolving Contextual Blindness in Multimodal Large Language Models¶
会议: CVPR 2026
arXiv: 2512.10362
代码: 无
领域: 多模态VLM
关键词: MLLM细粒度感知, 注意力裁剪, 多尺度上下文, 训练无关推理增强, 上下文盲区
一句话总结¶
针对 MLLM「看得见细节却读不懂上下文」的失败模式(作者命名为 Contextual Blindness),本文提出训练无关的两步法 Visual Funnel——先用定位式 prompt 抽一张更准的注意力图,再据注意力熵自适应地生成「焦点→近邻→全局」三层多尺度裁剪组合,在 4 个细粒度 VQA 上相对单裁剪 baseline 最高提升 +16.4。
研究背景与动机¶
领域现状:MLLM 推理能力很强,但对图中小尺寸细节(细小文字、远处物体属性、细微状态差异)感知很弱,这是它在高精度任务上落地的主要瓶颈。主流缓解思路是「两步范式」:先 Localization(定位相关细节在哪),再 Integration(怎么把细节喂回模型)。近期工作(V*、ViCrop)在定位上已经做得很好——要么多步迭代搜索,要么直接读模型内部注意力一次前向定位。
现有痛点:定位虽强,但 Integration 步骤普遍很粗糙——典型做法是把一个紧贴目标的高分辨率裁剪块(外加原图)塞回模型。作者发现这种「naive integration」会引入一个关键问题:模型拿到了细节,却丢掉了解释这个细节所需的中间尺度上下文。比如判断「拿风筝的女孩个子矮」需要和画面里另一个女孩对比,紧裁剪把参照物切掉了,模型就没法判断;图表题里把列标题或上下文文字切掉,模型也无法完成跨区域的组合推理。
核心矛盾:作者把它形式化为 Contextual Blindness——即便所有必要像素都在(原图有全局、裁剪有焦点),模型依然答错,根因不是信息缺失,而是焦点细节与全局上下文之间缺少中间尺度做桥梁,二者「结构性断裂、无法连接」。一句话提炼作者的中心论断:约束 MLLM 表现的不是信息的「数量(Quantity)」,而是输入缺乏「结构多样性(Structural Diversity)」。
本文目标:在不训练、单次前向定位的前提下,重新设计 Integration——构造一个能同时保住焦点、近邻、全局三层语境的输入结构。
核心 idea:用「自适应多尺度裁剪组合(portfolio)」代替「单一紧裁剪」,让裁剪尺寸随注意力熵自动伸缩、裁剪中心随层级逐级精修,从而给模型补上被切掉的中间语境。
方法详解¶
整体框架¶
Visual Funnel 是一个挂在现成 MLLM 推理流程外、训练无关的两步增强模块。输入是图像-问题对 \((I,q)\),输出是补齐了多尺度语境后的最终答案。整体只做两件事:Step 1 Contextual Anchoring 用一个「该看哪里」的定位式 prompt 跑一次前向,从模型内部抽出一张更聚焦的空间注意力图;Step 2 Entropy-Scaled Portfolio Generation 拿这张注意力图,一边用注意力熵决定每个裁剪框「该放多大(要多少上下文)」,一边用层级精修决定每个裁剪框「该以哪里为中心」,最终生成「焦点 / 近邻 / 全局」三个裁剪块,连同原图 token 一起拼接喂回 MLLM 生成答案。
%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
A["输入:图像 I + 问题 q"] --> B["Contextual Anchoring<br/>定位式 prompt 单次前向<br/>抽空间注意力图 A_norm"]
B --> C["Entropy-Guided Scaling<br/>由注意力熵 H 定裁剪尺寸<br/>α1∈[1.2,1.8] α2∈[1.6,2.8]"]
B --> D["Hierarchical Center Refinement<br/>逐层重算裁剪中心<br/>修正注意力不对称"]
C --> E["Multi-Scale Portfolio<br/>焦点 + 近邻 + 全局 三裁剪"]
D --> E
E --> F["三裁剪 + 原图 token 拼接<br/>喂回 MLLM 生成答案"]
关键设计¶
1. Contextual Anchoring:用定位式 prompt 抽一张「为答题而看」的注意力图
痛点是直接让模型答题时,若细节看不清,注意力会被「急着给答案」带偏甚至产生幻觉。本文不直接问答案,而是用一个定位导向的 query——「To answer '{question}', where in the image should I look?」——引导模型先指出「该看哪个区域」,从而得到一张更精准的关注图。具体沿用 ViCrop 的抽取方式:在每个 backbone 预设的同一层,单次前向取「第一个回复 token 对所有图像 token」的 softmax cross-attention \(\mathbf{A}(I,q)\in\mathbb{R}^{H\times1\times T}\),对 \(H\) 个注意力头取平均得 \(\hat{\mathbf{A}}(I,q)=\frac{1}{H}\sum_{h=1}^{H}\mathbf{A}^{h}(I,q)\)。对 LLaVA 这类直接投影的模型,图像 token 与空间 patch 一一对应,直接得到空间图;对 InstructBLIP 这类带 Q-Former 连接器的模型,则把「LLM→token 注意力」与「连接器 token→patch 注意力」相乘建立空间对应。最后归一化成概率分布 \(\mathbf{A}_{\text{norm}}[i,j]=\mathbf{A}[i,j]/\sum_{i',j'}\mathbf{A}[i',j']\),表示空间块 \((i,j)\) 含答题相关信息的概率。整个过程只需一次前向、不改架构。
2. Entropy-Guided Scaling:用注意力熵决定每个裁剪「该放多大上下文」
痛点是固定大小的裁剪无法适配不同问题——有的问题答案高度局部(一个小图标),有的问题需要广域关系(多元素比较)。作者观察到注意力熵直接反映一个区域需要多少上下文:低熵(\(H\approx0\))说明注意力高度集中、答案局部,补一点点上下文即可;高熵(\(H\approx\log|\mathbf{A}|\))说明注意力弥散、存在多元素关系或歧义,需要更广上下文来消解不确定性。于是先算归一化香农熵
再把两个裁剪的扩张因子写成熵的线性函数:\(\alpha_1(I,q)=1.2+0.6\,H_{\text{norm}}\in[1.2,1.8]\),\(\alpha_2(I,q)=1.6+1.2\,H_{\text{norm}}\in[1.6,2.8]\)。设计巧在两端都有保障:即使注意力非常自信(熵低),也至少给 1.2×、1.6× 的最小上下文扩张——这正是防 Contextual Blindness 的关键,永远不让焦点彻底孤立;而对高熵不确定情形则放开到 1.8×、2.8× 去抓更大范围的关系。这些系数在 GQA 小验证集上确定后全程固定,消融显示对取值不敏感(见 Table 3/4)。
3. Hierarchical Center Refinement:逐层重算裁剪中心,修正注意力不对称
痛点是标准多尺度裁剪默认「注意力居中」,但真实注意力常偏向一边——文档图里目标单元格可能贴着表格边缘,户外场景里显著物体可能落在角落,居中裁剪会把真正相关的部分切到框外。本文用层级精修解决:从全图注意力质心 \(\boldsymbol{\mu}_0\) 出发,在上一层裁剪框界定的区域 \(\mathcal{R}_\ell\) 内用注意力加权重新算下一层中心
其中 \(\mathbf{c}_{ij}\) 是空间块 \((i,j)\) 的中心坐标。这样若某层裁剪内注意力偏向某条边,\(\boldsymbol{\mu}_\ell\) 会相对 \(\boldsymbol{\mu}_{\ell-1}\) 朝那个方向平移,使下一层尺度恰好覆盖到真正相关的语境,而不是机械地以焦点为中心向外放大。
4. Multi-Scale Portfolio:把三层裁剪 + 原图拼成「结构多样」的输入
前三个设计落地成最终的三个裁剪块(设 \(S\) 为 MLLM 输入分辨率):\(\text{Crop}_{\text{focal}}\) 为以 \(\boldsymbol{\mu}_0\) 为中心的 \(S\times S\) 焦点细节;\(\text{Crop}_{\alpha_1}\) 为以 \(\boldsymbol{\mu}_1\) 为中心、\((\alpha_1 S)\times(\alpha_1 S)\) 的近邻上下文;\(\text{Crop}_{\alpha_2}\) 为以 \(\boldsymbol{\mu}_2\) 为中心、\((\alpha_2 S)\times(\alpha_2 S)\) 的广域上下文。每块都缩放回 \(S\times S\)、经视觉编码器编码,与原图 token 拼接。这样模型同时拿到全局(原图)+ 焦点 + 两层递进语境,获得作者强调的「结构多样性」。和 w/ViCrop(Top-3) 关键区别在于:后者也加三个裁剪但是无结构地取「注意力最高的三个不重叠区域」,token 预算相同却没有层级语境——实验显示这种堆砌不仅无益甚至有害(Redundancy Penalty),证明起作用的是「层级结构」而非「裁剪数量」。
损失函数 / 训练策略¶
无训练。Visual Funnel 是纯推理期、训练无关的方法,不引入任何可学习参数或微调,只需运行 base MLLM 推理的标准基础设施。
实验关键数据¶
主实验¶
在 7 个 VQA benchmark 上评测,分两类:Grounded Visual QA(细粒度、对 Contextual Blindness 敏感:TextVQA / GQA / DocVQA / InfoVQA)和 Recognition Visual QA(POPE / A-OKVQA / VQAv2)。base 模型为 LLaVA-1.5-7B、InstructBLIP-7B、Qwen2.5-VL-3B。括号内为相对「无裁剪 base」的绝对提升。
| 模型 / 方法 | TextVQA | DocVQA | InfoVQA | GQA | POPE | VQAv2 |
|---|---|---|---|---|---|---|
| LLaVA-1.5-7B | 47.9 | 15.9 | 12.0 | 60.1 | 85.6 | 75.4 |
| + ViCrop | 54.1 | 19.4 | 12.6 | 60.4 | 87.4 | 76.1 |
| + ViCrop (Top-3) | 53.5 | 19.2 | 12.9 | 60.5 | 87.5 | 76.6 |
| + Visual Funnel | 59.1 (+11.2) | 22.8 (+7.0) | 15.1 (+3.1) | 61.3 | 88.3 | 76.7 |
| InstructBLIP-7B | 33.4 | 9.2 | 12.8 | 49.4 | 84.7 | 76.3 |
| + ViCrop (Top-3) | 45.8 | 10.1 | 16.0 | 49.8 | 87.0 | 77.1 |
| + Visual Funnel | 49.8 (+16.4) | 18.5 (+9.3) | 25.1 (+12.3) | 50.6 | 87.1 | 77.2 |
| Qwen2.5-VL-3B | 70.1 | 51.5 | 34.2 | 61.2 | 87.1 | 78.9 |
| + ViCrop (Top-3) | 76.7 | 55.3 | 39.9 | 61.4 | 88.5 | 79.4 |
| + Visual Funnel | 79.8 (+9.7) | 61.1 (+9.6) | 49.6 (+15.4) | 62.2 | 88.5 | 79.5 |
关键对比:与「同样三个裁剪但无结构」的 ViCrop(Top-3) 相比,Visual Funnel 在 LLaVA/TextVQA 上 59.1 vs 53.5(+5.6)、InstructBLIP/DocVQA 上 18.5 vs 10.1(+8.4),证明起作用的是层级结构而非裁剪数量。
消融实验¶
Qwen2.5-VL-3B 上拆解两步贡献(DocVQA / InfoVQA 准确率):
| 配置 | DocVQA | InfoVQA | 说明 |
|---|---|---|---|
| ViCrop (baseline) | 54.2 | 39.4 | 单裁剪基线 |
| w/o Step 2(只留定位 prompt) | 55.1 | 40.3 | 更准的注意力图单独几乎无用(+0.9) |
| w/o Step 1(只留 portfolio) | 59.8 | 47.9 | 多尺度结构是主力(+5.6) |
| Visual Funnel (Full) | 61.1 | 49.6 | 两步协同最佳 |
熵敏感度与基础尺度的鲁棒性消融(Qwen2.5-VL-3B / DocVQA):
| 配置 | DocVQA | Δ | 结论 |
|---|---|---|---|
| Static(γ=0 固定尺寸) | 59.5 | -1.6 | 自适应优于固定裁剪 |
| Default(γ1=0.6, γ2=1.2) | 61.1 | – | 默认最佳 |
| Strong(γ1=0.9, γ2=1.8) | 60.8 | -0.3 | γ1∈[0.4,0.8] 范围稳定 |
| Tighter β−0.2 | 60.5 | -0.6 | 基础尺度偏移影响<0.6% |
| Wider β+0.2 | 60.9 | -0.2 | 对超参不敏感 |
关键发现¶
- 结构 >> 数量:Step 2(多尺度 portfolio)是涨点主力(单用 +5.6),Step 1(定位 prompt)单用几乎无效(+0.9),但两步协同最佳——更准的锚点让 portfolio 构建更稳。
- Redundancy Penalty:无结构地多加裁剪(ViCrop Top-3)在 LLaVA 上反而掉点(TextVQA 54.1→53.5,DocVQA 19.4→19.2),说明重复冗余信息会主动干扰推理。
- 靶向性强:在细粒度 Grounded VQA 上平均提升 +7.1~+12.7,而在 Recognition VQA(POPE/AOKVQA/VQAv2)上只 +0.5~+1.0;GQA 提升也仅 +1.0~+1.2,因为其问题多为大尺度自然场景概念,不依赖中间尺度语境——这恰好反向验证了方法是针对 Contextual Blindness 的专用解,而非通用涨点器。
亮点与洞察¶
- 重新定位问题:把 MLLM 细节失败从「信息量不够」重新诊断为「信息结构不够(缺中间尺度)」,并用 ViCrop(Top-3) 这个等 token 预算的对照实验干净地把「数量」和「结构」解耦,论证有力。
- 熵→上下文量的映射很巧:注意力熵天然刻画了「该问题要多少周边语境」,用一个标量自适应控制裁剪伸缩,免去为每个问题手调尺度,且两端都设了下限/上限保护。
- 层级中心精修应对注意力不对称是个容易被忽视、实则常见的工程细节(文档表格目标贴边、户外目标在角落),用注意力质心逐层平移修正,思路可迁移到任何「以注意力为引导的裁剪/ROI」流程。
- 训练无关、单次前向定位、即插即用于不同架构(线性投影 / Q-Former / 动态分辨率),落地成本低。
局限与展望¶
- 依赖初始注意力图质量:Step 2 的好坏建立在 Step 1 能大致定位上;若模型完全定位失败,生成的 portfolio 质量会受损。
- 单一焦点假设:方法面向「围绕单个 ROI」的问题,对需要同时综合多个空间上分离焦点的复杂查询不适用(作者承认)——这也解释了它在某些组合推理上的天花板。
- 推理开销:虽训练无关,但多处理三个裁剪块带来额外推理延迟,在延迟敏感场景可能是顾虑;论文称对细节任务是划算的 trade-off 但未给出绝对延迟数字(正文提及做了 token/latency 对比但表格在此版本未完整呈现,⚠️ 以原文为准)。
- 改进方向:把单焦点扩展为多焦点 portfolio、或让裁剪数量本身也随熵自适应(论文在附录探讨了最优裁剪数 K,但本文固定为 3 块)。
相关工作与启发¶
- vs ViCrop:ViCrop 同样读内部注意力单次前向定位,但 Integration 只给「一个紧裁剪 + 原图」,丢掉中间尺度语境——这正是本文命名并攻击的 Contextual Blindness。Visual Funnel 在相同定位思路上把 Integration 升级为多尺度层级 portfolio,细粒度任务上大幅领先。
- vs ViCrop(Top-3)(本文自造的对照):同样 3 个裁剪、相同 token 预算、同一注意力图,唯一差别是「无结构取 top-3」vs「有层级 focal→近邻→全局」,结果前者甚至掉点,干净地证明结构多样性才是关键。
- vs V:V 靠 YOLO/SAM 等外部工具多步迭代搜索定位,依赖外部模型与多次前向;本文纯内部信号、单次前向、训练无关,开销与依赖更轻。
- vs 高分辨率训练(LLaVA-NeXT/Qwen2-VL/InternVL2):它们靠扩分辨率、改架构、重训练提升细粒度感知,计算成本高且对全图静态均匀处理;本文不训练、按问题动态分配上下文,是正交且更轻量的推理期方案。
评分¶
- 新颖性: ⭐⭐⭐⭐ 「Contextual Blindness」的问题诊断和「结构>数量」的论断有洞察力,方法本身是注意力裁剪框架上的精巧改进而非全新范式。
- 实验充分度: ⭐⭐⭐⭐ 3 个异构 backbone × 7 benchmark,配 ViCrop(Top-3) 等量对照和熵/尺度鲁棒性消融,论证闭环;但缺与外部工具类方法的直接对比、缺绝对延迟数字。
- 写作质量: ⭐⭐⭐⭐ 问题动机讲得清楚、图例直观,假设和适用边界交代诚实。
- 价值: ⭐⭐⭐⭐ 训练无关、即插即用、对细粒度 VQA 提升显著,落地友好;但靶向单焦点细节,通用增益有限。