探索多模态预训练:MAnTiS、ActionCLIP、CPT与CoOp的Prompt技巧

上一篇博文整理了
预训练新范式(Prompt-tuning,Prefix-tuning,P-tuning)
,主要是围绕NLP上的成果,具体的概念本文也不做过多赘述。本篇文章将主要整理几篇有代表性的Prompt方法在多模态领域中的应用。

Multimodal Conditionality for Natural Language Generation

Prompt用于Natural Language Generation多模态NLG任务。

先从NLG任务过渡到Vision-language的应用吧,这篇文章主要是利用图片信息来增强文本的生成。如上图,在生成商品介绍文案时,如果能结合商品的图片,必然能够得到更贴切的文案。然后本文使用了一个十分直观的Prompt方法,将多模态序列作为前缀Prompt放到decoder输入序列的前面,进而中解码过程中分享多模态信息即可。具体操作如下图:

输入由multimodal conditioning data和generation组成。左边的multimodal的输入是image和text(即商品title),分别用ResNet-152和embedding映射到语言模型的同一个空间中。同时作为条件的文本输入和生成序列一同进行编码。最后再经过Transformer Decoder得到输出的描述。

paper:https://arxiv.org/pdf/2109.01229.pdf

ActionCLIP: A New Paradigm for Video Action Recognition

Prompt用于Action Recognition动作识别问题。

  • 动作识别问题是一个很CV的任务了,一般的方式是采用上图(a)所示的单模态框架,即先理解视频内容,再预测一组固定的预定义类别。但但但其完全忽略了标签label所包含的语义信息(人类做识别的时候会很自然的对比脑海中的相关语言概念),只将标签映射到一个固定维数的空间中,无迁移/预测能力。
  • 因此作者提出图(b)所示的Prompt新框架,即在输入端就纳入label信息,将其与对应的视频特征进行关联。这样做不仅可以增强视频表征的语义性,同时能够具备很强的zero-shot的迁移能力。另一个优势是,这种多模态输入完全可以利用现在已经做了大量工作的多模态预训练模型。关于
    多模态预训练
    模型博主过往文章做过整理,不再赘述。

作者提出的新范式的具体做法大概可以分为 “pre-train, prompt, and fine-tune”,模型图如下。pre-train指利用现有的多模态预训练模型,然后改装我们的任务适应模型,最后再在自己的数据集上进行fine-tune。这样的做法,通过prompt保持住pre-trained模型的强大表征性能,又节省了很多的计算资源。

具体的框架图不太容易看,主要先看图a是主框架部分。主框架分别对视频和文本做两种Prompt。分别是textual prompt和visual prompt。

  • textual prompt。这是我们比较熟悉的模式,不过作者提供了三种模式:prefix prompt, cloze prompt and suffix prompt。这个在之前的
    综述博文
    中都有提到过了。比如label是“watering plants”,那么输入的句子将被改装成“play a human action of [watering planrts]”。具体可以看图b的示意。然后通过encoder得到表示。
  • visual prompt。为了充分理解视频,它分为三个大部分:pre-network prompt, in-network prompt and post-network prompt。pre-network(图c)主要对输入部分进行改动,对所有的输入帧的所有patch都进行时间+空间的位置编码,进行attention计算。in-network(图d)在相邻层间插入temporal shift模块便于相邻帧间的特征交换。post-network(图e-g)是四种对不同时间片段的tokens进行交互建模的模块,MeanP指时间维度上的Mean pooling,Conv1D/LSTM是应用于时间维度上的一维卷积或LSTM,Transf是vision transformer encoder。

然后拿到这两部分的特征之后,再做相似度的计算得到最后的动作识别结果。

paper:https://arxiv.org/abs/2109.08472

code:https://arxiv.org/abs/2109.08472

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

Prompt用于Visual Grounding视觉定位问题。

这篇文章提出的Prompt方法是Colorful Prompt Tuning(彩色提示调优),它主要的思路是在图像和文本中使用共同的颜色来标识,以将视觉定位问题变成填空问题来解决跨模态差异。与以往路线的不同如上图所示:

  • 图a和图b是传统的视觉定位方法。a是指先用大量的数据来预训练,即使用[mask]机制来盖住token,然后还原信息以提升表示的质量。
  • 图b是fnetune,图中画的路线是使用[CLS]做二分类来判断定位的问题。
  • 图c是本文的CPT方法咯。很直观的可以看到它用不同颜色来区分不同的实体模块,然后构建一个Prompt模版为: xxx is in [mask] color,然后在[mask]上预测对应的该是哪个颜色即可。

同时由于Prompt这种范式自身拥有的生成能力,使得CPT改装一下也可以在其他视觉任务上进行应用,如下图所示。如果做目标检测是 xxx is a [mask]等等。

paper:https://arxiv.org/pdf/2109.11797.pdf

CLIP

在整理CoOp前还是放一下经典的CLIP,更完整的整理在
传送门
,CLIP中用到Prompt的地方也是它处理句子-图像对的方式,如下图所示,dog 这一label会被改造成 “A photo of a dog”,然后被mask,再尝试通过模型算内积相似度来预测出这个词,也就能做好分类了,由于是生成句子的感觉,所以其实CLIP是十分适合做zero-shot 的分类的。

Learning to Prompt for Vision-Language Models

CLIP实际上就是prompt在visual-language model中的一个应用,所以CoOp实际是在CLIP的基础上进一步进行的改进。不过它受到了AutoPrompt的启发会更多一些,前面的一些工作的Prompt方式都是基于人工模版(如xxx is [label]),连续型自动模版的Prompt会是更加不错的选择。所以CoOp的结构可以如下图所示,前面是一个learnable context,而不是人工模版。

然后这个[class]信息(即label)可以放到生成的虚拟模板的中间,前面和后面都可以,因为后续的一些连续型自动模版Prompt的研究都证明了模型是不一定需要符合自然语言的连贯性的。learnable context将和不同类别的word embedding拼接之后再进行后面的过程。然后其他地方,image encoder和text encoder和CLIP都比较类似,优化的目标也是使得和图片对应的prompt预测分数最大。

另外还有两种有意思的变体:

  • 在class的前后都插入learnable context,以增加prompt的灵活性。
  • 设计class-specific context(CSC),让所有类别的prompt参数独立(目前是所有参数都是共享的),实验结果证明这种做法在一些细粒度分类任务中效果更好。

下一篇继续更新其他文章:

  • 多模态预训练中的Prompt(ALPRO,Frozen)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/371555.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

普中51单片机:数码管显示原理与实现详解(四)

文章目录 引言数码管的结构数码管的工作原理静态数码管电路图开发板IO连接图代码演示 动态数码管实现步骤数码管驱动方式电路图开发板IO连接图真值表代码演示1代码演示2代码演示3 引言 数码管(Seven-Segment Display)是一种常见的显示设备,广…

C-11 三角剖分的调研

C-11 三角剖分算法 三角剖分就是将输入的多边形,分割成一系列互不重叠的三角形,其重要性就在这不多赘述。这个是一个别人总结的链接:http://vterrain.org/Implementation/Libs/triangulate.html 图片链接:http://www-cgrl.cs.m…

【笔记】在window上连接虚拟机中的redis

愚昧啊 困扰了我近两天的问题居然是因为是java代码写错地方了 在虚拟机中进入redis.conf文件 vim redis.conf /bind --斜杠搜索关键词 将值设置为 bind 0.0.0.0 保存 退出:wq 回到java中 添加redis依赖 刷新maven 就是在这一步出问题……………………………………自己在蓝…

新型水冷电阻设计-双面水冷电阻器

一款革命性的电阻器,专为低压和中压应用而设计,尤其是汽车、牵引或船舶系统中的恶劣条件。 EAK采用先进材料制造,采用专利设计,将电阻元件与水基冷却液封装并完全分离,为水冷应用提供模块化、轻量级、小容量、高功率解…

PYTHON自学笔记(一)vscode配置

安装python 自行官网下载 安装vscode 自行官网下载 环境变量设置 把python和scripts的文件路径,添加到环境变量的path中,如图: 此项不弄,在命令行模式中系统不会认为你装了python和pip,你的输入相关命令shell不会…

【Elasticsearch】Elasticsearch倒排索引详解

文章目录 📑引言一、倒排索引简介二、倒排索引的基本结构三、Elasticsearch中的倒排索引3.1 索引和文档3.2 创建倒排索引3.3 倒排索引的存储结构3.4 词典和倒排列表的优化 四、倒排索引的查询过程4.1 过程4.2 示例 五、倒排索引的优缺点5.1 优点5.2 缺点 六、倒排索…

ComfyUI+MuseV+MuseTalk图片数字人

电脑配置 GPU12G,如果自己电脑配置不够,选择云gpu,我就是用的这个,自己电脑太老配置跟不上 环境: Python 3.11.8 torch 2.2.1 cuda_12.1 资源提供: 链接:https://pan.baidu.com/s/1_idZbF…

subset使用

在R语言中,subset()函数用于从数据框中选择满足特定条件的观测。其语法如下: subset(x, subset, select, drop FALSE) 参数说明: x:数据框或矩阵。 subset:逻辑条件,用于筛选满足特定条件的行。 select…

MySQL—统计函数和数学函数以及GROUP BY配合HAVING

合计/统计函数 count -- 演示 mysql 的统计函数的使用 -- 统计一个班级共有多少学生? SELECT COUNT(*) FROM student -- 统计数学成绩大于 90 的学生有多少个? SELECT COUNT(*) FROM student WHERE math > 90 -- 统计总分大于 250 的人数有多少&…

axios和Mybatis

除了get和post方法还有其他的方法: 发送 PUT 请求 发送 PUT 请求通常用于更新服务器上的资源。 const updateData {title: foo updated,body: bar updated,userId: 1 };axios.put(https://jsonplaceholder.typicode.com/posts/1, updateData).then(function (res…

麦蕊智数,,另外一个提供免费的股票数据API,可以通过其提供的接口获取实时和历史的股票数据。

麦蕊智数,,提供免费的股票数据API,可以通过其提供的接口获取实时和历史的股票数据。 API接口:http://api.mairui.club/hslt/new/您的licence 备用接口:http://api1.mairui.club/hslt/new/您的licence 请求频率&#x…

Node.js_fs模块

文件删除 文件重命名和移动(本质都是修改路径) 文件夹操作 创建文件夹(mkdir) 读取文件夹(readdir) (打印出来是该文件夹下名称的数组形式) 读取当前的文件夹(readdir) 删除文件夹 (rmdir) 查看资源状态…

Golang | Leetcode Golang题解之第222题完全二叉树的节点个数

题目&#xff1a; 题解&#xff1a; func countNodes(root *TreeNode) int {if root nil {return 0}level : 0for node : root; node.Left ! nil; node node.Left {level}return sort.Search(1<<(level1), func(k int) bool {if k < 1<<level {return false}…

Apache Seata新特性支持 -- undo_log压缩

本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 Apache Seata新特性支持 – undo_log压缩 Seata新特性支持 – undo_log压缩 现状 & 痛点…

线程池理解及7个参数

定义理解 线程池其实是一种池化的技术实现&#xff0c;池化技术的核心思想就是实现资源的复用&#xff0c;避免资源的重复创建和销毁带来的性能开销。线程池可以管理一堆线程&#xff0c;让线程执行完任务之后不进行销毁&#xff0c;而是继续去处理其它线程已经提交的任务。 …

20、matlab信号波形生成:狄利克雷函数、高斯脉冲和高斯脉冲序列

1、名词说明 狄利克雷函数&#xff08;Dirac Delta Function&#xff09; 狄利克雷函数&#xff0c;也称为单位冲激函数或δ函数&#xff0c;是一个在数学和信号处理中常用的特殊函数。狄利克雷函数通常用符号δ(t)表示&#xff0c;其定义为&#xff1a; δ(t) { ∞, t 0{…

RabbitMq - Java客户端基础【简单案例 +Work模型】

目录 1、前置知识 1.1、AMQP怎么理解 1.2、Spring AMQP是什么 1.3、为什么要了解Spring-AMQP&#xff1f; 2、使用Spring-AMQP实现一个发消息案例 3、Work模型 问题&#xff1a; 优化&#xff1a; 小结&#xff1a;Work模型的使用&#xff1a; 1、前置知识 1.1、AMQP怎…

简介空间复杂度

我们承接上一篇博客。我们写了时间复杂度之后&#xff0c;我们就要来介绍一下另一个相关复杂度了。空间复杂度。我觉得大家应该对空间复杂度认识可能比较少一些。我就是这样&#xff0c;我很少看见题目中有明确要求过空间复杂度的。但确实有这个是我们不可忽视的&#xff0c;所…

ID3算法决策树

步骤&#xff1a; 先计算出信息量&#xff1b;信息熵&#xff1b;信息增量&#xff1b; 再比较信息增量的大小&#xff0c;确定分类依据。 信息量&#xff1a; 信息熵&#xff1a; 信息增益&#xff1a;

Beats:使用 Filebeat 从 Python 应用程序中提取日志

本指南演示了如何从 Python 应用程序中提取日志并将其安全地传送到 Elasticsearch Service 部署中。你将设置 Filebeat 来监控具有标准 Elastic Common Schema (ECS) 格式字段的 JSON 结构日志文件&#xff0c;然后你将在 Kibana 中查看日志事件发生的实时可视化。虽然此示例使…