A Library for Out-of-Distribution Detection with PyTorch
Project description
PyTorch-based library to accelerate research in Out-of-Distribution (OOD) Detection, as well as related fields such as Open-Set Recognition, Novelty Detection, Confidence Estimation and Anomaly Detection based on Deep Neural Networks.
This library provides
Objective/Loss Functions
Out-of-Distribution Detection Methods
Datasets
Neural Network Architectures as well as pretrained weights
Useful Utilities
and is designed such that it should integrate seamlessly with frameworks that enable the scaling of model training, like pytorch-lightning.
Installation
The package can be installed via PyPI:
pip install pytorch-ood
Dependencies
torch
torchvision
scipy
torchmetrics
Optional Dependencies
libmr for the OpenMax Detector [1] . The library is currently broken and unlikely to be repaired. You will have to install cython and libmr afterwards manually.
Quick Start
Load model pre-trained on CIFAR-10 with the Energy-Bounded Learning Loss [6], and predict on some dataset data_loader using Energy-based Out-of-Distribution Detection [6], calculating the common OOD detection metrics:
from pytorch_ood.model import WideResNet
from pytorch_ood.detector import EnergyBased
from pytorch_ood.utils import OODMetrics
# Create Neural Network
model = WideResNet(pretrained="er-cifar10-tune").eval().cuda()
# Create detector
detector = EnergyBased(model)
# Evaluate
metrics = OODMetrics()
for x, y in data_loader:
metrics.update(detector(x.cuda()), y)
print(metrics.compute())
Implemented
Detectors :
Detector |
Description |
Year |
Ref |
---|---|---|---|
OpenMax |
Implementation of the OpenMax Layer as proposed in the paper Towards Open Set Deep Networks. |
2016 |
|
Softmax Thresholding |
Implements the Softmax Baseline for OOD and Error detection. |
2017 |
|
ODIN |
ODIN is a preprocessing method for inputs that aims to increase the discriminability of the softmax outputs for In- and Out-of-Distribution data. |
2018 |
|
Mahalanobis |
Implements the Mahalanobis Method. |
2018 |
|
Energy-Based OOD Detection |
Implements the Energy Score of Energy-based Out-of-distribution Detection. |
2020 |
|
Monte Carlo Dropout |
Implements Monte Carlo Dropout. |
2022 |
|
MaxLogit |
Implements the MaxLogit method. |
2022 |
Objective Functions:
Objective Function |
Description |
Year |
Ref |
---|---|---|---|
Objectosphere |
Implementation of the paper Reducing Network Agnostophobia. |
2016 |
|
Center Loss |
Generalized version of the Center Loss from the Paper A Discriminative Feature Learning Approach for Deep Face Recognition. |
2016 |
|
Outlier Exposure |
Implementation of the paper Deep Anomaly Detection With Outlier Exposure. |
2018 |
|
Deep SVDD |
Implementation of the Deep Support Vector Data Description from the paper Deep One-Class Classification. |
2018 |
|
Energy Regularization |
Adds a regularization term to the cross-entropy that aims to increase the energy gap between IN and OOD samples. |
2020 |
|
CAC Loss |
Class Anchor Clustering Loss from Class Anchor Clustering: a Distance-based Loss for Training Open Set Classifiers |
2021 |
|
II Loss |
Implementation of II Loss function from Learning a neural network-based representation for open set recognition. |
2022 |
Image Datasets:
Dataset |
Description |
Year |
Ref |
---|---|---|---|
TinyImages |
The TinyImages dataset is often used as auxiliary OOD training data. However, use is discouraged |
2012 |
|
Textures |
Textures dataset, also known as DTD, often used as OOD Examples |
2013 |
|
FoolingImages |
OOD Images Generated to fool certain Deep Neural Networks |
2014 |
|
TinyImages300k |
A cleaned version of the TinyImages Dataset with 300.000 images, often used as auxiliary OOD training data |
2018 |
|
MNIST-C |
Corrupted version of the MNIST |
2019 |
|
CIFAR10-C |
Corrupted version of the CIFAR 10 |
2019 |
|
CIFAR100-C |
Corrupted version of the CIFAR 100 |
2019 |
|
ImageNet-C |
Corrupted version of the ImageNet |
2019 |
|
ImageNet - A, O, R |
Different Outlier Variants for the ImageNet |
2019 |
|
MVTech-AD |
MVTech-AD |
2021 |
|
StreetHazards |
Anomaly Segmentation Dataset |
2022 |
Text Datasets:
Dataset |
Description |
Year |
Ref |
---|---|---|---|
Multi30k |
Multi-30k dataset, as used by Hendrycks et al. in the OOD baseline paper |
2016 |
|
WikiText2 |
Texts from the wikipedia often used as auxiliary OOD training data |
2016 |
|
WikiText103 |
Texts from the wikipedia often used as auxiliary OOD training data |
2016 |
Citing
pytorch-ood was presented on a CVPR Workshop in 2022. If you use it in a scientific publication, please consider citing:
@InProceedings{kirchheim2022pytorch, author = {Kirchheim, Konstantin and Filax, Marco and Ortmeier, Frank}, title = {PyTorch-OOD: A Library for Out-of-Distribution Detection Based on PyTorch}, booktitle = {Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR) Workshops}, month = {June}, year = {2022}, pages = {4351-4360} }
Contributing
We encourage everyone to contribute to this project by adding implementations of OOD Detection methods, datasets etc, or check the existing implementations for bugs.
License
The code is licensed under Apache 2.0. We have taken care to make sure any third party code included or adapted has compatible (permissive) licenses such as MIT, BSD, etc. The legal implications of using pre-trained models in commercial services are, to our knowledge, not fully understood.
Reference
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
File details
Details for the file pytorch_ood-0.0.11-py3-none-any.whl
.
File metadata
- Download URL: pytorch_ood-0.0.11-py3-none-any.whl
- Upload date:
- Size: 81.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.9.14
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9d7db41f9397234a887bd460585798bf2998667a5179d5eda55b89ec5f03ff56 |
|
MD5 | 01a16504708f3185fada0225cad369bf |
|
BLAKE2b-256 | 490c9851a618fdd3d35b0de64d650df90f92d40d306e2039776240baacd91001 |