【开放集检测】OpenGAN: Open-Set Recognition via Open Data Generation 论文阅读

文章目录

  • 英语积累
  • 为什么使用GAN系列网络进行开放集检测
  • 摘要
  • 1. 前言
  • 2. 相关工作
    • 开集检测
    • 基于GAN网络的开集检测
    • 基于暴露异常数据的开集检测
  • 3. OpenGAN
    • 3.1 公式建模
      • 3.1.1 二分类方法
        • 存在问题
        • 如何解决
      • 3.1.2 使用合成数据
        • 存在问题
        • 如何解决
      • 3.1.3 OpenGAN
      • 3.1.4 模型验证
    • 3.2 先前基于GAN方法的总结
      • 3.2.1 生成器vs判别器
      • 3.2.2 Features vs. Pixels
      • 3.2.3 Classification vs. Reconstruction

英语积累

  1. Machine learning systems that operate in the real openworld invariably encounter test-time data that is unlike training examples, such as anomalies or rare objects that were insufficiently or even never observed during training. invariably:一贯的
  2. … can be crisply formulated as … 可以被很清晰的定义/表述为
  3. an elegant idea is to… 一个绝佳的方法是…

为什么使用GAN系列网络进行开放集检测

综述:Applications of Generative Adversarial Networks in Anomaly Detection: A Systematic Literature Review

  1. GAN网络可以学习数据分布
    GAN的基本思想是通过让两个神经网络相互对抗,从而学习到数据的分布。其中一个神经网络被称为生成器(Generator),它的目标是生成与真实数据相似的假数据;另一个神经网络被称为判别器(Discriminator),它的目标是区分真实数据和假数据。两个网络相互对抗,不断调整参数,从而最终生成具有高质量和多样性的假数据。

  2. GAN网络有产生新数据的能力,可以大大缓解新颖类检测中缺少新颖类别数据的情况。

摘要

开放集现阶段两大方法:

  1. 利用一些例外(异常)数据作为开放集,训练一个闭集VS开放集的二分类检测器
  2. 使用GAN网络无监督学习闭集数据分布,使用该判别器作为开放集的似然函数

两个方法的缺陷:

  1. 作为开放集使用的异常数据无法穷尽现实世界的所有可能的未知值
  2. GAN网络训练过程不稳定

解决: 提出OpenGAN

  • 使用对抗合成的假数据填充可用的真实开放集训练数据
  • 闭集k-ways的特征基础上建立判别器

1. 前言

在这里插入图片描述

算法演变过程:

  1. 使用GAN网络生成fake data,训练一个判别 close data 和 fake data 的二分类判别器;
  2. 在训练时使用一些真实世界中的离群数据(outlier data) 可以增强网络性能,即训练一个判别close data和open data的判别器;
  3. O p e n G A N p i x OpenGAN^{pix} OpenGANpix: 结合GAN产生的fake data并且使用真实世界中的outlier data来训练判别器
  4. O p e n G A N f e a OpenGAN^{fea} OpenGANfea : 不再使用图片的RGB像素进行训练,而是使用off-the-shelf (OTS) features来对GAN网络的训练;

off-the-shelf (OTS) features: 通过闭集检测的网络计算出来的特征

2. 相关工作

开集检测

一般来说,异常数据不会在训练阶段出现。

通用方法:

  1. 在闭集数据上训练k-ways闭集分类器,然后用于开放集检测
  2. 开发集成模型: 在闭集数据上训练k-ways闭集分类器 + 训练时使用合成的fake data进行开集检测,会牺闭集检测的准确率

基于GAN网络的开集检测

基于暴露异常数据的开集检测

3. OpenGAN

开放集检测步骤:

  1. 把测试数据先分类:是开集还是闭集 (关键步骤)
  2. 对闭集进行K-ways分类

一般的开放集检测都会在训练时设置开放集数据不可见,但是有研究证明在训练阶段将一些异常数据作为开放集数据进行训练可以有限的提升检测性能;

但是由于很难产生覆盖开放世界的训练集数据,而且分类器可能会在异常数据上发生过拟合,因此提出OpenGAN

OpenGAN优势:使用GAN网络产生假数据作为开放集数据的训练集去欺骗分类器

3.1 公式建模

3.1.1 二分类方法

给定一个二元分类器D,它的训练目标是将输入样本分为闭集(closed-set)和开集(open-set)两个类别。

D c l o s e d ( x ) D_{closed}(x) Dclosed(x):在闭集上的数据分布
D o p e n ( x ) D_{open}(x) Dopen(x):在开放集上的数据分布(不属于闭集)

m a x D E x ∼ D c l o s e d [ l o g D ( x ) ] + λ o ⋅ E x ∼ D o p e n [ l o g ( 1 − D ( x ) ) ] max_D E_{x∼D_{closed}} [logD(x)] + λo · E_{x∼D_{open}} [log(1−D(x))] maxDExDclosed[logD(x)]+λoExDopen[log(1D(x))]

  • D ( x ) D(x) D(x):这表示分类器D对于给定输入样本x的输出。它表示样本属于闭集类别的概率。也就是说,D(x)是模型对于输入样本属于闭集的估计概率。

  • E x ∼ D c l o s e d [ l o g D ( x ) ] E_{x∼D_{closed}} [logD(x)] ExDclosed[logD(x)]:这是第一项,表示对于从闭集数据中抽取的样本x,将其输入到分类器D中,并计算其对数概率logD(x),然后对所有闭集样本取平均。这一项鼓励分类器正确地对闭集样本进行分类,即将闭集样本的概率估计尽可能地提高。

  • E x ∼ D o p e n [ l o g ( 1 − D ( x ) ) ] E_{x∼D_{open}} [log(1−D(x))] ExDopen[log(1D(x))]:这是第二项,表示对于从开集数据中抽取的样本x,将其输入到分类器D中,并计算其对数概率log(1−D(x)),然后对所有开集样本取平均。这一项鼓励分类器正确地将开集样本排除在闭集之外,即将开集样本的概率估计尽可能地降低。

  • λ o λo λo:这是一个超参数,用于调节第二项(开集样本)相对于第一项(闭集样本)的权重。通过调整λo的值,可以控制分类器在训练过程中对于闭集和开集样本的重视程度。

存在问题

二分类方法的有效性取决于开集训练样本是否能够代表分类器在测试时遇到的开集数据。 如果开集训练样本不能充分涵盖开放世界数据中的变化和多样性,那么分类器在面对未见过的开集样本时可能表现不佳。

如何解决

使用GAN网络生成数据。

3.1.2 使用合成数据

  • G ( z ) G(z) G(z) : 一个可以生成图像的生成网络,生成器网络 G 接收从高斯正态分布中随机采样得到的噪声输入 z,并使用这个噪声向量生成合成的图像。
    这些合成图像可以被视为额外的负例或开放集样本,然后将它们添加到用于训练分类器D的训练数据池中。

  • D ( D i s c r i m i n a t o r ) D(Discriminator) D(Discriminator): 判别器,负责判断输入的数据是真实的还是生成的。

为防止生成器网络 G 合成的图片过于简单,使用对抗性训练(adversarial training)的方法来训练生成器网络 G,以生成具有欺骗性的困难示例,使分类器 D 难以将其分类为开放集数据。

GAN的损失如下所示:
m i n G E z ∼ N [ l o g ( 1 − D ( G ( z ) ) ) ] min_G E_{z∼N} [ log (1 - D(G(z))) ] minGEzN[log(1D(G(z)))]

该损失函数的意思是,生成器G最小化判别器D对生成的合成数据不是开放集数据的分类概率;也就是说,生成器G试图生成合成数据,使得判别器D将其误判为开放集数据的概率最大化。 通过这个过程,生成器G学会生成更难以分辨的合成数据,从而提高了判别器D在面对开放集数据时的性能和鲁棒性。

存在问题

开放集判别是指判别器 D 能够正确识别已知类别的图像,并将未知类别的图像标记为“未知”或“开放集”。然而,如果生成器 G 生成的图像与已知类别的图像非常相似,判别器 D 可能会错误地将其分类为已知类别(close-set),而无法准确识别为开放集。

如何解决

设计一些技术或方法,使得生成器 G 不仅生成逼真的图像,还能生成具有一定挑战性的图像,使判别器 D 能够有效地进行开放集判别。
这样,判别器 D 就能够准确地将开放集的数据标记为“未知”,而不是错误地将其分类为已知类别。

3.1.3 OpenGAN

通过使用真实的开放集和封闭集数据,以及生成的开放集数据,对判别器D和生成器G进行联合训练。

OpenGAN方法采用了一种类似GAN的最小最大优化过程,同时优化判别器D和生成器G。 公式如下所示。

m a x D m i n G E x ∼ D c l o s e d [ l o g D ( x ) ] + λ o ⋅ E x ∼ D o p e n [ l o g ( 1 − D ( x ) ) ] + λ G ⋅ E z ∼ N [ l o g ( 1 − D ( G ( z ) ) ) ] max_D min_G E_{x∼D_{closed}} [logD(x)] + λ_o · E_{x∼D_{open}} [log(1−D(x))] + λ_G · E_{z∼N} [log(1 − D(G(z)))] maxDminGExDclosed[logD(x)]+λoExDopen[log(1D(x))]+λGEzN[log(1D(G(z)))]

  • E x ∼ D c l o s e d [ l o g D ( x ) ] E_{x∼D_{closed}} [logD(x)] ExDclosed[logD(x)] : 表示使用封闭集数据训练判别器D,使其正确区分封闭集数据。
  • E x ∼ D o p e n [ l o g ( 1 − D ( x ) ) ] E_{x∼D_{open}} [log(1−D(x))] ExDopen[log(1D(x))]:表示使用真实的开放集数据训练判别器D,使其将开放集数据识别为开放集。
  • E z ∼ N [ l o g ( 1 − D ( G ( z ) ) ) ] E_{z∼N} [log(1 − D(G(z)))] EzN[log(1D(G(z)))]:表示使用生成器G生成的假开放集数据训练判别器D,使其能够正确区分生成的假开放集数据。
  • λ o λ_o λo 控制了真实开放集数据对于训练的贡献,而 λ G λ_G λG 控制了生成器G生成的假开放集数据对于训练的贡献。

当没有真实的开放集训练样本时( λ o = 0 λ_o=0 λo=0),上述最小最大优化问题仍然可以训练一个用于开放集分类的判别器D。在这种情况下,训练OpenGAN等效于训练一个普通的GAN,并使用其判别器作为开放集的似然函数。

3.1.4 模型验证

由于对抗生成训练会导致判别器D无法区分闭集中的真实数据和由生成器G产生的fake image,因此需要使用真实的异常数据来进行模型的验证

3.2 先前基于GAN方法的总结

3.2.1 生成器vs判别器

之前的方法中主要是利用生成器生成图像来扩充训练集,但是该方法主要是利用判别器来判别闭集图像和开集图像。

3.2.2 Features vs. Pixels

直接利用features训练GAN网络比使用RGB图像的效果更好。

3.2.3 Classification vs. Reconstruction

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

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

相关文章

机器视觉工程师,面对难以实现的需求时,应该如何应对?

作为一名机器视觉工程师,在工作中难免会遇到一些难以实现,奇形怪状的需求,各种五花八门,奇葩需求,顿时头疼不已。同时销售要接订单,机器视觉工程师也要做项目提升自我,销售与技术矛盾本身是存在…

vivado 输出延迟

输出延迟 set_output_delay命令指定输出端口相对于设计接口处的时钟边缘。 当考虑应用板时,此延迟表示以下各项之间的相位差: 1.数据从FPGA的输出封装引脚通过板传播到另一个设备,以及 2.相对基准板时钟。 输出延迟值可以是正的&#xf…

基于javaSpringbootmysql的小型超市商品展销系统01635-计算机毕业设计项目选题推荐(免费领源码)

摘 要 科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代。在现实运用中,应用软件的工作…

AndroidStudio无法新建aidl文件解决办法

我用的 AS 版本是 Android Studio Giraffe | 2022.3.1 Build #AI-223.8836.35.2231.10406996, built on June 29, 2023 右键新建 aidl 文件, 提示 (AIDL File)Requires setting the buildFeatures.aidl to true in the build file 解决办法 修改 app 的 build.…

第26关 K8s日志收集揭秘:利用Log-pilot收集POD内业务日志文件

------> 课程视频同步分享在今日头条和B站 大家好,我是博哥爱运维。 OK,到目前为止,我们的服务顺利容器化并上了K8s,同时也能通过外部网络进行请求访问,相关的服务数据也能进行持久化存储了,那么接下来…

C语言进阶---------作业复习

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 ​🎂 作者介绍: 🎂🎂 🎂 🎉🎉&#x1f389…

MySQL升级版本(Linux环境)

摘要 由于我们在做部署的时候会部署MySQL,但是版本可能各种各样,而且我们服务器会定期的进行漏洞扫描,因此我们在遇到MySQL的相关漏洞时,一般漏洞报告中会提示出解决方案,一般来时就是升级软件的版本,因此…

虚拟机安装

带你解密Linux的【Vm】-CSDN博客https://blog.csdn.net/lz17267861157/article/details/134031133

浏览器渲染原理

上篇:事件循环机制,阅读理解上篇之后本文会更容易理解些。 浏览器是如何渲染页面的? 当浏览器的网络线程收到HTML文档后,会产生一个渲染任务,并将其传递给渲染主线程的消息队列。 整个渲染流程分为多个阶段&#xff…

安装Kubernetes1.23、kubesphere3.4、若依项目自动打包部署到K8S记录

1.安装kubernetes1.23详细教程 kubernetes(k8s)集群超级详细超全安装部署手册 - 知乎 2.安装rancher动态存储 kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/master/deploy/local-path-storage.yaml3.安装kubesphere3.4 准备工作 您…

JavaScript状态模式

JavaScript状态模式 1 什么是状态模式2 使用状态模式改造电灯程序3 缺少抽象类的变通方式4 示例:文件上传4.1 场景描述4.2 代码过程 1 什么是状态模式 允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。 比如说这样一个场景&a…

opencv入门到精通——图像阈值

目录 目标 简单阈值 自适应阈值 Otsu的二值化 Otsu的二值化如何实现? 目标 在本教程中,您将学习简单阈值,自适应阈值和Otsu阈值。 你将学习函数cv.threshold和cv.adaptiveThreshold。 简单阈值 在这里,问题直截了当。对于…

Blazor 混合开发_MAUI+Vue_WPF+Vue

Blazor 混合开发_MAUIVue_WPFVue 背景混合开发的核心为什么必须使用 wwwroot 文件夹放置 Web 项目文件 创建 MAUI 项目创建 wwwroot 文件夹服务注册创建 _import.razor添加 Main.razor 组件修改 MainPage.xaml 文件 创建 WPF 项目创建 wwwroot 文件夹服务注册创建 _import.razo…

基于电商场景的高并发RocketMQ实战-Broker高并发消息写入、读写队列原理分析

🌈🌈🌈🌈🌈🌈🌈🌈 【11来了】文章导读地址:点击查看文章导读! 🍁🍁🍁🍁🍁🍁&#x1f3…

HarmonyOS构建第一个JS应用(FA模型)

构建第一个JS应用(FA模型) 创建JS工程 若首次打开DevEco Studio,请点击Create Project创建工程。如果已经打开了一个工程,请在菜单栏选择File > New > Create Project来创建一个新工程。 选择Application应用开发&#xf…

谷粒商城-商品服务-新增商品功能开发(商品图片无法展示问题没有解决)

在网关配置路由 - id: member_routeuri: lb://gulimemberpredicates:- Path/api/gulimember/**filters:- RewritePath/api/(?<segment>.*),/$\{segment}并将所有逆向生成的工程调式出来 获取分类关联的品牌 例如&#xff1a;手机&#xff08;分类&#xff09;-> 品…

【零基础入门Docker】什么是Dockerfile Syntax

✍面向读者&#xff1a;所有人 ✍所属专栏&#xff1a;零基础入门Docker专栏https://blog.csdn.net/arthas777/category_12455882.html 目录 编写Dockerfile和Format的语法 2. MAINTAINER 3. RUN 4. ADD 6. ENTRYPOINT 7. CMD 8. EXPOSE 9. VOLUME 11. USER 12. ARG …

【设计模式】RBAC 模型详解

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、什么是 RBAC 呢&#xff1f; 二、RBAC 的组成 三、RBAC 的优缺点 3.1 优点&#xff1a; 3.2 缺点&#xff1a; 四、RBAC 的…

drools规则引擎介绍

1 什么是规则引擎 规则引擎&#xff0c;全称为业务规则管理系统&#xff0c;英文名为BRMS(即Business Rule Management System)。规则引擎的主要思想是将应用程序中的业务决策部分分离出来&#xff0c;并使用预定义的语义模块编写业务决策&#xff08;业务规则&#xff09;&…

C/C++ 共用体union的应用和struct不同

共用体union是一种数据格式&#xff0c;它能够存储不同的数据类型&#xff0c;但只能同时存储其中的一种类型。也就是说&#xff0c;结构体同时存储int、long和double,共用体只能春初int、long或double,共用体的语法与结构体相似&#xff0c;但含义不同。例如下面的声明&#x…