目录

GlimpsePrune

English | 简体中文

面向大型视觉语言模型的动态视觉Token剪枝框架

License


GlimpsePrune 在回答问题前动态剪除大量无关的视觉Token,以降低模型推理开销。

GlimpsePrune 是一个为大型视觉语言模型 (LVLMs) 设计的动态视觉Token剪枝框架。通过在少量数据上进行快速训练(例如,在20K GQA数据上训练少于1小时),GlimpsePrune 能够让 Qwen2.5-VL-7B 在生成回答前,平均剪除 92.6% 的视觉Token,同时保持与原始模型相当的性能。

更多技术细节,请参阅我们的论文

如果我们的工作对您有启发或者有帮助,请给我们一个star ⭐. 感谢你们的关注与支持:

Stargazers repo roster for @HVision-NKU/GlimpsePrune

目录

✨ 主要特性

  • 高剪枝率:在几乎不损失性能的情况下,平均剪除超过 90% 的视觉Token,有效降低计算和显存开销。
  • 性能鲁棒:在处理高分辨率图像及应对复杂的自由格式问答(Free-form VQA)任务时表现稳定。
  • 训练轻量:仅需训练少量额外参数(Glimpse token 和 VIP),在单张 A100 上不到1小时即可完成。
  • 广泛兼容:支持单图、多图输入, 兼容KV-Cache与Flash Attention2,并提供了与其他主流视觉压缩方法的公平比较基准。

🚀 最新动态

🖼️ 框架概览

GlimpsePrune 的核心思想是引入一个glimpse token和一个轻量级的**Visual tokens Important Predictor (VIP)**,它能根据文本提示快速识别并保留与问题最相关的视觉区域,剪除其余冗余信息。

核心代码实现位于:

📊 性能结果

我们在多个 VQA 基准上评估了 GlimpsePrune。结果表明,其在实现高剪枝率的同时,性能与原始模型持平,并优于其他视觉压缩方法。

Free-form VQA Benchmarks

Short-form VQA Benchmarks

V* 自由问答效率对比(batch size=4)

✅ 功能路线图

  • 支持 Qwen2.5-VL
  • 支持单张图像输入
  • 支持多张图像输入
  • 提供本地 Gradio Demo
  • 支持 LLaVA-1.5
  • 提供多种视觉Token压缩方法在free-form VQA任务上的评估脚本 (PyramidDrop, VisionZip, etc.)
  • 支持批量输入 (Batch Inference)

🛠️ 安装指南

  1. 克隆仓库

    git clone https://github.com/HVision-NKU/GlimpsePrune.git
    cd GlimpsePrune
  2. 创建环境并安装依赖 我们建议为不同的模型创建分离的环境:

    对于 Qwen2.5-VL:

    对于 LLaVA-1.5 (可选):

    点击展开 LLaVA 依赖安装
  3. 评估和 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 模块的权重。

<base_model> <new_module>
Qwen/Qwen2.5-VL-3B-Instruct ashun989/GlimpsePrune_Qwen2.5-VL-3B-Instruct
Qwen/Qwen2.5-VL-7B-Instruct ashun989/GlimpsePrune_Qwen2.5-VL-7B-Instruct
liuhaotian/llava-v1.5-7b ashun989/GlimpsePrune_LLaVA-1.5-7B
liuhaotian/llava-v1.5-13b ashun989/GlimpsePrune_LLaVA-1.5-13B

数据准备

训练和 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/
│       └── ...
└── ...

▶️ 如何使用

本地 Demo

我们提供了一个 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

评估

我们提供了便捷的评估脚本。

Free-form VQA

# 默认设置 (无保留率限制)
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>

Short-form VQA

# 默认设置
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>

Efficiency

# 下载 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

训练

训练 GlimpsePrune

在 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

训练 GlimpsePrune+ (可选)

在 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

🙏 致谢

本项目基于以下优秀的开源工作,在此表示诚挚的感谢:

🖊️ 引用

如果我们的工作对您有所帮助,请考虑引用我们的论文:

@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

    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802032778号