kkirchheim/pytorch-ood

👽 Out-of-Distribution Detection with PyTorch

📦 pytorch‑ood – PyTorch 的分布外检测

是什么 – 一个基于 PyTorch 构建的 Python 库,整合了大量 OOD(分布外)、开放集、新奇性检测和异常检测方法。它提供即用型的检测器、损失函数、数据集、模型架构(带预训练权重)以及实用工具,并与 pytorch‑lightning 及其他 PyTorch 生态系统工具良好集成。

为何重要 – 检测模型是否遇到与其训练分布不同的数据,是视觉系统、医疗 AI、自主代理等领域的核心安全问题。从文献中逐一实现每种方法非常繁琐;pytorch‑ood 提供了一个单一、经过充分测试的 API,覆盖了 30 多种已发表的技术,从经典的 Softmax 基线到最近的基于能量和基于 Transformer 的检测器。


🎯 核心功能(如 README 所列)

类别 你将获得
检测器 OpenMax、MC-Dropout、MaxSoftmax、ODIN、Mahalanobis(单层和多层)、GRAM、Energy-Based、GradNorm、ReAct、ViM、ASH、SHE、NNGuide、GEN、fDBD、VRA、NAC-UE、SCALE、NCI 等众多方法(包含 2024–2025 年论文)。
损失函数 Objectosphere、Center Loss、Outlier Exposure 等,有助于训练对 OOD 输入鲁棒的模型。
模型与权重 在 CIFAR-10/100、ImageNet 等数据集上预训练的 WideResNet-40-2、ResNet 等架构,权重与原始论文一致。
数据集与变换 下载标准 OOD 基准(如 OpenOOD CIFAR-10 v1.5)的助手,以及获取文献中使用的精确预处理流程。
实用工具 OODMetrics 用于计算 AUROC、AUPR、FPR@95TPR 等;对 logits/特征进行缓存以实现快速基准测试;可选集成 torchmetricspandasscikit-learnsegmentation-models-pytorch
兼容性 与原生 PyTorch、pytorch-lightning 和分割库兼容;提供 Binder 演示笔记本以快速实验。

🛠️ 安装

pip install pytorch-ood

核心依赖torchtorchvisionscipytorchmetrics可选扩展(按需安装):

  • scikit-learn – ViM 和 k-NN 检测器所需。
  • gdown – 用于自动下载部分大型模型文件。
  • pandas – 在基准示例中使用。
  • segmentation-models-pytorch – 用于异常分割演示。

🚀 快速入门示例(来自 README)

from pytorch_ood.detector import EnergyBased
from pytorch_ood.utils import OODMetrics
from pytorch_ood.model import load_model, load_transform

# 1️⃣ 加载预训练的 WideResNet-40-2(CIFAR-10,使用 Energy-Based 损失训练)
model = load_model("wrn-40-2/cifar10/energy/s1").cuda()
preprocess = load_transform("wrn-40-2/cifar10/energy/s1")

# 2️⃣ 构建检测器
detector = EnergyBased(model)

# 3️⃣ 在 OOD 样本标签 < 0 的 DataLoader 上评估
metrics = OODMetrics()
for x, y in data_loader:
    x = preprocess(x).cuda()
    scores = detector(x)               # 分数越高 → 越像异常样本
    metrics.update(scores, y)

print(metrics.compute())  # 输出 AUROC、AUPR 等

该库还提供更高级别的基准 API(参见 Benchmarks (Beta) 部分),可自动缓存中间特征,对标准 OOD 套件中的多种检测器进行评估。


📚 文档与支持


📖 引用

如果在研究中使用 pytorch-ood,请引用 CVPR-2022 工作坊论文:

@inproceedings{kirchheim2022pytorch,
  title={Pytorch-ood: A library for out-of-distribution detection based on pytorch},
  author={Kirchheim, Konstantin and Filax, Marco and Ortmeier, Frank},
  booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},
  pages={4351--4360},
  year={2022}
}

✅ 总结

pytorch-ood 是一个成熟、持续维护的工具箱,让研究人员和实践者能以最少的样板代码,将多种 OOD 检测方法轻松集成到任何 PyTorch 模型中。它完全属于 AI/ML 领域,是一个真正的软件项目,而非精心整理的列表或教程合集。

相关

  • 项目
  • 项目
  • 项目
  • 项目
  • 项目