【读点论文】Dissecting Out-of-Distribution Detection and Open-Set Recognition,分离语义偏移与协变量偏移,提供了可复现的实验框架
Dissecting Out-of-Distribution Detection and Open-Set Recognition: A Critical Analysis of Methods and Benchmarks
Abstract
- 检测测试时间分布变化已经成为安全部署的机器学习模型的一项关键能力,近年来这个问题在各种伪装下得到解决。在本文中,我们旨在提供社区内两个最大的子领域的统一视图:分布外(OOD)检测和开集识别(OSR)。特别是,我们旨在对不同环境下的不同方法进行严格的实证分析,并为从业者和研究人员提供可操作的要点。具体而言,我们做出了以下贡献:(I)我们在OOD检测和OSR设置中的最先进方法之间进行了严格的交叉评估,并确定了这些方法的性能之间的强相关性;(ii)我们提出一个新的大规模基准设置,我们建议更好地解决 OOD 检测和OSR处理的问题,在这种设置下重新评估最新的 OOD 检测和OSR方法;(iii)我们惊奇地发现,当在规模上测试时,在标准基准(离群值暴露)上的最佳执行方法很困难,而对深度特征量敏感的评分规则始终显示出希望;以及(iv)我们进行实证分析来解释这些现象,并强调未来研究的方向。代码:GitHub - Visual-AI/Dissect-OOD-OSR: The official repository for IJCV(2024) paper “Dissecting Out-of-Distribution Detection and Open-Set Recognition: A Critical Analysis of Methods and Benchmarks”。
- 论文地址:[2408.16757] Dissecting Out-of-Distribution Detection and Open-Set Recognition: A Critical Analysis of Methods and Benchmarks
- OOD 与 OSR 的内在关联:两者本质上处理不同类型的分布偏移(OOD 侧重协变量偏移,OSR 侧重语义偏移),但方法性能高度相关,可交叉应用。幅度敏感的评分规则(如 MLS、Energy)优于传统方法(如 MSP、ODIN),因其利用特征幅度差异,对分布偏移更鲁棒。OE 在小规模基准中表现优异,但依赖辅助数据与测试数据的分布重叠,大规模场景下泛化性不足。传统小规模基准未分离语义与协变量偏移,新提出的基准能更准确评估模型应对真实场景偏移的能力。OE 等依赖辅助数据的方法,其性能取决于辅助数据与测试 OOD 数据的分布重叠度,需通过特征距离度量(如 MMD)指导数据选择。
- 语义偏移(Semantic Shift):测试数据的语义类别与训练集不同(如 ID 为狗,OOD 为猫),对应 OSR 核心任务。协变量偏移(Covariate Shift):数据分布变化但语义类别不变(如白天 vs. 夜晚的狗),对应传统 OOD 检测。
Introduction
-
任何实用的机器学习模型都可能遇到与其训练集有很大差异的测试时样本;也就是说,模型很可能会遇到测试时间分布的变化。因此,检测分布变化已经成为社区中的一个关键研究问题。具体来说,非分布(OOD)检测和开集识别(OSR)已经成为解决这一任务的两个丰富的子领域。事实上,这两项任务都明确处理了多向分类器必须检测测试样本相对于其训练集是否“不可见”的设置,每个领域都提出了各种方法和基准。OOD检测方法对来自不同数据集到训练集的图像进行测试,而OSR方法对来自不同语义类别到训练集的测试图像的检测能力进行评估。这两个领域的研究工作在很大程度上是独立进行的,很少有交叉交流的想法。尽管许多先前的工作已经认识到这两个子领域的相似性,但是很少有基准来理解它们之间潜在的相似性和差异。
-
在本研究中,我们研究分布偏移的检测,重点是探索和分析OOD检测和OSR方法和基准。我们的目的是全面了解这两项任务之间潜在的相似之处和不同之处。我们根据当前的标准基准,在为 OOD 检测和OSR开发的方法之间进行了严格的交叉评估,发现对一种方法有效的方法可能对另一种方法也有效(第3节)。我们对需要专门训练策略的方法(如离群值暴露 (OE)和ARPL )以及不同的事后评分规则(如MSP 、MLS 和Energy )进行了试验。我们彻底评估了标准OOD检测和OSR基准的所有方法,之后我们发现OE在OOD检测任务上取得了几乎饱和的性能,在OSR任务上也取得了最先进的结果。我们进一步发现,对深度图像嵌入量敏感的评分规则(如MLS 和能量评分)在任务和数据集上表现出最佳性能。
-
接下来,我们提出了两个领域所处理的任务的调和观点,并提出了一个新的评估基准(第4节)。具体来说,我们提出了一个新的大规模基准设置,其中我们理清了不同的分布转换,即语义转换和协变量转换,发生在OOD检测和OSR(见图1)。虽然这些概念之前已经讨论过 ,但 OOD 检测中的标准大规模基准并没有充分区分它们。
-

-
图1: Semantic shift vs. covariate shift.。我们系统地进行了OSR和OOD检测的SOTA方法之间的交叉评估,并提出了一个大规模的基准设置,其中我们解开了这两个领域中处理的任务,建议它们分别处理语义偏移(x轴)和协变量偏移(y轴)。
-
-
例如,当使用预先训练的ImageNet模型检测来自地方的 OOD 样本时,语义转换和协变量转换同时发生。我们提出一个概念框架来理解它们,并进一步提出大规模的评估设置,包括预训练的ImageNet模型。例如,为了隔离ImageNet上的语义转移,我们利用了最近引入的语义转移基准(SSB) ,其中原始的ImageNet-1K 被视为“可见的”闭集数据,而“不可见的”数据是从ImageNet-21KP 的不相交集精心提取的。对于协变量移位,我们利用ImageNet-C 和ImageNet-R 来证明相对于标准ImageNet数据集的分布移位。此外,为了说明对协变量移位(也称为OOD泛化)的稳健性和能够检测它的存在之间的紧张关系,我们进一步引入了一个新的度量“异常值感知准确性”(OAA)。
-
最后,我们在我们的大规模基准上检查SoTA OOD检测和OSR方法,以验证在标准(小规模)数据集上的发现是否仍然适用于我们的合并大规模评估。通过大规模分析,我们惊讶地发现,OE难以扩展到更大的基准,而 magnitude aware 评分规则,尤其是MLS ,仍然显示出希望。我们进一步通过分析不同模型在不同分布偏移下提取的表示来提供经验见解。
-
我们的分析表明,运行经验在现有基准测试中的出色表现在很大程度上归因于以下事实:用于训练的辅助OOD数据与OOD测试数据存在分布重叠(通过特征空间中的距离来衡量)。同时,我们发现,要找到反映大规模数据集的可能分布变化范围的辅助OOD数据并不容易。我们相信在 OOD 检测和OSR的共享空间中仍有许多未解决的问题需要回答,并希望我们工作中的发现可以作为未来研究的平台。
-
在 OOD 检测中表现好的方法(如 OE)在 OSR 中也表现优异,反之亦然。MLS 和 Energy 评分规则对特征向量幅度敏感,在不同任务和数据集上始终优于其他规则(如 MSP、ODIN)。OE 在小规模 OOD 检测中近乎饱和,但在 OSR 中提升幅度较小。OE 在大规模场景下失效:当辅助数据(如 YFCC15M)与测试 OOD 数据分布差异大时,OE 性能显著下降,而 MLS 和 Energy 仍保持优势。协变量偏移下,模型对低层级特征变化更敏感;语义偏移下,高层特征差异更关键。
Related work
-
开集识别。先前的工作[Toward open set recognition]创造了“开集识别”,其目标是在对已知类别进行分类的同时识别未知类别。OpenMax求助于激活向量(AV ),并基于极值定理(EVT)对AV的分布进行建模。最近的工作表明,合成分布产生的数据将有助于改善OSR。OSRCI 生成属于未知类别但类似于训练数据的图像,以训练开集分类器。[Opengan: Openset recognition via open data generation]对抗性训练鉴别器以区分闭集和开集图像,并引入真实开集样本用于模型选择。基于原型的方法(即ARPL / ARPL+CS)调整不同类的边界,并基于与已知类的学习原型的距离来识别开集图像。MLS 使用最大logit分数而不是softmax分数来维护幅度信息。
-
OOD 检测。OOD检测的目标通常被指定为从训练数据中识别来自“不同分布”的测试时样本。形式化了非分布检测的任务,并提供了一种使用最大softmax概率(MSP)评估深度学习非分布检测器的范式。具有大MSP分数的测试样本被检测为分布内(ID)示例,而不是分布外(OOD)示例。ODIN 及其可学习变体G-ODIN 向ID和OOD样本添加对立扰动,并在softmax输出上采用温度缩放策略来分离它们。为OOD不确定性估计提出了源自logit输出的能量分数。
-
[React: Out-ofdistribution detection with rectified activations]修正ID和OOD数据的倒数第二层中每单位激活的分布。GradNorm 通过反向传播softmax输出和均匀分布之间的KL散度计算梯度,假设ID数据的梯度幅度高于OOD数据的梯度幅度。ASH 基于在较晚层的整个表示的第p百分位来移除大部分激活。剩余的激活用于计算OOD检测的能量分数。SHE 基于从模型的倒数第二层提取的特征来量化来自每个类别的ID训练样本和测试样本之间的不相似性。然后将这种不相似性作为判断测试样本是否为良好的分数。离群值暴露(OE) 和GradNorm 都基于softmax输出和均匀概率分布之间的KL散度设计了一个损失,以鼓励模型输出关于离群值的均匀softmax分布。前者利用真实的OOD数据进行训练,而后者直接采用梯度的向量范数来执行不确定性估计。
-
OOD 检测与OSR的关系。先前的工作讨论了协变量和语义分布转移之间的分离 。[Exploring covariate and concept shift for out-of-distribution detection]讨论了在小规模数据集(即CIFAR-10/100)上分别检测协变量和概念分布变化。然而, 我们认为没有明确分类法的小规模数据集(如CIFAR)不太适合定义语义转换。因此,我们的目标是建立一个具有清晰的底层分类的大规模基准。[Natural adversarial examples]引入了ImageNet-A(即,自然对抗示例的集合)和ImageNet-O(即,来自ImageNet-21K的保留类的样本)用于鲁棒性评估和未知类识别,而[Systematic generalisation with group invariant predictions]精选了一组人工数据集来解开非语义分布转换和语义转换的评估。
-
然而,他们更多地关注于实现对非语义分布变化的鲁棒性,并且没有开发在OOD检测和OSR设置中的最先进方法之间的交叉评估。在异常检测(AD)范例中处理语义和非语义任务,并在CIFAR10中对它们应用流行的AD方法。我们的工作明确地探索了OSR和OOD检测任务之间的关系,并验证了各个领域中各自流行的方法的有效性。两项调查总结了OOD检测和OSR设置中的多种方法,以及异常检测和新奇检测。[A unified benchmark for the unknown detection capability of deep neural networks]构建了一个统一的基准来验证现有的OOD检测方法,划分了“远OOD”和“近OOD”。同时,[Augmenting softmax information for selective classification with out-of-distribution data]重新思考了在面向对象的环境中ID错误分类的重要性,并检验了在面向对象数据集存在的情况下选择性分类的不同方法。在我们的工作中,我们不仅讨论了鲁棒性和OOD检测之间的联系,而且提出了一种新的衡量标准来协调任务。并行工作[Openood: Benchmarking generalized out-of-distribution detection]为OSR和 OOD 检测中的代表性方法提供了一个代码库。在本文中,我们将移位检测方法分为两种类型:计分规则(例如,MSP、MLS等),其在预先训练的网络上进行事后操作;以及专门训练,其修改网络的优化程序(例如,ARPL/ARPL+CS、OE等)。
-
Auxiliary data in OOD detection. 。受运行经验的启发,最近的工作 以某种形式利用辅助数据来增强模型检测OOD数据的能力。这可以通过后验抽样,对抗性训练,扩大分布或模型扰动。POEM 关注后验采样,以了解ID和OOD数据之间的决策边界。ATOM 介绍了一种具有信息异常值挖掘的对抗性训练方法,该方法专门设计用于提高对抗对抗性攻击的鲁棒性,其中对抗性数据被视为一种特殊类型的OOD数据。
-
DAL 通过在Wasserstein球中的最差OOD数据上训练预测器,解决了辅助和看不见的真实OOD数据之间的分布差异。DOE 通过嵌入特征的扰动利用隐式数据转换来最小化称为最差OOD遗憾的分布差异测量,旨在增强模型对分布变化的稳健性。我们的工作为辅助数据的选择提供了独特的见解,以优化 OOD 检测性能。通过揭示辅助数据和模型的OOD检测性能之间的关系,我们的工作有可能为辅助数据选择和操作策略提供信息,以实现更可靠的OOD检测解决方案。
-
与先前工作的主要相似和区别。虽然一些论文 共同考虑了OOD检测和OSR任务中的方法,但很少有著作明确区分了它们之间的学术和实践差异(或相似之处)。在这项工作中,我们不仅提供了实证分析,而且还提出了一个概念框架和大规模的基准,以更好地协调这些问题。
Cross-benchmarking of OOD detection and OSR methods
- 尽管OOD检测和OSR研究越来越受欢迎,但这两项任务在很大程度上是独立发展的,相互隔离,如表1所示。事实上,为OSR设计的方法可以无缝地用于解决 OOD 检测问题,反之亦然。最近通用的OOD检测框架 统一了与OOD检测和OSR相关的任务。然而,在当前标准基准下,仍然缺乏针对 OOD 检测和OSR开发的方法之间的交叉评估。考虑到OOD检测和OSR之间强有力的内在联系,全面的交叉基准比较对于阐明更广泛的分布偏移检测问题的未来发展至关重要。作为协调 OOD 检测和OSR的起点,在本节中,我们对两个子领域的方法进行交叉评估。
-

-
表1:代表性的 OOD 检测和OSR技术总结。工作根据其开发的任务(即 OOD 检测和OSR)和采用的方法(即评分规则和训练策略)进行分类。
-
- 仓库支持OOD 检测(如 MSP、Energy、ODIN、Mahalanobis)和OSR(开放集识别)(如 ARPL、GODIN)两类任务,覆盖训练、评估、特征分析全流程。关键方法包括:
- ARPL(Adversarial Risk Penalty Learning):OSR 与 OOD 检测的增强方法,结合对抗学习与风险惩罚。
- OE(Outlier Exposure):通过外部 OOD 数据训练提升检测能力。
- 标准评分规则(MSP、Energy、GradNorm 等):推理阶段的 OOD 分数计算。
- GODIN:基于梯度的 OOD 检测方法。
- 模型模块(
models/),骨干网络:包含 ResNet、DenseNet、ViT(视觉 Transformer)、ConvMixer 等主流模型结构,支持不同规模的实验(如vit_small用于小数据集,dino_vit_s8用于大规模评估)。定制化变体:resnetABN.py:针对 ARPL 方法设计的多领域 BatchNorm(MultiBatchNorm),支持不同领域数据的归一化(如训练时混合已知类与 OOD 样本)。godin_net.py:对应 GODIN 方法的网络结构,用于 OOD 检测。gan.py:ARPL 方法中可能用到的生成对抗网络(GAN),用于生成 OOD 样本增强训练。 - 方法模块(
methods/),核心算法:ARPL(Adversarial Risk Penalty Learning):仓库重点支持的方法之一,包含损失函数(ARPLoss)、网络结构(如resnetABN)及训练策略(如结合对比学习 CS)。标准 OOD 检测方法:支持 MSP(最大软概率)、Energy(能量分数)、ODIN(输入扰动)、GradNorm(梯度范数)等经典评分规则。开放集识别(OSR):通过open_set_datasets.py和osr_small.py实现,结合预定义的开放集划分,评估模型对未知类的拒绝能力。 - 训练与评估(
train/&eval/),训练脚本:new_bash/train/目录提供不同模型(如 ResNet、ViT)和数据集(如 CIFAR、ImageNet)的训练脚本,支持 CE(交叉熵)、OE(Outlier Exposure)、ARPL 等训练策略。评估脚本:new_bash/eval/:针对 OOD 检测(如large_vit.sh评估大视觉模型)和 OSR(osr_small.py)的脚本,支持批量测试多种评分规则(OOD_METHODS)。osr_small.py:开放集识别的核心评估逻辑,包含数据加载、模型加载、GMM 统计量计算(通过utils/stools.py)及性能指标计算(如 AUROC、FPR95)。 - 特征处理工具:
utils/stools.py提供特征统计(均值、方差)、降维(PCA、LDA)、GMM(高斯混合模型)训练与评分计算,用于分析特征分布对 OOD/OSR 性能的影响(对应论文中 “特征量级敏感性” )。config.py定义数据集路径(如cifar_10_root)、预训练模型路径(如 ImageNet-MoCo)及实验输出路径,需用户根据环境调整。
Experimental setup
-
问题设置。设 X ∈ R D X ∈ \R^D X∈RD 表示输入样本,C ∈ R 表示感兴趣的标签。当测试联合分布不等于训练联合分布,即 P t e s t ( X , C ) ≠ t r a i n ( X , c ) P_{test}(X,C) \neq train(X,c) Ptest(X,C)=train(X,c) 时,测试时间分布移位发生。这种转移可以进一步分为两种类型: 协变量移位 和语义转移。当 P t e s t ( C ∣ X ) = P t r a i n ( C ∣ X ) P_{test}(C|X) = P_{train}(C|X) Ptest(C∣X)=Ptrain(C∣X) 但 P t e s t ( X ) ≠ P t r a i n ( X ) P_{test}(X) \neq P_{train}(X) Ptest(X)=Ptrain(X) 时,发生协变量移位。当 P t e s t ( C ∣ X ) ≠ P t r a i n ( C ∣ X ) P_{test}(C|X)\neq P_{train}(C|X) Ptest(C∣X)=Ptrain(C∣X) 但 P t e s t ( X ) = P t r a i n ( X ) P_{test}(X) = P_{train}(X) Ptest(X)=Ptrain(X) 时,发生语义转移。在面向多类分类的 OOD 检测和 OSR 中,标签空间包含多个语义类别 { c 1 ,, c L } \{c_1,,c_L\} {c1,,cL},其中L是测试数据中类别的总数。模型需要识别测试时间样本来源的分布,并根据后验概率进行分类,表示为 p ( C = c i ∣ X ) p(C = c_i | X) p(C=ci∣X)。
-
方法。我们区分两类移位检测方法:评分规则(在预先训练的网络之上进行事后操作);以及专门的训练(这改变了网络的优化过程)。
-
对于评分规则,我们比较了最大softmax概率(MSP) 、最大Logit评分(MLS) 、ODIN 、GODIN 、能量评分、GradNorm 和SEM 。我们进一步用ReAct 进行实验,ReAct是一种激活剪枝技术,可以与任何评分规则结合使用。虽然MLS是为OSR 开发的,但其他评分规则是为 OOD 检测开发的。目前,我们注意到MLS、能量和梯度范数都对网络的特征范数的大小敏感,而其他的则不敏感。我们将以前的评分规则称为“量级感知”。
-
对于专门的训练,我们首先用标准交叉熵(CE)损失进行实验。我们也使用OSR文献中的ARPL +CS。这种方法学习一组被训练成远离所有训练类别嵌入的“倒易点”。我们注意到倒数点可以被视为一个线性分类层,允许我们在这个表示之上使用上面提到的任何评分规则。最后,我们使用OOD检测文献中的异常值暴露(OE) 来训练模型,其中真实的异常值示例在训练期间被用作OOD检测的示例。在这种情况下,鼓励模型预测统一的softmax输出。
-
数据集。对于OOD检测设置,我们将CIFAR10 视为分布内数据,并在其上训练模型。作为OOD数据,我们使用六个常用数据集:SVHN ,Textures ,LSUN-Crop ,LSUN-Resize ,iSUN 和Places365 ,这些数据集在CIFAR10上都有互斥类。在补充资料中,我们还提供了使用CIFAR-100作为ID训练数据(参见S2部分的表S1-S3)和使用不同训练配置(参见S3部分的表S4-S7)的实验。补充实验产生了一致的结果,加强了本节将要讨论的主要发现。
-
对于OSR基准测试,遵循[Open set learning with counterfactual images]中的标准协议,我们设置了四个子任务,包含CIFAR10、CIFAR+10、CIFAR+50和TinyImageNet 。在所有情况下,模型都是在类别的子集上训练的,其余的在测试时被用作“不可见的”。CIFAR+N设置包括在CIFAR10的四个类别上进行训练,以及在CIFAR-100的N个类别上进行评估。请注意,对于给定的方法,OOD检测的基准测试涉及训练单个模型和评估多个下游数据集。相比之下,OSR基准涉及为每次评估训练不同的模型。
-
数据集。对于OOD检测设置,我们将CIFAR10 视为分布内数据,并在其上训练模型。作为OOD数据,我们使用六个常用数据集:SVHN ,Textures ,LSUN-Crop ,LSUN-Resize ,iSUN 和Places365 ,这些数据集在CIFAR10上都有互斥类。在补充资料中,我们还提供了使用CIFAR-100作为ID训练数据(参见S2部分的表S1-S3)和使用不同训练配置(参见S3部分的表S4-S7)的实验。补充实验产生了一致的结果,加强了本节将要讨论的主要发现。
-
对于OSR基准测试,遵循中的标准协议,我们设置了四个子任务,包含CIFAR10、CIFAR+10、CIFAR+50和TinyImageNet 。在所有情况下,模型都是在类别的子集上训练的,其余的在测试时被用作“不可见的”。CIFAR+N设置包括在CIFAR10的四个类别上进行训练,以及在CIFAR-100的N个类别上进行评估。请注意,对于给定的方法,OOD检测的基准测试涉及训练单个模型和评估多个下游数据集。相比之下,OSR基准涉及为每次评估训练不同的模型。
-
Training 配置。我们从零开始在所有基准上训练ResNet18。对于CIFAR10,我们总是将初始学习率设置为0.1,并应用余弦退火计划,使用动量为0.9的SGD。重量衰减系数设置为5e 4。总训练时期的数量是200,批量大小是128。对于CIFAR100,我们还将初始学习速率设置为0.1,然后在第60、120、160个时期除以5。 该模型被训练200个时期,批量大小为128,重量衰减为5e 4, Nesterov 动量为0.9。使用其他网络架构和训练设置的其他结果可在附录D部分找到。
-
度量标准。遵循面向对象设计和OSR任务中的标准实践,我们在本文中使用接收机工作特性曲线下面积(AUROC)作为评估指标,因为我们发现其他指标与AUROC密切相关。有关其他指标的结果,请参考补充资料(第S5节)。
Quantitative results
-
在表2中,我们使用不同的训练策略和评分规则,在九个公共数据集上对OOD检测和OSR任务进行了基准测试。结果是五次独立运行的平均值。虽然在方法论上并不总是有一个明确的赢家,但是我们有三个主要的观察结果。
-

-
表2:使用CIFAR10作为ID,用各种方法对小规模 OOD 检测和OSR基准进行评估。结果是五次独立运行的平均值。我们用“ID”表示分布内的准确性,用“-”表示难以处理的结果,这是由于无法负担的计算成本造成的。粗体值代表最佳结果,而下划线值代表次佳结果。不同的方法有其最佳范围,但MLS和Energy证明了它们的稳定性,并且用OE训练的模型在几乎所有OOD数据集上都占优势。
-
-
首先,MLS 和Energy 在OOD和OSR数据集上表现最好。我们假设这是因为在网络的分类层之前,两者都对特征向量的大小敏感。为了验证我们的推测,我们通过将ID和OOD/开集样本的特征投影到图2中的二维空间来研究特征的大小。我们在通用和细粒度数据集上进行实验,即CIFAR-10和CUB。该投影是通过在模型的倒数第二层之后训练输出维度为2的线性层来实现的。ID数据的特征量大于开集/OOD数据的特征量。这与 MLS 中的发现一致,即“不熟悉的”样本往往比ID样本具有更低的特征量,为分布偏移检测提供了强信号。
-

-
图2:ID和开集/ OOD数据集图像的特征投影可视化。我们使用在倒数第二层之后输出维度为2的附加线性层将特征投影到二维空间中。我们使用在CIFAR-10(第一行)数据集上的ResNet-18和在CUB(第二行)数据集上的ResNet-50进行了OOD检测和OSR实验。对于CIFAR-10,OOD实验使用完整的CIFAR-10数据集作为ID数据,使用纹理作为OOD数据,而OSR实验使用CIFAR-10中的前六个类作为ID数据,其余四个类作为开集数据。对于CUB,OOD实验使用完整的CUB数据集作为ID,水鸟作为OOD数据,而OSR实验使用CUB中的六个类作为ID数据,四个CUB类作为开集数据。这些类是从SSB中引入的ID和开集拆分中随机选择的。值得注意的是,这些可视化揭示了ID数据的特征量超过了OOD或OSR数据的特征量。
-
-
其次,我们观察到离群值暴露在OOD检测基准上提供了优异的性能,通常性能接近饱和。更多结果可在附录A部分找到。它也经常提高OSR的性能,尽管程度较低,我们将在第4节中探讨这一现象。
-
第三,对于小规模数据集,OOD检测精度与ID精度正相关,而对于大规模数据集,观察到反向相关。在图3中,我们进一步包括使用最近的视觉语言模型CLIP 的结果,以供参考,这些结果不包括在拟合直线中。我们试验了三种变体,即零样本(zs)、微调(ft)和线性探测(lp)。我们发现,只有线性探测 CLIP 落入适合其他方法的相关性中,而零样本和微调对应物没有很好地与趋势一致。
-

-
图3:不同训练方法的OSR性能与OOD检测性能在不同评分规则下的平均值。此处包含的 CLIP 变量仅供参考,并不用于拟合相关性。
-
-
附加分析。(1)混合损害了幅度感知方法的性能。为了研究不同训练设置的影响,我们还将Mixup 应用到我们的训练程序中。如表3所示,幅度感知技术(即MLS和能量)证明了稳定性。有趣的是,我们还发现,与其他方法相比,MSP方法实现了最佳性能,但它仍然不如表2(a)中的幅度感知方法。似乎将置信度分配给两个相关类别的混合机制降低了最大幅度值。因此,我们强调,忽略幅度信息的训练设置(例如,混合)在OOD检测和OSR任务中都表现不佳。(2)方法对超参数的敏感性。在图4中,我们展示了不同训练方法的不同评分规则的平均结果。对于对超参数选择敏感的方法(例如ODIN的扰动幅度、ReAct的阈值),我们在五个不同的选择中平均结果(而不是像其他方法一样使用五个不同的随机种子)。
-

-
图4:跨不同模型平均的各种评分规则的OOD检测性能。数量级意识评分规则,尤其是MLS,是最有效和最稳定的技术。
-

-
表3:使用CIFAR10作为ID训练数据,在ResNet-18上使用各种评分规则对小规模OOD检测和OSR基准进行评估。结果是五次独立运行的平均值。我们将Mixup 用于训练程序,并将分布精度报告为“ID”。粗体值代表最佳结果,而下划线值代表次佳结果。幅度感知技术(即MLS和能量)证明了稳定性。
-
-
因此,在图4中,每个评分规则的结果是15次独立运行的平均值(即3种训练方法× 5次运行)。我们发现,数量级感知评分规则(即MLS和能量)为评估模型性能提供了明显的优势。考虑到MLS和能量的误差,MLS是所有情况下的最佳选择。此外,我们观察到,ODIN和ReAct这两种不知道大小的技术表现出不稳定性。这种不稳定性可归因于对ODIN随机预测的仔细调整的噪声值和截断ReAct激活的阈值的依赖。
-
我们还可以从表2中发现,在文献中已经被证明是有效的ReAct,在具有高分布内准确度的训练有素的模型中似乎没有带来性能增益。这里,我们遵循[Open-set recognition: a good closed-set classifier is all you need?]中的技术,以获得尽可能高的ID精度。似乎当分类器足够强大时,ReAct很难带来额外的改进。此外,ReAct对激活修剪百分比的选择很敏感。对于不同的开集/OOD数据集,最佳百分位值是不同的(参见补充资料中的S4一节)。为了识别分布外输入,我们推荐更稳定、更确定的幅度感知评分规则。
Qualitative analysis
-
在本节中,我们定性地询问交叉熵和异常值暴露网络的已知表示,以解释OE在现有OOD检测基准上的显著性能提升。具体来说,我们使用各层最大激活神经元的值来分析网络如何响应分布变化。我们通过网络传递每个样本,并在图5中绘制每一层的最大激活直方图(参见图A2,通过用ARPL+CS方法训练得到的类似结果)。
-

-
图5:在具有四个训练类别的CIFAR10的子集上预训练的ResNet-18的激活直方图,并且基于以下评估:训练和ID测试数据;开集数据(CIFAR10中不相交的六个类)和OOD数据(来自纹理、LSUN和Places365)。具体地,每个子图显示了在ResNet18的层1到层4的输出处的最大激活(沿着沟道、宽度和高度维度),在图中从左到右显示。OE的行为不同于CE,CE的激活图在深层比在浅层更容易分离。有关更多数据集的结果,请参见附录中的B部分。
-
-
这是受[Open-set recognition: a good closed-set classifier is all you need?]的启发,他表明“最大logit得分”(MLS,网络输出层的最大激活)可以实现OSR的SOTA。此外,网络通过未能点亮分布内激活路径来应对分布转移下的“缺乏熟悉感”。我们研究了在不同的“看不见的”数据集下,深层网络不同阶段的激活是如何变化的。图5显示了在CIFAR10上训练的ResNet-18 从第1层到第4层的输出的最大激活直方图,当对具有不同移位的数据进行评估时(这里我们使用“层”来指代ResNet块)。
-
对于开集数据,我们发现早期层激活在很大程度上与ID测试数据相同。只是在网络的后期,激活模式才开始不同。这是直观的,因为开集数据的低级纹理和统计与训练图像没有太大的不同。此外,早就知道CNN中的早期过滤器倾向于关注纹理细节,如边缘。相比之下,我们发现一些OOD数据集,如SVHN,在早期层诱导非常不同的激活。我们对此现象的解释是类似的:SVHN包含与CIFAR10的训练数据集非常不同的图像统计和低级特征,因此在早期层中诱发不同的激活。然而,最有趣的是,一些显示明显不同的早期层激活的数据集实际上在后期层显示更相似的激活(如SVHN,见图A1)。
-
同时,OE 显示了实质上不同的中间激活。有趣的是,早期层中的最大激活看起来非常类似于ID测试数据,但在网络的后期往往不太类似。很明显,与使用CE损耗相比,在使用OE损耗之后,在后面的层中的激活更有区别。
Disentangling distribution shifts
-
分析了在OOD检测和OSR设置中检测分布变化的方法后,我们将注意力转向基准测试。虽然OSR的明确目标是检测看不见的类别,但没有详细说明 OOD 检测基准旨在捕捉的分布变化的类型,或者它们与现实世界场景的关系。在本节中,我们提出了一个样本,通过它来巩固分布转移的类型。具体来说,我们提出“分布转移”可以沿着两个广泛的正交轴参数化:语义转移和协变量转移。纯语义转移是当遇到新的类别时,是OSR的显性焦点,而协变转移是指测试图像的语义保持不变,但其他特征发生变化时的设置。形式上,类似于[A fine-grained analysis on distribution shift],我们考虑数据生成过程的潜在变量模型,潜在z:
-
z ∼ p ( z ) y i ∼ p ( y i ∣ z ) i ∈ { 1... L } x ∼ p ( x ∣ z ) ( 1 ) z∼p(z) \\ y^i∼p(y_i |z) \\ i∈\{1...L\} \\ x∼p(x|z) (1) z∼p(z)yi∼p(yi∣z)i∈{1...L}x∼p(x∣z)(1)
-
这里,x 是图像,y_i表示图像属性。这组属性可以包括诸如“颜色”或“纹理”的传统特征,或者涉及诸如鸟的“喙形”的更抽象的特征。我们定义了一组语义属性,YS,使得图像的类别标签是这些属性的函数。此外,我们定义了协变量属性,YC,它可以在类别标签不变的情况下自由变化。在这个框架中,给定边际训练分布ptrain(YS)和ptrain(YC),检测语义偏移是当 p t e s t ( Y S ) ≠ p t r a i n ( Y S ) p_{test}(Y_S)\neq p_{train}(Y_S) ptest(YS)=ptrain(YS) 时标记的任务。类似地,如果 p t e s t ( Y C ) ≠ p t r a i n ( Y C ) p_{test}(Y_C ) \neq p_{train}(Y_C ) ptest(YC)=ptrain(YC),我们希望标记协变量移位。
-
-
为了激发这种设置,考虑一下自动驾驶汽车中的感知系统,它已经被训练成在白天识别汽车。当系统遇到新的类别时,语义偏移检测器是必要的,例如,标记自行车是未知的概念。同时,当系统在夜间部署时,协变移位检测器是必要的,其中类别可能是熟悉的,但是系统的性能可能会下降。
Datasets
-
首先,我们注意到引入了语义转移基准(SSB ),这是一个隔离语义转移的分布转移基准。我们主要关注ImageNet-SSB 和CUB-SSB 数据集。ImageNet-SSB中的“可见”类是原始的ImageNet-1K类,而“不可见”类选自ImageNet21K-P的不相交集合。与此同时,CUB-SSB将CUB中的200种鸟类分为“见过的”和“看不见的”两类。此外,未知类别根据其属性分为简单类别和困难类别,划分规则取决于未知类别和训练类别中每对视觉属性的语义相似度。对于上述所有数据集,训练集中出现的类别将不包括在评估集中。
-
对于协变量移位,我们提出ImageNet-C 和ImageNet-R 来证明相对于标准ImageNet数据集的分布移位。两个数据集都包含来自ImageNet-1K类别子集的图像,但是具有不同的低级图像统计。ImageNet-C对ImageNet-1K的验证图像应用四种不同强度的主要损坏(例如,噪声、模糊、天气和数字),而ImageNetR从ImageNet-1K数据集中收集前景类的各种艺术再现。我们还选择 Waterbirds 来测试在CUB-SSB“Seen”类上训练的模型。水鸟将幼崽数据集中的鸟类照片插入到从地点数据集中选取的背景中,这意味着它与幼崽具有相同的语义类别,但在不同的上下文中。
-
讨论。我们注意到,没有讨论分布转移的唯一最佳框架,这里简要讨论替代方案。例如,[Robin: A benchmark for robustness to individual nuisances in real-world out-of-distribution shifts]提出了一种对偏移的细粒度分析,其中针对特定属性(如形状和姿态)控制测试时间分布。还讨论了神经网络中“不熟悉”的指示可能涉及许多事情,包括混淆类别和亚群转移。我们提出我们的简单框架作为一种方式来填补OSR的语义转移检测任务留下的“负面空间”。此外,我们建议以这种方式研究分布转移是很重要的,因为分类器是专门优化的,以区分一组特征(YS),而实际上对其他特征是不变的(YC)。因此,我们期望模型对其分布的变化有不同的反应。
-
最后,我们注意到,对于协变移位的样本,我们理想地希望开发稳健的分类器,并且尽管存在分布移位也能很好地执行。然而,考虑到机器学习模型的性能在分布变化下会降低,我们希望能够检测到这种变化何时出现。为了衡量稳健模型和能够检测协变量偏移的模型之间是否存在权衡,我们在第4.5节引入了一个新的度量。
Quantitative analysis
- 在表4和表5中,我们对之前讨论过的 OOD 检测和OSR的大规模基准方法进行了评估。通过这次大规模的评估,我们发现在训练方法方面,在CE、ARPL (+CS)和OE中,没有明显的赢家。令人惊讶的是,在之前的小规模基准测试(见表2)中表现最佳的OE在扩大规模时似乎表现不佳(表5中的最后两行)。我们将在下一节分析这一矛盾。在评分规则方面,我们再次发现,无论采用何种方法和基准(包括标准的小规模评分规则和我们的大规模评分规则),幅度感知评分规则(MLS和Energy)始终能产生最佳性能。
-

-
表4:在大规模数据集上的 OOD 检测和OSR基准的结果,使用与CE和ARPL基线相比的运行经验损失训练的ResNet-50模型。结果是五次独立运行的平均值。我们分别引入来自不同数据源(包括Places和YFCC15M)的异常数据来提供运行经验。
-

-
表5:使用以不同损失和评分规则训练的ResNet-50模型对大规模OOD检测和OSR基准的评估。结果是五次独立运行的平均值。粗体值代表最佳结果,而下划线值代表次佳结果。用CE损失训练的模型在 covariate shift and semantic shift 上都优于用ARPL训练的模型。
-
OE on large-scale datasets
-
在这里,我们研究为什么OE在大规模基准测试中的表现比其他方法差。运行经验和其他方法之间的一个关键区别是,运行经验使用辅助OOD数据进行训练。直观地说,如果辅助OOD训练数据的分布准确地反映了实际OOD测试数据的分布,我们将期望更好的检测性能。否则,不完整或有偏见的离群数据会对学习产生负面影响。为了进一步分析这一点,我们绘制了来自不同数据源(ID数据、OOD数据和辅助数据)的样本的输出特征(来自最后一层)的最大激活分布。结果如图6所示。值得注意的是,OOD检测性能与ID和OOD曲线的重叠区域强烈(负)相关。此外,当使用300K随机图像作为辅助OOD数据时(如第二行所示),与实际OOD数据的相关性很高,因此性能极佳(见表2)。我们还在图7中提供了大规模数据集的结果,并在附录的C部分提供了进一步的定性研究。
-

-
图6:针对小规模数据集上的ID训练数据、OOD测试数据和辅助训练数据,研究了来自最后一个块的输出特征的最大激活的分布。当配备OE损耗时,高度相关的辅助数据(300K图像)可以大大增强OOD检测性能。因此,仔细选择辅助数据至关重要。
-

-
图7:对于大规模数据集上的ID训练数据、OOD测试数据和辅助训练数据,对来自最后一层的输出特征的最大激活的分布的分析。与小规模数据集的300K图像相比,辅助数据(即YFCC15M和Places)与OOD数据之间的相似性较小。这一发现与表4中的结果一致。
-
-
我们使用OE训练的模型,在小规模(例如,纹理和位置365)和大规模(例如,ImageNet-C和ImageNet-R)基准测试中进一步检索给定样本的最近邻(参见图8)。通过从ID数据和辅助数据的并集中检索最近邻,我们观察到,对于小规模场景,检索到的最近邻在辅助数据中找到。然而,这种现象在大规模数据集中并不总是出现。这一观察结果与表4中OOD数据到辅助数据的距离和使用OE训练的模型的OOD检测性能之间的相关性一致。
-

-
图8:从ID和辅助训练数据的联合中检索的测试样本的最近邻的可视化。我们在小规模(例如,纹理和位置365)和大规模(例如,ImageNet-C和ImageNet-R) OOD数据集中搜索样本的最近邻。我们还使用ImageNet-SSB研究了语义移位样本的最近邻。很明显,运行经验对OOD检测性能的改善与OOD和辅助数据之间的相似性密切相关。
-
Dataset proximity vs. OOD detection performance
-
为了验证辅助数据和OOD数据之间的数据集接近度与OOD检测性能相关,我们测量了OOD检测性能和数据集接近度之间的相关性。我们通过计算OOD数据和辅助数据之间的距离来量化这种接近程度。对于特定的OOD数据集,我们分别通过Top-K最近邻和深核方法计算距离。对于前K个最近邻,我们计算每个OOD样本的归一化特征与其在辅助数据集中的前K个最近邻之间的所有距离的平均值。它可以由以下公式表示:
-
D i s t n n ( D o o d , D a u x ) = ∑ i = 1 ∣ D o o d ∣ ∑ k = 1 K d ( Z i o o d , Z k a u x ) K ∣ D o o d ∣ , ( 2 ) Dist_{nn}(D_{ood} , D_{aux}) =\frac {\sum^{|D_{ood}|}_{i=1}\sum^K_{k=1} d(Z^{ood}_i , Z^{aux}_k )} {K|D^{ood}| }, (2) Distnn(Dood,Daux)=K∣Dood∣∑i=1∣Dood∣∑k=1Kd(Ziood,Zkaux),(2)
-
其中Dood和Daux代表ood和辅助数据集。Z ood和Z aux是从给定ood和辅助样本的预训练模型中提取的l2归一化特征。d(,)是最近邻检索的距离度量。我们还按照计算OOD和辅助数据集之间的深度核距离:
-
D i s t d k ( D o o d , D a u x ) = M M D ^ u 2 ( D o o d , D a u x ; ϕ ) , Dist_{dk}(\mathcal{D}^{ood},\mathcal{D}^{aux})=\widehat{\mathrm{MMD}}_{u}^{2}(\mathcal{D}^{ood},\mathcal{D}^{aux};\phi), Distdk(Dood,Daux)=MMD u2(Dood,Daux;ϕ),
-
其中 M M D ^ u 2 ( D o o d , D a u x ; ϕ ) \widehat{\mathrm{MMD}}_{u}^{2}(\mathcal{D}^{ood},\mathcal{D}^{aux};\phi) MMD u2(Dood,Daux;ϕ) 是基于来自 Dood 和 Daux 的i.i.d.样本的最大平均差异(MMD)的U -静态估计量,其被认为是具有几乎最小方差的无偏估计量。 q ( ⋅ , ⋅ ) q(·,·) q(⋅,⋅) 是高斯核。从(0,1)中采样。深度核方法背后的直觉是通过每个分布的样本的代表性深度特征有效区分数据分布。我们计算距离在图9中,对于小规模和大规模OOD数据两者,OOD-AUX数据距离(表示为OOD-AUX数据距离)是相同的,这进一步验证了辅助数据和OOD数据之间的更接近导致OE模型的更好性能。
-

-
图9:对于(a)小规模和(b)大规模OOD数据,不同辅助训练数据的OOD检测性能对OOD-AUX数据距离。对于基于Top-K最近邻和深核距离的两种测量,OOD检测性能随着OOD数据和辅助数据之间距离的增加而降低。
-
Outlier-aware accuracy
-
最后,我们引入了一个新的度量来协调检测协变量移位和对其具有鲁棒性的问题。尽管AUROC通常用于比较区分非分布样本的不同技术,但它无法捕捉模型在存在分布偏移的情况下对测试样本进行可靠分类的能力。为了分析协变量移位和稳健性之间的关系,我们引入了一种新的度量,我们称之为离群点感知准确性(OAA)。在给定的阈值和给定的预测集(包括ID与OOD预测,以及闭集类别中的预测)下,我们计算“正确”预测的总频率。“正确”的定义因预测而异。具体来说,如图10所示,所有被预测为ID样本的实例都应该具有准确的类别预测,并且应该检测所有尚未分类的OOD样本。
-

-
图10:异常值感知准确性的演示(OAA)。OAA测量模型在给定阈值下做出“正确”预测的频率。“正确”预测被定义为:(1)在被预测为ID的测试样本中,其语义类别标签被正确预测的那些,被表示为 p i c i p ^{c_i}_i pici;(2)具有不正确语义类别预测的真实OOD样本,表示为 p i c o p ^{c_o}_i pico。
-
-
这是因为我们期望一个好的模型能够正确地对所有有协变量偏移的样本进行分类,并识别任何剩余的ood样本。然后,将计数实例的数量除以测试实例的总数,以产生OAA,这对于无意义的偏移是稳健的。此衡量标准根据评分规则在不同阈值下进行计算,并进行汇总:
-
mOAA度量。跨所有阈值的OAA值也可以聚合为[0,1]内的单个值,作为总体度量,即平均OOA (mOAA)。为了计算mOAA,我们考虑测试包括来自Did的ID数据和来自d OOD的OOD数据的图像。mOAA的定义如下:
-
m O A A = 1 N ∑ i = 1 N O A A i = 1 N ∑ i = 1 N p i c i + p i c o ∣ D i d ∣ + ∣ D o o d ∣ , ( 4 ) mOAA=\frac{1}{N}\sum_{i=1}^{N}OAA_{i}=\frac{1}{N}\sum_{i=1}^{N}\frac{p_{i}^{ci}+p_{i}^{co}}{|\mathcal{D}^{id}|+|\mathcal{D}^{ood}|},(4) mOAA=N1i=1∑NOAAi=N1i=1∑N∣Did∣+∣Dood∣pici+pico,(4)
-
其中, p i c i p^{c_i}_i pici 表示预测为ID的测试样本中的正确预测, p i c o p^{c_o}_i pico 表示预测为OOD的测试样本中的正确预测(参见图10),| ·|表示测试集的大小,N是不同阈值的数量。mOAA评分范围从0到1。较高的值表示较好的性能,1分表示完美的检测和识别,而0分表示在分离和识别方面最差的性能。
-
-
根据图11和表6中的数值结果,我们观察到阈值的转折点,它实现了模型鲁棒性和OOD检测之间的最佳平衡。值得注意的是,这一指标与AURC 有关。虽然AURC和OAA都考虑分类器性能,但我们提出的OAA专门测量“正确预测率”,提供0到1之间的可解释值。因此,我们相信这种度量可以有效地用于以更高的精度研究OOD检测和一般化之间的权衡。
-

-
图11:用通过不同阈值计算的CE/ARPL损失训练的分类器的异常值感知准确度(OAA)。
-

-
表6:我们计算了所有阈值的平均OAA (mOAA)率,以比较不同的方法。
-
Summary of empirical phenomena
- 在前面的章节中,我们从评分规则、训练方法和辅助数据方面全面评估了OOD检测和OSR的方法。为了总结这些现象,我们简要强调如下关键观察结果:(i) Magnitude aware评分规则(即MLS和能量)为OOD检测和OSR提供了明显的优势。与非量级感知技术(即ODIN和ReAct)相比,我们推荐更稳定、更确定的量级感知评分规则。(ii)当辅助数据与实际OOD数据高度相关时,离群值暴露(OE)是迄今为止提高OOD检测和OSR基准性能的最有效的训练方法。然而,尽管对于小规模的基准测试来说,找到这样的辅助数据是可能的,但是在(更真实的)大规模设置中找到这样的数据却是非常重要的。
Conclusion
-
在这项研究中,我们探索了非分布(OOD)检测和开集识别(OSR)。我们对 OOD 检测和OSR的方法进行了全面的交叉评估。此外,我们引入了一个新的基准设置,将分布转换问题分为协变量转换和语义转换,并为这两种设置提出了大规模的评估协议。我们的研究表明,当前OSR和OOD数据集(离群值暴露)的最佳执行方法不能很好地推广到我们具有挑战性的大规模基准测试。我们还发现,感知数量级的评分规则通常比其他规则更可靠。总的来说,我们的新基准可以作为一个改进的试验台,用于测量OSR和 OOD 检测的进展,同时提供对这两个问题的见解。我们希望我们对OOD检测和OSR方法和基准的彻底的实证研究可以为更广泛的数据分布偏移检测问题的未来研究和应用提供启示。
-
针对小样本开集细粒度图像分类识别(Few-Shot Open-Set Fine-Grained Image Classification, FSO-FGIC),
- 任务感知的动态特征定位:从全局到局部的分层过滤,OSR 的核心是语义偏移(类间细微差异),需通过高层特征区分(如鸟类喙部 vs. 翅膀)。小样本场景下,传统类中心表示易受背景干扰,需局部特征交互生成任务专属表示。设计可学习的任务生成模块,通过自注意力或局部补丁交互(如 TRGM),动态选择与当前任务相关的局部区域(如 “喙部” 或 “羽毛纹理”),避免全局平均池化丢失细粒度信息。例如,在小样本支持集中,通过局部特征的相似性加权,生成任务特异性的原型。
- 分层噪声过滤:通道级→空间级的注意力机制,协变量偏移(如背景、光照变化)是细粒度分类的主要噪声来源。ATR-Net 的 CRAM(通道区域感知)和 RFM(精细过滤)模块通过通道注意力定位任务相关区域,再通过空间注意力筛选实例级判别令牌,逐层过滤背景噪声。在小样本开集中,首先通过通道级注意力(如 SE 模块)定位任务关键通道(如 “鸟类头部”),再通过空间注意力(如 RFM 的多令牌选择)聚焦细微差异(如 “喙部弯曲度”),减少少样本过拟合风险。
-
ARPL(Adversarial Risk Penalty Learning):通过对抗训练增强模型对未知类(开放集)的拒绝能力,同时提升 OOD 检测性能。
- 对抗样本生成:引入 GAN(生成器
netG与判别器netD)生成 OOD 样本,模拟未知类分布。多领域 BatchNorm:使用resnetABN(如methods/ARPL/arpl_models/resnetABN.py),通过domain_label区分已知类(训练域)与 OOD 样本(生成域),避免归一化混淆。损失函数:结合分类损失(交叉熵)与对抗损失(惩罚生成样本的特征分布),公式为: L = L class + β ⋅ L fake \mathcal{L} = \mathcal{L}_{\text{class}} + \beta \cdot \mathcal{L}_{\text{fake}} L=Lclass+β⋅Lfake 其中 L fake \mathcal{L}_{\text{fake}} Lfake 约束生成样本的特征与已知类特征的差异。 - 关键代码与流程位置:数据阶段:训练时混合真实数据(
trainloader)与 GAN 生成的 OOD 样本(fake = netG(noise)),代码见methods/OOD/train.py的train_cs函数。模型结构:resnetABN支持多领域归一化(methods/ARPL/arpl_models/resnetABN.py的feature_list方法),根据domain_label(0 为已知类,1 为 OOD)选择不同 BN 参数。训练阶段:交替更新 GAN(netG、netD)与分类器(net),判别器(D)更新:区分真实数据与生成样本(errD_real和errD_fake)。生成器(G)更新:生成更接近真实数据的 OOD 样本(errG),同时惩罚其特征分布(errG_F)。分类器更新:最小化真实数据的分类损失(loss),并约束生成样本的特征(F_loss_fake)。损失函数:ARPLoss在methods/ARPL/loss中实现,包含fake_loss方法计算生成样本的特征惩罚。
- 对抗样本生成:引入 GAN(生成器
-
OE(Outlier Exposure),通过显式暴露模型于外部 OOD 数据(如 TinyImages),提升其对分布偏移的敏感性。将外部 OOD 数据(如 300K 随机图像)与训练数据混合,模型需区分已知类与 OOD 样本。对已知类使用交叉熵,对 OOD 样本使用 “异常损失”(如最大化其与已知类的差异)。加载 TinyImages 数据集作为
oeloader(methods/OOD/ood.py),训练时混合真实数据与 OOD 数据(train(net, criterion, optimizer, trainloader, oeloader, ...))。OELoss在methods/ARPL/loss中实现,对 OOD 样本的 logits 进行反向传播(如最小化其分类置信度)。 -
标准 OOD 检测评分规则(MSP、Energy 等),推理阶段通过模型输出计算 OOD 分数,区分已知类与 OOD 样本。MSP(Maximum Softmax Probability):取 softmax 输出的最大值,OOD 样本的 MSP 通常较低。Energy:基于 logits 的能量分数,公式为 E ( x ) = log ( ∑ k = 1 K exp ( z k ) ) E(x) = \log\left(\sum_{k=1}^K \exp(z_k)\right) E(x)=log(∑k=1Kexp(zk)),OOD 样本的能量更高。ODIN:通过输入扰动(如添加噪声)和温度缩放调整 logits,增强 OOD 样本的分数区分度。
-
GODIN(Gradient-based OOD Detection),通过输入梯度的范数(GradNorm)检测 OOD 样本,假设 OOD 样本的梯度范数更大。梯度计算:计算输入对模型输出的梯度,取范数作为 OOD 分数。模型适配:可能需要调整模型结构以支持梯度反向传播(如保留中间梯度)。
-
流程阶段 关键方法 / 模块 作用 数据与预处理 data_loader.py、dataset_largescale.py、open_set_splits加载已知 / 未知类数据,支持开放集划分(OSR)和大规模分布偏移(SSB 基准) 模型结构 resnet.py、vit.py、resnetABN.py、ViTExtractor骨干网络(ResNet/ViT)、多领域 BN(ARPL)、特征提取(支持各层特征输出) 训练阶段 train.py、ood.py、train_cs(GAN 训练)ARPL 混合对抗训练,OE 混合外部 OOD 数据训练,优化器 / 调度器适配不同方法 损失函数 ARPLoss、OELoss、SoftmaxARPL 的对抗惩罚损失,OE 的异常暴露损失,基线分类损失 特征提取 feature_list(各模型)、ViTExtractor、utils/stools.py(GMM 统计)提取各层特征用于分析(如特征量级敏感性),计算 GMM 统计量 推理与后处理 eval.py、ood_large.py、score.py(MSP/Energy 等)计算 OOD 分数(评分规则),评估 AUROC/OSCR 等指标 -
MLS(Maximum Logit Score),直接取模型输出的 logits(分类器原始输出,未经过 softmax)中的最大值作为 OOD 分数。 MLS ( x ) = max ( z 1 , z 2 , . . . , z K ) \text{MLS}(x) = \max(z_1, z_2, ..., z_K) MLS(x)=max(z1,z2,...,zK),其中(z_k)是模型对第k类的 logit 输出。模型输出的 logits(维度为
[batch_size, num_classes])。模型的分类器输出层(即 logits 生成后),属于推理后处理步骤。 -
能量分数(Energy Score),基于 logits 的对数求和指数(logsumexp)计算能量值,OOD 样本的能量通常更高。
公式: Energy ( x ) = log ( ∑ k = 1 K exp ( z k ) ) \text{Energy}(x) = \log\left( \sum_{k=1}^K \exp(z_k) \right) Energy(x)=log(∑k=1Kexp(zk)),其中(z_k)是模型对第k类的 logit 输出。模型输出的 logits(维度为[batch_size, num_classes])。模型的分类器输出层(logits 生成后),属于推理后处理步骤。假设你的模型是 ResNet 或 ViT,需在forward方法中返回 logits。例如:-
# 以ResNet为例(参考models/model_utils.py) class TimmResNetWrapper(nn.Module): def forward(self, x, return_feat=False): x = self.resnet.forward_features(x) embedding = self.resnet.global_pool(x) logits = self.resnet.fc(embedding) # logits是分类器原始输出(未softmax) if return_feat: return embedding, logits # 返回特征和logits else: return logits # 直接返回logits def get_mls_score(inputs, model, forward_func, logits=None): if logits is None: with torch.no_grad(): _, logits = forward_func(inputs, model) # 通过forward_func获取logits scores = np.max(logits.data.cpu().numpy(), axis=1) # 取logits最大值 return scores def get_energy_score(inputs, model, forward_func, logits=None): if logits is None: with torch.no_grad(): _, logits = forward_func(inputs, model) # 获取logits scores = torch.logsumexp(logits.data.cpu(), dim=1).numpy() # 计算logsumexp return scores -
MLS 对 logits 的绝对值敏感(大 logits 对应高置信度),能量分数则综合考虑所有类别的 logits,对分布偏移更鲁棒(论文中提到能量分数在大规模基准中表现稳定)。MLS 和能量分数无需复杂超参数(如 ODIN 的输入扰动幅度),计算简单高效,适合实时推理场景。
-
更多推荐

所有评论(0)