面向大型视觉语言模型的动态视觉Token剪枝框架
GlimpsePrune 是一个为大型视觉语言模型 (LVLMs) 设计的动态视觉Token剪枝框架。通过在少量数据上进行快速训练(例如,在20K GQA数据上训练少于1小时),GlimpsePrune 能够让 Qwen2.5-VL-7B 在生成回答前,平均剪除 92.6% 的视觉Token,同时保持与原始模型相当的性能。
更多技术细节,请参阅我们的论文。
如果我们的工作对您有启发或者有帮助,请给我们一个star ⭐. 感谢你们的关注与支持:
- 高剪枝率:在几乎不损失性能的情况下,平均剪除超过 90% 的视觉Token,有效降低计算和显存开销。
- 性能鲁棒:在处理高分辨率图像及应对复杂的**自由格式问答(Free-form VQA)**任务时表现稳定。
- 训练轻量:仅需训练少量额外参数(Glimpse token 和 VIP),在单张 A100 上不到1小时即可完成。
- 广泛兼容:支持单图、多图输入, 兼容KV-Cache与Flash Attention2,并提供了与其他主流视觉压缩方法的公平比较基准。
GlimpsePrune 的核心思想是引入一个glimpse token和一个轻量级的Visual tokens Important Predictor (VIP),它能根据文本提示快速识别并保留与问题最相关的视觉区域,剪除其余冗余信息。
核心代码实现位于:
- Qwen2.5-VL:
transformers_gp/models/qwen2_5_vl/model_gp.py - LLaVA-1.5:
llava_gp/model/language_model/llava_llama.py
我们在多个 VQA 基准上评估了 GlimpsePrune。结果表明,其在实现高剪枝率的同时,性能与原始模型持平,并优于其他视觉压缩方法。
- 支持 Qwen2.5-VL
- 支持单张图像输入
- 支持多张图像输入
- 提供本地 Gradio Demo
- 支持 LLaVA-1.5
- 提供多种视觉Token压缩方法在free-form VQA任务上的评估脚本 (PyramidDrop, VisionZip, etc.)
- 支持批量输入 (Batch Inference)
-
克隆仓库
git clone https://github.com/HVision-NKU/GlimpsePrune.git cd GlimpsePrune -
创建环境并安装依赖 我们建议为不同的模型创建分离的环境:
对于 Qwen2.5-VL:
python=3.10torch==2.7.0flash-attn==2.7.4.post1pip install -r qwen_requirements.txtpip install qwen-vl-utils[decord]
对于 LLaVA-1.5 (可选):
点击展开 LLaVA 依赖安装
python=3.10torch==2.1.2flash-attn=2.7.3pip install -r llava_requirements.txt
评估和 Demo 的额外依赖 (可选):
# 评估 pip install lmms-eval==0.3.5 vllm==0.9.0.1 # Demo pip install gradio==5.39.0
所有模型均可通过 Hugging Face Hub 自动下载。如果遇到网络问题,可以手动下载到本地。<new_module> 是我们训练的额外glimpse token 和 VIP 模块的权重。
训练和 Free-form VQA 评估使用了 Visual-CoT 数据集。
# 下载数据集 (约 128GB)
huggingface-cli download --repo-type dataset --local-dir datas deepcs233/Visual-CoT cot_images_tar_split
# 解压
cd datas/cot_images_tar_split
cat cot_images_* | tar -xvf - -C ../cot
cd ../.. # 返回项目根目录解压后,datas 目录结构应如下所示:
GlimpsePrune/
├── datas/
│ └── cot/
│ ├── cub/
│ ├── gqa/
│ └── ...
└── ...
我们提供了一个 Gradio Demo 来直观体验 GlimpsePrune 的效果。
python demo_gp.py \
--base_model Qwen/Qwen2.5-VL-7B-Instruct \
--new_modules_dir ashun989/GlimpsePrune_Qwen2.5-VL-7B-Instruct关于如何加载模型并进行推理的详细示例,请参考Jupyter Notebook:
➡️ notebook/gp_qwen_tutorial.ipynb
我们提供了便捷的评估脚本。
# 默认设置 (无保留率限制)
BASE_MODEL=<base_model> bash scripts/infer_qwen_gp_cot.sh <new_modules_dir>
# 设置最大保留率 (例如 11.1%)
BASE_MODEL=<base_model> MAX_REMAIN_RATIO=0.111 bash scripts/infer_qwen_gp_cot.sh <new_modules_dir># 默认设置
BASE_MODEL=<base_model> bash scripts/eval_qwen_gp.sh <new_modules_dir>
# 设置最大保留率
BASE_MODEL=<base_model> MAX_REMAIN_RATIO=0.111 bash scripts/eval_qwen_gp.sh <new_modules_dir># 下载 V* 基准
hf download https://huggingface.co/datasets/craigwu/vstar_bench --repo-type dataset --local-dir datas/vstar_bench
# 在 4096 视觉 token 和 11.1% 保留率下测试 GlimpsePrune。
TASKS="vstar" BATCH_SIZE_PER_DEVICE=4 WARMUP_ITERS=3 TIME_LOGGER=1 MEMORY_LOGGER=1 FIXED_REMAIN_RATIO=0.111 MAX_PIXELS=3211264 BASE_MODEL=$base_model bash scripts/infer_qwen_gp_cot.sh $new_modules_dir
在 Qwen2.5-VL-3B-Instruct 上训练,需要至少2张 24G 显存的 GPU(如 RTX 3090),耗时约1小时。
# 训练 Qwen2.5-VL
CUDA_VISIBLE_DEVICES=0,1 \
bash scripts/train_qwen_gp.sh
# 训练 LLaVA-1.5
CUDA_VISIBLE_DEVICES=0,1 \
bash scripts/train_llava_gp.sh在 Qwen2.5-VL-7B-Instruct 上训练,需要4张 80G A100,并额外需要48G显存运行奖励模型,耗时约24小时。
# 1. 部署奖励模型
bash scripts/vllm_serve.sh
# 2. 测试API
python test_api.py
# 3. 开始训练
CUDA_VISIBLE_DEVICES=0,1,2,3 \
bash scripts/train_qwen_gp_plus.sh本项目基于以下优秀的开源工作,在此表示诚挚的感谢:
- Qwen2.5-VL / LLaVA: 强大的大型视觉语言模型。
- Visual-CoT: 领域丰富、目标尺寸丰富、有box标注的 VQA 数据集。
- PyramidDrop, VisionZip, DivPrune, CDPruner, VScan: 其他视觉Token压缩领域的探索工作。
- lmms_eval: 多模态大模型的评测工具包。
如果我们的工作对您有所帮助,请考虑引用我们的论文:
@misc{zeng2025glimpseprune,
title={A Glimpse to Compress: Dynamic Visual Token Pruning for Large Vision-Language Models},
author={Quan-Sheng Zeng and Yunheng Li and Qilong Wang and Peng-Tao Jiang and Zuxuan Wu and Ming-Ming Cheng and Qibin Hou},
year={2025},
eprint={2508.01548},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2508.01548},
}如有任何技术问题或学术合作,欢迎通过邮件联系我们: qszeng[AT]mail.nankai.edu.cn





