开集识别(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) f_2(x)指的是极大值出现在中的概率。

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映射各分类概率即可。

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

  • 45
    点赞
  • 126
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
"open set recognition"是一个技术概念,用于处理在人脸识别等模式识别任务中的一个挑战,即识别未在训练集中出现的新样本。 通常,在训练过程中,机器学习模型仅接触到限定的、已知的样本集。然而,在实际应用中,我们经常面临的是不同于训练集的、未知的样本。这就是所谓的"open set"问题。 为了解决这个问题,研究人员提出了"open set recognition"方法。该方法的目标是将未知样本正确分类为"未知类别",而不是错误地归为已知类别中的一类。本质上,这是一种在模型中增加一种针对未知类别的分类模块或机制的尝试。 其中一种常见的方法是使用"开集分类器"。这样的分类器可以对模型从未见过的样本进行鲁棒的分类。这可以通过在模型中引入特殊的类别来实现,用于表示未知的样本。开集分类器尝试从已知类别中区分出未知类别样本,并将其准确地分类为"未知类别"。 另一种常见的方法是使用"异常检测"。异常检测方法主要基于训练集的分布来区分已知样本和未知样本。它通过分析样本在特征空间中的分布,将低概率区域判定为未知区域。这种方法可以更准确地将未知样本与已知样本区分开来。 总而言之,open set recognition代码是一种用于解决模式识别中的"open set"问题的算法或模型实现。它的目标是能够正确识别未训练过的、未知的样本,并将其区分为"未知类别"。不同的方法可以使用开集分类器或异常检测等技术来实现这一目标。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值