kkirchheim/pytorch-ood
👽 Out-of-Distribution Detection with PyTorch
📦 pytorch‑ood – PyTorch 用の分布外検出
何であるか – PyTorch 上で構築された、分布外(OOD)、オープンセット、新奇性検出、異常検出手法の多数を統合した Python ライブラリ。実行可能な検出器、損失関数、データセット、モデルアーキテクチャ(事前学習済み重み付き)、およびユーティリティを提供し、pytorch‑lightning およびその他の PyTorch エコシステムツールと良好に連携します。
なぜ重要か – モデルが訓練分布とは異なるデータを扱っているかどうかを検出することは、ビジョンシステム、医療 AI、自律エージェントなどにおいて、基本的なセキュリティ課題です。文献から各手法を個別に実装するのは面倒です。pytorch‑ood は、古典的な Softmax ベースラインから最近の Energy-based および Transformer-based 検出器まで、30 以上の公開手法をカバーする、単一で信頼性の高い API を提供します。
🎯 コア機能(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)のダウンロードヘルパー、および文献で使用された正確な前処理パイプラインの取得。 |
| ユーティリティ | AUROC、AUPR、FPR@95TPR などを計算するための OODMetrics;高速なベンチマーク実行のためのログits/特徴量のキャッシュ;torchmetrics、pandas、scikit-learn、segmentation-models-pytorch とのオプション統合。 |
| 互換性 | プレーン PyTorch、pytorch-lightning、セグメンテーションライブラリと互換;迅速な実験用 Binder デモノートブックを提供。 |
🛠️ インストール
pip install pytorch-ood
必須依存関係:torch、torchvision、scipy、torchmetrics。
オプションの追加機能(必要に応じてインストール):
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 サイツで多数の検出器を自動的に中間特徴量をキャッシュしながら評価できます。
📚 ドキュメントとサポート
- 完全なドキュメント: https://pytorch-ood.readthedocs.io
- Binder デモノートブック: https://mybinder.org/v2/gh/kkirchheim/pytorch-ood/dev?labpath=notebooks/mnist_binder_demo.ipynb
- リポジトリには、使用に関する質問、バグ報告、貢献用のテンプレートが用意されています。
📖 引用
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 は、最小限のボイラープレートで、あらゆる PyTorch モデルに多数の OOD 検出手法を簡単に統合できる、成熟し、積極的にメンテナンスされているツールボックスです。AI/ML 領域に特化した本格的なソフトウェアプロジェクトであり、カスタマイズされたリストやチュートリアルの集まりではありません。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト