开集识别(Open Set Recognition, OSR)算法:《Towards Open Set Deep Networks》OpenMax
写完了论文,重新梳理一下,以后不再更新。
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相关推荐
- 真实世界中的开集识别问题(Open-Set Recognition Problem)
闭集与开集分类问题 闭集分类问题(closed-set problem),即测试和训练的每个类别都有具体的标签,不包含未知的类别(unknown category or unseen category ...
- open-set recognition(OSR)开集识别
开集识别 闭集识别 训练集中的类别和测试集中的类别是一致的,最常见的就是使用公开数据集进行训练,所有数据集中的图像的类别都是已知的,没有未知种类的图像.传统的机器学习的算法在这些任务上已经取得了比 ...
- open-set recognition(OSR)开集识别的一些思考(一)
开集识别是一个在现实世界中很常见的一个问题,但是这个问题只有你在真正实施项目的时候才会遇到,使用公开数据集是不会遇到这个问题的. 当你看到这篇文章的时候就默认你大致了解开集识别是什么了 下面就是干货了 ...
- open-set recognition(OSR)开集识别的一些思考(二)
前言:在开集识别的学习中,也是进行的一步步的摸索,一开始发现模型上线后变现不是很好,后来找到原因就是因为线上的图像太复杂了,没有开集识别的模型是不可靠的,所以就进行了开集识别,接下来记录下学习的记录供 ...
- (二)开集识别学习 open-set recognition(OSR)
前言:在开集识别的学习中,也是进行的一步步的摸索,一开始发现模型上线后变现不是很好,后来找到原因就是因为线上的图像太复杂了, 没有开集识别的模型是不可靠的,所以就进行了开集识别,接下来记录下学习的记录 ...
- (四) 开集识别学习 open-set recognition(OSR)
前言:目前基于CNN方式的开集识别的方案最为经典的要数openmax方法,但是目前所能查到的资料对openmax解读的资料实在是太少, 所以这里通过对openmax的实现过程进行讲解以达到理解的目的 ...
- 开集识别(open-set)算法(1)
所有内容基于目标识别 一.开集识别 对于一个特定的识别问题,常用的识别方法是闭集识别(支持向量机分类器(SVM).K-近邻分类器(KNN).最大相关系数分类器(MCC)以及自适应高斯分类器(AGC)) ...
- 异常检测 and 开集识别(1)
文章目录 前言 一.开集识别是什么? 二.闭集识别 VS 开集识别 总结 前言 这节来介绍一下开集识别的定义以及其与闭集识别的区别.希望大家学有所获~ 一.开集识别是什么? 开集识别,英文Op ...
- 异常检测 and 开集识别(2)
文章目录 前言 一.开集识别的演变 二.开集识别技术分类 三.目前先进的开集识别算法 1.OpenMax 2.G-OpenMax 3.CROSR 4.MLOSR 总结 前言 本文是本人在学习开集识 ...
最新文章
- 用VS2005打开一个.NET2.0方案,里面有几个工程和一个网站,提示网站的项目.csproj文件无法打开:“此安装不支持该项目类型”,的解决办法。...
- 案例驱动python编程入门-python ddt数据驱动实例代码分享
- Javascript之DOM(Document类型)
- 认证与Shiro安全框架
- 如何更好的掌握一个知识点_如何成为一个更好的讲故事的人3个关键点
- SAP License:ERP实施风险是什么?
- 求二叉树的深度(C++)
- NYOJ题目79-拦截导弹(最长递减子序列)
- 【网页模板】Bootstrap免费模板
- 情侣博客源码php,wordpress如何搭建简单的情侣博客
- Python学习笔记-基础篇
- TCP/IP协议 1 ----实验楼转
- JavaScript实现点击一下显示,再点击一下隐藏的功能(使用工厂函数)
- 为什么传统的验证码不再安全
- oracle导入失败后怎样删除已导入数据,Oracle数据的导入、导出、插入、更新及删除总结...
- 拼多多商品详情采集上传京东店铺(拼多多商品详情接口,京东商品详情接口,整店宝贝采集接口,一键采集宝贝详情接口,无货源商品详情采集接口)代码对接教程
- Python爬虫编程思想(52):使用Beautiful Soup选择子节点
- iOS仿微信聊天输入框、评论输入框
- NYOJ 1239 引水工程 【MST 变形】
- Oracle的行列转换
热门文章
- obj模型转json模型_2D转3D!14位艺术家的动漫模型作品欣赏~
- 乔列斯基(Cholesky)法解方程(python,数值积分)
- 政策红利:广州政府发布政务区块链工作方案|链塔智库
- 不懂你打我,超简单的单链表的创建
- cad安装日志文件发生错误_CAD因为发生错误安装过早结束 致命错误解决方法
- Bit和Byte的区别
- EOS - 常用命令(获取余额、创建账户、发送EOS Token)
- bootstrap基础和部份组件 -- (笔记一)
- Coursera 国内无法登陆问题
- D3D11 MD5骨骼动画模型的加载