【prompt五】CoCoOP:Conditional Prompt Learning for Vision-Language Models

motivation

随着像CLIP这样强大的预训练视觉语言模型的兴起,研究如何使这些模型适应下游数据集变得至关重要。最近提出的一种名为上下文优化(CoOp)的方法将提示学习(nlp的最新趋势)的概念引入视觉领域,以适应预训练的视觉语言模型。具体来说,CoOp将提示中的上下文单词转换为一组可学习的向量,并且仅使用少量标记的图像进行学习,可以实现比密集调整的手动提示的巨大改进。在我们的研究中发现了CoOp的一个关键问题:学习到的上下文不能推广到同一数据集中更广泛的未见类,这表明CoOp过拟合了训练期间观察到的基本类。为了解决这个问题,我们提出了条件上下文优化(CoCoOp),它通过进一步学习一个轻量级神经网络来为每个图像生成一个输入条件令牌(向量)来扩展CoOp。与CoOp的静态提示相比,我们的动态提示适应每个实例,因此对类转移不那么敏感。大量实验表明,CoOp对未见类的泛化效果比CoOp好得多,甚至显示出超越单个数据集的有希望的可转移性;并且产生了更强的领域泛化性能。

1.introduce

最近在大规模视觉语言预训练方面的研究在zero-shot图像识别方面取得了惊人的成绩,表明了这种范式在学习开放世界视觉概念方面的潜力。设计的关键在于如何对视觉概念进行建模。

在传统的监督学习中,标签是离散化的,每个类别都与一个随机初始化的权重向量相关联,该权重向量被学习以最小化与包含相同类别的图像的距离。这种学习方法侧重于闭集视觉概念,将模型限制在预定义的类别列表中,并且在训练过程中看不到的新类别时无法扩展。

相比之下,对于CLIP[40]和ALIGN[24]等视觉语言模型,分类权值是由参数化文本编码器(例如Transformer)通过提示直接生成的。例如,为了区分包含不同品种的狗和猫的宠物图像,可以采用“a photo of a {class}, a type of pet”这样的提示模板作为文本编码器的输入,通过用真实的类名填充“{class}”标记,就可以合成分类的类特定权重。与离散标签相比,视觉语言模型的监督来源来自自然语言,这允许对开放集视觉概念进行广泛的探索,并已被证明在学习可转移表征方面是有效的。

上下文优化(CoOp),利用神经网络的可微特性,将提示中的上下文词转化为一组可学习的向量。

CoOp仅使用少量标记图像进行学习,在广泛的图像识别数据集上实现了比密集调整的手动提示的巨大改进。

在我们的研究中发现了CoOp的一个关键问题:学习的上下文不能推广到同一任务中更广泛的未见类。图1说明了这个问题:CoOp学习的上下文在区分“到达门”和“大教堂”等基本类方面工作得很好,但是当它被转移到新的(看不见的)类(如“风力发电场”和“火车铁路”)时,准确性会显著下降——即使任务的性质保持不变,即识别场景。结果表明,学习到的上下文过度拟合基类,因此未能捕获对更广泛的场景识别至关重要的更一般化的元素。我们认为这样的问题是由CoOp的静态设计引起的:上下文,一旦学习就固定了,只针对一组特定的(training)类进行优化。相反,zero-shot法采用的手动设计提示符具有相对的通用性。

为了解决弱泛化问题,引入了一个新的概念:条件提示学习。关键思想是使提示取决于每个输入实例(图像

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Golang 程序启动原理详解

一.编译 go源代码首先要通过 go build 编译为可执行文件,然后去机器上直接执行的,在 linux 平台上为 ELF 格式的可执行文件,linux 能直接执行这个文件,而编译阶段会经过编译器、汇编器、链接器三个过程最终生成可执行文件 编译器:*.go 源码通…

数字逻辑与计算机组成

冯诺依曼计算机 计算机结构 计算机特点 1.采用二进制 2.程序存储 2.由五大部件组成计算机系统:运算器、存储器、控制器、输入设备和输出设备 计算机硬件系统的层次 中央处理器(CPU):运算器 控制器 计算机主机:…

【韩国留学】四大生活技能 学起来!柯桥留学中介韩语学习

如何高效拿学分 在韩国大学,学分是评价学生学习成果的重要标准。要想高效拿学分,首先要制定合理的学习计划。明确每学期需要修的课程,并提前预习,了解课程重点和难点。 其次,要积极参与课堂讨论,这不仅能提…

社科院与杜兰大学金融管理硕士——让我们的读研梦想,与春天一同醒来

随着春天的到来,万物复苏,生机盎然。在这个充满希望的季节里,你的读研梦想觉醒了吗?社科院与杜兰大学金融管理硕士项目为你提供梦想的种子,它将在你心中生根发芽,助你在学术殿堂里收获丰硕的果实。 中国社会…

第七个程序:两个字符串连接后计算长度

实验步骤; 第一步:新建项目 第二步:程序编写 第三步:运行结果 Labview一共7个字节,长度为7,一个字母一个字节 汉字为2个字节,图一为4,图二为8 所以结果分别为11和15 视频教学: 字…

javaWebssh题库管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh题库管理系统是一套完善的web设计系统(系统采用ssh框架进行设计开发),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Mye…

U410866 统计分数

本题为本人原创,请勿抄袭。 难度:普及- 题目背景 为了统计学生们的分数和排名,老师们翻来覆去睡不着觉。请你为老师编写一个这样的程序。 题目描述 这是一题将结构体和排序结合在一起的题。 输入格式 输入: 第一行&…

javascript操作BOM的方法

目录 1.window.alert() 2.window.confirm() 3.window.prompt() 4.window.location() 5.window.navigator() 6.window.screen() 7.window.history() 8.window.setTimeout() 和 window.clearTimeout() 9.window.setInterval() 和 window.clearInterval() BOM&#xff08…

Unity 轮转图, 惯性, 自动回正, 点击选择

简单的实现 2D 以及 3D 的轮转图, 类似于 Web 中无限循环的轮播图那样. 文中所有代码均已同步至 github.com/SlimeNull/UnityTests 3D 轮转图: Assets/Scripts/Scenes/CarouselTestScene/Carousel.cs2D 轮转图: Assets/Scripts/Scenes/CarouselTestScene/UICarousel.cs 主要逻…

【学习记录】C++面向对象高级编程【更新中】

C面向对象高级编程 1 inline-内联函数1.1 什么是内联函数?1.2 为什么需要内联函数? 2 构造函数2.1 构造函数是什么?2.2 为什么需要构造函数?2.3 ctor(构造函数)可以有很多个-overloading重载2.4 ctors放在private区-Singleton 3 参…

Anthropic发布最强大模型Claude 3,实力碾压GPT-4和Gemini!

前言 2024年3月4日,Anthropic 发布了Claude 3新版系列模型,含Haiku、Sonnet 和 Opus三个版本。其中最强大的模型在各种基准测试中均优于OpenAI的GPT-4和Google的 Gemini 1.0 Ultra,已成为大模型领域的新巨头。 大家如果对AI感兴趣&#xff0c…

TensorRT入门:trtexec开发辅助工具的使用

文章目录 一、trtexec简介二、trtexec使用1.trtexec常用参数1. 构建阶段2. 运行阶段 2.基本使用方法1. trtexec最基本的使用方法,读取onnx模型并通过trtexec测试推理性能。2. trtexec解析ONNX文件,使用优化选择构建TensorRT引擎并保存至.plan文件补充&am…

力扣--动态规划64.最小路径和

思路分析: 基本思路: 本算法采用动态规划的思想,通过构建一个额外的二维矢量 dp 来存储每个位置的最小路径和。最终目标是求得右下角位置的最小路径和,即整个网格的最小路径和。 初始化: 初始化矢量的行数和列数&…

使用awk和正则表达式过滤文本或字符串 - 详细指南和示例

当我们在 Linux 中运行某些命令来读取或编辑字符串或文件中的文本时,我们经常尝试将输出过滤到感兴趣的特定部分。这就是使用正则表达式派上用场的地方。 什么是正则表达式? 正则表达式可以定义为表示多个字符序列的字符串。关于正则表达式最重要的事情之…

考研数学|数一125学长备考经验+资料

考研数学复习规划的关键,是不要执着于进度,不要执着于每天每个时间段准确的划分去做什么做什么,就好像完成任务的权重大于复习质量的权重一样,本末倒置了。 正确的做法,是聚焦于学习质量,持之以恒。所需要掌…

FreeRTOS操作系统学习——FreeRTOS工程创建

FreeROTS工程创建 详细步骤 如无特殊情况,大部人都要配置为外部高速时钟 另外,本实验使用了FreeRTOS,FreeRTOS的时基使用的是Systick,而 STM32CubeMX中默认的HAL库时基也是Systick,为了避免可能的冲突,最…

如何理解XML解析库?

untangle untangle 是一个简洁的用于解析 XML 文档的库。输入一个 XML 文档后&#xff0c;untangle 将文档的结构映射成结点和属性&#xff0c;并返回一个 Python 对象。 形如以下的 XML 文件&#xff1a; <?xml version"1.0"?> <root><child nam…

BUUCTF-Misc-[安洵杯 2019]Attack1

题目链接&#xff1a;BUUCTF在线评测 (buuoj.cn) 下载附件打开是一个流量包文件 拖到kali尝试用foremost是否可以分离 分离出来一个压缩包需要密码&#xff1a; 寻找密码&#xff0c;打开数据包导出http数据&#xff0c;发现一个lsass.dump文件 使用kali中mimkatz命令查看 得到…

测试需求平台10-DBUtils 优化数据连接与 SQL Limit 实现分页

✍此系列为整理分享已完结入门搭建《TPM提测平台》系列的迭代版&#xff0c;拥抱Vue3.0将前端框架替换成字节最新开源的arco.design&#xff0c;其中约60%重构和20%新增内容&#xff0c;定位为从 0-1手把手实现简单的测试平台开发教程&#xff0c;内容将囊括基础、扩展和实战&a…

干货!带你快速了解Python元组

1.元组 元组一般用来存储多个数据&#xff0c;使用() 2.创建元组 创建空元组 tup1 () print(tup1) # () print(type(tup1)) # <class tuple> 创建非空元组&#xff08;元组中只有一个元素&#xff0c;一般要在元素的后面加 , 若不加 , 该数据类型不一定是元组…