CLIP(Contrastive Language-Image Pre-Training):

利用文本的监督信号训练一个迁移能力强的视觉预训练模型

通过对比学习,训练得到图片和文本的相似度,传闻使用4亿个配对的数据和文本来进行训练,不标注直接爬取的

注意: 由于训练数据基本都是英文,对英文支持的比较好

用途:

CLIP主要是用来做图片分类(计算图片和文本的相似度(关联度)), 也可以辅助做GAN,检测,分割,检索等等

以往我们训练一个猫狗分类模型,换一个线条猫,点云猫,油画猫,穿着奇装异服的猫,分类网络很难还认识,但是现在只要加上一个 CLIP,模型马上就被扩展了.

CLIP是如何训练的:

CLIP是如何进行推理的:

可用模型介绍和说明:

`clip.available_models()`可列出CLIP可用模型列表:

'RN50','RN101','RN50x4','RN50x16','RN50x64','ViT-B/32','ViT-B/16','ViT-L/14','ViT-L/14@336px'

CLIP 是一组模型。有 9 个图像编码器: 5 个卷积编码器和 4 个 transformer 编码器。卷积编码器是 ResNet-50、ResNet-101 和类似 EfficientNet 的模型,称为 RN50x4、RN50x16、RN50x64(数字越大,模型越好)。transformer 编码器是视觉 Transformer(或称之为 ViT(Visual Transformer)):ViT-B/32、ViT-B/16、ViT-L/14 和 ViT-L/14@336。最后一个在分辨率为 336×336 像素的图像上进行微调,其他的则在 224×224 像素上进行训练。

ViT-B/16中:

+ ViT: Visual Transformer

+ B: Base(Base(基础)/ Large(大的)/ Huge(极大的))

+ 16: Patch Size(块大小), 16×16

三个模型(Base(基础)/ Large(大的)/ Huge(极大的))的参数,在源码中除了有Patch Size为16*16的外还有32*32的。

Model

Patch Size

Layers

Hidden Size D

MLP Size

Heads

Params

ViT-Base

16×16

12

768

3072

12

86M

ViT-Large

16×16

24

1024

4096

16

307M

ViT-Huge

14×14

32

1280

5120

16

632M

Layers 就是Transformer Encoder中重复堆叠Encoder Block的次数L

Hidden Size 就是对应通过Embedding层(Patch Embedding + Class Embedding + Position Embedding)后每个token的dim(向量的长度)不用那么复杂,其实就是Patch Embedding后向量的长度

MLP Size 是Transformer Encoder中MLP Block第一个全连接的节点个数(是token长度的4倍) MLP中第一个全连接层升维数

Heads 代表Transformer中Multi-Head Attention的heads数。

Params 参数量

Patch Size 为32 x 32,即一张图片可以被划分为224/32 x 224/32 = 7x 7 个patch,每个patch的shape为: [32, 32,3] ,共7×7= 49个,我们可以对每个patch进行线性映射得到所需要的token [32 x 32 x 3] = [3072] ,即

即一张图片被切分为49个patch,对每个patch进行变换后得到shape为[3072]的token,即tokens的shape为 [49, 3072] 。

基准测试:

具体使用方法和代码:

github仓库:GitHub – openai/CLIP: Contrastive Language-Image Pretraining