CLIP: Learning Transferable Visual Models From Natural Language Supervision学习笔记

  • Alec Radford, Jong Wook Kim et.al. PMLR, 2021.(Citations 6185)

  • CLIP(Contrastive Language-Image

  • Pretraining)是一种基于对比学习的模型,由OpenAI提出。它是一种多模态模型,旨在将自然语言和图像进行联合建模,实现图像和文本之间的语义对齐。

  • CLIP的核心思想是通过训练一个神经网络模型,使其能够同时理解图像和文本表示,并将它们映射到一个共享的嵌入空间中。这个嵌入空间使得相关的图像和文本在特征空间中更接近,而不相关的图像和文本则更远离。通过对比学习的方法,CLIP使得图像和文本能够在嵌入空间中形成对应关系,从而能够进行跨模态的语义匹配和推理。

  • CLIP的训练过程包括两个阶段:预训练和zero shot 推理。在预训练阶段,CLIP使用大规模的图像和文本数据集进行训练,通过自监督学习的方式学习图像和文本的表示。在zero shot 推理阶段,CLIP使用有标签的图像和文本数据进行进一步训练,以提高模型在特定任务上的性能。

  • CLIP的优势在于它不需要大量的有标签数据就能实现强大的多模态能力,因为它是通过对比学习来学习表示,而不是通过传统的有监督学习方法。这使得CLIP在处理各种语言和图像任务时具有很强的泛化能力。

  • CLIP已经在多个任务上展示出了出色的表现,如图像分类、图像生成、文本分类等。它不仅能够对图像和文本进行联合理解,还可以在不同任务之间进行迁移学习,从而提高模型的效能和效率。

  • 论文最重要的点是利用自然语言信号来训练一个比较好的视觉模型

1.预训练阶段

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nm9I7Pvc-1688040870954)(对比学习.assets/v2-d2b837d48f2a33842dac1f52ebb75f61_r.jpg)]

  • 模型的输入:若干个图像-文本对,比如如图最上面的数据中图像是一个小狗,文本是 ”Pepper the aussie pup”。

  • 模型的架构:分为两部分,图像编码器和文本编码器

  • 图像部分:图像通过一个 Image Encoder 得到一些特征,这个 encoder 既可以是 ResNet,也可以是 Vision Transformer。假设每个 training batch 都有 N个图像-文本对,那么就会得到 N 个图像的特征。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DyGBfXaq-1688040870955)(对比学习.assets/image-20230629194240440.png)]

  • 文本部分:文本通过一个 Text Encoder 得到一些文本的特征,也就是Transformer。同样假设每个 training batch 都有 N 个图像-文本对,那么就会得到N 个文本的特征。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7hF1HA5E-1688040870955)(对比学习.assets/image-20230629194221083.png)]

  • 接下来进行对比学习,就需要正样本和负样本。这篇文章将配对的句子和文本当做一对正样本(也就是对角线上的);对角线之外的当做负样本。

2.zero-shot推理阶段

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L3KUBpkG-1688040870956)(对比学习.assets/image-20230629195307041.png)]

接下来就是CLIP如何去做zero-shot的推理。

  • 因为CLIP的这个模型经过预训练之后,其实只能去得到一些视觉上和文本上的特征,并没有在任何分类的任务上去做继续的训练或者微调,是没有这么一个分类头的。那如果没有分类头怎么去做推理呢?
  • 作者就想出来一个巧妙的方法:利用自然语言的 prompt template。以ImageNet为例,CLIP 先把ImageNet里1000个类,比如说上图中的飞机、汽车、狗变成一个句子,用这些物体去替代句子里的object,这样就把一个单词变成了一个句子。由于ImageNet有1000个类,这样就会生成1000个句子,然后这1000个句子通过之前预训练好的文本编码器就会得到1000个文本的特征。
  • 那为什么要做prompt template 呢?虽然直接用这些单词去抽取这种文本的特征也是可以的,但是因为在模型预训练的时候,图片每次看到的基本都是一个句子,如果在推理的时候把所有的文本都变成一个单词,就跟在训练的时候看到的这个文本不太一样了,效果就会稍有下降。而且怎么变成句子也是很有讲究的,CLIP这篇论文后面还提出了prompt engineering和prompt ensemble这两种方式去进一步的提高模型的准确率,而不需要重新训练模型。
  • 在推理的时候,不论输入任何一张照片,只要把这张照片扔给图片的编码器,得到了图片特征之后,就去拿这个图片的特征去跟所有的文本特征去做cosine similarity计算。图像的特征跟哪个文本特征最相似,就把这个文本特征所对应的那个句子挑出来,从而完成了分类任务。

3.模型整体结构的伪代码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FxT3f7SW-1688040870956)(对比学习.assets/ad7360612bc24db78f63cdc79491160b.png)]
上面是模型总体结构的伪代码:

  1. 图像的输入I[n, h, w,c],文本的输入T[n,l],其中n是 batch size,l是序列长度。
    2.将图像和文本的输入分别通过Image Encoder和Text Encoder得到图像和文本的特征I_f ,T_f,其中Image Encoder可以是ResNet或Vision Transformer,Text Encoder 可以是CBOW或Text Transformer。
  2. 在得到I_f 和T_f后,这里还有一个投射层W_i和W_t,用来学习如何从单模态变成多模态,然后再做L2归一化,就得到了最终的用来对比学习的特征I_e 和 T_e。
  3. 有了n个图像的特征和n个文本的特征之后,接下来就计算cosine similarity,算得的相似度也就是用来做分类的 logits。
  4. 一旦有了预测的logits,接下来就需要一个ground truth,logits 就去跟ground truth做交叉嫡目标函数,从而算得最后的loss。这里可以看到算ground truth用的是 arrange function,得到值就是从1开始1234567一直到n,跟之前讲过的 MoCo创建ground truth方式是不一样的。但是对于CLIP 来说正样本全都是在对角线上的,所以就用这种形式去创建ground truth。
  5. 然后logits 和ground truth的labels计算交叉嫡损失,loss_i 和loss_t分别是lmage和Text的 loss,最后求平均就得到了loss。

4.训练

  • 作者说对于视觉模型一共训练了8个模型,5个ResNet和3个Vision Transformers:
    • 对于ResNet,作者训练一个Resnet50、一个ResNet101,然后再训练三个Resnet50:它们根据EfficientNet的方式,把模型里的channel宽度、模型深度和模型大小做了调整,从而得到了三个ResNet的变体,即Resnet50x4、Resnet50x16和Resnet50x64,计算量分别是原始的ResNet50的4、16、64倍。
    • 对于Vision Transformers,作者选择了VT-B/32,VT-B/16和ViT-L/14(其中32、16、14都是patch的大小)。
  • 对于所有的模型都训练了32 个epoch,且使用Adam优化器。对于所有超参数,作者简单的做了一些Grid Search,Random Search和手动调整,为了调参快一些。在做超参搜索的时候都是用最小的ResNet50去做的,并且只训练1 个epoch,对于更大的模型作者就没有进行调参了。
  • 训练时作者使用的batch size为32768,很显然模型训练是在很多机器上一起做分布式训练。同时也用到了混精度训练,不仅能加速训练,而且能省内存。混精度训练其实是现在一个常见的操作了,基本上涉及Transformer的论文都会用。
  • 对于最大的ResNet来说,即上文中的RN50x64,在592个V100的GPU上训练了18天;而对于最大的Vision Transformer来说,在256个V100GPU上训练只花了12天。证实了训练一个Vision Transformer是要比训练一个ResNet更高效的。因为VT-LU14的效果最好,作者又拿与训练好的VT-U14-再在数据集上fine-tune了1个 epoch,而且用了更大的图片(336×336),这种在更大尺寸上fine-tune 从而获得性能提升的思路来自于Fixing the train-test resolution discrepancy,最后这个模型就称为ViT-L/14@336pX。如无特殊指明,本文中所有“CLIP"结果都使用了我们发现效果最好的这个模型(ViT-L/14@336px)。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值