Visual Prompt

2023-11-12

始于NLP

简单来讲,Prompt就是对原来的输入文本进行一定的处理,使得在不改变预训练模型参数的情况下,相应任务的性能变高。例如,原输入文本为:I received the offer from ETH. ,对于文本分类,我们将其修改为I received the offer form ETH, I’m so [MASK];[MASK]可以为一些表示情绪的词,比如happy,那么相对于原文,修改后的句子更容易被分为happy类。如果将其改为I received the offer from ETH. Chinese:[MASK],则对于翻译任务来讲,更容易取得正确的翻译效果。所谓的修改方式在大佬论文中提到的有(如下图):

NLP中的Prompt算法步骤:

Prompt Addition: 这一步就是如何修改原文本。

Answer Search: 构建相应的answer空间,例如,文本分类,设置为(happy, good, terrible等)。

Answer Mapping: 在某些时候answer并不是我们最终想要的结果,比如我们最终想要的结果为positive和negative;那么则需要将happy,good映射为positive,将terrible映射为negative。

VPT(Visual prompt tuning)

一、论文信息

论文名称:Visual Prompt Tuning

作者团队:

 会议:ECCV2022

Github: https://github.com/kmnp/vpt

二、动机与创新

动机:

  • 目前调整预训练模型的方法是full fine-tuning,即完全微调。预训练好的模型利用full fine-tuning的方式迁移到下游任务上时,需要存储整个模型,而且在会对模型的所有参数都进行训练,造成计算量大的问题;

  • 随着计算机视觉领域的发展,基于Transformer的模型相较于基于CNN的模型更大,导致模型参数急剧上升,也致使训练难度的增大;

  • 近年来,NLP已经进入大模型阶段,对于如何迁移NLP预训练好的大模型到下游任务,相关人员提出了不同于Fine-tuning的方法,即Prompt-tuning,在保持预训练模型冻结的情况下,只需要训练少量额外的参数即可将该大模型迁移到下游任务,而且效果不错。

  • 如何更加有效地 adapt 预训练的Transformer用于下游任务?

创新:

  • 这篇文章提出了一个简单、有效的方法调整预训练好的Transformer模型用于下游任务,即Visual-Prompt Tuning (VPT)

 三、方法

 VPT-Deep变体为Transformer编码器每层的输入预先设置一组可学习的参数;

VPT-Shallow变体则仅将提示参数插入第一层的输入。

两者在下游任务的训练过程中,只有特定于任务的提示和线性头的参数会更新,而整个Transformer编码器被冻结。

四、实验结果 20/24

 实验的数据集有两组,一共涉及24个跨不同领域的下游识别任务,包括:

(1)由5个基准细粒度视觉分类任务组成的FGVC;

(2)由19个不同视觉分类集合组成的VTAB-1k,细分为使用标准相机拍摄的自然图像任务(Natural)、用专用设备(如卫星图像)捕获的图像任务(Specialized)以及需要几何理解的任务(Structured),比如物体计数。测得每项任务上的平均准确度后,得出的主要结果如下:

VPT-Deep在24个任务中有20个的表现都优于全面微调,同时使用的总模型参数显著减少(1.18× vs. 24.02×);

在NLP领域中Prompt再厉害,性能也不会超过全面微调。这说明Prompt很适用于视觉Transformer模型。

Exploring Visual Prompts for Adapting Large-Scale Models

一、论文信息

论文名称:Exploring Visual Prompts for Adapting Large-Scale Models

作者团队:

Github: https://hjbahng.github.io/visual_prompting/

二、动机

正如随着attention机制和transformer在NLP成为主流,attention+CNN、Vit、Swin-transformer、ShiftVit等基于attention和transformer的CV模型不断涌出一样;在看到prompting在NLP变得越来越火时,作者自然问道:Why not visual prompting?为证明在CV领域,Prompt是可行的,并且在某些任务和数据集上效果不错。

三、方法

使用(迁移)预训练模型的方法:

在CV中,将一个预训练模型迁移到新任务上的方法主要包括Fine-tuning,Linear Probe,Visual Prompting ;三种方法的不同如下图所示:

 Fine-tuning会修改预训练模型参数,Linear Probe不会修改预训练模型参数,但是会在预训练模型后增加和任务相关的线性层,Visual Prompting则是不修改预训练模型参数,只修改原图像。

Prompt形式:

  • 对于图片,给原图增加prompt,自然想到的是添加一些像素;其实以像素形式添加prompt的好处就是可以做到task-special和input-agnostic;也就是因为prompt中含有大量数据中学到的信息,所以是任务相关的;因为对于同一个任务,在测试时,直接使用得到的prompt就可以,不管你输入哪张图片,因此时输入无关的。

  • 如何添加: 作者提到了三种方式:1)在随机位置添加像素块(pixel patch);2)在固定位置添加像素块(pixel patch);3)在图像内部边缘pad一些像素(类似卷积中的padding)第三种方式效果最好。

  • Padding: 使用pad方式添加,添加的宽度为p ;图像的尺寸为C,H,W;则一共需要添加 2*C*p*(H-p)+2*C*p*(W-p),如图:

 如何得来: 对于一个任务,需要通过训练得到于该任务相关的prompt,得到之后就可以直接应用了。

 四、实验结果

  ​​​​​​

 文章的目的不是达到state-of-the-art,只是为了证明visual prompting的有效性,实验效果不错。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Visual Prompt 的相关文章

随机推荐

  • 系统错误!!!VCRUNTIME140.dll找不到的解决方案

    相信各位很多一定有过这样的经历 当你打开steam 打算开开心心玩一场游戏 当你打开电脑 想登个QQ 然后 太淦了 对不对 笔者百度了一下 教程挺多 不过试试我的也是可以的 至少我觉得简单实用吧 而且以后电脑软件有什么小毛病都可以试试 通过
  • 使用百度API进行情感分析(python)(二)

    编写代码 将代码中的token值改为上一篇得到的Access token值 即可 该值的时间期限约是一个月 一个月之后需要重新获取Access token值 获取方法与之前相同 代码示例 import re import requests
  • 基于.Net的权限管理快速开发框架

    一 项目简介 基于 Net的权限管理快速开发框架 二 实现功能 支持基础功能 系统设置 角色管理 用户管理 组织机构 字典管理 支持功能模块 权限管理 url权限 按钮权限 支持定时任务 在线的定时任务 任务调度 执行结果 支持基本的日志管
  • C++实例(十二)图形绘制

    一 特殊曲线 绘制蜗牛线 绘制贝塞尔曲线 拖动绘制曲线 绘制正弦曲线 绘制立体模型 交叉线条 绘制尼哥米德蚌线 艺术图案万花筒 绘制抛物线 等电位面图 沙丘图案 绘制艺术图案 立体三棱锥 二 图形基础 创建不同的画刷 指定颜色填充矩形区域
  • 更多提高正则表达式效率的方法

    原文 http wyzws iteye com blog 1274020 让匹配更快失败 尤其是匹配很长的字符串时 匹配失败的位置要比成功的位置多得多 以简单 必须的字元开始 排除明显不匹配的位置 如锚点 或 特殊字符 x或 u263A 字
  • win32 消息循环

    windows系统把应用程序的输入事件传递给各个窗口 每个窗口有一个函数 称为窗口消息处理函数 窗口消息处理函数处理各种用户输入 处理完成后再将控制权交还给系统 窗口消息处理函数一般是在注册一个窗口的时候指定的 在Windows下 只有那些
  • linear-gradient为啥只能background不能background-color

    background 可以设置 背景颜色 背景图片 定位等 而background color 只能设置 背景颜色 设置background color aaa 此时仅仅改专变了背景色 但此时有一个默认的的background repeat
  • 什么是OAuth

    什么是OAuth OAuth 全称 Open Authorization 中文翻译开放授权 是一种基于令牌的身份验证 允许组织跨第三方服务共享信息 而无需公开用户的用户名 密码 本质上 OAuth是为第三方服务提供令牌的中间人 该令牌只允许
  • android按日期函数查询,Android开发中SQLite存储时间和按日期函数查询

    Android开发中SQLite存储时间和按日期函数查询 Android开发中SQLite存储时间和按日期函数查询 在Android开发中 在消息模块中 消息做数据库缓存处理 排序查询或指定时间查询需要用时间和日期函数 本篇简括 存储时间字
  • QT 完美实现圆形按钮

    QT 版本 5 6 0 官方的按钮有些普通 如果我们想要换成自己喜欢的按钮而却无从下手 那么请继续往下阅读 皮一下 首先 可以在网络上搜索一下自己喜欢的按钮图形 或者可以自行绘制 我以下面的图形为例 开始制作 一 建立 QT 工程 并加入图
  • 基于画布canvas进行图片压缩

    Canvas 压缩图片的原理主要是通过重新绘制图片 调整图片质量或大小来达到压缩图片的目的 具体实现步骤如下 1 使用 JavaScript 中的 Image 对象将图片加载到内存中 var img new Image img src im
  • mkp勒索病毒怎么处理

    目录 前言 简介 一 mkp勒索病毒的特征 二 mkp后缀勒索病毒是如何传播的 三 如何预防与处理mkp勒索病毒攻击 前言 简介 当今 勒索病毒已成为企业网络安全的一大威胁 而其中mkp勒索病毒则是一种新近出现的变种 与其他勒索病毒一样 m
  • 关于redis密码

    如何更改密码 直接配置文件里更改 配置文件里开放 requirepass 之后客户端更改 用Redis命令查询密码 可以使用以下Redis命令来查询密码 config get requirepass 得到的结果第一行固定是requirepa
  • 设计模式-备忘录模式(Memento Pattern)

    文章目录 前言 一 备忘录模式的概念 二 备忘录模式的实现 三 备忘录优缺点 优点 缺点 总结 前言 备忘录模式 Memento Pattern 是一种行为型设计模式 它用于捕获和存储对象的内部状态 以便在以后可以恢复到先前的状态 备忘录模
  • pthread_detach函数

    int pthread detach pthread t thread 成功 0 失败 错误号 作用 从状态上实现线程分离 注意不是指该线程独自占用地址空间 线程分离状态 指定该状态 线程主动与主控线程断开关系 线程结束后 不会产生僵尸线程
  • jwt编码解码

    import jwt 创建 JWT payload user id 1234 secret key your secret key 密钥 用于签名和验证 algorithm HS256 签名算法 token jwt encode paylo
  • NPM导入模块报错

    npm WARN enoent ENOENT no such file or directory open C Program Files nodejs package json 找不到package json文件 一般情况下npm安装时都
  • python 删除文件、清空目录的方法总结

    Python os remove 方法 os remove 方法用于删除指定路径的文件 如果指定的路径是一个目录 将抛出OSError 在Unix Windows中有效 以下实例演示了 remove 方法的使用 usr bin python
  • python---面向对象(一)

    类和对象 面向对象编程的2个非常重要的概念 类和对象 对象是面向对象编程的核心 在使用对象的过程中 为了将具有共同特征和行为的一组对象抽象定义 提出了另外一个新的概念 类 类就相当于制造飞机时的图纸 用它来进行创建的飞机就相当于对象 类是抽
  • Visual Prompt

    始于NLP 简单来讲 Prompt就是对原来的输入文本进行一定的处理 使得在不改变预训练模型参数的情况下 相应任务的性能变高 例如 原输入文本为 I received the offer from ETH 对于文本分类 我们将其修改为I r