写完了论文,重新梳理一下,以后不再更新。

1.相关论文源码

《Towards Open Set Deep Networks》即OpenMax源码:https://github.com/abhijitbendale/OSDN

《Meta-Recognition: The Theory and Practice of Recognition Score Analysis》即libMR, OpenMax使用libMR完成Weibull拟合。源码:https://github.com/Vastlab/libMR

2.极值理论

为什么使用极值理论?因为普通的分布模型不再满足实际场景下的部分情况。

以正态分布为例,该分布模型在极值部分的分布和真实情况不符合。

图1 正态分布示意图

如图1,极值部分指的就是分布的两端部分。

因为普通的分布模型不能较好地反映极值的分布,因此出现极值理论。

目前极值理论中有三种极值分布来反映极值部分的分布情况,分别为:Gumbel分布、Frechet分布以及Weibull分布。

目前开集识别都是按照Weibull分布来应用的,尾部分布为Weibull分布的证明可以查看《Meta-Recognition: The Theory and Practice of Recognition Score Analysis》。

weibull分布的概率密度函数(pdf)为:

weibull分布的累计分布函数(cdf)为:

假设Weibull分布拟合的是图1的右端极大值 (极小值也是一样的逻辑),则weibull的累计分布函数(cdf) 指的是极大值出现在中的概率。

3.OpenMax思路

讲完了极值理论,那么OpenMax利用极值理论做什么呢?-->根据元识别的思想矫正分类得分。

元识别的思想是什么?-->以某个模型 (meta-recognition system) 判断分类模型 (也可以是其他模型,libMR论文称为recognition system)失效的概率。

所以总结来看OpenMax就是以各已知类样本拟合得到的Weibull模型 (meta-recognition system)判断闭集分类模型 (recognition system) 分类失败的概率,并以分类失败的概率矫正已知类得分+计算未知类得分。

既然OpenMax的思路已知,接下来就是两个问题需要考虑:

如何得到各已知类的Weibull模型?

2.如何借助Weibull模型矫正得分?

3.1 得到各已知类的Weibull模型

3.1.1 得到各已知类的距离集Di={D1, D2, ...., Dm}。

(1). OpenMax先训练好闭集分类网络DCNN。以第i类已知类为例,将所有第i类的训练样本输入到DCNN中得到它们的激活向量AV (Activation Vector),并保留DCNN正确分类为第i类样本的AV (即DCNN分类失败的第i类样本的AV不保留),记保留的AV集合为AVi={AV1,AV2,...,AVm},其中m指第i类训练样本中有m个样本被DCNN识别为第i类。

(2). 使用AVi计算其均值MAVi (Mean Activation Vector), MAVi即是第i类样本的质心。

(3). 使用AVi={AV1,AV2,...,AVm}中的AV1,AV2,...,AVm计算它们到质心MAVi的距离,记距离集合为Di={D1, D2, ..., Dm}

3.1.2 拟合Di中极大值的分布

Di中的极大值分布按照Weibull分类来拟合,此处使用libMR的fit_high()来拟合。

值得注意的是fit_high()和fit_low()的区别,libMR源码说:"Fit_low( ):Use fit_low if your data is such that is smaller is better"。实际上fit_high()和fit_low()的区别就是拟合集合中极大值以及极小值的区别,如果以图1作为数据分布,fit_high()拟合的是右端极大值,fit_low()拟合的是左端极小值。

拟合得到的结果是Weibull分布的累积分布函数CDF。

3.2 矫正得分

3.2.1 得到待预测样本的AV

使用DCNN得到预测样本的AV (即K个已知类得分向量),记为AVx = {Score1, Score2, ..., ScoreK},K指已知类的种类数。

3.2.2 矫正得分

3.1.2步已经得到了每一个已知类的Weibull分布模型,此时需要借助这些模型矫正得分AVx = {Score1, Score2, ..., ScoreK}。

先计算AVx到每一个已知类质心(MAV1, MAV2, ..., MAVK)的距离 {Dx1, Dx2, ..., Dxk}。

假设要矫正AVx中的第j类得分Scorej。将Dxj输入到第j类的Weibull分布模型CDF中输出,此处使用的是mr.w_score(Dxj)。w_score()就是第2节说的CDF,因此mr.w_score(Dxj)返回的是极大值出现在(-∞,Dxj ]中的概率,极大值就是说距离第j类质心很远很远... 极大值在(-∞,Dxj ]中,那么Dxj距离第j类质心更远。样本距离某类质心远意味着样本越不可能输入该类,即mr.w_score(Dxj)返回的是预测样本不属于第j类的概率,那么1-mr.w_score(Dxj)就是样本属于第j类的概率。

以wj=1-mr.w_score(Dxj)作为第j类得分Scorej的修正权值即可。即修正后的第j类得分为Scorej'=Scorej*wj。

其他已知类的得分也是这样矫正。

未知类的得分为Score_unknown=Score1*(1-w1)+Score2*(1-w2)+...+ScoreK*(1-wk)

综上所述,这一步就得到了新的得分向量{Score1', Score2', ..., ScoreK', Score_unknwon}

4. 得分映射为分类概率

将3.2.2节得到的得分{Score1', Score2', ..., ScoreK', Score_unknwon}使用SoftMax映射各分类概率即可。

当最大分类概率在未知类取得或者最大分类概率小于某一阈值,则识别为未知类。

开集识别(Open Set Recognition, OSR)算法:《Towards Open Set Deep Networks》OpenMax相关推荐

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

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

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

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

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

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

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

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

  5. (二)开集识别学习 open-set recognition(OSR)

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

  6. (四) 开集识别学习 open-set recognition(OSR)

    前言:目前基于CNN方式的开集识别的方案最为经典的要数openmax方法,但是目前所能查到的资料对openmax解读的资料实在是太少, 所以这里通过对openmax的实现过程进行讲解以达到理解的目的 ...

  7. 开集识别(open-set)算法(1)

    所有内容基于目标识别 一.开集识别 对于一个特定的识别问题,常用的识别方法是闭集识别(支持向量机分类器(SVM).K-近邻分类器(KNN).最大相关系数分类器(MCC)以及自适应高斯分类器(AGC)) ...

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

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

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

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

最新文章

  1. 用VS2005打开一个.NET2.0方案,里面有几个工程和一个网站,提示网站的项目.csproj文件无法打开:“此安装不支持该项目类型”,的解决办法。...
  2. 案例驱动python编程入门-python ddt数据驱动实例代码分享
  3. Javascript之DOM(Document类型)
  4. 认证与Shiro安全框架
  5. 如何更好的掌握一个知识点_如何成为一个更好的讲故事的人3个关键点
  6. SAP License:ERP实施风险是什么?
  7. 求二叉树的深度(C++)
  8. NYOJ题目79-拦截导弹(最长递减子序列)
  9. 【网页模板】Bootstrap免费模板
  10. 情侣博客源码php,wordpress如何搭建简单的情侣博客
  11. Python学习笔记-基础篇
  12. TCP/IP协议 1 ----实验楼转
  13. JavaScript实现点击一下显示,再点击一下隐藏的功能(使用工厂函数)
  14. 为什么传统的验证码不再安全
  15. oracle导入失败后怎样删除已导入数据,Oracle数据的导入、导出、插入、更新及删除总结...
  16. 拼多多商品详情采集上传京东店铺(拼多多商品详情接口,京东商品详情接口,整店宝贝采集接口,一键采集宝贝详情接口,无货源商品详情采集接口)代码对接教程
  17. Python爬虫编程思想(52):使用Beautiful Soup选择子节点
  18. iOS仿微信聊天输入框、评论输入框
  19. NYOJ 1239 引水工程 【MST 变形】
  20. Oracle的行列转换

热门文章

  1. obj模型转json模型_2D转3D!14位艺术家的动漫模型作品欣赏~
  2. 乔列斯基(Cholesky)法解方程(python,数值积分)
  3. 政策红利:广州政府发布政务区块链工作方案|链塔智库
  4. 不懂你打我,超简单的单链表的创建
  5. cad安装日志文件发生错误_CAD因为发生错误安装过早结束 致命错误解决方法
  6. Bit和Byte的区别
  7. EOS - 常用命令(获取余额、创建账户、发送EOS Token)
  8. bootstrap基础和部份组件 -- (笔记一)
  9. Coursera 国内无法登陆问题
  10. D3D11 MD5骨骼动画模型的加载