VisCo:把 LLM 自身当作内禀编码器用于视觉 Token 压缩

  • 关联论文:2607.12756
  • 作者:flyP
  • 更新:2026-07-27

一句话结论

VisCo 提出了一种参数共享的自编码器式视觉 Token 压缩框架,直接复用预训练 VLM 自身的 Transformer 层作为压缩器与解码器,用少量 memory tokens 承载压缩后的视觉信息,并在编码—解码之间逐层传递多粒度特征;它在所有压缩比下都优于既有方案,且在高压缩、极限单 token 设置下仍稳定,甚至学到的 memory tokens 与原视觉 tokens 拼接时还能反向提升基模型表现。

解决的真问题

视觉语言模型(VLM)在处理图像 / 视频时,需要把视觉编码器输出的 patch token 全部塞进 LLM 上下文。一张 1024×1024 的图经 ViT 后通常产生上千个 token,多帧视频更夸张。这直接导致:

  • 推理延迟与显存随 token 数量线性甚至超线性增长;
  • 长上下文下 LLM 对真正重要视觉区域的注意力被稀释。

视觉 token 压缩是近年学界最热的方向之一,但现有两条路线都不理想:

  1. Training-free 路线:用相似度、注意力分数、可学习性等启发式指标做剪枝 / 合并。优点是不用训,缺点是当压缩比高时性能塌得很厉害——启发式无法判断哪些 token 在下游任务里真正被用到。
  2. Training-based 路线:外加一个独立的压缩模块(MLP、Q-Former、cross-attention 等),强迫 VLM 主干去适配它。这样做代价大:要么得重训整个 VLM 损害已有先验,要么引入额外参数破坏部署形态的统一性。

VisCo 的切入点是:高质量压缩这件事本身需要的就是强信息编码能力,而预训练 VLM 内部已经具备这个能力,现有方法只是没用上。

核心方法

1. 总体架构:参数共享自编码器

VisCo 把 VLM 的视觉投影与 LLM 主体看作一个共享参数的「自编码器」:

  • 编码器(Encoder):复用 VLM 自身的若干 Transformer 层,输入是原始的若干 visual tokens。
  • 解码器(Decoder):复用同一组 Transformer 层,输入是 memory tokens(数量远小于原 token 数)。
  • 瓶颈(Bottleneck):一组可学习的 memory tokens(query 形式),通过 cross-attention 把原 token 序列的信息压缩进自己。

伪代码(关键步骤):

# X: 原始 visual tokens, shape (B, N, d), N 很大
# M: memory tokens, shape (B, K, d), K << N, 可学习
# Enc/Dec: 共享参数的 VLM Transformer 层

def encode(X, M):
    # 把 memory tokens 当作 query,visual tokens 当作 key/value
    z = cross_attn(query=M, kv=X)          # 压缩
    z = vlm_block(z)                       # 共享 Transformer 层继续 refine
    return z                               # shape (B, K, d)

def decode(z, M):
    # 解码时再次用 memory tokens 作为 query,z 作为 key/value
    out = cross_attn(query=M, kv=z)
    out = vlm_block(out)
    return out                             # shape (B, K, d) 的压缩后视觉表示

最终送入 LLM 的就是这 K 个 memory tokens(K 可以非常小),而不是原始的 N 个。

2. 关键设计:分层信息传递(Hierarchical Transfer)

压缩只发生在 token 数量这一个维度上,但 VLM 内部的表征本身是多层级的(浅层保留纹理、边缘,深层保留语义、对象关系)。如果只让最后一层 visual token 参与压缩,深层语义容易丢。

VisCo 的解法是逐层传递

  • 在 VLM 的第 i 层做一次压缩时,把当前层编码器输出的中间表征作为 key/value;
  • 把前一层 memory token 的输出作为 query;
  • 这样在每一层都把"更细粒度—更粗粒度"信息往瓶颈里灌。

直观上,这相当于把自编码器从单层拓展成"深度自编码器",并把编码路径上的每一层特征都和瓶颈对齐。

3. 训练策略

  • 端到端微调,但只更新 memory tokens 与极少的 adapter 参数;VLM 主干与 LLM 主体参数冻结(paper 中描述为"training-efficient",原文未明确给出具体 LoRA rank 数值)。
  • 训练目标是标准的下一个 token 预测 + 视觉问答损失。

4. 极端设置

在极限单 token(K=1)情况下,传统压缩方法几乎无法保留足够信息。VisCo 通过上述分层结构 + 共享参数编码器,保留了对全局视觉语义的最强压缩能力——这是论文特别强调的卖点。

关键实验与数据

  • 跨压缩比:在 2×、4×、8×、甚至接近单 token 的压缩比下,VisCo 都比同期方法表现更好;压缩越激进,领先幅度越大。
  • 基线对比:覆盖 training-free(ToMe、FastV、MustDrop 等类型方法)和 training-based(Q-Former 类、外接 projector 类)方法。原文未给出精确百分点数据,但明确指出"在所有评估压缩比下都超越先前方法"。
  • 消融:memory tokens 与原 visual tokens 拼接使用时,部分基准上超过原始未压缩 VLM——说明 memory tokens 学到了原 token 之外的补充表征。
  • 评测任务:覆盖图像描述、VQA、图文理解等多类基准。原文未逐项列指标。

⚠️ 不确定处:原 abstract 未明确给出具体数值、模型规模、训练数据量、是否覆盖视频场景。"超越先前方法"为定性表述,本文未复现核实。

亮点与局限

亮点

  • 思路干净:不再外接模块,而是"承认 VLM 本身已经是最好的压缩器",把工程上的摩擦降到最低。
  • 部署友好:参数共享,不引入新的推理分支,原 VLM 推理栈可以无改动接管。
  • 压缩—信息互补:memory tokens 拼接回原 tokens 还能涨点,意味着这套机制可同时作为「压缩」与「增强」两种用途。
  • 极端鲁棒:单 token 设置下仍稳定,这对超高分辨率图像、视频流是关键。

局限

  • 仍依赖一个可学习的 bottleneck 集合,规模和位置需要任务相关调参(原文未明确是否在所有 VLM 上一致)。
  • 分层传递增加显存峰值:每一层都做 cross-attention,深层堆叠时显存压力可能比朴素压缩更大。
  • 论文以图像 / 多模态为主,对长视频、超长文档场景的扩展性未明确验证。
  • "training-efficient"具体含义——是否只调 memory tokens、是否需要 adapter 改造 LLM 入口,原文未在 abstract 级说明。

对工程落地的启发

  1. 存量 VLM 升级路线:如果团队已经在用某个 VLM(如 Qwen-VL、LLaVA、InternVL),VisCo 给了一条不用替换 backbone、只训练几行 memory tokens 就能拿到压缩 + 增强的路径,比外接 Q-Former 性价比高。
  2. 视频 / 长文档:高压缩比下表现稳定这一点对处理长视频(每帧压缩到 1 token)或长 PDF 截图非常关键。
  3. 蒸馏 / 蒸馏前置:memory tokens 与原 tokens 拼接涨点的现象,可以被解读为一种"显式 latent 蒸馏",未来或许可以跟传统 token-level 蒸馏组合。
  4. 推理时开销:跨层 cross-attention 在 KV cache 上要小心设计,否则压缩省下来的 LLM 上下文开销会被编码器侧吃回去——落地时需要做 profile。

与同方向工作的关系

  • ToMe / FastV / MustDrop(training-free token 合并):VisCo 的直接对手,优势在高压缩比下不掉点。
  • Q-Former / Perceiver / perceiver resampler 类(外接压缩器):VisCo 用参数共享替代外接参数,避免了「VLM 必须适配新模块」的问题。
  • Vision-AST / 多尺度视觉表征(如 InternVL 的 dynamic resolution):VisCo 在 token 数量维度的压缩与它们在分辨率维度的策略互补,未来工作可能两者结合。
  • LLaVA-Prumer / Token Merging 系列:与 VisCo 同属"训练成本可控的压缩"赛道,但 VisCo 把 VLM 内部表征当作可复用资源的思路更激进。

适合谁读

  • 多模态 / VLM 方向的算法工程师:评估是否能在自家 VLM 上复现。
  • 推理优化 / 性能工程师:寻找"不用换模型就能省 token"方案的人。
  • 视频理解、长上下文 RAG 团队:单 token 鲁棒性是关键卖点。
  • 学术读者:把"参数共享自编码器"思路引入跨模态压缩的参考案例。

不确定处汇总

  • 论文具体的实验数值(基准、提升幅度、模型规模)。
  • 训练是否仅更新 memory tokens、是否引入 adapter、训练数据规模。
  • 推理时的显存 / 延迟实际下降幅度。
  • 视频、超长文档场景下的泛化表现。

以上信息原文 abstract 未明确给出,待读全文或代码核实。

工程落地与核查(Jay)

实际系统怎么用

基本接入路径

VisCo 压缩模块的 production 接入形态是 VLM encoder 之后、LLM 主干之前插入一个 VisCo compressor:

Image → ViT Encoder → Visual Tokens (N个)
                         ↓
              VisCo Compressor (压缩)
                         ↓
            Memory Tokens (K个, K << N) → LLM 主干

对于已有 VLM serving 栈的团队,核心工程问题是:VisCo 的 encode/decode 操作是额外 forward pass,还是可以在一次 forward 中完成? 论文描述是分层 cross-attention,这意味着: - Encode 阶段需要额外 KV-cache 读写(hidden states 从各层被抽出来做 cross-attention) - Decode(生成)阶段是单向的,overhead 相对小

建议的实现验证步骤: 1. 先在单卡上 profile:原始 VLM vs VLM+VisCo 的端到端延迟和显存峰值 2. 确认压缩节省的 LLM 上下文开销 > 编码器侧额外开销,才有净收益 3. 如果 K 很小(如 K=1~4),codec 的 overhead 可能比节省更小,此时 VisCo 是纯收益

Memory Tokens 的任务适配

Memory tokens 是可学习的,但论文没有说「一套记忆 tokens 通用所有任务」。建议: - 针对高频场景(图像描述、VQA、文档理解)各训一套 memory tokens - 训练时只更新 memory tokens + 极少量 adapter,冻结 VLM 主干 - 如果任务种类很多,用 meta-learning 的方式做 memory token 的快速任务适配

拼接涨点的工程利用

论文发现 memory tokens 和原 visual tokens 拼接时性能超过原始 VLM——这意味着: - 可以同时维护「压缩路径(K tokens)」和「备用路径(K+N tokens)」两条路由 - 关键任务走拼接路径,质量优先;长 context / 高并发场景走压缩路径,成本优先 - 这与 MHLC 的 deferred-execution 思路可以 stacking:VisCo 做视觉压缩,MHLC 决策是否拼接

主要坑与风险

坑1:跨层 Cross-Attention 的显存峰值

VisCo 在 VLM 的每一层都做 cross-attention(memory tokens 与当前层 visual tokens),这意味着: - KV cache 需要跨层保留,不是简单的前向截断 - Batch size 大时,每层的 cross-attention 都会产生中间结果,显存峰值可能是朴素的「最后一层压缩」方案的数倍 - 建议:用 gradient checkpointing(recompute)换显存,牺牲一点计算换显存;或限制参与压缩的层数(如每隔一层做一次,而非每层都做)

坑2:压缩收益被编码器 overhead 吃掉

VisCo 的 encode 阶段做的是额外 forward(把各层 hidden states 做 cross-attention refine),而压缩节省的是 LLM 侧的上下文计算。两者的账要一起算

场景 推荐 K 理由
高分辨率图像(>512×512) K=8~32 N 很大,压缩节省 >> codec overhead
视频多帧(>8帧) K=4~16 时序冗余高,压缩效率高
低分辨率 / 简单图像 K=1~4 或直接不压缩 N 本来就小,压缩意义不大
长 PDF 截图 K=16~64 N 可能数百上千,压缩价值高

如果算下来 codec overhead ≥ LLM 侧节省,说明你的场景不适合 VisCo,应该回退到朴素的 training-free 剪枝(ToMe 等)。

坑3:Memory Tokens 对未见任务泛化差

Memory tokens 是任务相关的——论文的训练目标是针对特定 VQA / 图像描述任务的。迁移到一个完全新的任务(如医疗影像、工业缺陷检测)时: - Memory tokens 学到的「哪些视觉信息值得保留」的偏好可能不适用 - 需要在新任务数据上重新训练 memory tokens,VLM 主干冻结即可 - 这比训一个外接压缩模块省事,但仍然需要验证新场景下的压缩质量

坑4:VLM 内部架构差异导致方法不可直接迁移

论文基于某个具体 VLM 家族验证(具体哪个未在 abstract 中说明)。如果团队用的 VLM 架构差异较大: - LayerNorm 的位置(pre-norm vs post-norm)影响 hidden state 的统计特性 - Attention 类型(multi-head vs group-query attention)影响 cross-attention 的效果 - 部分 VLM 有 visual token 采样/合并操作,上下文长度不一致

建议:做架构差异评估时,先在目标 VLM 上跑一下「直接用 last hidden state 做 compression」的 baseline,确认 hidden state 本身包含足够的视觉信息,再上 VisCo 的分层方案。

坑5:视频场景的 temporal 一致性未验证

论文主要验证图像,对视频的处理未明确说明。视频场景的特殊问题: - 跨帧的 visual token 对齐(帧间 token 对应关系可能变化) - 压缩后的 memory tokens 是否能保留 motion information - 时序信息的保留依赖分层传递是否充分

如果要用于视频理解,建议先做 frame-level 的单帧压缩质量验证,再加 temporal 模块。

坑6:拼接路径不等于「全量 tokens 直接拼」

拼接涨点的物理含义是「VisCo 学到的 memory tokens 包含原 visual tokens 之外的信息」,但这不意味着直接把 N+K tokens 拼进去是最优的。可能的正确理解是:memory tokens 学到的是「全局语义摘要」,和「局部纹理细节」的互补。因此: - 不要把 memory tokens 当作「额外的 visual tokens」使用,而是当作「语义索引」接入 cross-attention - 如果发现拼接反而掉点,说明 memory tokens 学到的是压缩表征而不是额外表征,需要重新设计训练目标

落地自查清单

  • [ ] 单卡 profile 完成:VLM+VisCo vs 原始 VLM 的端到端延迟和显存峰值,确认有净收益
  • [ ] K 值已针对目标场景整定(有 latency budget 目标则上限 K 已定;有质量下限则下限 K 已定)
  • [ ] 显存峰值问题已解决(gradient checkpointing 或限制压缩层数)
  • [ ] Memory tokens 已在目标任务数据上训练并评测(不是直接用论文提供的 checkpoint)
  • [ ] 拼接路径与纯压缩路径的 A/B 质量对比已完成,确认拼接在目标场景有效
  • [ ] VLM 架构兼容性已验证(hidden state 统计特性正常,分层传递信号有效)
  • [ ] 如果用于视频:temporal 一致性已有单独验证
  • [ ] Fallback 路径已实现:当 VisCo 推理失败时自动回退到原始 VLM(不做压缩)