扩散反馈帮助 CLIP 看得更好
Wenxuan Wang1,2,3*, Quan Sun3*, Fan Zhang3, Yepeng Tang4, Jing Liu1,2, Xinlong Wang3
⏰ 日程
[2025-01-23] 我们的 论文 被 ICLR 2025 接收!💥
[2024-08-07] 我们发布了 CLIP 模型权重!💥
[2024-08-05] 我们发布了 训练与评估代码!💥
[2024-07-30] 我们的 论文 在 arXiv 上发布!💥
💡 动机
在本工作中,我们提出了一种针对 CLIP 模型的简单后训练方法,该方法通过自监督扩散过程在很大程度上克服了其视觉方面的不足。我们引入了 DIVA,它使用 DIffusion 模型作为 CLIP 的视觉助手。具体而言,DIVA 利用文本到图像扩散模型的生成反馈来优化 CLIP 表示,且仅使用图像(无对应文本)。我们证明 DIVA 显著提升了 CLIP 在极具挑战性的 MMVP-VLM 基准上的性能,该基准在很大程度上评估了细粒度视觉能力(例如,3-7% ↑),并增强了 MLLM 和视觉模型在多模态理解和分割任务上的性能。在 29 个图像分类和检索基准上的广泛评估证实,DIVA 保留了 CLIP 强大的零样本能力。
🤖 架构
给定一张图像,CLIP 模型将视觉特征编码为条件的主要部分,然后生成式扩散模型以含噪图像和条件作为输入,预测所添加的噪声。我们通过生成式反馈,利用扩散损失最大化图像似然来优化 CLIP 的表示。
🔨 安装
克隆此仓库并安装所需的软件包:
git clone https://github.com/baaivision/DIVA.git
cd DIVA
mkdir -p outputs logs datasets pretrained_weights/CLIP pretrained_weights/SD
conda create -n diva python=3.9
conda activate diva
pip install -r requirements.txt
核心软件包:
- Pytorch 版本 2.0.0
- open-clip-torch 版本 2.24.0
- timm 版本 0.9.8
🍹 DIVA 生成式微调的准备
数据获取
对于数据准备,请参阅 image2dataset 和 MMVP 以获取本工作中使用的训练和评估数据。收集好相应的数据集后,直接将其放入 dataset/ 文件夹路径中。
预训练权重下载
对于预训练权重的准备,请参阅 OpenAI ViT-L-14/224&336、MetaCLIP ViT-L/H-14、SigLIP ViT-SO-14/224、SigLIP ViT-SO-14/384、DFN ViT-H-14/224、DFN ViT-H-14/378 和 SD-2-1-base 以获取判别式 CLIP 模型以及提供生成式反馈的所利用的扩散模型的模型权重。下载完所有这些必要的权重后,分别将它们移动到对应的文件夹路径 pretrained_weights/CLIP/ 和 pretrained_weights/SD/。
代码修改
为了准备我们 DIVA 的条件设计,需要修改已安装的 CLIP 和 OpenCLIP 软件包中的部分源代码。
对于 OpenAI CLIP,请使用我们提供的 condition/OpenAICLIP_for_clip_model.py 中的内容替换 Your Conda Installation Path/anaconda3/envs/diva/lib/python3.9/site-packages/clip/model.py 中的内容。
对于 MetaCLIP 和 DFN,请分别使用我们提供的 condition/MetaCLIP_for_openclip_transformer.py 和 condition/DFN_for_openclip_transformer.py 中的内容替换 Your Conda Installation Path/anaconda3/envs/diva/lib/python3.9/site-packages/open_clip/transformer.py 中的内容。
对于 SigLIP,请使用我们提供的 condition/SigLIP_for_timm_models_visiontransformer.py 中的内容替换 Your Conda Installation Path/anaconda3/envs/diva/lib/python3.9/site-packages/timm/models/vision_transformer.py 中的内容。
🍻 训练与评估快速入门
完成上述所有准备步骤后,您可以使用以下命令直接开始训练我们的 DIVA:
# For OpenAICLIP
bash DIVA_for_OpenAICLIP.sh
# For MetaCLIP
bash DIVA_for_MetaCLIP.sh
# For SigLIP
bash DIVA_for_SigLIP.sh
# For DFN
bash DIVA_for_DFN.sh
模型库
| 方法 | 图像尺寸 | 参数量 (M) | 平均分 |
|---|---|---|---|
| OpenAI ViT-L-14 | 224² | 427.6 | 25.9 (+6.6) |
| OpenAI ViT-L-14 | 336² | 427.9 | 25.2 (+5.2) |
| MetaCLIP ViT-L-14 | 224² | 427.6 | 27.4 (+3.7) |
| MetaCLIP ViT-H-14 | 224² | 986.1 | 31.9 (+6.7) |
| SigLIP ViT-SO-14 | 224² | 877.4 | 40.7 (+2.9) |
| SigLIP ViT-SO-14 | 384² | 878.0 | 38.5 (+1.5) |
| DFN ViT-H-14 | 224² | 986.1 | 43.7 (+4.4) |
| DFN ViT-H-14 | 378² | 986.7 | 37.8 (+3.0) |
值得注意的是,由于在训练阶段引入的条件设计中的随机性,以及在推理阶段针对 OpenAI CLIP 的局部 patch token 选择,使用我们提供的 OpenAI CLIP 权重在 MMVP_VLM 基准上获得的分数可能与我们论文中报告的结果不一致。此时,如果分数不符合预期,我们建议多次尝试不同的随机种子。
🎨 可视化
💙 致谢
DIVA 基于出色的 Diffusion-TTA, MMVP, CLIP, OpenCLIP, timm.
📝 引用
@article{wang2024diffusion,
title={Diffusion Feedback Helps CLIP See Better},
author={Wang, Wenxuan and Sun, Quan and Zhang, Fan and Tang, Yepeng and Liu, Jing and Wang, Xinlong},
journal={arXiv preprint arXiv:2407.20171},
year={2024}
}