CLIP(Learning Transferable Visual Models From Natural Language Supervision)

CLIP是OpenAI的一个非常经典的工作,从网上收集了4亿个图片文本对用于训练,最后进行zero-shot transfer到下游任务达到了非常好的效果,主要流程如下:

在训练阶段,文本会通过Text Encoder(Transformer)编码成一些文本Embedding向量,图像会通过Image Encoder(ResNet50或VIT)编码成一些图像Embedding向量,然后将文本Embedding和图像Embedding归一化后通过点积计算出一个相似度矩阵,这里值越接近于1代表文本Embedding和图像Embedding越相似,即这个文本和图像是配对的。我们的目标是让这个相似度矩阵对角线趋向于1,其他趋向于0(对角线代表图像和文本配对)。

测试zero-shot阶段,会将一张没见过的图片通过image Encoder得到图像embedding,然后将所有可能的类别,通过构造a photo of a {object}的文本标签,将所有类别填入object处,通过text encoder,得到所有类别对应的文本embedding,将文本embedding和图像embedding归一化后进行点积,选择点积最大的一个文本-图像对,该类别则为预测类别。

CoOp: Learning to Prompt for Vision-Language Models

CoOp的motivation如上图所示:CLIP是固定prompt:a photo of a [class],但是不同prompt的影响影响很大,比如从图a可以看出,少了一个a,acc直接低了6个点。每次根据人工设计prompt太麻烦,设计的还不一定好,那怎么办呢?熟悉nlp的prompt的小伙伴应该脱口而出了,应该像Prefix Tuning一样,学一个连续的prompt不就完事了吗?CoOp就是这么做的。

在实验这有一个有意思的发现:nlp领域有一篇叫OptiPrompt的文献,提出连续的prompt不一定要随机初始化,可以用人工设计的prompt的embedding初始化来引入专家经验,CoOp做实验发现就算prompt参数是随机初始化的也能到达一样的效果。

CoCoOp: Conditional Prompt Learning for Vision-Language Models

CoCoOp的motivation如上图所示:作者发现他们之前提的CoOp在训练过类别的数据集上表现的很好,但是面对新的类别,能力却很差,从80的acc降到65,而原版的CLIP却保持了还不错的泛化能力,引起了作者思考,作者认为这是因为CoOp在下游任务上训练时容易overfit base classes上。我认为一这个本质原因一方面因为用的prompt是unified或者class-specific,而不是instance-specific context,另一方面我认为用unified也可以,但是要有足够的数据学到真正的unified的特征。

CoCoOp的做法很简单,他在CoOp的基础上,引入了一个轻量的网络Meta-Net(仅仅是Linear-ReLU-Linear),将image Encoder的输出通过Meta-Net得到一个M维的向量,将这M维的向量直接加在CoOp上的每一个prompt token上,通过这种方式做到instance-specific context。这种方式其实就是把每个图片的特征引入了prompt的构造里,所以CoCoOp的第一个Co就是指这种Conditional。

DenseCLIP: Language-Guided Dense Prediction with Context-Aware Prompting

由于这一系列的介绍主要围绕prompt进行,所以这篇文献也主要讲讲prompt设计那部分:

 Unifying Vision-and-Language Tasks via Text Generation

现在vision-language learning的方法都是task-specific的,即要为每个下游任务特别设计,本文利用prompt设计来兼容7个下游任务的学习,如上图所示,对不同的下游任务只需要加上不同的文本前缀即可,比如一个视觉问答的任务就加上vqa,对visual grounding的任务就加上visual grounding即可。具体模型如下所示:

 整体流程是一个encoder-docoder的结构,encoder部分将prefix prompt、text embedding、 visual embedding作为输入,其中visual embedding由faster-rcnn提取的ROl features、Box coordinates, image ides, region ids构成,把encoder输出的结果传递给一个自回归的decoder得到模型的输出。不同下有任务模板如下所示:

MAnTiS:Multimodal Conditionality for Natural Language Generation

 这篇文章把prompt用在了商品的文案生成上,首先用ResNet-152作为image encoder提取视觉特征,提取出的视觉特征会用一个linear layer映射到文本embedding的维度;商品名称和我们希望生成的文案会通过LM Token Embedding Layer提取文本特征,这里用的GPT-2。不同数据之间会用SEP分开,然后输入进一个decoder生成文案。效果如下:

MAPLE: MULTI-MODAL PROMPT LEARNING

 这篇文章的出发点很有新意,一直以来我们做prompt都是在图片或者文本一个模态做prompt,这篇文章觉得只在其中一个模态(分支)做prompt只能达到次优的性能,所以他们提出应该在每一个模态都应该做prompt,示意图如上所示。

 模型架构图如上所示:首先文本端除了文本的输入embedding,会拼接一些文本prompt向量,图像端同样除了图像的embedding输入,也会拼接一些图像prompt向量。这里要注意,这两个prompt向量是有交互的,因为作者认为为了让prompt发挥拉近不同模态距离的作用,不同模态的prompt应该要深层交互。具体交互的做法就是将文本prompt的embedding,通过一个linear层 映射到图像embedding维度,转换成图像prompt向量,但这个交互只会发生在前J层,后面J-K层就不需要交互了,因为作者认为经过前面的交互,后面层的特征已经不是各自独立模态的特征了,自然不需要交互了。

CPT:Colorful Prompt Tuning for Pre-Training Vision-Language Models

这篇文章是prompt用在image grounding的工作,我认为他的出发点十分值得思考: 

一般用Pre-Training Vision-Language Models做image grounding的做法如上图b所示,他们的做法是去随机mask一些词然后通过预测这个随机的MASK来完成预训练的任务。在预测即下游任务时,对没有mask的token做语义分类,来完成grounding的任务。那这样就会存在一个gap:因为你预训练的时候是去预测一些mask的token,而到下游任务时预测的token是非mask,那这样上下游的迁移就有可能会有问题,那为什么nlp不会有问题呢?我认为是对于文字来说,理解哪里的文字理解的方式是一样的,但是对于视觉是不一样的,比如我学会了人在“看”马这个看的概念,那和哪个是人,哪个是马来说这两个问题来说,我认为学会人在“看”马是一个不同等级的概念(可能是更高的),那这么来做效果就不一定会好了。所以CPT把问题转换为颜色预测的任务:看一些被涂上不同颜色的图片,然后把文本当作问题,最后回答什么颜色的图片是问题的答案并填空,再换句话说,原来想问你在一张人在看马的图片里,哪个是人,现在直接问你,什么颜色的人在看马,因为我们知道哪块被填上了颜色,所以解决了这个问题。

这个方法在zero shot、few shot 场景下取得了非常好的表现,除了image grounding,CPT也提出了别的下游任务建模方式:对目标分类任务,可以建模为红颜色的物体是一个什么,具体如上所示。

Multimodal Few-Shot Learning with Frozen Language Models

这篇文章讲故事的点很有意思,他认为之前对于文本大模型的prompt,都是在前面加上prefix prompt来提示做什么下游任务,然后可能和视觉模型一起微调或者冻住文本大模型来完成。这篇文章认为配对的图像特征就是一种prompt,我们可以利用这个文本配对的图像提取特征作为我们的prompt,具体结构如下所示:

将图像通过一个NF-ResNet50提取特征,然后将一些文本通过一个text embedder提取特征,然后一起输入进一个在大数据集下预训练好的7billion参数的Transformer进行自回归预测完成训练,其中只有vision Encoder是可训练的,其他模块皆冻结。这样prompt的模型可以在很多场景的zero-shot和few-shot达到一个好的效果。其中作者还提到,在面对一个新的下游任务时,我们可以输一些图像文本对让模型学习到新的概念,这样会在下游任务上表现的更好,具体如下所示:

VPT:Visual Prompt Tuning

 终于看到一篇不用文本来做视觉prompt的文章了。VPT分为deep和shallow两个版本,如果数据不充裕,就使用shallow版本,如果数据充裕,就使用Deep版本。我们可以看到VPT真的很简单,shallow版本只需要在第一层输入层之前,引入一些prompt参数,和CLS和其他输入embedding一起拼接起来输入进第一个Transformer的encoder即可。但是如果数据充裕,那自然我们觉得仅仅在输入引入prompt没法很好的利用这么多数据(说白点就是可学习参数少了),所以在每一层Transformer的输入层前都加入一些prompt参数学习。不管是shallow还是deep版本,都只需要学习输入的prompt参数和分类头。这篇文章的做法可以说是mainly-motivated by prefix-tuning/p-tuning的了,所以提示我们可以再找找nlp里work的prompt方法,看看怎么在cv上做work。      whaosoft aiot http://143ai.com

prompt learning相关推荐

  1. PADA: Example-based Prompt Learning for on-the-fly Adaptation to Unseen Domains

    Abstract 本文主要解决领域适应问题,即在几个源领域上训练算法,使其可以应用到未知领域的样本上. PADA:An example-based autoregressive Prompt lear ...

  2. Prompt learning系列之入门篇

    提纲 1 简介 2 NLP发展的四个阶段 3 Prompt learning 4 Prompt engineering 5 Answer engineering 6 Multi-prompt lear ...

  3. 【ICLR 2023】Diffusion Models扩散模型和Prompt Learning提示学习:prompt-to-prompt

    Diffusion Models专栏文章汇总:入门与实战 前言:今年prompt learning提示学习和diffusion models扩散模型实在是太火了,最新的ICLR 2023的一项工作把两 ...

  4. prompt learning 提示学习初步心得及示例 代码

    先看下简单的情感分类示例 : 基于prompt learning的情感分类示例代码_znsoft的博客-CSDN博客 NLP 目前为止经历了四个阶段: 1. 完全监督机器学习 2. 完全监督深度神经网 ...

  5. 广告行业中那些趣事系列59:详解当前大火的提示学习prompt learning

    导读:本文是"数据拾光者"专栏的第五十九篇文章,这个系列将介绍在广告行业中自然语言处理和推荐系统实践.本篇主要从理论到实践介绍了当前超火的提示学习Prompt Learning,对 ...

  6. seed+transformer+finetune+图文融合+VLP+Prompt Learning整合

    1.Seed 在神经网络中,参数默认是进行随机初始化的.不同的初始化参数往往会导致不同的结果,如果不设置的话每次训练时的初始化都是随机的,导致结果不确定.当得到比较好的结果时我们通常希望这个结果是可以 ...

  7. prompt learning受控文本生成作诗

    prompt learning是什么 小样本学习难点在于: 1.数据量较少,比如10-16个样本 2.fintune后接后置任务模型层,参数比较多 可以把这个问题看成是矩阵求解时候的,函数参数比较多. ...

  8. Prompt Learning 简介

    最近去参会,看到了大量关于Prompt相关的论文,或者说跟NLP NLU相关的新论文或多或少都使用到了Prompt learning的一些思想或者设置.由于本人主业不是是做NLP的,所以对NLP顶会的 ...

  9. 论文笔记 | 谷歌 Soft Prompt Learning ,Prefix-Tuning的 -> soft promt -> p tuning v2

    论文笔记 | 谷歌 Soft Prompt Learning ptuning -> Prefix-Tuning -> soft promt -> p tuning v2 " ...

最新文章

  1. php array的实现原理,PHP数组遍历与实现原理
  2. ASP.NET MVC3 301永久重定向实现程序
  3. 文巾解题 8. 字符串转换整数 (atoi)
  4. VB.NET开发人员必备参考10本书目
  5. CSS3 Animation制作飘动的浮云和星星效果
  6. h5活动是什么意思_深度|场景赋能H5,365天让保险线上拓客更广更容易
  7. socket 编程入门教程(一)TCP server 端:2、socket与文件描述符
  8. 域名该怎样选_注册域名该怎么选择域名
  9. MAVEN专题之九、多环境构建,作为核心开发,这个玩不转有点说不过去!
  10. 使用Loadrunner进行性能测试
  11. DirectShow之音频录制Wav
  12. APS生产计划排程(Production Planning and Scheduling)
  13. C++ 修改图片格式(后缀)
  14. window.open 卡死
  15. 360一键wifi共享 v5.3 绿色免费版​
  16. 一场Pandas与SQL的巅峰大战
  17. pymysql 向MySQL 插入数据无故报错
  18. 首次申请测绘资质需要提交哪些材料?
  19. iOS 设置个人头像
  20. hdu 1850 Being a Good Boy in Spring Festival (尼姆博弈)

热门文章

  1. Python3之牛吃草问题
  2. 全球与中国同心管换热器市场市场需求动态及十四五前景展望研究报告2022~2028年
  3. 2013-9-25 人物动作形态
  4. [置顶] 【游戏产业的5年之变】
  5. 2021 CCF基于UEBA的用户上网异常行为分析baseline线上0.90
  6. vuex 中出现[vuex] module namespace not found in mapActions(): money找不到的报错
  7. 王老六计算机,crc校验和累加和校验哪个好
  8. php博客视频教程,ThinkPHP5 博客项目实战视频教程
  9. 【微信小程序】表单校验
  10. 解决小问题的记录:我戴尔笔记本电脑用键盘调不了亮度了(已解决)