VisCo: Leveraging Large Language Models as Intrinsic Encoders for Visual Token Compression
Yupeng Zheng, Kai Zou, Bin Liu, Nenghai Yu
cs.CV
2026-07-14
VisCo 把预训练 VLM 当成自带压缩器,用少量 memory token 存逐层 KV 供解码端复用;压到单个视觉 token 仍保 85.3%,领先所有基线。
VLM(视觉语言模型)看一张图,要把它切成几百个视觉 token 喂给语言模型,自注意力的计算量和 KV cache 的显存都跟着暴涨。高分图更糟,延迟和显存直接卡住部署。视觉 token 压缩就是用更少的 token 表达同一张图。
现成的两类方法都有硬伤。免训练那一派(FastV、SparseVLM 靠注意力打分删 token;DART、VisionZip 靠特征相似度合并 token)在轻度压缩时还行,压狠了就崩,因为丢的是细粒度细节和全局语义,还会触发注意力漂移产生幻觉。要训练的那一派,要么塞一个外部压缩模块(Q-Former、PruMerge)逼着 VLM 重新适应,重训成本高,还破坏了预训练 VLM 原本的能力;要么像 VoCo-LLaMA 那样重做对齐和指令微调,性能强但代价大、不够即插即用。压狠之后,免训练崩、重训贵。
作者的判断是:压缩本质是个信息编码过程,而预训练 VLM 本身就有很强的编码能力,只是没人好好用。所以不该再造外部模块逼 VLM 改,应该让 VLM 自己压自己,只做轻量适配。
VisCo 把预训练 VLM 拆成一个参数共享的自编码器(autoencoder):编码端用 VLM,解码端还是同一个 VLM。核心是用少量可学习的 memory token(记忆 token)当「压缩后的表示」。具体三步。
序列构造。一张图经过视觉编码器和投影后得到 Nv 个视觉 token Xv。在它后面接上 Nm 个可学习的 memory token Xm(Nm 远小于 Nv),拼成 [Xv; Xm]。因为沿用 VLM 原生的因果掩码(causal mask),排在后面的每个 memory token 天然能注意到前面所有视觉 token,不需要任何自定义的交互规则,这步只靠 VLM 自身的注意力先验。
逐层信息聚合。Transformer 是分层处理的,浅层抓纹理、局部,深层抓抽象语义。VisCo 不只取编码器最后一层输出(那样会把层级结构压平),而是把每一层里 memory token 对应的 K、V 都存进一个「记忆库」(memory bank),把编码器的最终隐状态整个丢掉,解码时只靠这些逐层的 KV。这保证浅层细节和深层语义都留得下来。
分层前缀解码。解码端就是那个冻结的预训练 VLM(LoRA 拿掉),把记忆库里的逐层 KV 直接灌进解码器的 KV cache,再在上面做自回归生成。因为编码器和解码器共享同一套参数,表征和注意力先验一致,解码器能直接复用这些 KV,不需要像 Prefix-Tuning 那样再加逐层 MLP 做投影。训练只动 memory token 和 LoRA(rank 64),在 LLaVA-665K 的 10% 子集上微调一个 epoch。
在 3 个 VLM 主干(LLaVA-1.5-7B、Qwen2-VL-2B、Qwen2-VL-7B)、6 个 benchmark(GQA、MMB、MMB-CN、MME、POPE、MMVet)上评测,基线是 FastV、SparseVLM、PruMerge+、DivPrune、VisPruner、VisionZip(微调版),还放了 VoCo-LLaMA、MatryoshkaQuery 两个重训强参考。
压得越狠,VisCo 优势越大,这是最关键的结论。LLaVA-1.5-7B 从 576 个 token 压到 32,VisCo 平均保住 91.8%,领先 VisPruner 4 个点;压到 1 个 token,差距拉到夸张:VisCo 85.3%,VisPruner 48.8%,PruMerge+ 35.4%,分别领先 36.5 和 49.9 个点。
| 压缩目标(LLaVA-1.5-7B) | VisCo | VisPruner | PruMerge+ |
| 32 token 平均保留 | 91.8% | 87.8% | 77.5% |
| 1 token 平均保留 | 85.3% | 48.8% | 35.4% |
Qwen2-VL-7B 上,144 压到 18 token(8 倍压缩),VisionZip 微调版只剩 81.3%,VisCo 还有 90.4%,领先 9.1 个点。Qwen2-VL 本身已内置视觉压缩机制,VisCo 在它上面还能再压,说明这不是吃冗余红利。
更反直觉的是:把压缩后的 memory token 和原始视觉 token 一起喂给模型(VisCo+),性能比原模型还高,MMB 从 67.3 涨到 69.6,MMB-CN 从 61.8 涨到 67.8。作者据此认为,memory token 提供的是互补于原始视觉信息的另一种表征,而非简单摘要。效率上,KV cache 从 288MB 降到 18MB(32 token),解码速度和 VisionZip 持平;多轮问答里,因为 VisCo 只压一次图、可跨轮复用,第三轮起就反超 FastV。
对部署 VLM 的人,这是少数能在极端压缩下不崩、且不要求重训整个模型的方案。压到单个 token 还保 85% 是个很强的结果,意味着高吞吐、低显存的场景(多图、长视频、端侧)有了一条新路。工程上也讨喜:只动 LoRA 和几十个 memory token,主干完全冻结,即插即用,训练一个 epoch、10% 数据就够。
「VLM 自己压自己、把分层 KV 直接灌进解码器」这个设计可搬。memory token 居然能补原始 token 缺的信息(VisCo+ 反超原模型),这点对未来怎么设计压缩表征有启发。
作者承认两件事:编码端多了一次基于 LLM 的压缩前向,短回答场景(MME)这点开销显眼;未来工作要做自适应 token 分配、扩展到视频。等于说,目前只在图像上验证,视频没碰。
读下来存疑的一点:memory token 数量是固定的(论文用 36、18 等),不随图片复杂度变,简单图和密集图用一样多,作者自己把自适应分配列为未来工作,等于承认这里还有浪费。所有结果都在中等规模 VLM(2B/7B)和偏理解的 benchmark 上,没见在需要极细粒度的任务(OCR、文档、医学影像)上单独报数,这类任务对 token 压缩最敏感。VisCo+ 反超原模型那条结论很漂亮,但只在一个主干、一张表上展示,稳健性还要看更多设置。