CLIP(Contrastive Language–Image Pre-training)论文阅读

1. 简介

CLIP(Contrastive Language–Image Pre-training)是OpenAI第一篇关于多模态的论文,在2021年1月跟DALL・E一起发布。其中DALL・E用于文本生成图像,CLIP用于图像分类。CLIP跟之前常用的有监督图像分类相比不同,学习中结合了文本的语义信息(natural language supervision),可以实现类似GPT-3的zero-shot的能力。

CLIP有以下两个优势: * 大幅降低标注成本。之前标注都需要人手工标注大量高质量样本,现在通过搜索引擎自动构建4亿条图像-文本对用于训练。 * 迁移泛化能力强。做为预训练模型,跟特定任务解耦(task-agnostic),可以实现类似zero-shot的效果。

2. 实现思路

2.1 数据构建

通过搜索引擎进行了500000次query,产生了4亿条图文对(image-text pair), 平均每个query产生20000条图文对。

2.2 网络构建

1. 针对图像和文本分别构建一个Image-EncoderText-Encoder, 使用对比学习(Contrastive Learning)来进行训练。给定一个batch为N的图像-文本对(image, text),CLIP尝试预测NxN个可能的关系, 图中蓝色部分就是要预测的部分。这种深度度量学习(deep metric learning)最早是在multi-class N-pair loss中引入。 2. 基于分类标签字段(car/dog)和prompt模版(a photo of a {obj})创建分类标签句子文本, 通过Text-Encoder进行向量编码 3. 图像通过Image-Encoder进行图像编码,计算跟文本向量距离,得到分类结果 4. 伪码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 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 proj of image to embed
# W_t[d_t, d_e] - learned proj of text to embed
# t - learned temperature parameter
# extract feature representations of each modality
I_f = image_encoder(I) #[n, d_i]
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

2.3 细节说明

  1. 没有使用ImageNet的权重初始化Image-Encoder
  2. 论文借鉴Contrastive Learning of Medical Visual Representations from Paired Images and Text,但不同的是删除了文本转换函数; 简化了图像转换函数
  3. 使用linear-projection(线性映射)将encoder表示映射到multi-modal向量空间
  4. 替换global average pooling为attention pooling机制
  5. 使用adam优化器,temperature参数初始为0.07
  6. Image-Encoder分别尝试了ResNet-50和ViT
  7. Text-Encoder为Transformer, 最大长度为76

2.4 效果

3. 参考文档