论文 - PromptKD: Unsupervised Prompt Distillation for Vision-Language Models
论文信息
- 标题:PromptKD: Unsupervised Prompt Distillation for Vision-Language Models
- 发表会议:IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR) 2024
- 发表时间:2024年3月5日(arXiv 预印本)
背景:大模型压缩的新挑战
近年来,CLIP 等多模态预训练模型在图像-文本理解任务中取得显著成果。然而,其庞大的参数量与推理开销限制了实际部署。
在标签稀缺、资源受限的场景下,如何将大型 CLIP 模型的知识迁移到小模型中,同时不依赖大量标注数据?
为降低计算代价并适应无标签场景,PromptKD 提出了一种核心思路:通过复用教师端文本类向量,将蒸馏聚焦于学生视觉提示的训练,从而绕过文本分支计算。
核心创新点
| 关键组件 | 描述 |
|---|---|
| Shared class vectors | 教师一次生成所有类文本特征,学生直接使用,无需再编码 |
| Frozen student CLIP | 学生网络中除了视觉编码器与投影器,其余参数完全冻结 |
| Unlabeled training | 整个学生训练阶段不依赖任何人工标注数据 |
在 PromptKD 的结构图中,黄色方块表示教师 CLIP 模型。教师在训练后,仅需将每类文本描述通过 Text Encoder 一次前向传播,生成并保存所有类别的文本特征(即图中的 Pre-stored Text Feature)。这一操作只做一次,后续不再计算文本分支。
蓝色方块为学生模型,结构上仅包含 Image Encoder 分支。输入图像拼接可学习的视觉提示(visual prompt)后,生成的 image feature 维度为 512。由于与教师生成的文本特征(768 维)不一致,因此通过一个 Projector 将其映射到相同维度。学生 logits 通过 image feature 与预存文本特征矩阵相乘获得,并与教师 logits 对齐进行 KL 蒸馏。整个学生训练过程完全基于无标签图像,推理也不再依赖文本分支,计算更高效。
方法概览:PromptKD 的三阶段设计
PromptKD 是一个 三阶段的无监督提示蒸馏框架,流程如下:

阶段 I - 教师预训练
使用少量标注数据对大 CLIP 模型进行提示学习(如PromptSRC )。文章中教师采用 ViT-L/14 CLIP模型,学生模型是ViT-B/16 CLIP模型
教师模型可选择直接使用 vanilla CLIP,也可通过 PromptSRC 等方法在目标域进行少量监督微调,以进一步提升蒸馏效果
(PromptSRC 是 PromptKD 中用于教师优化的前置工作,两者论文分别独立)注意,这里的预训练不是必须的一步,选择去预训练教师模型,是为了让教师有一个更好的性能,从而有更好的学生蒸馏结果。如果直接使用vanilla ViT-L/14 CLIP作为教师,相比于baseline,也取得了明显的性能提升 (作者博客)
阶段 II - 学生提示蒸馏
在大量无标签图像上(包含测试集),冻结文本分支与大部分 CLIP 模块,仅训练视觉提示(Prompt)和映射层(Projector),使用教师输出作为软标签指导学生。
🔥 学生模型不再需要文本分支,仅复用教师的“类向量”,极大降低训练与推理开销。
- 阶段 III - 学生的推断
实验结果
实验衡量指标
PromptKD 采用三项指标衡量模型性能:
- Base Accuracy:模型在训练类(base classes)上的准确率
- Novel Accuracy:模型在未见类(novel classes)上的准确率,衡量泛化能力
- Harmonic Mean (HM):两者的调和平均,用于综合评价模型在已知与未知类上的平衡性能:
✅ HM 越高,说明模型越能在保持记忆的同时实现良好迁移。

Cross-dataset Generalization
在 11 个图像识别任务中,PromptKD 在 9 个任务上优于所有基线,平均提升 +5.52%。
与 Few-shot/伪标签方法对比
在 Flowers102 上,PromptKD 以 无标签训练达到比所有 few-shot 方法更高的性能(HM 达到 90.24%)。
推理效率显著提升
| 方法 | 推理计算量 (GFLOPs) | 是否需要文本编码器 |
|---|---|---|
| CoOp / PromptSRC | ~162.5 GFLOPs | ✅ 是 |
| PromptKD | 42.5 GFLOPs | ❌ 否 |
本地复现
环境配置
一步步根据作者提供的步骤,在复现实验结果的过程中出现下述问题:
AttributeError: module ‘distutils’ has no attribute ‘version’
环境中没有安装 distutils 模块(按照道理会自动安装的,可能是在conda在打包时遗漏了,毕竟都是python3.820了)
解决方法:
- 安装兼容模块
1 | pip install setuptools==58.0.4 |
- 或者加装补丁包
1 |
|
为提高兼容性,将 python 环境 提升到 python 3.9
综上,要最后加上下述的命令:
1 | # 降级 numpy 到兼容版本 |
复现实验设置
| 模块 | 内容说明 |
|---|---|
| 教师模型 | ViT-L/14 + Few-shot 标签(每类16张图)+ PromptSRC 引导 |
| 学生模型 | ViT-B/16,仅训练视觉 prompt 和投影层 |
| 蒸馏方式 | KL散度对齐教师-学生 logits(无标签,transductive zero-shot setting) |
| 文本分支 | 教师模型生成 class vectors,一次提取,冻结使用 |
| 训练数据 | 无标注图像数据(仅用于蒸馏) |
| 评估指标 | base / novel 准确率,harmonic mean,cross-dataset 迁移能力 |
| 实验设置 | - Few-shot 训练教师; - Zero-shot 蒸馏学生; - 多数据集迁移测试 |
复现结果
在论文中提到的10给数据集中,我选择在 DTD 、Flowers102 、Caltech101 这三个数据集上复现 Base2novel 与 Cross-dataset 实验(+ 与 - 表示与论文中结果的差异)。
- Base2Novel (inductive)
Novel 类 仅在测试阶段出现,训练过程无参与
| 数据集 | Base | Novel | HM |
|---|---|---|---|
| DTD | 84.4 (-1.4) | 70.4 (-0.9) | 76.7 (-1.2) |
| Flowers102 | 94.5 (-4.9) | 79.6 (-3.02) | 86.4 (-3.84) |
| Caltech101 | 99 (+1.09) | 96.4 (-0.25) | 97.6 (-0.17) |
- Cross-Dataset (transductive)
本复现实验同样采用 Transductive 设定,即在无标签但包含测试类别的图像上进行训练
Cross-Dataset中,教师模型现在ImageNet数据集上做训练,而后再不同的数据集上做无标签蒸馏(包含测试集)最后做测试
| 数据集 | Acc |
|---|---|
| DTD | 53.7 (-1.38) |
| Flowers102 | 74.9 (-0.4) |
| Caltech101 | 93.3 (-0.31) |
总结
在 Base2Novel 和 Cross-Dataset 实验中,Caltech101 数据集的复现效果最佳,DTD 和 Flowers102 数据集的准确率相对较低,尤其是在 Base2Novel 实验中的表现差异较大。
由于我只取一个随机数实验一次,难免会有误差,就结果而言该模型的表现尚可
局限
PromptKD 虽然脱离标签训练,但效果高度依赖于 unlabeled 数据的领域代表性。
未来方向包括引入:
- 跨域正则化
- 自适应提示生成
- 更强的鲁棒蒸馏策略
用整个数据集蒸馏

如原文所述,在 Cross-Dataset 实验中,PromptKD 采用 transductive 设置:学生模型在蒸馏阶段可访问目标域中所有未标注图像(包含 unseen 类),但不使用其标签信息。
Inductive vs Transductive Zero-Shot Learning 对比表
| 对比维度 | Inductive ZSL(归纳式) | Transductive ZSL(传导式) |
|---|---|---|
| 定义 | 只使用训练集 seen 类的带标签数据 | 同样训练于 seen 类标签数据,但可见所有 unlabeled 测试图像(含 unseen 类) |
| 是否使用 unseen 类图像 | 不使用 | 使用(无标签) |
| 是否更贴近零样本假设 | 完全隔离训练与测试类 | 测试集参与训练,违背严格 ZSL 假设 |
| 是否能利用测试分布 | 无法感知 unseen 类图像的结构分布 | 可对 unseen 类图像进行聚类、建模 |
| 通常性能 | 中等,取决于提示质量和语义泛化 | 通常更高,因可提取 unseen 图像间隐结构 |
| 风险与局限 | 泛化能力完全依赖训练提示设计 | 过拟合测试集结构、部署时难以获得 unlabeled 测试图像 |
值得注意的是,PromptKD 在 Cross-Dataset 实验中采用了 transductive 蒸馏策略,即在训练阶段使用了目标域中的所有未标注图像(包含测试类),从而显著提升了学生模型对 unseen 类的泛化性能。
虽然这一策略在工业应用中确实更具可操作性(实际部署时常常拥有大量未标注的测试域数据),但从学术研究的角度看,这种设置一定程度上放宽了 zero-shot 学习中对泛化能力的严格要求。特别是在某些严格 ZSL 定义下,transductive 被视为“信息泄露”,可能影响模型的真实零样本泛化评价。
从这个角度来看,PromptKD 的实验结果固然令人印象深刻,但在评估其方法的通用性时,需要将其与严格 inductive 设置下的方法区分看待(但作者比较的很多方法都是inductive的)
思考
1. 蒸馏机制设计尚显浅层
我认为,作者最大的贡献在于充分利用了 CLIP 模型中视觉端与文本端解耦的结构特点,在学生蒸馏阶段通过复用教师侧生成的类文本向量,实现了无需文本分支的轻量化蒸馏训练。这一设计不仅有效提升了模型推理效率,同时也取得了优异的性能表现。
然而,论文在蒸馏模块的设计上仍显初步,采用的仅是最基础的 KL 散度损失,蒸馏过程局限于输出层(logits)的对齐,未能进一步挖掘模型结构层级中的语义特征或类间关系作为更深层次的知识迁移信号。
因此,我认为在 PromptKD 的基础上,若能增强蒸馏模块,引入更丰富的蒸馏策略(如中间层特征对齐、类中心对齐),或许可以进一步提升其在跨域迁移与低资源场景下的鲁棒性与泛化能力。
2. 训练设置依赖 Transductive 假设
在 cross-dataset 实验中,PromptKD 采用 transductive ZSL 设定 ,这或许存在刷数据的嫌疑。未来可进一步探讨其在 inductive 条件下的泛化能力,验证方法本身的更强迁移性与适应性。
论文资源区块
- PDF:下载链接
- 代码仓库:GitHub - zhengli97/PromptKD
- 推荐阅读:PromptSRC
- Title: 论文 - PromptKD: Unsupervised Prompt Distillation for Vision-Language Models
- Author: YYk
- Created at : 2025-05-04 20:43:43
- Updated at : 2025-05-06 11:20:51
- Link: https://yykwd.github.io/2025/05/04/Papers/PromptKD/
- License: This work is licensed under CC BY-NC-SA 4.0.
