论文笔记|CVPR2023:Semantic Prompt for Few-Shot Image Recognition

news2024/11/16 13:32:23

论文地址:https://arxiv.org/pdf/2303.14123.pdf

这是一篇2023年发表在CVPR上的论文,论文题目是Semantic Prompt for Few-Shot Image Recognitio,即用于小样本图像识别的语义提示。

1 Motivation

第一,最近几项研究利用 语义信息 来进行小样本学习的研究。 一方面因为通过少量样本去识别新类别很难,就想使用一些其他模态的信息辅助学习,文本特征可能包含新类和已知类之间的语义关系,所以是一个很好的选择。另一方面因为最近一些出现的强大的自然语言处理(NLP)模型能够从类别中提取出丰富且准确的文本信息。

第二,提出来的这些方法效果并不理想,模型仍然会受到从少量支持样本提取出来的 虚假特征的影响。 因为这些方法直接使用文本嵌入作为图像的分类器,比如 直接 从类名推断出文本原型然后与视觉分类器相结合,这忽略了文本特征和视觉特征之间的 信息差距,因此文本特征无法与视觉特征很好地交互,从而无法给新类别提供 具有判别性的视觉特征。
在这里插入图片描述
如图所示,输入一张独轮车的图像,特征提取器很容易受到背景杂波的影响,比如车上的女孩还有行人、瓦片等等,并且很有可能特征提取器无法识别其他环境中的独轮车,即无法学习到新类别的通用图像表示。

2 Idea

因此,本文提出了一种新的语义提示(SP)的方法,利用丰富的语义信息作为 提示自适应 地调整视觉特征提取器。而不是将文本信息与视觉分类器结合来改善分类器。

本文设计了两种互补机制,将语义提示插入到特征提取器中:一种是通过 自注意力空间维度 上实现 语义提示 和 patch嵌入 之间的交互,另一种是通过沿 通道维度 转换后的语义提示来 补充视觉特征。

通过结合这两种机制,特征提取器提取出具有判别性的与类相关(特定类别) 的特征,并仅用几个支持样本就可以获得 更通用的图像表示。

3 Methods

3.1 训练方法

本文提出的方法包括两个训练阶段:
步骤一采用non-episodic training方法,预训练特征提取器 f 通过分类基类中所有的图像。
步骤二采用元训练范式,使用语义提示(SP) 在大量episodes中 微调特征提取器 f ,使 f 能够在新类中提取出通用和与类相关的视觉特征表示。

3.2 预训练

主干网络采用 Visformer 。它用卷积块替换了前七个 Transformer 层,并在每个阶段之间采用池化以减少序列长度,从而降低计算成本。计算成本和序列长度成正比。

损失函数采用 标准交叉熵损失。目的使其最小化。
在这里插入图片描述
其中W表示分类器,b表示偏差。

具体的训练过程:
第一步,输入图像 x ∈ R H × W × C   x ∈ \mathbb{R}^{H \times W \times C\ } xRH×W×C 先被划分为 M 个patches序列 X = { x p 1 x , x p 2 . . . . . . x p M } X = \left\{x_p^1x, x_p^2......x_p^M \right\} X={xp1x,xp2......xpM},其中 x p i ∈ R P × P × C   x_p^i∈ \mathbb{R}^{P \times P \times C\ } xpiRP×P×C 是一个patch,P 是patch大小。
第二步,每个patch被映射到一个嵌入向量中,并添加一个可学习的位置嵌入。经过预处理的图像patches可以写为: Z 0 = [ z 0 1 , z 0 2 . . . . . . , z 0 M ] Z_0= [z_0^1 , z_0^2......,z_0^M ] Z0=[z01,z02......,z0M],其中 z 0 i ∈ R C z z_0^i ∈ \mathbb{R}^{C_z} z0iRCz是第0层Transformer中位置为 i 的patch token, C z C_z Cz是每个token(标记)的通道数。
第三步,Patch 标记被送入 L 个 Transformer 层以提取视觉特征,每一层都由多头自注意力 (MSA)、MLP 块、层规范 (LN) 和残差连接组成。在顶层L,我们 平均 序列中所有的嵌入向量 作为提取的图像特征:
在这里插入图片描述
其中 z L i z_L^i zLi 是第 L 层的第 i 个嵌入向量

3.3 语义提示

首先,使用具有大规模预训练的 NLP 模型从类名中提取文本特征

在这里插入图片描述

具体的训练步骤,如图所示:
第一步,在一个训练episode中,给定一个支持图像 x s x^s xs,我们将其类名 y t e x t y^{text} ytext输入预训练语言模型 g ( ⋅ ) g(·) g()以提取语义特征,即 g ( y t e x t ) g(y^{text}) g(ytext)
第二步,特征提取过程: f g   ( x s ) = f ( x s | g ( y t e x t ) ) f_{g\ }\left(x^s\right)=f\left(x^s\middle| g\left(y^{text}\right)\right) fg (xs)=f(xsg(ytext))
第三步,将每个类中的支持特征平均得到 原型 ,设 p i p_i pi表示类别 i 的原型,则:
在这里插入图片描述
其中 x j s x_j^s xjs是第 i 类的第 j t h j^{th} jth支持图像。
第四步,在元训练期间,冻结文本编码器 g(·) 并微调其他参数,通过使用 交叉熵损失 来最大化查询样本与其原型之间的特征相似性 :
在这里插入图片描述
其中 s 表示余弦相似度, p y q p_{y^q} pyq是类 y q y^q yq 的原型,τ 是温度超参数。

3.3.1 空间维度的交互

为了促进空间维度上的交互,本文使用语义提示 扩展 图像patch序列 后再提供给 Transformer 编码器。通过自注意层,语义提示可以使特征提取器注意到与类相关的特征,同时抑制其他不相关特征。

给定语义特征 g ( y t e x t ) g(y^{text}) g(ytext) 和第 l 层的patch嵌入的输入序列 Z l − 1 = [ z l − 1 1 , z l − 1 2 , … , z l − 1 M ] ∈ R M × C z Z_{l-1}=\left[z_{l-1}^1,z_{l-1}^2,\ldots,z_{l-1}^M\right]\in\mathbb{R}^{M\times C_z} Zl1=[zl11,zl12,,zl1M]RM×Cz

使用 投影后的语义特征 扩展   Z l − 1 {\ Z}_{l-1}  Zl1 获得一个新序列 z ^ l − 1 {\hat{z}}_{l-1} z^l1 R ( M + 1 ) × C z \mathbb{R}^{(M+1)\times C_z} R(M+1)×Cz
在这里插入图片描述
其中   z 0 = h s ( g ( ( y t e x t ) )   ∈   R C z {\ z}^0=h_s(g((y^{text}))\ \in\ \mathbb{R}^{C_z}  z0=hs(g((ytext))  RCz 是空间交互的投影语义嵌入, h s ( ⋅ ) h_s(·) hs()是保持语义嵌入维度与patch嵌入相同的投影器。

然后,扩展序列 z ^ l − 1 {\hat{z}}_{l-1} z^l1被送到其他Transformer 层以允许语义提示和patch标记之间沿空间维度的交互。

具体来说:
第一步,MSA将 z ^ l − 1 {\hat{z}}_{l-1} z^l1中的每个标记通过线性投影映射到三个向量 q , k , v ∈ R N h × ( M + 1 ) × C z q, k, v ∈ \mathbb{R}^{N_h\times\left(M+1\right)\times C_z} q,k,vRNh×(M+1)×Cz
在这里插入图片描述
其中 N h N_h Nh是注意头数, C h C_h Ch是每个注意头的通道数。

第二步,计算q 和 k 的内积并沿空间维度执行 softmax 来计算注意力权重 A {A} A R N h × ( M + 1 ) × ( M + 1 ) \mathbb {R}^{N_h \times (M+1) \times (M+1)} RNh×(M+1)×(M+1)
在这里插入图片描述
注意力权重用于选择和聚合来自不同位置的信息。

第三步,通过相加连接所有头的输出并通过线性投影得到最终输出
在这里插入图片描述

3.3.2 通道维度的交互

对于通道维度上的交互,本文首先将语义提示与从 所有patches中提取的视觉上下文 连接起来,然后将它们提供给 MLP 模块(多层感知机)。将 提取的特征向量 添加到每个patch标记中,以 逐个通道地 调制和增强视觉特征。

首先获得全局视觉上下文向量 z l − 1 C ∈ R C z z_{l-1}^C ∈ \mathbb{R}^{C_z} zl1CRCz, 通过对所有patch 标记进行平均:
在这里插入图片描述
将视觉上下文 Z l − 1 c Z_{l-1}^c Zl1c 与投影语义向量   z 0 {\ z}^0  z0连接起来,送入 2 层 MLP 模块以获得调制向量 β l − 1 ∈ R C z \beta_{l-1}\in R^{C_z} βl1RCz:
在这里插入图片描述
其中 W 1 、 b 1 、 W 2 、 b 2 W_1、b_1、W_2、b_2 W1b1W2b2是 MLP 模块的参数,σ 是 sigmoid 激活函数, h c h_c hc是通道交互的投影器。

最终将调制向量添加到所有patch 标记,以便它可以调整每个通道的视觉特征。

调制序列 Z ~ l − 1 ∈ R M × C z {\widetilde{Z}}_{l-1} ∈ \mathbb{R}^{M\times C_z} Z l1RM×Cz 可以写成:
在这里插入图片描述

4 Results

1-shot上由明显提升,CLIP为文本编码器
在这里插入图片描述
在这里插入图片描述

消融实验
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

< Linux >:进程地址空间

目录 一、验证进程地址空间 二、感知进程地址空间的存在 一、验证进程地址空间 我们之前学的 C/C 程序地址空间是物理内存吗? 答:不是物理内存,甚至叫做程序地址空间都不太准确,应该叫做进程地址空间,因此根本就不是…

Notion插件,让你的页面有无限可能

// 你是否觉得notion的极简风格略为单调?是否想用notion实现更多的功能?是否想让notion更为便捷,更为多样化?那今天推荐的几款notion插件绝对不能错过,因为他们也确实不错。 // - ———byFutureForce DAO——— - 你…

把ChatGPT接入我的个人网站

效果图 详细内容和使用说明可以查看我的个人网站文章 把ChatGPT接入我的个人网站 献给有外网服务器的小伙伴 如果你本人已经有一台外网的服务器,并且页拥有一个OpenAI API Key,那么下面就可以参照我的教程来搭建一个自己的ChatGPT。 需要的环境 Cento…

让我们一起解密组播、IGMP、IGMP监听

前言:一直对组播这个概念迷迷糊糊,特别是交换机处理组播的方式,非常想搞懂但是懒癌发作。这几天终于耐心地看了下有关组播的资料,大致了解了一下同一广播域内组播的相关知识。组播占了计算机网络的一大部分,特别是组播…

ChatGPT 被大面积封号,到底发生什么了?

意大利数据保护机表示 OpenAI 公司不但非法收集大量意大利用户个人数据,没有设立检查 ChatGPT 用户年龄的机制。 ChatGPT 似乎正在遭遇一场滑铁卢。 3月31日, 大量用户在社交平台吐槽,自己花钱开通的 ChatGPT 账户已经无法登录,更…

举一反三学python(9)—excel基础

一、导论: 操作 excel 表格的Python 第三方库有openpyxl、xlrd、xlwt等,它们的功能都相同,就是语法有差异,今天我就带领大家学习用openpyxl模块操作实用的excel文件。 openpyxl模块为第三方库,首先要安装:p…

electron+vue3全家桶+vite项目搭建【九】集成vite-plugin-mock-server 模拟后端请求

文章目录引入1.引入依赖2.集成插件3.测试接口请求引入 后端接口出的太慢?问题不大,咱们可以借助vite-plugin-mock-server插件自己写接口,返回商量好的格式,后续联调直接切换环境即可 vite-plugin-mock-server官网 mock.js官网 …

uniapp人脸识别解决方案

APP端: 因为APP端无法使用uni的camera组件,最开始考虑使用内嵌webview的方式,通过原生dom调用video渲染画面然后通过canvas截图。但是此方案兼容性在ios几乎为0,如果app只考虑安卓端的话可以采用此方案。后面又想用live-pusher组件…

【Linux】vi编辑器——插入模式

目录 插入模式 光标移动命令 a A i I o O命令 a----------------在光标后附加文本 A----------------在文本行末附加文本 i------------------在光标前插入文本 I-------------------在文本开始插入文本 o----------------在光标下插入新行 O---------------在…

陶泓达:4.11黄金原油白银最新走势分析及操作策略!

黄金行情走势分析:   周一(4月10日),国际金价一度跌约1%,重回2000美元干口下方。此前公布的美国3月非农就业数据显示劳动力市场吃紧,并提高了美联储5月再次加息的预期。金属公司MKS PAMP在一份报告中表示:“金价自20…

Doris(5):数据导入(Load)之Broker load

为适配不同的数据导入需求,Doris系统提供了五种不同的数据导入方式,每种数据导入方式支持不同的数据源,存在不同的方式(异步,同步) Broker load 通过Broker进程访问并读取外部数据源(HDFS&#…

elasticsearch之DSL查询文档

目录 DSL查询分类 全文检索查询 match查询: multi_match: 精准查询 地理坐标查询 矩形范围查询 中心点范围 组合查询 elasticsearch中的相关性打分算法是什么? 案例——给“如家”这个品牌的酒店排名靠前一些 function score query…

ChatGPT写新闻-ChatGPT写文章

ChatGPT写新闻 ChatGPT可以用于生成新闻稿件,但需要注意的是,由ChatGPT生成的新闻稿件可能存在语义、逻辑、事实准确性等方面的问题,因此需要进行人工审核和编辑,确保其准确性。 下面是一个示例过程,大致了解如何使用…

GPT3.5 , InstructGPT和ChatGPT的关系

GPT-3.5 GPT-3.5 系列是一系列模型,从 2021 年第四季度开始就使用文本和代一起进行训练。以下模型属于 GPT-3.5 系列: code-davinci-002 是一个基础模型,非常适合纯代码完成任务text-davinci-002 是一个基于 code-davinci-002 的 InstructG…

PixiJS 文字模糊处理策略

pixijs介绍 PixiJS是一个用于创建交互式2D图形和动画的JavaScript库。它是一个快速、轻量级、易于使用的库,可以在WebGL和Canvas上运行。支持WebGL和Canvas两种渲染方式。WebGL是一种基于OpenGL的3D图形API,可以在GPU上进行高效的图形渲染。Canvas是一种…

基于神经辐射场NeRF的SLAM方法

随着2020年NeRF[1]的横空出世,神经辐射场方法(Neural Radiance Fields)如雨后春笋般铺天盖地卷来。NeRF最初用来进行图像渲染,即给定相机视角,渲染出该视角下的图像。NeRF是建立在已有相机位姿的情况下,但在…

Android kotlin (仿淘宝app收藏)用RecyclerView(androidx+BRVAH3.0.6)实现单选/多选/全选/反选/批量删除功能

文章目录 一、实现效果二、引入依赖三、实现源码1、实体类2、适配器3、提示框(关闭和确定)4、视图实现一、实现效果 二、引入依赖 在app的build.gradle在添加以下代码 implementation com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0

使用采集工具,轻松获取目标受众的数据,让您的市场营销更加精准

【数据采集神器】使用采集工具,轻松获取目标受众的数据,让您的市场营销更加精准! 在当前这个信息化社会中,数据已经成为了企业发展和市场营销的必要手段。企业需要通过数据来了解市场的需求,了解自己产品的竞争优势&a…

你真的懂docker吗?25个试题,学过你就来

前言:遇到不会的,答案偷偷放在评论区了哦~ 1.什么是Docker A 虚拟机 B 半虚拟化技术 C 开源的应用容器引擎 D 后端软件 2. 如何搜索Nginx镜像 A docker search nginx B docker rm nginx C doc…

剑指 Offer II 024. 反转链表(经典题型)

时间是伟大的作者,她能写出未来的结局。 ——卓别林 目录 题目描述: 方法1:迭代法(翻指针) 方法2:头插法 方法3:递归法 题目描述: 给定单链…