IDPruner (核心自研算法)#
IDPruner (Importance and Diversity Pruner) 是 AngelSlim 的核心视觉 Token 剪枝算法。它通过引入信息检索领域的重排序机制,解决了 MLLM 在极高压缩比下精度大幅退化的问题。
1. 算法动机#
MLLM 推理中的视觉 Token 存在显著冗余。现有的剪枝方案往往陷入局部最优:
仅关注重要性 (Importance):导致 Token 极度向前景目标(如人脸、主体)聚集,丢失对全局推理至关重要的背景上下文。
仅关注多样性 (Diversity):倾向于均匀采样,虽保证了覆盖度,但容易保留任务无关的噪声且丢失关键细节。
我们的方法兼顾了多样性维度和重要性维度,并且超过了其他的两者兼顾的方法,将两个维度的结合推向帕累托最优。
2. 技术核心#
IDPruner 的决策逻辑由三个要素驱动:
重要性度量 (Importance Source):采用经过端到端训练的轻量化 Scorer(评分器),预测每个 Token 对最终语义生成的贡献度。
相似性度量 (Similarity Source):利用模型自身的视觉隐藏层特征向量,在特征空间计算 Token 间的余弦相似度以识别冗余。
MMR 选择机制 (Maximal Marginal Relevance):采用贪心策略迭代选择 Token,目标是最大化以下函数: $$v^* = \arg \max_{v_i \in V \setminus S} [\lambda \cdot \text{Imp}(v_i) - (1 - \lambda) \cdot \max_{v_j \in S} \text{Sim}(v_i, v_j)]$$ 通过动态惩罚与已选集合高度相似的候选 Token,确保最终集合在保留高价值信息的同时,具备最优的语义覆盖面。
3. 实验结果 (Qwen-2.5-7B-Instruct)#
在 Qwen-2.5-7B 上的大规模评测表明,IDPruner 在 75% 甚至 90% 的极端压缩率下,性能均显著优于现有主流方法。
Method |
AI2D |
ChartQA |
DocVQA |
MMBCN |
MMB |
MME |
MMStar |
OCR |
POPE |
SQA |
VQAT |
Avg |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
Baseline |
82.48 |
83.68 |
94.90 |
80.41 |
83.08 |
1702 |
61.88 |
85.30 |
87.80 |
88.45 |
82.74 |
100.0% |
保留 25% Tokens |
||||||||||||
FastV |
75.68 |
68.20 |
81.20 |
73.20 |
76.12 |
1636 |
51.08 |
43.00 |
85.20 |
83.49 |
80.06 |
87.16% |
VisionZip |
77.40 |
67.20 |
71.48 |
76.12 |
78.78 |
1637 |
54.86 |
46.50 |
85.76 |
83.99 |
76.21 |
87.55% |
HiPrune |
77.49 |
68.60 |
73.52 |
76.03 |
78.09 |
1619 |
54.43 |
47.10 |
86.02 |
84.18 |
76.43 |
87.80% |
VisionSelector |
79.60 |
72.00 |
93.24 |
75.86 |
78.78 |
1688 |
55.78 |
72.50 |
86.74 |
85.08 |
80.39 |
94.22% |
DivPrune |
77.98 |
62.00 |
85.32 |
75.77 |
77.84 |
1650 |
52.97 |
58.40 |
85.88 |
83.94 |
75.88 |
89.26% |
DART |
74.35 |
60.80 |
78.90 |
73.88 |
76.72 |
1625 |
52.90 |
46.00 |
84.34 |
84.33 |
71.68 |
85.74% |
VisPruner |
77.62 |
68.04 |
77.39 |
75.69 |
78.87 |
1657 |
54.01 |
48.70 |
85.68 |
84.18 |
75.17 |
88.31% |
SCOPE |
78.92 |
71.20 |
85.40 |
77.75 |
79.38 |
1684 |
56.86 |
61.70 |
86.78 |
85.23 |
79.66 |
92.51% |
IDPruner |
80.51 |
74.32 |
93.16 |
76.63 |
79.73 |
1695 |
56.49 |
74.00 |
87.06 |
85.52 |
80.83 |
95.18% |
保留 10% Tokens |
||||||||||||
FastV |
67.23 |
39.48 |
51.90 |
53.26 |
55.58 |
1332 |
38.02 |
24.10 |
76.31 |
79.28 |
72.59 |
68.07% |
VisionZip |
70.60 |
41.56 |
37.94 |
66.67 |
71.05 |
1462 |
45.19 |
23.40 |
81.06 |
83.24 |
61.06 |
71.84% |
HiPrune |
69.82 |
43.96 |
39.89 |
67.44 |
70.88 |
1438 |
45.04 |
23.70 |
80.70 |
82.65 |
62.51 |
72.22% |
VisionSelector |
74.81 |
62.68 |
87.00 |
68.99 |
71.65 |
1569 |
46.93 |
55.50 |
82.69 |
81.95 |
74.52 |
85.39% |
DivPrune |
70.11 |
41.36 |
66.20 |
69.42 |
72.16 |
1529 |
44.46 |
31.80 |
81.91 |
80.96 |
62.72 |
76.09% |
DART |
67.88 |
34.84 |
49.86 |
63.92 |
67.35 |
1451 |
42.93 |
24.30 |
79.70 |
80.96 |
54.06 |
69.80% |
VisPruner |
69.88 |
42.68 |
50.85 |
66.84 |
70.96 |
1442 |
44.14 |
24.40 |
81.03 |
81.11 |
59.66 |
72.60% |
SCOPE |
71.63 |
50.04 |
56.45 |
71.22 |
75.43 |
1608 |
48.74 |
34.10 |
84.10 |
82.25 |
70.61 |
79.35% |
IDPruner |
75.16 |
62.48 |
85.98 |
71.65 |
74.66 |
1618 |
47.48 |
53.90 |
85.43 |
82.80 |
74.43 |
86.47% |
(注:粗体为最优值,下划线为次优值。)
4. 快速开始#
通过以下命令启动 IDPruner 的基准评测:
python tools/run_token_pruning_evaluation.py \
--model_path "Qwen/Qwen2.5-VL-7B-Instruct" \
--configs "configs/qwen2_5_vl/pruning/idpruner_r0.75.yaml" \
--tasks "textvqa" \
--output_dir "./results/idpruner_test"
关键配置说明:selector_path#
在 idpruner_r0.75.yaml 中,selector_path 是算法运行的核心参数,它指定了用于预测 Token 重要性的 Scorer 权重路径:
params:
ratio: 0.9
mmr_lambda: 0.5
parallel_k: 1
model_related_params:
selector_path:
"7b": "AngelSlim/Qwen2.5-VL-7B-Instruct-Selector"
"3b": "AngelSlim/Qwen2.5-VL-3B-Instruct-Selector"