论文汇总:Rectifying the Shortcut Learning of Background for Few-Shot Learning

 原文解读:

论文解读:Rectifying the Shortcut Learning of Background for Few-Shot Learning-CSDN博客

文章汇总

问题&动机&解决方法

图像背景是一种有害知识的来源,这是少数镜头学习模型容易吸收的(问题)

通过在训练和评估中提取图像中的前景目标而不需要任何额外的监督来解决这个问题(动机)

在训练和评估时将模型的注意力吸引到图像前景上(方法)

创新点

创新点1:

在训练中去除背景可以防止捷径学习

背景训练有助于模型处理复杂的场景

简单的融合取样结合了两者的优点,给定一张图像作为输入,选择其前景版本的概率为p,选择其原始版本的概率为1 - p

创新点2

预训练任务-基于聚类的目标搜索器(COS)

1:对每张图片随机裁剪,得到L个子图,每个子图经过预训练主干变为特征高度密集的向量\textbf{V}_{n,m}

对该类中所有patch进行分类,总共得到H个类别

2:一张图片中某个patch(子图)属于H个类别中的某个类别,我们就说这张图片也属于这个类别(明显,一张图片很有可能会属于多个类别,因为不同的子图有可能会属于不同的类别)

3:那么如何判断H个类别中某一个类别是否是前景呢,我们要求属于这个类别的图片的数量到达指定的阈值。如果没有到达该类别则为背景,其他到达阈值的类别(总共h个)正是我们想找的"前景"

4:p_{n,m}为对应某个patch(子图),||\textbf{v}_{n,m}-\textbf{z}_{\alpha_j}||_2,j \in[h]的意思为该patch密集特征和其中一个前景类别(总共h个)的模长,min_{j \in[h]||\textbf{v}_{n,m}-\textbf{z}_{\alpha_j}||_2}则h个前景类别中最小的一个模长(应该是最相似的一个类别)。1-最小模长为该子图得分,即1-min_{j \in[h]||\textbf{v}_{n,m}-\textbf{z}_{\alpha_j}||_2}/\eta就是该patch与最相似的前景类别的得分。因此得到每个patch与h个前景类别的得分。

top-k(聚类中的概念)为置信度

由于选择的是融合特征,图片保留为原始版本的概率为1-\mathop{max}\limits_{i\in[k]}{s_{n,\beta_i}},其中\mathop{max}\limits_{i\in[k]}{s_{n,\beta_i}}为该图片所有子图跟哪个类别最相似的概率。如果不保留为原始版本,那么选择的前景为该图片top-k中的某个patch,概率为({s_{n,\beta_i}}/\sum_{i\in[k]}{s_{n,\beta_j}})\cdot\mathop{max}\limits_{i\in[k]}{s_{n,\beta_i}}

支持和查询集间寻找共享内容-基于共享对象集中器(SOC)的少镜头评估

对于查询集,依然是每个图片得到V个子图特征u_i,i=1,...,V(来自查询集),通过步骤1,找到V个高度代表了一个类别的特征,从小到大排序为\{\omega_n\}_{n=1}^V(来自支持集),w_nu_i相互比较,最接近为s_1(为公式4),如此得到得分最高的类别即为预测类别。

文章中方法的讲述部分

4.1基于聚类的目标搜索器(COS)融合采样训练

由于对比学习在区分前景目标方面比较好,我们利用对比学习在训练前提取前景目标。第一步是使用Exemplar[68]在训练集D_B上预训练主干f_\theta(\cdot)。然后使用基于聚类的算法提取由预训练模型识别的“对象”。其基本思想是,通过对比学习模型提取的一类图像中前景目标的特征是相似的,因此可以通过聚类算法进行识别;请看图3中的一个简单的例子。D_B中第i类中的所有图像形成一个集合
\{x^i_n\}^N_{n=1}

为了清楚起见,我们在下面的描述中省略了类索引\{\textbf{p}_{n,m}\}^L_{m=1}。在某一类中寻找前景目标的具体方案如下:

1)对每张图像\textbf{p}_{n,m},随机裁剪L次,得到L个图像patchf_\theta。然后将每个图像patch
\textbf{p}_{n,m}经过预训练模型f_\theta,得到归一化特征向量\textbf{V}_{n,m}=\frac{f_\theta(\textbf{p}_{n,m})}{||f_\theta(\textbf{p}_{n,m})||_2}\in R^d

2)对该类的所有特征向量运行聚类算法A,得到H个聚类\{\textbf z_j\}^H_{j=1} = A(\{\textbf{v}_{n,m}\}^{N,L}_{n,m=1}),其中
\textbf{z}_j为第j个聚类的特征质心。

3)我们说一个像\textbf x_n\in \textbf z_j,即为存在k \in[L] s.t. \textbf{v}_{n,k}\in{\textbf{z}_j},其中[L]=\{1,2,...,L\}。设
l(\textbf z_j) = \frac{\{\# \textbf x|\textbf x\in \textbf z_j\}}{N}为该类中属于\textbf z_j的图像的比例。如果l(\textbf z_j)很小,则聚类\textbf z_j不能代表整个类,可能是背景。因此我们去掉所有l(\textbf z)<\gamma的聚类\textbf z,其中\gamma是控制聚类一般性的阈值。剩下的h个聚类
\{\textbf z_j\}^{\alpha h}_{j=\alpha_1}表示我们正在寻找的类的“对象”。

4)将图像patchp_{n,m}的前景分数定义为s_{n,m}=1-min_{j \in[h]||\textbf{v}_{n,m}-\textbf{z}_{\alpha_j}||_2}/\eta,其中
\eta=\mathop{max}\limits_{n,m} \mathop{min}\limits_{j\in[h_c]}||\textbf{v}_{n,m}-\textbf{z}_{\alpha_j}||_2用于将分数归一化为[0,1]。然后得到每张图像
\textbf x_n的top-k分数为\{s_{n,m}\}^{\beta_k}_{m=\beta_1}=\mathop{Topk(s_{n,m})}\limits_{m\in [L]}。将对应的\{\textbf{p}_{n,m}\}^{\beta_k}_{m=\beta_1}视为图像\textbf x_n中前景目标的可能作物,前景评分\{​{s}_{n,m}\}^{\beta_k}_{m=\beta_1}作为置信度。然后,我们将其作为先验知识来纠正FSL模型背景的快速学习。

训练策略类似于前面介绍的融合采样。对于图像\textbf x_n,我们选择原始版本的概率为
1-\mathop{max}\limits_{i\in[k]}{s_{n,\beta_i}},从top-k个patch中选择\textbf{p}_{n,\beta_j}的概率为({s_{n,\beta_i}}/\sum_{i\in[k]}{s_{n,\beta_j}})\cdot\mathop{max}\limits_{i\in[k]}{s_{n,\beta_i}}。然后对所选图像进行调整,使最小面积占原始图像的比例保持不变。我们使用该策略使用FSL算法来训练骨干f_\theta(\cdot)

4.2基于共享对象集中器(SOC)的少镜头评估

如前所述,如果在评估时使用图像的前景裁剪,FSL模型的性能将得到很大的提升,作为模型性能的上界。

为了接近这个上限,我们提出了SOC算法,通过在同类支持图像和查询图像之间寻找共享内容来捕获前景目标。

步骤1:在每个类中搜索共享内容。

对于支持集S_{\tau}中c类中的每张图像\textbf x_n,我们随机裁剪V次,得到相应的候选图像
\{\textbf{p}_{k,n}\}_{n=1,...,V}。每个\textbf{p}_{k,n}分别发送到学习主干f_\theta,得到归一化特征向量
\textbf{v}_{k,n}。因此,我们在c类中总共有K × V个特征向量。

我们的目标是得到一个特征向量\omega_1包含c类中所有图像的最大共享信息。理想情况下,\omega_1表示最相似的K个图像块的质心,每个图像块来自一个图像,可表示为

式中cos(·,·)表示余弦相似度,[K]^{[V]}表示以[K]为定义域,以[V]为值域的函数集。而\lambda_{opt}可以通过枚举图像patch的所有可能组合得到,该蛮力方法的计算复杂度为O(V^K),即当V或K很大时,计算是禁止的。因此,当计算负担不起时,我们转而使用一种利用迭代优化的简化方法。而不是寻找最近的图像补丁,我们直接优化ω1,使每个图像到补丁的最小距离之和最小,即:

这可以通过迭代优化算法来实现。我们在实验中应用了SGD。优化后,我们去除每张图像中与ω1最相似的patch,得到K × (V−1)个特征向量。然后我们重复执行上述优化过程,直到没有特征留下,如图4所示。我们最终得到V个经过排序的特征向量\{\omega_n\}_{n=1}^V

,用来表示类c。对于shot K =1的情况,类内部没有共享的图像间信息,因此与PN和DeepEMD[63]中的处理类似,我们直接跳过第1步,使用原来的V个特征向量。

步骤2:查询图像聚焦前景目标的特征匹配。

一旦确定了前景类表示,下一步就是使用它们通过特征匹配来隐式地关注查询图像的前景。对于查询集Q_{\tau}中的每张图像x,我们也随机裁剪V次,得到V个候选特征\{u_n\}_{n=1}^V。对于每个c类,我们有V个经过排序的代表性特征向量\{\omega_n\}_{n=1}^V,这些特征向量是在步骤1中得到的。然后我们匹配查询特征和类特征之间最相似的patch,即

其中\alpha <=1是一个重要因子。

因此,权重\alpha^{j-1}在指标n−1中呈指数降低,表明每个表示前景的向量的可信度降低。类似地,删除两个匹配的特征,重复上述过程,直到不留下任何特征。最后是x w.r.t.的分数。

c类是所有相似度的加权和,即S_c=\sum^V_{n=1}{\beta^{n-1}s_n},其中\beta<=1是控制每个作物是前景目标的另一个重要因素。通过这种方式,更早匹配的特征——因此更有可能成为前景——将对得分有更高的贡献。x的预测类别是得分最高的类别。

附录B对比学习

对比学习倾向于将同一图像的转换视图之间的一致性最大化,而将不同图像的转换视图之间的一致性最小化。令f_\phi(\cdot)是一个输出特征空间R^d的卷积神经网络。一个图像x的两个增广图像补丁通过
f_\phi(\cdot)进行映射,生成一个查询特征q和一个关键特征k。此外,使用其他图像的补丁生成一个包含数千个负特征\{v_n\}^Q_{n=1}的队列。

该队列既可以使用当前批处理中的所有图像在线生成[1],也可以使用最近几个epoch的存储特征离线生成[4]。给定q,对比学习的目标是识别数千个特征\{v_n\}_{n=1}^Q中的k,可以表示为:L(\textbf q,\textbf k,\{v_n\})=-log\frac{e^{sim(\textbf q,\textbf k)/\tau}}{e^{sim(\textbf q,\textbf k)/\tau}+\sum^Q_{j=1}e^{sim(\textbf q,v_j)/\tau}}

式中\tau为温度参数,sim(\cdot,\cdot)相似性度量。在Exemplar[5]中,为了“在弱利用标签信息的同时保留每个正实例的唯一信息”,将\{v_n\}_{n=1}^Q中与属于同一类\textbf q的所有样本都剔除。

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

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

相关文章

TI IWR6843ISK ROS驱动程序搭建

1、设备准备 1.1 硬件设备 1&#xff09;TI IWR 6843 ISK 1块 2&#xff09;Micro USB 数据线 1条 1.2 系统环境 1&#xff09;VMware Workstation 15 Player 虚拟机 2&#xff09;Ubuntu18.04 并安装有 ROS1 系统 如若没有安装 ROS 系统&#xff0c;可通过如下指令进行…

【分库分表】基于mysql+shardingSphere的分库分表技术

目录 1.什么是分库分表 2.分片方法 3.测试数据 4.shardingSphere 4.1.介绍 4.2.sharding jdbc 4.3.sharding proxy 4.4.两者之间的对比 5.留个尾巴 1.什么是分库分表 分库分表是一种场景解决方案&#xff0c;它的出现是为了解决一些场景问题的&#xff0c;哪些场景喃…

Solidity攻击合约:“被偷走的资金”

在以太坊智能合约开发中&#xff0c;Solidity是最常用的编程语言。然而&#xff0c;由于代码编写不当或缺乏安全意识&#xff0c;合约可能面临各种攻击。本文将通过一个简单的Solidity合约示例&#xff0c;展示一个潜在的攻击合约&#xff0c;并分析其相对于原本合约的危害以及…

计算机设计大赛 疲劳驾驶检测系统 python

文章目录 0 前言1 课题背景2 Dlib人脸识别2.1 简介2.2 Dlib优点2.3 相关代码2.4 人脸数据库2.5 人脸录入加识别效果 3 疲劳检测算法3.1 眼睛检测算法3.2 打哈欠检测算法3.3 点头检测算法 4 PyQt54.1 简介4.2相关界面代码 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#x…

024—pandas 将一列数据等份变形

前言 今天我们将一个 Series 序列数据转为 DataFrame结构。我们将用么 pd.cut() 对数据进行分箱&#xff0c;也会用到 NumPy 的 np.reshape() 对阵列数据进行变形。接下来我们看看具体的需求&#xff0c;再分析一下解决思路&#xff0c;最后用代码实现它。 需求&#xff1a; …

flink实战--Flink任务资源自动化优化

背景 在生产环境Flink任务资源是用户在实时平台端进行配置,用户本身对于实时任务具体配置多少资源经验较少,所以存在用户资源配置较多,但实际使用不到的情形。比如一个 Flink 任务实际上 4 个并发能够满足业务处理需求,结果用户配置了 16 个并发,这种情况会导致实时计算资…

《Effective Modern C++》- 极精简版 15-21条

本文章属于专栏《业界Cpp进阶建议整理》 继续上篇《Effective Modern C》- 极精简版 5-14条。本文列出《Effective Modern C》的15-21条的个人理解的极精简版本。 Item15、尽量使用constexpr constexpr形容对象 constexpr对象都是const&#xff0c;但是const对象不一定是conste…

七、门控循环单元语言模型(GRU)

门控循环单元&#xff08;Gated Recurrent Unit&#xff0c;GRU&#xff09;是 LSTM 的一个稍微简化的变体&#xff0c;通常能够提供同等的效果&#xff0c;并且计算训练的速度更快。 门控循环单元原理图&#xff1a;参考门控循环单元 原理图中各个图形含义&#xff1a; X(t)&a…

C语言逗号运算符(,)

在C语言中&#xff0c;逗号运算符&#xff08;,&#xff09;用于在表达式中分隔多个子表达式&#xff0c;并按照从左到右的顺序依次计算这些子表达式。逗号运算符的运算结果是最后一个子表达式的值。 逗号运算符的底层行为是依次计算每个子表达式&#xff0c;并将每个子表达式…

gumbel-softmax如何实现离散分布可微+torch代码+原理+证明

文章目录 背景方法通俗理解什么是重参数化gumbel-softmax为什么是gumbeltorch实现思考 背景 这里举一个简单的情况&#xff0c;当前我们有p1, p2, p3三个概率&#xff0c;我们需要得到最优的一个即max(p1, p2, p3)&#xff0c;例如当前p3 max(p1, p2, p3)&#xff0c;那么理想…

【从部署服务器到安装autodock vina】

注意&#xff1a;服务器 linux系统选用ubuntu 登录系统&#xff0c;如果没有图形化见面可以先安装图形化界面 可以参考该视频 --> linux安装图形化界面 非阿里云ubuntu 依次执行以下命令 sudo apt-get update sudo apt-get install gnome sudo reboot阿里云ubuntu 需多执…

分布式解决方案

目录 1. 分布式ID1-1. 传统方案1-2. 分布式ID特点1-3. 实现方案1-4. 开源组件 1. 分布式ID 1-1. 传统方案 时间戳UUID 1-2. 分布式ID特点 全局唯一高并发高可用 1-3. 实现方案 方案总结&#xff1a; 号段模式 有两台服务器&#xff0c;给第一台服务器分配0-100&#xff0…

前端手册-实现挂坠灯笼效果

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

c#触发事件

Demo1 触发事件 <Window x:Class"WPFExample.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"Title"WPF Example" Height"600" Wi…

如何在Linux上为PyCharm创建和配置Desktop Entry

在Linux操作系统中&#xff0c;.desktop 文件是一种桌面条目文件&#xff0c;用于在图形用户界面中添加程序快捷方式。本文将指导您如何为PyCharm IDE创建和配置一个 .desktop 文件&#xff0c;从而能够通过应用程序菜单或桌面图标快速启动PyCharm。 步骤 1: 确定PyCharm安装路…

鸿蒙应用开发学习:使用视频播放(Video)组件播放视频和音频文件

一、前言 播放音视频是手机的重要功能之一&#xff0c;近期我学习了在鸿蒙系统应用开发中实现音视频的播放功能&#xff0c;应用中使用到了视频播放(Video)组件&#xff0c;ohos.file.picker&#xff08;选择器&#xff09;。特撰此文分享一下我的学习经历。 二、参考资料 本…

【设计】基于web的会员管理系统

1、引言 设计结课作业,课程设计无处下手&#xff0c;网页要求的总数量太多&#xff1f;没有合适的模板&#xff1f;数据库&#xff0c;java&#xff0c;python&#xff0c;vue&#xff0c;html作业复杂工程量过大&#xff1f;毕设毫无头绪等等一系列问题。你想要解决的问题&am…

Elasticsearch 单节点部署教程,以及踩坑记录

1、简介 Elasticsearch 作为分布式搜索引擎&#xff0c;在生产环境中使用集群部署&#xff0c;对于学习者而言我们只需要掌握如何使用即可&#xff0c;后续更高级的集群部署配置将在以后博客中更新。 Elasticsearch 更新迭代速度非常快&#xff0c;并且不同版本有着很大区别&am…

外包干了30天,技术明显退步。。

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 这次来聊一个大家可能也比较关心的问题&#xff0c;那就是就业城市选择的问题。而谈到这个问题&a…

scrapy的基本使用介绍

创建项目 ### 1. 创建虚拟环境 conda create -n spiderScrapy python3.9 ### 2. 安装scrapy pip install scrapy2.8.0 -i https://pypi.tuna.tsinghua.edu.cn/simple### 3. 生成一个框架 scrapy startproject my_spider### 4. 生成项目 scrapy genspider baidu https://www.b…