开集识别

闭集识别

​ 训练集中的类别和测试集中的类别是一致的,最常见的就是使用公开数据集进行训练,所有数据集中的图像的类别都是已知的,没有未知种类的图像。传统的机器学习的算法在这些任务上已经取得了比较好的效果。

开集识别简述

​ 现实场景中更多的是开放和非静态的环境,比如,一些没有见过的情况会意外出现。针对这一挑战提出的方法有持续学习、迁移学习、域适应、零样本、少样本学习、开集识别和分类等。

​ 开集识别简单定义是,一个在训练集上训练好的模型,当利用一个测试集(该测试集的中包含训练集中没有的类别)进行测试时,如果输入已知类别数据,输出具体的类别,如果输入的是未知类别的数据,则进行合适的处理(识别为unknown)。

示例 : 猫狗识别模型,输入一张荷花或者大象的图像,模型可能会告诉你80% 的概率为 猫。
想要的结果 : 输入不为猫狗的图像,模型输出为未知类别,输入猫狗图像,模型输出对应具体的类别

数据集类别划分

  • KKCs known known classes

    具有明确标签的正训练样本(对其他KKCs为负样本),包含相应的伴随信息(语义和属性信息等)的类别

  • KUCs known unknown classes

    被标记为负样本,不必要被划分为一个具体的类别,比如background class,universum class(对于一个具体问题不属于任何类别的样本)

  • UKCs unknown known classes

    训练时没有可用的样本,但是有可用的伴随信息(语义和属性信息等)

  • UUCs unknown unknown classes

    训练时没有可用样本,也没有伴随信息(语义和属性信息等)

传统分类只考虑KKCs;zero-shot learning(ZSL) 关注识别UKCs;one/few-shot看作是ZSL的扩展,训练时有有限数量的UKCs;开集识别(OSR)训练时只有KKCs,测试时有UUCs,需要准确分类KKCs同时需要正确的策略拒绝UUCs。


下表描述了开集识别和相关任务的区别:

相关定义

  • 开放空间风险

远离已知数据的空间(包括KKCs和KUCs)通常被认为是开放空间 O,因此将该空间中的任何样本任意标注为KKC必然会带来风险,这被称为开放空间风险(open space risk):ROR_ORO​​ 。由于UUCs在训练中是不可知的,因此通常很难对开放空间风险进行定量分析。另外,给出了 ROR_ORO​​​ 的定性描述,其中它被形式化为开放空间 O 相对于整体测度空间 的相对测度,计算如下:

式中,f 为可测识别函数。f(x) = 1表示KKCs中的某些类被识别,否则 f(x) = 0。在这种形式化下,开放空间中越多的样本被标记为KKCs, ROR_ORO​​​ 越大。

  • 开放集识别问题

设 V 为训练数据,设 ROR_ORO​ 、RεR_{\varepsilon}Rε​​ 分别为开放空间风险和经验风险(对训练集中的所有样本点损失函数的平均最小化,经验风险越小说明模型f(x)对训练集的拟合程度越好)。那么开放集识别的目标就是找到一个可测量的识别函数:f ∈H,其中f(x) > 0表示识别正确,f 是通过最小化以下Open Set Risk来定义的:

Open Set Risk 在允许识别函数的空间上平衡了经验风险和开放空间风险。

开集识别的解决方案

可以通过判别模型和生成模型的角度将开集识别的模型进行分类【判别模型和生成模型的区别】



【对应方法综述】

OpenMax

Towards Open Set Deep Networks

Softmax是深度学习分类网络中最常见的最后一层的激活函数,用于概率值的生成。**这不可避免地会带来归一化问题,使其固有的封闭集特性。**例如,在处理UUCs的样本时,DNNs常常做出错误的预测,甚至过于自信。所以《Towards Open Set Deep Networks》提出了openmax层来替代softmax,作为开放集深度网络的第一个解决方案。

算法流程:


只计算并保留所有预测样本正确样本(预测错误的输出舍弃)的特征值(特征值的长度就是类别的长度,比如最后的类别数量为3,那么整个特征就是长度为3的向量,而不是之前一层的向量)。

求出所有预测正确样本的向量,根据不同的类别将这些向量对应分开,然后分别计算每个类别对应向量的均值作为该类别的中心。

分别计算每个类别中每个样本对应向量和其类别中心的距离,然后对这些距离进行排序,针对排序后的几个尾部极大值进行极大值理论分析,这些极大值的分布符合weibull分布,所以使用weibull分布(libmr中的fithigh方法)来拟合这些极大的距离,得到一个拟合分布的模型。

当来了一个新的测试图像的时候,这时候输入模型,先得到对应的dense向量(softmax的前一层),然后针对该向量分别针对每个类别计算与其之间的距离(共得到N个距离),然后针对上述得到的每个距离分别使用每个类别对应的拟合模型对其进行预测,最后会分别得到一个分数FitScores,这个分数就是指该测试图像特征值归属于其对应类别的概率,所以一共是有N个分类的。然后根据该图像的最终输出(此处为softmax的输出),根据该概率分数的输出继进行排序,然后计算w的值(该值的计算就是根据采用tail的个数(即阿尔法的值)来计算的)
fori=1...αw=1−FitScores∗(α−i)/αfor \quad i = 1...\alpha \quad w = 1-FitScores*(\alpha-i)/\alpha fori=1...αw=1−FitScores∗(α−i)/α

然后将该向量分别针对每个类别计算与其之间的距离与上述得到的W进行相乘,后续再进行类似softmax的操作,最终得到两个分数,一个是openmax后的分数,一个是unknown的分数,注意这里得到的openmax的类别比softmax输出的类别多一个类别,也就是unknown的类别。

极值理论(EVT):

每过一段时间,小概率时间就会发生,比如巨大的台风,或者跳高记录被打破。但是到底这样的事件有多极端?极值理论可以回答这个问题。利用以往的记录,比如说500年来的洪水记录,极值理论就可以预测将来发生更大洪水的可能性。

极值理论关注风险损失分布的尾部特征,通常用来分析概率罕见的事件,它可以依靠少量样本数据,在总体分布未知的情况下,得到总体分布中极值的变化情况,具有超越样本数据的估计能力。

韦伯分布(可靠性分析):

https://www.cnblogs.com/wwxbi/p/6141501.html

开集识别(Open Set Recognition)相关推荐

  1. 开集识别(Open Set Recognition, OSR)算法:《Towards Open Set Deep Networks》OpenMax

    写完了论文,重新梳理一下,以后不再更新. 1.相关论文源码 <Towards Open Set Deep Networks>即OpenMax源码:https://github.com/ab ...

  2. 真实世界中的开集识别问题(Open-Set Recognition Problem)

    闭集与开集分类问题 闭集分类问题(closed-set problem),即测试和训练的每个类别都有具体的标签,不包含未知的类别(unknown category or unseen category ...

  3. open-set recognition(OSR)开集识别

    开集识别 闭集识别 ​ 训练集中的类别和测试集中的类别是一致的,最常见的就是使用公开数据集进行训练,所有数据集中的图像的类别都是已知的,没有未知种类的图像.传统的机器学习的算法在这些任务上已经取得了比 ...

  4. open-set recognition(OSR)开集识别的一些思考(一)

    开集识别是一个在现实世界中很常见的一个问题,但是这个问题只有你在真正实施项目的时候才会遇到,使用公开数据集是不会遇到这个问题的. 当你看到这篇文章的时候就默认你大致了解开集识别是什么了 下面就是干货了 ...

  5. open-set recognition(OSR)开集识别的一些思考(二)

    前言:在开集识别的学习中,也是进行的一步步的摸索,一开始发现模型上线后变现不是很好,后来找到原因就是因为线上的图像太复杂了,没有开集识别的模型是不可靠的,所以就进行了开集识别,接下来记录下学习的记录供 ...

  6. 异常检测 and 开集识别(1)

    文章目录 前言 一.开集识别是什么? 二.闭集识别 VS 开集识别 总结 前言   这节来介绍一下开集识别的定义以及其与闭集识别的区别.希望大家学有所获~ 一.开集识别是什么?   开集识别,英文Op ...

  7. 异常检测 and 开集识别(2)

    文章目录 前言 一.开集识别的演变 二.开集识别技术分类 三.目前先进的开集识别算法 1.OpenMax 2.G-OpenMax 3.CROSR 4.MLOSR 总结 前言   本文是本人在学习开集识 ...

  8. 头歌--人脸识别系统--Face recognition 人脸识别

    目录 第1关:人脸检测 第2关:人脸特征点获取 第3关:人脸识别 第4关:人脸识别绘制并展示 第1关:人脸检测 '''****************BEGIN****************''' ...

  9. 深度学习(十八):人脸验证(face verification)和人脸识别(face recognition)

    这是一系列深度学习的介绍,本文不会涉及公式推导,主要是一些算法思想的随笔记录. 适用人群:深度学习初学者,转AI的开发人员. 编程语言:Python 参考资料:吴恩达老师的深度学习系列视频 吴恩达老师 ...

  10. 机器学习:手写数字识别(Hand-written digits recognition)小项目

    该项目的所有代码在我的github上,欢迎有兴趣的同学与我探讨研究~ 地址:Machine-Learning/machine-learning-ex3/ 1. Introduction 手写数字识别( ...

最新文章

  1. android Java BASE64编码和解码一:基础
  2. Node.js REST 工具 Restify
  3. Log Cauchy分布的一个Hierarchical模型:LC=Gamma+Gamma+Unif
  4. python 3.6
  5. Java 洛谷 P1151 子数整数
  6. c语言中for语句的作用是,c语言中for语句是怎么用的
  7. 【并查集】打击犯罪(ssl 2342)
  8. usb一转多 树莓派zero_树莓派 Zero USB/以太网方式连接配置教程
  9. DC/OS 的安装与部署
  10. Android 版本适配:9.0 Pie(API 级别 28)
  11. 再学 GDI+[20]: TGPTextureBrush 与 TWrapMode
  12. 【转】艺术设计、数字媒体、环艺、影视动画、摄影、广编专业…等…视频、教程、资讯、图库、作品汇总大全...
  13. shell编程之正则表达式与文本工具
  14. KEIL 5的背景色设置。
  15. 计算机网络换算方法,网络带宽换算
  16. 新能源车牌识别技术发展到哪一步了?
  17. java计算机毕业设计Internet快递柜管理系统源码+mysql数据库+系统+lw文档+部署
  18. c语言程序课程设计题目
  19. msconfig打不开,运行找不到msconfig解决办法
  20. 与Xcode比照Adobe AIR开发iOS的优势和局限

热门文章

  1. 开源XML数据集编辑器
  2. 在Win10系统中用mimikatz抓取明文密码
  3. 一键Pad变电脑,安全快速的远控办公这不就来了。
  4. 通过QQ 2012 客户端协议获取clientkey的0x91数据包分析
  5. Java医院管理系统完整代码_医院管理系统(JAVA代码)
  6. 使用Keras-yolov3来识别滑动验证码
  7. php动态字体,APP动态切换字体的实现
  8. python矩阵乘法分治算法_详解矩阵乘法中的Strassen算法
  9. 普通有刷直流电机 H桥驱动
  10. 常用的三种非对称加密算法