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