论文研读——《Task-Adaptive Negative Envision for Few-Shot Open-Set Recognition》

devtools/2024/9/25 11:47:13/

这是一篇关于少样本+开集识别的论文。

目录

论文简介:

 名词补充

论文的贡献

负原型生成器

确定动态阈值

共轭训练

补充:元训练过程

共轭训练过程

共轭训练损失

实验设置

总结


论文简介:

Task-Adaptive Negative Envision for Few-Shot Open-Set Recognition

题目:用于少样本开放集识别的任务自适应负面设想

出处:CVPR 2022   CCF A

作者:Shiyuan Huang,Jiawei Ma,Guangxing Han,Shih-Fu Chang

单位:哥伦比亚大学

研究问题: 本文研究少样本开放集识别 (FSOR) 问题,旨在构建一个能够在少量标记样本的情况下快速适应新类别,并拒绝未知负样本的识别系统。

现有方法的局限性: 传统的大规模开放集识别方法由于数据限制,在 FSOR 问题中效果不佳。现有的 FSOR 方法通常将少样本闭集分类器校准为对负样本敏感,以便通过阈值进行拒绝。然而,阈值调整是一个具有挑战性的过程,因为不同的 FSOR 任务可能需要不同的拒绝能力。

本文提出了一种名为 任务自适应负类想象 (TANE) 的方法,将阈值调整集成到学习过程中。具体来说,我们通过从少样本示例生成的额外负原型来增强少样本闭集分类器。通过在负生成过程中包含少样本类相关性,我们能够学习动态拒绝边界,用于 FSOR 任务。

解释:一个任务里设置的阈值边界在当前任务中可以很好的适用,但是放在其它类型的任务中就很难适用了,本文提出了一个动态的拒绝边界,可以适用每一个任务。

 名词补充

少样本学习(FSL):旨在快速适应新的识别任务,只需非常少的标记示例。它通常使用元学习来学习在一系列任务上可迁移的知识。

开放集识别(OR):模型需要能够识别并拒绝来自未知类别的样本。 FSOR :少样本开放集识别,快速适应新类别并拒绝未知样本。

GFSOR:它要求模型能够对多样本和少样本类别进行分类,并拒绝来自未知类别的样本。GFSOR 的目标是学习一个能够适应不同类别数量和比例的开放集识别系统。

元学习(Meta Learning):通常被理解为“学会学习 (Learning-to-Learn)”,指的是在多个学习阶段改进学习算法的过程。

少样本类:只有少量样本的类别;多样本类:有大量样本的类别。

原型:每个类别由一个或多个原型表示,原型是该类别所有支持样本特征的平均值或通过其他方法计算得到的一个特征向量。

负原型:负原型代表了未知类别(即负样本)的特征,它可以用来估计拒绝阈值,判断测试样本是否属于已知类别。 FSOR任务:T = (S, Qf, Qn|Cf),由支持集、正样本、负样本构成。

关于一个任务T中的数据集划分可以表示如下:首先数据集分为已知类和未知类,从已知类中取出几张图片作为支持集去训练模型,已知类中剩下的图片被划为查询集里的正查询,而未知类的图片被划分为负查询,正查询和负查询一起组成查询集。简单点来说,支持集就像是我们已经录入的指纹,而查询集是待识别的一些指纹,查询集里的图片依次跟支持集里的对比,判断当前图片属于哪一类。

论文的贡献

我们的方法已通过针对 FSOR 和 GFSOR 问题的公共基准测试的大量实验得到验证。 总之,我们的贡献如下:

  • 本文针对小样本开集识别问题,提供了一个无阈值的解决方案,扩展了具有计算任务自适应拒绝边界的负原型的分类器。
  • 设计了一个负类原型生成器并通过元学习跨任务学习负性原型,从而使负性原型作为不同FSOR任务的任务自适应拒绝边界。
  • 提出了一种有效的新训练策略——共轭训练,以促进学习过程。

负原型生成器

文中提到的负原型生成器有MLP (多层感知器)、ATT (注意力机制)、ATT-G、SEMAN-G,使用预训练网络提取出每一类的特征并得到每类的原型Pc。

  • MLP (多层感知器): 最简单的生成器,使用单个 MLP 层处理平均类别原型。
  • ATT (注意力机制): 使用 Transformer 注意力块处理类别原型,有效地建模类别间关系。
  • ATT-G (GFSOR 专用): 基于 ATT,但结合了 GFSOR 中的许多样本类别原型,避免对许多样本类别的偏差。
  • SEMAN-G (GFSOR 专用): 基于 ATT-G,但引入了类别语义信息,进一步提升辨别力。
  • 多负原型生成器: 生成多个负原型,每个原型对应一个动态阈值,提高灵活性。

负原型生成器其实就是在普通的softmax分类器的基础上,加了一步,每个正样本类别都得到了一个原型(能代表这一类的特征值),负原型是根据这些正样本的原型推导出来的。

确定动态阈值

该负原型是通过负生成器 gn(·) 从少样本类原型 Pf 计算出来的。 当查询进入时,它能够自动从负原型计算出特定于任务的阈值:

依次比较查询数据与每类原型的相似度,并与阈值比较,如果都比阈值小则负查询 q ∈ Qn 将被拒绝。因此,拒绝边界是根据少样本类 C f 和支持实例 S 动态估计的。

SEMAN-G方法计算了每个类别的负原型,有待查询数据时,查询数据的特征会与每一个负原型计算相似度,并取最大的值作为拒绝阈值。

上述的负原型生成器已经算出了负原型,当有待查询的图片进来对比时,该图片与负原型的余弦相似度就被设置为当前的阈值,如果说跟所有已知类的相似度都小于阈值,说明现在正在对比的图片是更接近负原型的,所以应该拒绝它;如果说跟已知类的相似度大于阈值,则说明当前正在对比的图片是已知类的一种,选最高的相似度作为它的类别。

共轭训练

补充:元训练过程

假设我们有一个包含 10 个基准类别的数据集,每个类别有 1000 张图片。

元训练过程:

任务采样: 从基准数据集中随机选择 5 个类别作为当前 FSOR 任务中的 少样本类别 (Few-Shot Classes)。例如,选择类别 1, 2, 3, 4, 5。

未知来源采样: 从剩余的 5 个基准类别中选择 5 个类别作为 未知来源。例如,选择类别 6, 7, 8, 9, 10。

正查询和负查询采样:

正查询: 从每个少样本类别中随机选择 1 张图片作为支持集,并从剩余的图片中随机选择 15 张图片作为查询集。

负查询: 从每个未知来源类别中随机选择 15 张图片作为负查询集。

模型训练: 使用开放集识别损失函数来训练模型,使其能够区分正查询和负查询,并拒绝来自未知来源的样本。

共轭训练过程

选择共轭任务:两个 FSOR 任务 T1 和 T2 被称为 共轭任务对,如果 T1 中的少样本类别可以作为 T2 中的未知来源,反之亦然。

  • 任务 T1: 少样本类别 {1, 2, 3},未知来源 {4, 5, 6}
  • 任务 T2: 少样本类别 {4, 5, 6},未知来源 {1, 2, 3}

执行共轭训练:

  • 根据共轭训练的定义,选择一对共轭任务 (T1, T2)
  • 分别训练两个任务: 使用标准的 FSOR 元训练方法分别训练 T1 和 T2。
  • 计算损失函数: 使用交叉熵损失函数来计算两个任务的损失,并添加一个正则化项来鼓励模型学习类内一致性。
  • 反向传播和参数更新: 将两个任务的损失函数进行求和,然后进行反向传播和参数更新。直到模型收敛。

共轭训练损失

1. 分类损失 (LCE):优化模型对已知类别和未知类别的识别能力。

对于已知类别 (q ∈ Qf),最小化真实标签 yq 与预测类别之间的交叉熵损失。 对于未知类别 (q ∈ Qn),将真实标签设置为 N+1,并最大化预测分数,从而鼓励模型将未知样本识别为未知类别。

2. 负样本正则化损失 (Lneg):优化模型学习到的负样本原型,使其能够更好地代表未知类别。

对每个正类原型生成的负类原型,计算它与负样本之间的二分类交叉熵损失,并使其尽可能小,从而增加它们之间的相似度。

总损失:L = LT1 + LT2

实验设置

实验数据集:

  • 84×84尺寸 MiniImageNet: 包含 100 个类别,用于元学习的类别划分为 (meta-training, meta validation, meta-testing) = (64, 16, 20)。每个类别有 600 张图片。
  • TieredImageNet: 包含 608 个类别,用于元学习的类别划分为 (meta-training, meta validation, meta-testing) = (351, 97, 160)。基础数据集包含大约 450K 张图片。

实验设置:

  • 使用 ResNet12 作为特征提取器,在基础数据集上进行预训练。
  • 使用元学习策略进行训练,包括标准 FSOR 元训练和作者提出的共轭训练。训练 18k 个任务。
  • 使用交叉熵损失函数进行训练。
  • 使用多种指标评估模型的性能,包括准确率、AUROC、F1-score 等。

实验结果:

  • 与基于阈值的分类器相比,本文的方法在 F1 分数方面取得了显著的提升,证明了无需阈值调整的有效性。
  • 与 SOTA 方法相比,本文的方法在分类准确率和负样本检测方面取得了优异的性能。
  • 通过消融实验,验证了共轭训练策略的有效性。
  • 在 CIFAR-FS 和 FC100 数据集上进行的额外实验进一步证明了本文方法的有效性。

总结

在本研究中,我们展示了基于阈值的方法在少样本开放集识别中的局限性,不同的任务可能需要非常不同的拒绝阈值,因此调整过程可能具有挑战性。为此,我们提出了针对 (G)FSOR 的任务自适应负向设想方法,其中负向原型是根据少样本/多样本类示例计算出来的。我们研究了不同设计的负向生成器,发现基于注意的生成器效果最好;添加类语义可以进一步提高性能。我们还引入了一种新的共轭类训练策略,以更好地促进学习过程。

项目地址 : GitHub - shiyuanh/TANE: Code Repository for "Task-Adaptive Negative Envision for Few-Shot Open-Set Recognition"

原文地址:Task-Adaptive Negative Envision for Few-Shot Open-Set Recognition | IEEE Conference Publication | IEEE Xplore


http://www.ppmy.cn/devtools/116952.html

相关文章

Flask学习之项目搭建

一、项目基本结构 1、 exts.py 存在的目的:在Python中,如果两个或更多模块(文件)相互导入对方,就会形成导入循环。例如,模块A导入了模块B,同时模块B又导入了模块A,这就会导致导入循环。 比如在这个项目中…

什么是后端开发 ?

后端,亦称“服务器端开发”。同样,在后端服务器和浏览器或应用程序之间存储网站、应用数据和中间媒介的服务器都属于后端。也可以这么说,在应用程序或网站的屏幕上看不到的所有东西都是前端的后端。那么后端开发的基本流程是什么呢&#xff1…

redis 快速入门

目录 数据库的分类 NoSQL 非结构化 认识 redis 特征 安装 redis 单机安装 Docker 安装 redis 的基本配置 启动 redis 关闭 redis redis 开机自启 redis 客户端 redis 数据结构介绍 基本类型 String 的基础操作 List 基本操作 Set基本操作 Sorted Set基本操作…

在 Qt 中实现 `QListWidget` 列表项水平居中显示

文章目录 在 Qt 中实现 QListWidget 列表项水平居中显示引言QListWidget 和 QListWidgetItem水平居中的实现思路核心代码实现主窗口的设置添加列表项并设置文本居中样式表设置 运行效果可能遇到的问题总结参考文献 在 Qt 中实现 QListWidget 列表项水平居中显示 引言 Qt 是一…

http代理池子大小要如何判断?

最近经常刷到关于如何判断HTTP代理池大小的话题,很多朋友对此感到困惑。那么,今天我们就一起来探讨这个问题。 HTTP代理池的基本概念 在我们深入探讨如何判断HTTP代理池大小之前,先来了解一下什么是HTTP代理池。HTTP代理池是由多个HTTP代理…

vue3更具文件目录动态添加路由配置

在项目中,想要在某个文件夹下直接添加.vue文件,并根据文件自动生成route跳转, 在view文件夹下,建立threePage文件夹,在里面建立index.vue,index1.vue; 建立three.js文件, 动态获取…

比较器(算法中排序)

方式一&#xff1a;不常用 让实体类实现Comparable接口&#xff0c;泛型是需要比较的类型&#xff0c;同时重写compareTo方法 缺点&#xff1a;对代码有侵入性。 public class Student implements Comparable<Student> {private String name;private double score;// …

Redis解说

Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的高性能键值存储数据库&#xff0c;它通常被用作数据库、缓存和消息代理。 由于其内存中的数据结构存储、持久化选项以及丰富的数据类型支持&#xff0c;Redis 在处理大量数据和高并发请求时表现出色。 Redi…