RankOOD: Class Ranking-based Out-of-Distribution Detection¶
会议: CVPR 2026
论文: CVF Open Access
代码: 无
领域: AI安全 / 分布外检测(OOD)
关键词: OOD检测、类别排序、Plackett-Luce、ListMLE、列表式学习
一句话总结¶
RankOOD 利用"分类器对每个 ID 类会自然诱导出一个类间排序模式、而 OOD 样本难以遵守这个排序"的洞察,先用 ILP 为每类抽出一个规范排序(canonical rank)、再用 Plackett-Luce 的 ListMLE 损失重训分类器去强化这个排序、最后按测试样本对规范排序的偏离打 OOD 分,在 TinyImageNet near-OOD 上把 FPR95 降了 4.3% 拿到 SOTA。
研究背景与动机¶
领域现状:OOD 检测分两大类。后处理(post-hoc)方法在预训练模型上直接从输出/中间特征提取 OOD 信号(如 MSP、Energy、Mahalanobis、ReAct),简单、不改网络、保 ID 性能;训练式方法改学习过程提升 ID/OOD 可分性,又分"无外部离群点"(如 LogitNorm、CSI、RotPred)和"有离群点"(如 Outlier Exposure、MixOE)两支,通常更强但常以掉 ID 精度或依赖外部数据为代价。
现有痛点:后处理方法效果高度依赖底层模型的校准质量;有离群点的训练方法虽强但需要充分多样的辅助离群数据、易过拟合到见过的离群点。最近兴起的"类别排序"思路(ExCeL、CRAFT)发现 ID 样本的类间排序更确定、OOD 会打乱排序——但 CRAFT 需要微调并把每个类的排序建成 \(C\times C\) 的概率质量函数(PMF)矩阵,引入了架构改动,且忽略了类别排名之间的相对次序。
核心矛盾:一个 OOD 样本可能被过度自信地分到某个 ID 类(top-1 看不出异常),但它"是否遵守该类应有的完整排序结构"才是更可靠的判别信号;而现有排序方法要么只看 PMF 的逐位概率、要么需要额外网络/微调,没有把"整条排序列表的相对次序"作为一个整体来约束。
本文目标:在不微调、不引入辅助网络、不使用外部离群点的前提下,直接在预训练网络的原始 logits 上学习并利用类别排序结构来检测 OOD。
切入角度:作者借用偏好对齐里常用的 Plackett-Luce 模型——把每个类对应一个固定的排序置换当作"被预测变量",用列表式最大似然(ListMLE)让整条 logit 列表服从该排序。OOD 样本即便被高概率分到某 ID 类,遵守该类完整排序的概率也很低。
核心 idea:用"ListMLE/Plackett-Luce 建模整条类别排序列表"代替"逐位 PMF 或 top-1 交叉熵",把 OOD 检测落在"对规范排序的偏离程度"上。
方法详解¶
整体框架¶
RankOOD 分三步,输入是 ID 训练数据和一个预训练分类器,输出是每个测试样本的 OOD 分数 RankOOD-S。第一步用预训练模型为每个类求一个规范类别排序(解 ILP);第二步用这些规范排序当 ground truth、以 CE + ListMLE 的混合损失重训分类器(记为 RankOOD-T);第三步在推理时,为每类先建一个参考 logit 阈值剖面,再按测试样本对规范排序的违反程度与对参考阈值的偏离打分。整条流水线无需微调原架构、无需外部离群点。
%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
A["ID 训练数据 + 预训练分类器"] --> B["规范类别排序 (ILP)<br/>由 RPM 解 0-1 整数规划,每类一个排序置换"]
B --> C["有序偏好学习 RankOOD-T<br/>CE + α·ListMLE(Plackett-Luce) 重训"]
C --> D["参考 logit 阈值剖面 Ref<br/>每类按 95 分位构建逐 rank 阈值"]
D --> E["OOD 打分 RankOOD-S<br/>排序违反惩罚 + 对参考阈值偏离"]
E --> F["ID / OOD 判定"]
关键设计¶
1. 用 ILP 从排序概率矩阵抽出每类的规范排序
要把"排序"当监督信号,先得给每个类定一个唯一、稳定的目标排序。作者沿用 CRAFT 的排序概率矩阵(RPM):对类 \(c\),从被正确预测为 \(c\) 的 ID 样本统计 \(P^c\in\mathbb{R}^{C\times K}\),其中 \(p^c_{i,j}\) 表示"当输入被分为类 \(c\) 时,类 \(i\) 出现在第 \(j\) 个 rank 的概率",每一列是该 rank 位置上的一个 PMF。但随类别数增多,RPM 会变噪、在某些 rank 上出现并列。为得到一个一致的规范排序,作者解一个 0-1 整数线性规划:引入二值变量 \(x^c_{i,j}\in\{0,1\}\)(类 \(i\) 是否被分到 rank \(j\)),目标 \(\max_x \sum_{i}\sum_{j} x^c_{i,j}\,p^c_{i,j}\),约束 \(\sum_i x^c_{i,j}=1\ \forall j\)(每个 rank 恰选一个类)与 \(\sum_j x^c_{i,j}\le 1\ \forall i\)(每个类至多被选一次)。这就保证选出一个合法的排序置换、且在模型偏好结构下联合概率最大。相比直接用 PMF,ILP 给出的是"最具代表性的次序",从源头消解了 rank 间的并列与噪声。
2. 有序偏好学习 RankOOD-T:CE + ListMLE 的混合目标
有了每类的规范排序当 ground truth,作者用 Plackett-Luce 模型的列表式最大似然(ListMLE)来训练,使整条 logit 列表服从该排序:
其中 \(\pi=(\pi_0,\dots,\pi_{K-1})\) 是规范排序、\(l_{\pi_i}\) 是排在第 \(i\) 位的类的 logit。与只约束 top-1 正确的 CE 不同,ListMLE 优化整条置换的似然,强制 \(l_{\pi_0}>\dots>l_{\pi_{K-1}}\) 的相对次序一致,从而保留丰富的类间关系结构。但只用 ListMLE 有两个漏洞:仅监督部分 rank(作者发现只取 top-k 和 bottom-k 即可)时不约束中间位置的绝对次序、也不保证 \(l_{\pi_0}\) 是全 \(C\) 个 logit 的全局最大。因此补一个交叉熵项把 top 类钉成 argmax:
\(\alpha\) 平衡二者。整个过程只在标准视觉骨干(ResNet-18)上重训、不改架构、不用离群点——这是它相比 CRAFT 微调 + PMF 矩阵的简化优势。
3. RankOOD-S:参考 logit 阈值剖面 + 排序违反的累积惩罚
推理时怎么把"是否遵守排序"变成一个分数?分两部分。先离线为每类构建参考 logit 阈值剖面 \(Ref^c_i\):取被正确预测、且至少 \(N\) 个 rank 位置预测正确的训练样本,对每个 rank 位置 \(i\) 取其 logit 的经验 95 分位作为阈值。测试时,对样本先定其预测类 \(\hat c\)(最大 logit 对应的类)及其规范排序 \(\pi^{\hat c}\),记样本实际预测排序为 \(\bar\pi\)。由于 Plackett-Luce 把 rank \(i\) 与所有在前的 rank 耦合,某个位置排错会牵连之前 rank 的 logit,故定义逐 rank 的累积间隔惩罚 \(\delta_{\pi^{\hat c}_i}=\gamma^{\,r}\),其中 \(r=\sum_{j=i}^{K-1}\mathbb{1}[\pi^{\hat c}_j\neq\bar\pi_j]\)(\(\gamma\ge1\),错位越多惩罚指数级越大)。最终:
权重 \(w_i\) 由验证集上线性回归学习以最大化 ID/OOD 分离。直觉是:ID 样本应有"rank-0 logit 高、随 rank 单调下降且保持次序"的轨迹,而 ListMLE 训练让评分有序耦合,所以哪怕一个中间 rank 违反,也会暴露整条置信轨迹的不一致——这正是 OOD 易被捕捉的地方。⚠️ 公式 5 中 \(\gamma\)、\(\delta\) 等符号以原文为准。
损失函数 / 训练策略¶
骨干用预训练 ResNet-18;CIFAR-10/100 训 500 epoch、TinyImageNet 训 300 epoch,SGD(momentum 0.9、初始 lr 0.1、cosine 退火)。\(\alpha\) 在 CIFAR-10/100/TinyImageNet 上分别设 0.8/1.0/0.5,参考阈值统一取 95 分位。CIFAR-10 用全部 10 个 rank 训练,CIFAR-100 与 TinyImageNet 用 ILP 产出的 top-10 与 bottom-10 rank 训练。
实验关键数据¶
主实验¶
在 OpenOOD 环境下对比 34 个方法,ID 数据为 CIFAR-10/100 与 ImageNet-200(TinyImageNet),指标为 FPR95(越低越好)与 AUROC(越高越好),三个随机种子取均值。下表为 near-OOD 各 ID 数据集的平均:
| 方法 | 类别 | 平均 AUROC↑ | 平均 FPR95↓ |
|---|---|---|---|
| OE | 训练(有离群点) | 89.32 | 34.29 |
| RankOOD (Ours) | 训练(无离群点) | 85.39 | 44.79 |
| CRAFT | 训练(无离群点·排序) | 85.22 | 46.76 |
| GEN | 后处理 | 84.40 | 54.43 |
| LogitNorm | 训练(无离群点) | 84.49 | 49.56 |
| ExCeL | 后处理(排序) | 83.33 | 59.89 |
RankOOD 在 near-OOD 上取得第二好(仅次于用了外部离群点的 OE),且在 TinyImageNet near-OOD 上拿到 SOTA:AUROC 提升 0.50%、FPR95 降低 4.3%。far-OOD 下排名第三;相比同为排序的 CRAFT/ExCeL,平均 FPR95 在 far-OOD 降 7.51%、near-OOD 降 4.21%。
消融实验¶
| 配置 / 对比 | 关键指标 | 说明 |
|---|---|---|
| RankOOD(无离群点)vs OE(有离群点) | near-OOD FPR95 44.79 vs 34.29 | 唯一胜出 RankOOD 的方法靠外部离群点,假设更强 |
| vs CRAFT(排序·微调) | near AUROC 85.39 vs 85.22 / FPR95 44.79 vs 46.76 | 不微调即超过,且建模了相对次序 |
| vs GEN(无离群点最强后处理) | CIFAR-100 FPR95 −3.36% | 无离群点设定下 CIFAR-100 取得最佳 FPR95 |
| vs G-ODIN(far-OOD CIFAR-100 最强) | TinyImageNet FPR95 −8.12% | G-ODIN 在 near-OOD 全面最差,RankOOD 更均衡 |
| 训练用 rank 子集 vs 全量 | 性能相当 | 只用 top-k + bottom-k 即够,无需监督全排序 |
关键发现¶
- 均衡性强:RankOOD 在所有 benchmark 上稳定排进 near-OOD 前二、far-OOD 前三,不像 G-ODIN 那样 far 强 near 弱,说明排序结构是个鲁棒信号。
- 不靠外部数据也接近最强:唯一全面胜出它的是 OE,而 OE 依赖辅助离群点;在"无离群点"这一更现实的设定里 RankOOD 几乎最好。
- 高基数标签空间收益大:在类别数多的 TinyImageNet 上拿 SOTA,印证"类别越多、排序结构越有信息量"的假设。
- rank 子集就够:只用 top-10/bottom-10 训练即可达到全排序效果,降低了高类别数下的训练开销。
亮点与洞察¶
- 把偏好对齐的工具搬到 OOD:用 LLM 对齐里常见的 Plackett-Luce/ListMLE 来建模类别排序,是个漂亮的跨领域迁移——OOD 检测被转成"整条置换的似然一致性"问题。
- ILP 给排序去噪:用 0-1 整数规划从噪声 RPM 中解出唯一规范排序,比直接用逐位 PMF 更稳,避免了 rank 并列的歧义。
- 指数级错位惩罚:\(\delta=\gamma^r\) 让"错位越多惩罚越狠",配合 Plackett-Luce 的前向耦合,使单个中间 rank 违反就能暴露整条轨迹异常——这个累积惩罚设计可迁移到其它依赖序结构的异常检测。
局限与展望¶
- 依赖预训练模型已具备较好的类间排序结构;若底层模型校准差、排序本身不稳,规范排序与 RankOOD-S 都会失真。
- ILP 在类别数很大时的复杂度/运行时间是潜在瓶颈(⚠️ 作者称细节在附录),大规模标签空间下的可扩展性待验证。
- 仍需一轮重训(RankOOD-T),相比纯后处理方法不是"零成本即插即用"。
- 评测骨干统一为 ResNet-18,更大/更现代骨干(ViT 等)上的表现未报告。
相关工作与启发¶
- vs CRAFT:CRAFT 微调模型并把每类排序建成 \(C\times C\) 的 PMF 矩阵、靠 PMF 散度检测,但有架构改动且忽略相对次序;RankOOD 直接在原始 logits 上用 Plackett-Luce 优化整条排序、不改架构,near/far 均超过它。
- vs ExCeL:ExCeL 是后处理,把最大 logit 与"类排名签名"组合打分;RankOOD 进一步用 ListMLE 显式学习排序结构,建模了 ExCeL 忽略的列表式依赖。
- vs Outlier Exposure (OE):OE 用辅助离群点训练、惩罚过度自信,是 near-OOD 最强但依赖外部数据;RankOOD 不用任何离群点、在无离群点设定下逼近 OE,更适合拿不到代表性离群样本的场景。
评分¶
- 新颖性: ⭐⭐⭐⭐⭐ 把 Plackett-Luce/ListMLE 列表式排序学习引入 OOD 检测,视角新颖
- 实验充分度: ⭐⭐⭐⭐⭐ OpenOOD 下对比 34 个方法、三种 ID 数据、near/far 全覆盖
- 写作质量: ⭐⭐⭐⭐ 思路清晰、有 worked example,但部分公式在缓存中排版较乱
- 价值: ⭐⭐⭐⭐ 在"无离群点"设定下接近最强,且无需改架构,实用性好