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 領域,是一個真正的軟體專案,而非精心整理的清單或教學合集。

相關

  • 專案
  • 專案
  • 專案
  • 專案
  • 專案