CLIP 论文笔记
CLIP
论文全名: Learning Transferable Visual Models From Natural Language Supervision
简介

- Pretrain: 通过自然语言处理来获得一个从视觉模型中迁移,从 image encoder 上获取特征,然后和 text encoder 上执行特征匹配,然后进行对比学习:在对角线上的就是正样本,而非对角线上的就是负样本
- Classifier: 把分类标签嵌入到一个 prompt 变成 "A photo of a xxx" ,然后通过 text 编码器可以得到 文本的 embedding 数据
- Prediction: Zero shot 预测,输入一个图像经过 image encoder,去算 cosine 相似度然后得到最后的语句输出,也就是分类
这里的标签也是可以改动的,这是非常强大的地方,因为摆脱了 Category Label, 可以输入任意的标签执行 encoder 就行了,可以是训练数据集之外的内容,只要 encoder 的 text label
基于 CLIP 可以做非常多的工作,包括最经典的传统的图像分割,图像分割等
模型与训练
主要就是以下几个问题
如何预训练
- 准备一个超级大的数据集,400 million 的文本对,使用自然语言(因为自然语言的迁移性很好)
- Image + Text 两个 encoder 执行,计算出对应的 feature
- 两个 feature 通过 embedding 映射到同一个空间中,使用的是线性层
- 最后构造出了一个矩阵,矩阵的对角线上就是正确的图文对,非对角线则不匹配,训练目标就是让对角线的值最大
这里说一下对角线的值就是,横纵向都做 softmax,然后让匹配的那个值在两个 softmax 中都最大
为什么使用对比学习
- 词汇都来自于互连网,没有固定的类别,不是一个确定的词可以指定,只用 label 会导致信息额外的丢失,而且数据相对 noisy,成本不允许
另外 label 化也会丢失一些自然语言信息,例如:"a small brown dog running on grass" 就只剩一个 "dog" 了
- 对比学习有非常好的分类可迁移性,对于自然语言的分类,例如 "a cat" 和 "the dog" 这种都可以学习到其中的隐藏特征,不需要重新训练分类器
- 训练效率高,对于 N 的 batch size 都可以产生 $N^2$ 个对比样本,效率很高
总结而言,CLIP 的目的不是为了做类别的预测,而是判断文本和图片是否匹配,学习的是一个 一个共享的图文语义空间
什么是双塔模型
双塔就是两个独立编码器结构, Image + Text,最终让图像和文本映射到同一个 embedding 空间中
Image Encoder:作者尝试了 ResNet, Vit (Vision Transformer)
Text Encoder: 作者使用了 Transformer + BPE 编码