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

news/2024/5/20 0:01:32/文章来源:https://blog.csdn.net/Bluebro/article/details/130071581

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

3.3 语义提示

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

在这里插入图片描述

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

3.3.1 空间维度的交互

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

给定语义特征 g(ytext)g(y^{text})g(ytext) 和第 l 层的patch嵌入的输入序列 Zl−1=[zl−11,zl−12,…,zl−1M]∈RM×CzZ_{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

使用 投影后的语义特征 扩展Zl−1{\ Z}_{l-1} Zl1 获得一个新序列 z^l−1{\hat{z}}_{l-1}z^l1R(M+1)×Cz\mathbb{R}^{(M+1)\times C_z}R(M+1)×Cz
在这里插入图片描述
其中 z0=hs(g((ytext))∈RCz{\ z}^0=h_s(g((y^{text}))\ \in\ \mathbb{R}^{C_z} z0=hs(g((ytext))  RCz 是空间交互的投影语义嵌入,hs(⋅)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∈RNh×(M+1)×Czq, k, v ∈ \mathbb{R}^{N_h\times\left(M+1\right)\times C_z}q,k,vRNh×(M+1)×Cz
在这里插入图片描述
其中NhN_hNh是注意头数,ChC_hCh是每个注意头的通道数。

第二步,计算q 和 k 的内积并沿空间维度执行 softmax 来计算注意力权重 A{A}ARNh×(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标记中,以 逐个通道地 调制和增强视觉特征。

首先获得全局视觉上下文向量zl−1C∈RCzz_{l-1}^C ∈ \mathbb{R}^{C_z}zl1CRCz, 通过对所有patch 标记进行平均:
在这里插入图片描述
将视觉上下文 Zl−1cZ_{l-1}^cZl1c 与投影语义向量z0{\ z}^0 z0连接起来,送入 2 层 MLP 模块以获得调制向量 βl−1∈RCz\beta_{l-1}\in R^{C_z}βl1RCz:
在这里插入图片描述
其中 W1、b1、W2、b2W_1、b_1、W_2、b_2W1b1W2b2是 MLP 模块的参数,σ 是 sigmoid 激活函数,hch_chc是通道交互的投影器。

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

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

4 Results

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

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

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

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

相关文章

矿泉水为什么会溴酸盐超标

矿泉水为什么会溴酸盐超标? 水生产企业多使用臭氧消毒,不过,水生产企业不存在水运输路途遥远的问题,因此可以使用臭氧消毒。同时,也是因为臭氧在消毒后会直接变成氧气,所以不会有使用氯消毒后的那种味道&a…

我在“Now In Android”中学到的 9 件事

我在“Now In Android”中学到的 9 件事 Now in Android是一款功能齐全的 Android 应用程序,完全使用 Kotlin 和 Jetpack Compose 构建。它遵循 Android 设计和开发最佳实践,旨在为开发人员提供有用的参考。 https://github.com/android/nowinandroid UI…

【软考备战·希赛网每日一练】2023年4月11日

文章目录一、今日成绩二、错题总结第一题第二题第三题第四题第五题三、知识查缺题目及解析来源:2023年04月11日软件设计师每日一练 一、今日成绩 二、错题总结 第一题 解析: 策略模式:定义一系列算法,把它们一个个封装起来&#…

c++学习之c++对c的扩展1

目录 1.面向过程与面向对象的编程 2.面向对象编程的三大特点 3.c对c的扩展: 1.作用域运算符:: 2.命名空间 1.c命名空间(namespace) 2.命名空间的使用 1.在不同命名空间内可以创建相同的名称 2.命名空间只能在全…

2.30、守护进程(1)

2.30、守护进程(1)1.终端是什么2.进程组是什么3.会话是什么4.进程组、会话、控制终端之间的关系5.进程组、会话操作有哪些函数①pid_t getpgrp(void);②pid_t getpgid(pid_t pid);③int setpgid(pid_t pid, pid_t pgid);④pid_t getsid(pid_t pid);⑥pid…

Java 在循环的try catch中使用continue、break

循环的try catch中使用continue、break。 结论:1. 循环内catch代码端中的的continue、break可以正常生效。 2. 无论是continue还是break,退出循环前都会执行finally中的代码 文章目录代码:情形1(无continue、break)结果…

HTTP协议状态码大全 | 汇总HTTP所有状态码

🔊 HTTP 状态码 当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含 HTTP 状态码的信息头(server header)用以响应浏览器的请求。 HTTP…

有反爬机制就爬不了吗?那是你还不知道反反爬,道高一尺魔高一丈啊

文章目录一、从用户请求的Headers反爬虫二、基于用户行为反爬虫(1)方法1(2)方法2三、动态页面的反爬虫四.总结不知道你们在用爬虫爬数据的时候是否有发现,越来越多的网站都有自己的反爬机制,抓取数据已经不…

300元左右的蓝牙耳机哪个好?300左右音质最好的蓝牙耳机

无线耳机是人们日常生活中必不可少的设备,无论是听音乐化石看电影都能获得身临其境的感觉,由于科技真在发展中,不断地的发生变化,百元价位就可以感受到不错的音色,下面小编整理了几款300左右音质表现不错的蓝牙耳机。 …

Git这么香,为啥还要可视化?

一、降低入门门槛 Github Desktop / Sourcetree / TortoiseGit “工欲善其事,必先利其器”,团队项目开发中的高效协作管理非常重要。 对于高级程序员及IT老兵来说,有了Git直接用命令行管理也许就足够了, 但可视化的工具会降低技术…

【pta刷题】小技巧

好久没更了 写天梯模拟L1都有题不能AC&#xff0c;是什么品种的蒟蒻 L1-7 谷歌的招聘 题目详情 - L1-7 谷歌的招聘 (pintia.cn) 自己写半天都是Segmentation Fault&#xff0c; 学习一下几个函数叭// 1.substr&#xff08;&#xff09;函数 获取子串 #include<bits/st…

Distilling Knowledge via Knowledge Review(引言翻译)

翻译得可能不太准确&#xff0c;希望有能力的各位批评指正&#xff01; Introduction 第一段 深度卷积神经网络&#xff08;CNN&#xff09;在计算机视觉多数任务中取得了显著的成功。 然而&#xff0c;卷积网络的成功往往伴随着相当大的计算和内存消耗&#xff0c; 使得将…

企业级信息系统开发讲课笔记2.3 利用MyBatis实现关联查询

文章目录零、本节学习目标一、查询需求&#xff08;一&#xff09;针对三张表关联查询&#xff08;二&#xff09;按班级编号查询班级信息&#xff08;三&#xff09;查询全部班级信息二、创建数据库表&#xff08;一&#xff09;创建教师表&#xff08;二&#xff09;创建班级…

我的世界服务器配置推荐,搭建我的世界服务器教程

以下是我整理的部分服务器配置建议与教程&#xff0c;供你参考。 服务器配置推荐&#xff1a; 1. CPU&#xff1a;至少是四核心2.5GHz以上的处理器&#xff0c;建议使用Intel Xeon E3系列或AMD Ryzen 5以上系列 2. 内存&#xff1a;建议至少8GB&#xff0c;如果服务器人数较多…

【Linux】工具(5)——gdb

今天我们来到Linux工具的最后一篇博客&#xff1a;gdb的使用 目录 一、Linux下的release和debug 二、gdb常用指令选项 一、Linux下的release和debug 我们先来写一个Makfile&#xff0c;来方便我们编译代码&#xff1a; 再来写一个test.c的源文件&#xff1a; 接着我们使用m…

unity的下载和安装

我做了一个不知道算不算好的决定&#xff0c;其实还是很难过的。但过去的事就让他过去吧&#xff0c;现在开始学习一些其他的东西吧&#xff0c;比如说unity吧。 一、下载安装工具 Unity的国内下载网址&#xff1a;https://unity.cn/ 进入官网后&#xff0c;选择想要的版本 …

CI570 3BSE001440R1适用于数字功能需求较多的设计

CI570 3BSE001440R1适用于数字功能需求较多的设计 尽管纯硅的CMOS 制程被认为仅适用于数字功能需求较多的设计&#xff0c;而不适用于以模拟电路为主的射频IC 设计&#xff0c;不过历经十几年的努力后&#xff0c;随着CMOS 性能的提升、晶圆代工厂在0.25mm 以下制程技术的配合、…

哪个品牌的蓝牙耳机便宜耐用?内行公认四大便宜耐用的蓝牙耳机

蓝牙耳机发展至今&#xff0c;品牌众多&#xff0c;且各品牌旗下拥有无数不同价格的耳机&#xff0c;各自的主打优势又不一样。那么&#xff0c;哪个品牌的蓝牙耳机便宜耐用&#xff1f;下面&#xff0c;我来给大家推荐四款便宜耐用的蓝牙耳机&#xff0c;一起来看看吧。 一、…

Verilog Tutorial(7)If语句和Case语句

写在前面在自己准备写verilog教程之前&#xff0c;参考了许多资料----FPGA Tutorial网站的这套verilog教程即是其一。这套教程写得不错&#xff0c;只是没有中文&#xff0c;在下只好斗胆翻译过来&#xff08;加了自己的理解&#xff09;分享给大家。这是网站原文&#xff1a;h…

webassembly——同源策略问题的处理(浏览器不能加载本地资源的问题)

原因&#xff1a;在用chatGPT生成可视化地图前端文件后&#xff0c;打开不能正常显示 WebAssembly是一种新的二进制代码格式&#xff0c;它可以提供更高的性能和更好的安全性。WebAssembly遵循同源策略&#xff0c;这意味着只有与运行WebAssembly代码相同域名下的JavaScript代码…