Skip to main content

FailCatcher

FailCatcher is a uncertainty quantification (UQ) toolkit for PyTorch classification deep learning models, developed and benchmarked on medical imaging datasets from the MedMNIST collection and external test sets. Failure detection benchmark results can be found in the benchmarks README.

Preprint: Steinmetz et al., medRxiv 2026 — DOI: 10.64898/2026.05.04.26350496

pip install FailCatcher

The project provides:

  • A reusable Python library (ToolBox/) implementing uncertainty quantification methods for pytorch classification models.
  • A full benchmarking pipeline (Benchmarks/), including model training, classification evaluation and failure detection evaluation on a diverse set of distribution shifts images.

Repository structure

FailCatcher/
├── ToolBox/                        # UQ library (installable Python package)
│   ├── failure_detection.py        # High-level FailureDetector API
│   ├── UQ_toolbox.py               # Public API aggregator
│   ├── core/                       # Base classes and shared inference utilities
│   ├── methods/                    # UQ method implementations
│   │   ├── tta.py                  # Test-Time Augmentation (TTA) and GPS
│   │   ├── ensemble.py             # Ensemble STD and MC Dropout
│   │   ├── distance.py             # MSR, MLS, and calibration methods
│   │   └── latent.py               # KNN and SHAP latent-space methods
│   ├── search/                     # Greedy Policy Search (GPS) algorithm
│   ├── evaluation/                 # AUROC, AURC, AUGRC metrics and plots
│   ├── visualization/              # Visualization utilities
│   └── tests/                      # Smoke tests and pre-run checks
│
├── Benchmarks/
│   └── medMNIST/
│       ├── launcher_benchmark.py   # Top-level benchmark launcher
│       ├── run_medmnist_benchmark.py # Core benchmark runner (single config)
│       ├── trainings/              # Model training scripts and launchers
│       ├── utils/                  # Data loading, preprocessing, visualization
│       │   ├── train_models_load_datasets.py  # Central data/model utilities
│       │   ├── dataset_utils.py               # External datasets, corruptions
│       │   └── data_preprocessing_classification_evaluation/
│       ├── data/                   # External test datasets (AMOS-2022, MIDOG++, ISIC)
│       ├── models/                 # Trained model checkpoints
│       ├── runs/                   # Training logs and per-run artifacts
│       └── results/                # Benchmark outputs (JSON, figures, cache)
│
└── requirements.txt

Quick start

1. Install

pip install FailCatcher

For development (editable install from source):

git clone https://github.com/pstnmz/FailCatcher && pip install -e FailCatcher/

2. Quick-start tutorial

See tutorial.ipynb for a self-contained end-to-end example on CIFAR-10:
download a model from HuggingFace → inference → MSR uncertainty → AUROC-f / AURC / AUGRC → plots.

3. Download models and datasets from HuggingFace

Pre-trained model checkpoints and pre-processed external datasets are available on HuggingFace. Run the one-command setup to skip training and manual preprocessing:

python scripts/setup_from_hub.py

You can download models or datasets independently:

python scripts/setup_from_hub.py --models-only
python scripts/setup_from_hub.py --datasets-only --datasets amos22 midog dermamnist-e

4. Train models (alternative to step 3)

See Benchmarks/README.md for the full reproducible training and benchmarking pipeline.

5. Run the benchmark

python Benchmarks/medMNIST/launcher_benchmark.py \
    --python /path/to/your/venv/bin/python \
    --datasets breastmnist organamnist \
    --models resnet18 \
    --setups "" DA \
    --gpu 0

UQ methods

Method Description
MSR Maximum Softmax Response — distance between predicted probability and 1
MSR-calibrated MSR after temperature / Platt scaling calibration
MLS Maximum Logit Score — pre-softmax equivalent of MSR
Ensembling Standard deviation across 5-fold CV model predictions
TTA Test-Time Augmentation — std over random augmentation passes
GPS Greedy Policy Search — optimised TTA policy found on the calibration set
KNN-Raw k-NN distance in avgpool latent space
KNN-SHAP KNN with SHAP-weighted latent features
MC Dropout Monte Carlo Dropout at inference time
ZScore Aggregation Z-score normalised aggregation of multiple methods

Datasets

Internal test sets (MedMNIST)

breastmnist, pneumoniamnist, organamnist, octmnist, pathmnist, bloodmnist, tissuemnist, dermamnist-e

External test sets (not in git — see Benchmarks/README.md for setup)

  • AMOS-2022 — abdominal CT organ patches mapped to OrganaMNIST classes. Available on HuggingFace or preprocessed via data/AMOS_2022/read_npz.ipynb.
  • MIDOG++ — mitosis detection histology patches as OOD test for PathMNIST. Available on HuggingFace or generated by utils/data_preprocessing_classification_evaluation/create_midog_patch_dataset.py.
  • DermaMNIST-E — extended DermaMNIST with ID and external centre splits. Available on HuggingFace or downloaded from Zenodo, loaded by utils/data_preprocessing_classification_evaluation/local_dermamnist_e.py.

Reproducibility

All benchmark results are reproducible from scratch:

  • Random seeds fixed to 42 everywhere (training, CV splits, TTA).
  • 5-fold StratifiedKFold CV with seed=42 is consistent between training and inference.
  • Model checkpoints, result JSONs, and caches are saved with configuration-specific suffixes.
  • See Benchmarks/README.md for step-by-step instructions.

Python version and environment

Tested with Python 3.12 and the following key packages:

Package Version
torch 2.6.0
torchvision 0.21.0
numpy 2.1.3
scikit-learn 1.6.1
monai 1.5.1
medmnist 3.0.1
shap 0.46.0
matplotlib 3.10.0
seaborn 0.13.2

License

This project is licensed under CC BY-NC-SA 4.0.

The code is intended for research and academic use only. Commercial use is prohibited.

For commercial use, please contact the author.

Release files for FailCatcher 2.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for FailCatcher 2.0.1
File Size Uploaded
failcatcher-2.0.1.tar.gz 85.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for FailCatcher 2.0.1
File Interpreter ABI Platform
failcatcher-2.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 174.8 kB

Release files / failcatcher-2.0.1.tar.gz

Download URL failcatcher-2.0.1.tar.gz
Size 85.1 kB
Tags Source
SHA-256 checksum
How to use checksums
5994dc70f10f857d6d0d1819a4f3a68143ee24274c4da7073c23ab63522b79b3
BLAKE2b-256 checksum
How to use checksums
3b52671f085f4c1f0efd6b91dd17399fdb368d33249915ef8fc3360cdfbcc7c8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.13

Release files / failcatcher-2.0.1-py3-none-any.whl

Download URL failcatcher-2.0.1-py3-none-any.whl
Size 89.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
bb6aa9050dede60362ebd8471ad5b6bea315ea782f69bcf4d5640a8b56647a85
BLAKE2b-256 checksum
How to use checksums
c28bae845324a917b757107f72b6994c41c30ffbce83c63f08d0efe0b0d4436c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.13

Release history Release notifications | RSS feed

This release

2.0.1 This release

2 release files

2.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page