介绍

目前最先进的计算机视觉系统都是被训练来预测一组固定的预定物体类别。这大大限制了其通用性和可用性。

本文名为 Contrastive Language-image Pre-trainingCLIP)方法直接从图像的原始文本中学习,预测哪个标题与哪个图像相配这一简单的预训练任务,是一种高效且可扩展的方式,且可以利用更广泛的数据来源,而无需人工标注。

本文不预先定义标签类别,直接利用从互联网爬取的4亿个图文对进行图文匹配任务的训练,并将其成功迁移应用于30个现存的计算机视觉。

方法

CLIP联合训练一个图像编码器与一个文本编码器,以预测一批图文正确配对。由于数据集足够大,图像数据增强只用了随机大小和随机宽高比的裁剪。

本文从网络爬取了 4 亿对图文数据集,称为 WebImageText(WIT),预训练时,使用 NN 个图文对的超大batch,将batch中匹配的 NN 个图文对作为正样本,而不匹配的 N2NN^2 - N 个图文对作为负样本。正样本的两个编码器输出的特征的cosine similarity尽可能大,而负样本的尽可能小。如图所示。

在测试中使用prompt工程,即将图像的标签文本填入一组预先设定好的句子,例如“A photo if {object}”,再将句子作为文本编码器的输入。即,学习的文本编码器通过嵌入目标数据集类的名称或描述来合成zero-shot线性分类器。

矩阵中对角线蓝色标注的为正样本对(匹配的图文对),其他的则是负样本(不匹配的图文对)

其中,两个编码器的特征都会经过一个线性层,进行投影,不用非线性层的原因是作者没有注意到这两个版本之间的训练效率的差异。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# image_encoder - 图像编码器(ViT,ResNet等)
# text_encoder - 文本编码器(CBOW,Text Transformer等)
# I[n, h, w, c] - 对齐图像小批量
# T[n, l] - 对齐文本小批量
# W_i[d_i, d_e] - 图像嵌入的线性投影
# W_t[d_t, d_e] - 文本嵌入的线性投影
# t - 可学习的 Temperature 参数
# 提取每个模态的特征表示
I_f = image_encoder(I) #[n, d_i]
T_f = text_encoder(T) #[n, d_t]
# 对不同模态通过线性投影进行嵌入
I_e = l2_normalize(np.dot(I_f, W_i), axis=1)
T_e = l2_normalize(np.dot(T_f, W_t), axis=1)
# 按比例对于每个图文对的“余弦相似性” [n, n]
logits = np.dot(I_e, T_e.T) * np.exp(t)
# 对称损失函数
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

选择和设置模型

对于ResNet-50作为图像编码器的基础架构,我们使用ResNet-D改进和antialiased rect-2 blur池化对原始版本进行了一些修改。

我们还将全局平均池化层替换为注意力池化。注意力池化中是以单层的 Transformer多头QKV注意力来实现的。其中查询是以图像的全局平均池化的表示为条件的。

对于ViT作为图像编码器的基础架构,为合并的补丁和位置嵌入添加一个额外的归一化层。

训练

每个小批量使用32768个图文对
训练了 5 个ResNet和3个ViT,具体超参数设置如下。