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. 伪码如下:
# 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. 参考文档

### 关于Contrastive Language-Image Pre-training (CLIP) 的论文下载与阅读 #### CLIP的核心概念 CLIPContrastive Language-Image Pre-training)是一种基于对比学习的多模态模型,其主要目标是通过大量的文本-图像对来训练一个能够理解视觉和语言之间关系的通用表示[^3]。该模型利用对比学习的优势,在预训练过程中无需精确预测某个特定的文本描述,而是专注于判断哪些文本更可能与给定的图像相关联[^5]。 #### 论文获取途径 CLIP的相关研究由OpenAI团队完成,原始论文名为《Learning Transferable Visual Models From Natural Language Supervision》。可以通过以下几种方式进行下载: 1. **官方链接**: OpenAI通常会公开发布其研究成果,可以直接访问OpenAI官网并搜索“CLIP”或“Learning Transferable Visual Models From Natural Language Supervision”,找到PDF版本进行下载。 2. **学术资源平台**: 使用Google Scholar或其他学术搜索引擎输入关键词“Contrastive Language-Image Pre-training”或“CLIP paper”。这些平台上可能会提供免费的PDF下载选项。 3. **第三方存储库**: 如果无法直接从官方网站获得,则可以尝试在arXiv上查找是否有上传的版本。大多数机器学习领域的最新进展都会第一时间发布在此处。 #### 阅读建议 为了更好地理解和吸收CLIP的内容,推荐按照如下结构展开阅读: - **摘要部分**:快速了解整个工作的背景意义以及取得的主要成果。 - **方法论章节**:重点掌握如何构建损失函数实现对比学习机制;具体到正样本负样例的选择策略等方面[^4]。 - **实验分析**:注意作者是如何验证零样本迁移能力的有效性的,并且观察跨多种下游任务的表现情况。 以下是Python代码片段用于加载已发布的CLIP模型作为示例: ```python import clip import torch device = "cuda" if torch.cuda.is_available() else "cpu" model, preprocess = clip.load("ViT-B/32", device=device) image = preprocess(Image.open("example_image.jpg")).unsqueeze(0).to(device) text = clip.tokenize(["a diagram", "a dog", "a cat"]).to(device) with torch.no_grad(): image_features = model.encode_image(image) text_features = model.encode_text(text) logits_per_image, logits_per_text = model(image, text) probs = logits_per_image.softmax(dim=-1).cpu().numpy() print(f"Label probs: {probs}") ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MLTalks

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值