介绍
基于深度学习的视觉任务通常依赖大量的人工标注监督数据,而且标签类别只能在限定类别,对于其他类别的目标识别则无能为力。本文考虑的是如何训练一个视觉模型能表征更广泛的语义。
首先数据方面,使用网络上大量的图像-文本对代替人工标注,其次设计一个网络能进行文本图像的语义对齐。
方法
Contrastive Language–Image Pre-training 设计的网络监督信息为图像特征与文本特征的一致性分数。
如上图所示,网络学习时对于一组数据,保证图像与对应的文本匹配得分最高,伪代码如下:
# 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
关键是图像和文本特征计算相似度矩阵,然后与真值标签计算交叉熵损失。
经验
- CLIP 的高性能:作者对比了 Image-to-caption 任务,CLIP 的效果更好。
- 可扩展和通用型:相比与基于 ImageNet 的纯视觉任务,在不同视觉任务泛化上,CLIP 表现更优
- Transfomer 网络:ViT 网络相比 ResNet 表现效果更好,可能文本也使用 transformer 特征对齐更好?
应用
推理:基于预训练的模型可以通过对图像提取特征后,与指定类别的文本特征计算相似度,判断属于指定类别的概率。 VLM:在多模态任务中,图像特征可以通过 CLIP 提取后与文本向量拼接后,接入到 Casual Model 中推理。
参考文献
- https://openai.com/index/clip/
- Learning Transferable Visual Models From Natural Language Supervision