【开集识别论文解读】C2AE: Class Conditioned Auto-Encoder for Open-set Recognition——CVPR2019

 原文链接:https://arxiv.org/abs/1904.01198

开集识别的一般场景设定如图1所示, 我们已知四类图片,但是在测试过程中,可能会出现不属于任何一类的样本,而开集识别的目标就是识别出未知类,并且对已知类正确分类。

本文将开集识别任务分成了两个子任务:闭集分类和开集识别。训练过程如图2中的1)和2)所示。

1. Closed-set Training (Stage 1)

给定一个batch\{X_1,X_2,...,X_N\}\in K的图像,以及相应的标签\{y_1,y_2,...,y_N\}。编码器(F)和分类器(C)分别具有参数\Theta _f\Theta _c,使用以下交叉熵损失进行训练,

L_c(\{\Theta_f,\Theta_c\})=-\frac{1}{N}\sum_{i=1}^{N}\sum_{j=1}^{k}\mathbb{I}_{y_i}(j)log[p_{y_i}(j)]

其中,\mathbb{I}_{y_i}是标签y_i的指示函数(即,一个热编码向量),p_{y_i}=C(F(X_i))是预测概率得分向量。p_{y_i}(j)是第i个样本来自第j类的概率。

2. Open-set Training (Stage 2) 

在开集训练中有两个主要部分,条件解码器训练,然后是重建误差的EVT建模。在此阶段,编码器和分类器权重是固定的,在优化过程中不会改变。

2.1 Conditional Decoder Training

这里使用了视觉推断的一种方法:FiLM,FiLM层在神经网络的中间层特征上进行一个简单的feature-wise仿射变换(仿射变换:简单理解就是线性变化+平移,再通俗点就是A\vec{x}+\vec{b})。

对于输入特征z和包含条件信息的向量l_j,可给出如下:,

 这里,H_\gammaH_\beta是具有参数\Theta_\gamma\Theta_\beta的神经网络。张量z_{l_j}\gamma_j\beta_j具有相同的形状。l_j用于条件处理,在本文中称为标签条件向量。此外,符号z_{l_j}用于描述以标签条件向量l_j为条件的潜在向量z,即z|l_j

当以与输入的类标识相匹配的标签条件向量(这里称为匹配条件向量(l_m))为条件时,期望解码器(带有参数\Theta_GG)能够完美地重构原始输入,可以被视为传统的自动编码器。然而,在这里,当以标签条件向量为条件时,G被额外训练以不好地重构原始输入,标签条件向量与输入的类标识不匹配,这里称为非匹配条件向量(l_{nm})。

现在,对于来自一个batch的给定输入X_il_m=l_{y_i^m}l_{nm}=l_{y_j^{nm}},对于从\{1,2,...,k\}中采样的任何随机y_i^{nm}\neq y_i,作为其相应的匹配和非匹配条件向量,第二阶段的前馈路径可以通过以下等式总结,

按照上述前馈路径,第二阶段训练解码器(参数为\Theta_GG)和调节层(参数为\Theta_\gamma\Theta_\beta)的损失函数如下所示,

这里,损失函数L_r^m对应于使用匹配条件向量\tilde{X}_i^m生成的输出应该是X_i的完美重构的约束。损失函数L_r^{nm}对应于使用非匹配条件向量\tilde{X}_i^{nm}生成的输出应具有差重构的约束。为了强制执行后一个条件,从训练数据中对另一个批次\{X_1^{nm},X_2^{nm},...,X_N^{nm}\}进行采样,使得新批次没有与匹配条件向量一致的类标识。这种调节策略在某种程度上模拟了openset行为。这里,网络经过专门训练,当输入图像的类标识与条件向量不匹配时,会产生较差的重建。因此,当遇到未知的类测试样本时,理想情况下,任何条件向量都不会与输入图像类标识匹配。这将导致所有条件向量的重建效果不佳。然而,当遇到已知的测试样本时,由于其中一个条件向量将匹配输入图像类标识,它将为该特定条件向量生成完美的重建。因此,非匹配损失训练有助于网络更好地适应开放集设置。

2.1 EVT Modeling

极值理论。极值理论常用于许多视觉识别系统,是建模训练后分数的有效工具。它已被用于许多应用,如金融、铁路轨道检测等,以及开集识别。本文遵循极值定理的Picklands-Balkema-deHaan公式。它考虑了以超过高阈值的随机变量为条件的建模概率。对于具有累积分布函数(CDF)F_W(w)的给定随机变量W,任何W超过阈值u的条件CDF定义为:

F_U(w)=P(w-u\leq w|w>u)=\frac{F_W(u+w)-F_W(u)}{1-F_W(u)}

现在,给定I.I.D.样本,\{W_i,...,W_n\},极值定理指出,对于大类基础分布,并且给定足够大的uF_U可以很好地近似于广义帕累托分布(GPD), 

参数估计。当将任何分布的尾部建模为GPD时,主要的挑战是找到尾部参数u以获得条件CDF。可以使用平均超额函数(MEF)来找到u的估计值,即E[W- u | W>u]。研究表明,对于GPD,MEF与u呈线性关系。许多研究人员利用GPD的这一特性来估计u的值。这里,采用了文献[29]中针对GPD介绍的查找u的算法,但做了一些小的修改。在得到u的估计值后,从极值定理,我们知道集合\{w\in W | W>u\}遵循GPD分布,GPD的其余参数,即ζ和μ可以使用最大似然估计技术轻松估计。

2.3 Threshold Calculation

在前几节所述的训练过程之后,匹配和非匹配重建错误集从训练集\{X_1,X_2,...,X_{N_{train}}\}\in K以及它们相应的匹配和非匹配标签,\{y_1^m,y_2^m,...,y_{N_{train}}^m\}\{y_1^{nm},y_2^{nm},...,y_{N_{train}}^{nm}\}创建。设r_i^m为输入X_i的匹配重建误差,r_i^{nm}为非匹配重建误差,则匹配和非匹配误差集可计算为,

 S_m(匹配重建误差集)和S_{nm}(非匹配重建误差集)的典型直方图如图3a所示。请注意,这些集合中的元素仅根据训练期间观察到的内容进行计算(即,不使用任何未知样本)。图3b显示出了在从已知类集(K)和未知类集(U)的测试样本进行推断期间观察到的重建误差的归一化直方图。比较图3中的这些图,可以观察到,对于来自已知集(K)和未知集(U)的测试样本,在训练期间计算的S_mS_{nm}的分布为推断期间观察到的误差分布提供了良好的近似。这一观察结果还验证了非匹配训练模拟了一个开放集测试场景,其中输入与任何类标签都不匹配。这就需要使用S_mS_{nm}来找到开放集识别的操作阈值,从而对任何已知/未知的测试样本做出决策。

现在,可以假设最佳操作阈值(\tau^*) 位于S_m\cap S_{nm}区域。在这里,S_mS_{nm}的潜在分布尚不清楚。但是,可以使用GDP来建模S_m(右尾)和S_{nm}(左尾)的尾部,分别用G_mG_{nm}表示。GPD仅定义用于建模最大值,但可以在拟合S_{nm}G_{nm}左尾之前,执行S_{nm}'=-S_{nm}。假设观测未知样本的先验概率为pu,则误差概率可表示为阈值τ的函数,

 3. Open-set Testing by k-inference (Stage 3)

 这部分介绍了该方法的开集测试算法,测试程序在下面的算法1中描述。该测试策略涉及使用所有可能的条件向量调节解码器k次,以获得k个重建误差。因此,它被称为k-推理算法。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: calib_check_cond - ill-conditioned matrix for input array 0是一个计算机程序中的错误信息。这个错误信息通常出现在进行矩阵运算时,输入矩阵存在不良条件(ill-conditioned)的情况下。 矩阵的条件数(condition number)是矩阵的一个数值特征,用于描述矩阵在数值计算中的稳定性。当矩阵的条件数很大时,说明矩阵很不稳定,即很容易出现数值误差,这样的矩阵被称作不良条件的矩阵。 在程序运行中,如果输入的矩阵是不良条件的矩阵,就会出现上述的错误信息。这意味着程序无法进行矩阵运算,因为输入矩阵的条件数过大,导致程序不稳定,进而出错。 如果遇到这样的错误信息,我们应该首先检查输入矩阵是否正确。如果输入矩阵本身就存在问题,例如存在无穷或未定义的元素等,就需要修正输入矩阵,再重新运行程序。如果输入矩阵本身没有问题,那么可能需要使用更高精度的算法或者调整算法参数来改善程序的数值稳定性,同时提高程序的精度和效率。 ### 回答2: calib_check_cond是用于检查矩阵条件数的函数,通常被用于计算机视觉和机器学习领域。在使用calib_check_cond时,如果发现输入数组中的矩阵条件数过差,就会出现这种错误信息。 所谓条件数,是用于描述矩阵变形的一个指标。矩阵的条件数越大,就说明在矩阵变形时数据的精度越容易受到影响。因此,在使用calib_check_cond之前,需要先对数据集进行预处理,以确保输入矩阵在变形时不会出现过多的误差。 如果出现了calib_check_cond - ill-conditioned matrix for input array 0的错误信息,通常会有两种解决方案。第一种是通过重新选择、清洗或规范化数据集来降低矩阵的条件数。第二种则是通过增加算法的鲁棒性,让算法能在低条件数的矩阵中正常运行。 总之,在使用calib_check_cond时,需要注意输入矩阵的条件数,避免出现过大的误差。同时,也需要根据具体的情况选择合适的解决方案,以确保算法的稳定性和准确性。 ### 回答3: calib_check_cond - ill-conditioned matrix for input array 0 in function 'cal',这个错误提示是,在计算过程中使用了病态矩阵,导致计算的精度出现了问题,从而得到了不合理的结果。病态矩阵是指条件数非常大的矩阵,即矩阵中部分数值非常小或非常大,导致计算误差非常大。当一个矩阵的条件数很大时,意味着微小的误差会被放大,从而导致数值计算的不准确。 要解决这个问题,可以尝试使用数值稳定的算法或者重新设计算法,以克服矩阵条件数大的问题。另外,检查输入数据的有效性也是必要的。可以分析出错的数据,看看是不是存在错误的输入,或者数据本身就不合理。若是因为输入数据不合理导致的问题,需要调整输入数据以保证矩阵的条件数在一个合理的范围内。同时,也可以尝试使用数值精度更高的数据类型,例如Double precision浮点数,从而提高计算精度。 总之,遇到calib_check_cond - ill-conditioned matrix for input array 0 in function 'cal'这个错误提示,需要注意输入数据的有效性和矩阵的条件数,并采用合理的算法和数据类型进行优化,以获得更精确的计算结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值