PaperReading:CLIP series
paperreading
本文字数:3.3k 字 | 阅读时长 ≈ 13 min

PaperReading:CLIP series

paperreading
本文字数:3.3k 字 | 阅读时长 ≈ 13 min

CLIP

传统的视觉模型只能够在预先定义好的物体类别中进行分类,泛化能力有限。作者借用 400M 的图文对数据,来替代人工标注,同时使用对比学习的方式来训练视觉模型,即哪张图像对应哪段文本。预训练好的 model 可以 non-trivially 迁移到大多数下游任务中,例如不需要微调就可以在 ImageNet 上达到与 ResNet-50 相当的性能。

Motivation:在 paper 的 introduction 部分,作者回顾了 NLP 领域的一些成功经验,例如 GPT 和 BERT 系列,特别是他们的 target-agnostic 这种任务无关的目标函数。随后作者介绍了早期图文学习的一些探索吧,但是都不尽如人意。作者考虑到,NLP 已经通过大规模文本预训练实现了强泛化能力,而计算机视觉仍受限于人工标注数据集。是否可以借鉴 NLP 的成功,使用 Web 上的图文对,通过自然语言监督来训练更通用、更灵活的视觉模型。然后作者就提出了 CLIP。

1. 数据收集

为训练 CLIP,作者希望构建一个规模大、覆盖广、具有自然语言描述的图像数据集,以支撑 zero-shot 能力的学习。现有数据集,例如 MS-COCO、Visual Genome 等,虽然质量高,但数量有限(各只有约 10 万张图片)。而 YFCC100M 虽然图片多,但配对文本质量参差不齐。

作者为了支持 CLIP 的大规模预训练,自己构建了一个 4 亿图文对的超大数据集 WIT,通过关键词检索 + 筛选机制,从互联网上收集自然图文对,以覆盖尽可能多的视觉概念和语言表达。

2. 模型架构

采用了可扩展的 ResNet 和 Vision Transformer 架构,通过系统性地扩大模型的宽度、深度和分辨率来提升性能,文本编码器使用 Transformer。

ResNet:使用 5 个 ResNet 系列模型,ResNet-50,ResNet-101,RN50x4、RN50x16、RN50x64,同时做了一些改进,例如 global average pooling 替换为 attention pooling 等。扩展方式参考 EfficientNet,同时增加宽度、深度和分辨率,构造出更大的模型,RN50x4(约 4× 计算量),RN50x16(约 16×),RN50x64(约 64×)。
ViT:使用标准的 Vision Transformer 架构(B/32、B/16、L/14),并做了一些小改动,例如在 patch+positional embedding 后加了一个 layer norm,改了初始化方式,最后使用 [EOS] token 的 embedding 作为图像表征,同时也使用了 linear projection 输出 multimodal embedding。
text encoder:使用 Transformer 架构,和 GPT 类似(非 BERT),配置为 12 层、512 hidden dim、8 个注意力头,vocab size 为 49152(BPE 编码),使用 [SOS] 和 [EOS] 标记,输出为 [EOS] 的激活,送入线性层得到最终文本表示,同时有 masked self-attention 保留语言建模的能力。

3. 训练细节

CLIP 使用对比学习目标、大 batch、混合精度、分布式训练和多种内存优化策略。

模型选择:

训练设置与超参数

使用 Adam 优化器,配合 decoupled weight decay(L2 正则),使用 cosine 学习率调度。批大小非常大,32,768,使用混合精度训练加速和节省内存。为了训练超大模型,作者还使用了 gradient checkpointing、half-precision Adam 统计量、stochastic rounding 的 half-precision 权重等内存优化技巧。相似度计算分布式并行:每个 GPU 只计算自己负责的部分图文相似度

模型 训练设备 耗时
RN50x64 592 × V100 GPUs 18 天
ViT-L/14 256 × V100 GPUs 12 天
ViT-L/14@336px ↑额外再训练 1 epoch

4. 训练目标

CLIP 中的 text encoder 和图像编码器使用对比学习一起端到端、联合训练的,用来让图文对彼此靠近、不相关的图文远离

# image_encoder - ResNet or Vision Transformer
# text_encoder  - CBOW or Text Transformer
# I[n, h, w, c] - minibatch of aligned images
# T[n, l]       - minibatch of aligned texts
# W_i[d_i, d_e] - learned projection of image to embedding space
# W_t[d_t, d_e] - learned projection of text to embedding space
# t             - learned temperature parameter

# Extract feature representations of each modality
I_f = image_encoder(I)  # [n, d_i]  # 这边的 image feature 用的是 cls token
T_f = text_encoder(T)   # [n, d_t]

# Joint multimodal embedding [n, d_e]
I_e = l2_normalize(np.dot(I_f, W_i), axis=1)
T_e = l2_normalize(np.dot(T_f, W_t), axis=1)

# Scaled pairwise cosine similarities [n, n]
logits = np.dot(I_e, T_e.T) * np.exp(t)

# Symmetric loss function
labels = np.arange(n)
loss_i = cross_entropy_loss(logits, labels, axis=0)
loss_t = cross_entropy_loss(logits, labels, axis=1)
loss = (loss_i + loss_t) / 2

CoCa

Contrastive Captioner(CoCa)是一种极简的 image-text 编码-解码预训练框架,结合对比损失(contrastive loss) 和 描述生成损失(captioning loss),进一步融合了 CLIP 的对比学习模型的能力(例如 zero-shot 分类、检索)以及 SimVLM 的生成模型能力(例如图像描述、问答等)

作者 claim 的当前的几个问题

作者的做法:CoCa 是一个融合三大范式(single/dual encoder 和 encoder-decoder)的统一架构,通过结构上将 decoder 分为单模态和多模态两段,同时训练对比和生成两个任务,在多种数据上共同优化,实现了更强的跨模态理解与生成能力。

作者通过结构解耦的 encoder-decoder、联合训练对比损失(contrastive loss)和描述损失(captioning loss),实现了对图像全局语义和细粒度区域信息的同时建模,既保证了全图级理解能力,也具备了生成细节能力。这就是 CoCa 模型比纯 CLIP 或纯 caption 模型更强的根本原因之一。

1. 方法部分

本文的核心是融合三大范式(single/dual encoder 和 encoder-decoder)的统一架构

# image, text.ids, text.labels, text.mask: paired {image, text} data
# con_query: 1 query token for contrastive embedding
# cap_query: N query tokens for captioning embedding
# cls_token_id: a special cls_token_id in vocabulary

def attentional_pooling(features, query):
    out = multihead_attention(features, query)
    return layer_norm(out)

img_feature = vit_encoder(image)  # [batch, seq_len, dim]
con_feature = attentional_pooling(img_feature, con_query)    # [batch, 1, dim]
cap_feature = attentional_pooling(img_feature, cap_query)    # [batch, N, dim]

ids = concat(text.ids, cls_token_id)
mask = concat(text.mask, zeros_like(cls_token_id))  # unpad cls_token_id
txt_embs = embedding_lookup(ids)

unimodal_out = lm_transformers(txt_embs, mask, cross_attn=None)

multimodal_out = lm_transformers(
    unimodal_out[:, :-1, :], mask, cross_attn=cap_feature
)

cls_token_feature = layer_norm(multimodal_out[:, -1:, :])  # [batch, 1, dim]

con_loss = contrastive_loss(con_feature, cls_token_feature)

cap_loss = softmax_cross_entropy_loss(
    multimodal_out, labels=text.labels, mask=text.mask
)

LiT

经典零样本学习(classical zero-shot learning, ZSL):指的是在模型训练阶段完全没有见过某些类别的数据,模型只能通过这些类别的属性(如颜色、大小、文字描述等)去“推理”这些新类别。举例:你训练一个模型识别猫和狗,但从没给它看过“长颈鹿”的图像,只给它“长颈鹿”的描述(比如“有长脖子、斑点”)。测试时,模型要根据描述去识别长颈鹿图片。

零样本迁移(zero-shot transfer):是指模型在预训练阶段可能间接接触到相关知识(比如在图文对比预训练中见过“长颈鹿”图片配文),但在真正的下游任务迁移阶段,不使用任何该任务的标注样本来训练模型,只通过已有能力来完成新任务。换句话说,它是“零样本”迁移到下游任务,而不是完全零接触新概念。

1. motivation

提出了一个 contrastive-tuning,关键思路是:固定图像编码器(使用预训练的强图像模型),只训练文本编码器,并使用图文对数据进行对齐。因为作者发现 lock 视觉塔效果更好。

EVA

EVA 是一种基于 ViT 的大规模视觉模型,仅用公开图像数据,通过掩码特征重建(以 CLIP 图像特征作为监督信号)进行训练,展示了其在众多下游任务中的优越性能。EVA 不仅在图像、视频、检测、分割等任务中刷新了 SOTA,还能作为 CLIP 多模态模型的强大视觉编码器,显著减少训练资源的消耗。文章发现模型规模扩大后,迁移能力会出现质变式提升。这项工作强调了“自监督学习 + 公共数据 + 大规模模型”所能达到的上限。

作者在 introduction 中提到,虽然视觉领域有了类似 NLP 中掩码预测(MIM)的方法,但当前表现最好的大模型,还是依赖大量标注数据,而且纯 MIM 无法有效训练出高质量的大模型,原因是自然图像的信息稀疏,像素重建学不到语义。

本文发现直接让模型预测 CLIP 的视觉特征,是一种既简单又强大的 MIM 方法:不需要 token 化;不需要额外蒸馏;不需要有标签数据;还能很好地同时建模结构和语义;训练出的模型在各类下游任务上泛化能力很强;可以成功扩展到 10 亿参数级别。

文中对模型是否使用 tokenizer 还是直接蒸馏什么的做了实验,给出了两个表格

•	ImageNet-1K Top-1 acc.:图像分类准确率(越高越好)
•	ADE20K mIoUss:语义分割平均交并比(单尺度评估,越高越好)

🟠 (a) 是否对 CLIP 视觉特征进行 Tokenization(量化成视觉 token)

Tokenize? 预训练轮数 pt epochs ImageNet-1K Top-1 acc. ADE20K mIoUss
-(即 CLIP baseline) 85.0(灰色) 52.6(灰色)
300 85.0 52.7
1600 85.5 53.1
800(EVA 默认设置) 85.5 🟣 53.3 🟣

✅ 解释:
• 前两行使用 tokenized CLIP 特征(用 VQ-VAE 或 dVAE 把 CLIP feature 离散化),也就是 BEiT 一类做法。
• 最后一行使用 EVA 的设置:不做 token 化,直接回归 CLIP 特征。
• 可以看到:
• EVA 训练效果最好(Top-1 acc 85.5%,mIoUss 53.3);
• token 化反而不一定带来好处;
• 所以结论是:不需要做 semantic feature tokenization,直接回归效果最好。

🟢 (b) 是否用 CLIP 做蒸馏(distill)

Distill.? pt epochs ImageNet-1K Top-1 acc. ADE20K mIoUss
- 85.0(灰色) 52.6(灰色)
300 85.1 52.5
800 85.1 52.7
800(EVA) 85.5 🟣 53.3 🟣

✅ 解释:
• 这里比较的是是否使用 CLIP 特征做“蒸馏”目标(直接预测 CLIP 特征 vs. 用 CLIP 教你怎么预测原图)。
• 结果发现:
• 蒸馏(✓)并不能带来提升,甚至有轻微下降;
• EVA 的方案(✗,不蒸馏而直接做 masked regression)表现更好;
• 所以结论是:不需要蒸馏,直接用 CLIP 特征做 MIM 的监督目标就足够了。

🟣 紫色标注:EVA 的默认配置
• ✗ tokenize + ✗ distill + pt epochs = 800 是 EVA 的默认设置;
• 它也是所有实验中在两个任务上都表现最好的;
• 这说明 EVA 的 训练策略简单、有效,且可扩展。

⚪ 灰色数字含义:

Numbers in grey refer to directly fine-tuning CLIP vision encoder…

•	表示的是“直接微调原始 CLIP 模型”在这两个任务上的表现(没有做 MIM、也没有再预训练)。
•	作为 baseline 来对比使用 EVA 预训练的效果;
•	可以看出:加上 EVA 的 MIM 预训练之后性能有明显提升。

最终总结

对比点 是否有提升? 原因和结论
tokenization ❌ 无明显提升 不如直接回归 CLIP 特征简单高效
distillation ❌ 无提升 蒸馏方式不如直接用 CLIP 作为预测目标
EVA(不 token、不蒸馏) ✅ 表现最强 简洁有效,适合扩展到大模型和多任务

EVA-CLIP

SigLIP

5月 06, 2025
4月 06, 2025
ufw