多模态大模型如何处理高分辨率和不同宽高比的图像?
简化版
高分辨率处理是在**「看清局部、保住全局、控制 token 数」** 之间取舍。常见方案:固定缩放(简单但小文字糊)、保比例补边(不失真但浪费像素)、全局缩略图 + 局部切块(AnyRes)(兼顾整体和细节)、动态分辨率(按原图尺寸生成可变 token)。高分辨率能改善小文字和细节识别,但切块数量会推高视觉编码、LLM Prefill 和上下文成本,还必须保留「局部块 ↔ 整图」的位置关系,否则模型看清局部却判错整体布局。
详细版
- 固定缩放到正方形:最简单,但可能拉伸变形或丢细节;
- 补边保比例:不失真,但有效像素利用率低;
- 切块(全局图 + 局部块):先给全局缩略图理解布局,再把原图按网格切成视觉编码器支持的块,兼顾整体与清晰;
- 动态分辨率:不同图产生不同数量 patch token,批处理时打包或填充。
工程上要限制最大像素、最大块数、视觉 token 预算。块越多不代表越好——跨块物体、阅读顺序、坐标映射更难,冗余视觉 token 还挤占文本上下文。
完整版教学
一、固定缩放的损失:一个 OCR 例子
最简单的做法是把任意图缩到固定尺寸(如 336×336),但对细节任务是灾难:
一张 3000×2000 的文档,缩到 336×336:
长边压缩约 9 倍 → 原本 20 像素高的文字,只剩 ~2 像素
→ 编码前信息已消失,再强的 LLM 也无法恢复
强行拉伸还会改变物体形状(圆变椭圆),中心裁剪则可能直接删掉边缘内容。信息在编码前丢了就永远回不来——这是所有高分辨率方案要解决的根本问题。
二、全局图 + 局部块(AnyRes 类)
主流解法是「既要整体、又要细节」:
一张高分辨率图:
1. 全局缩略图 → 编码 → 若干 token(理解整体布局)
2. 按宽高比选网格(如 2×3),切成 6 个局部块
3. 每块分别过视觉编码器 → 拼接所有块的视觉 token
→ [全局 token] + [块1 token]...[块6 token] 一起给 LLM
AnyRes 类方法根据图像宽高比动态选网格。关键工程细节:必须给每个块加块顺序/分隔符/二维位置信息,否则模型不知道某个局部块来自图的哪个位置,会把左上角的字和右下角的字搞混。
三、动态分辨率:减少拉伸和补边
动态方案尽量保持原始宽高比,把不同尺寸的图转成可变数量的 patch token。好处是减少无效拉伸和补边浪费;代价是同一 batch 里样本长度不同,需要 Token Packing、Padding Mask 或按长度分桶来处理变长。
易错点:训练时只见过固定尺寸,推理时直接放大并不保证泛化——位置编码插值 + 没在高分辨率上训练充分,效果可能不升反降。
四、Token 成本:为什么高分辨率这么贵
高分辨率的代价要算清楚这笔账:
若每个块产生 T 个视觉 token,用 K 个局部块 + 1 张全局图:
视觉 token 总数 ≈ (K+1) × T
例:T=576,K=6 → (6+1)×576 = 4032 个视觉 token
→ 光是图就占了 4000+ 上下文,比大多数文字问题长得多
而 LLM Prefill 的注意力和激活随总序列长度增长,所以高分辨率同时推高视觉塔和语言塔的成本。可用池化、查询重采样、Token 合并/剪枝降低长度,但每种压缩都要测细节任务是否退化。
五、文档与 OCR:不只是「看清字」
文档任务比自然图更苛刻——不仅要识字,还要理解阅读顺序、表格单元格、版面坐标。所以要保留页码、块坐标、重叠区域,必要时结合专门的 OCR / 版面分析工具。
记忆钩子:模型给出流畅的文本,不代表逐字转录准确——它可能「猜」出了看起来合理但错误的内容(文字幻觉)。高价值文档要用专门 OCR 交叉验证。
六、常见误区与追问
- 误区:分辨率越高越好。 块越多,跨块物体/阅读顺序/坐标映射越难,冗余 token 还挤占上下文,存在最优点。
- 误区:切块后模型自动知道块的位置。 必须显式加块顺序/坐标/分隔符,否则局部关系丢失。
- 误区:推理时直接放大就能处理高分辨率。 训练没见过的尺寸 + 位置编码插值,泛化没保证。
- 追问:固定缩放的根本问题? 信息在编码前就丢失,后续无法恢复(小文字被压没)。
- 追问:AnyRes 的核心思路? 全局缩略图看布局 + 局部块看细节,按宽高比选网格,需保留块位置。
- 追问:高分辨率的 token 成本怎么算? 约 (K+1)×T,K 个块加全局图,直接推高 Prefill。
- 追问:文档任务要注意什么? 除识字还要阅读顺序/表格/坐标,流畅文本≠逐字准确,需 OCR 验证。
七、加强记忆
高分辨率处理记「看清局部、保住全局、控制 token」的三角取舍:固定缩放简单但小文字糊(信息编码前就丢)、补边不失真但浪费、全局图+局部块(AnyRes)兼顾但要保留块位置、动态分辨率减拉伸但要处理变长。核心代价是 token 爆炸——视觉 token ≈(K+1)×T,直接推高 LLM Prefill,所以切块不是越多越好。文档 OCR 尤其要注意:流畅文本≠逐字准确(文字幻觉),高价值场景用专门 OCR 交叉验证。选型看任务:自然图用较低固定分辨率,OCR/图表用动态或切块。