Наборы неопределенностей для классификаторов изображений, использующих конформное предсказание
@article{angelopoulos2020sets,
title={Uncertainty Sets for Image Classifiers using Conformal Prediction},
author={Angelopoulos, Anastasios N and Bates, Stephen and Malik, Jitendra and Jordan, Michael I},
journal={arXiv preprint arXiv:2009.14193},
year={2020}
}
Эта база кода изменяет любой классификатор PyTorch для вывода прогнозного набора , который доказуемо содержит истинный класс с указанной вами вероятностью. Он использует метод под названием «Регуляризованные адаптивные наборы прогнозов» (RAPS), который мы представляем в нашей сопроводительной статье. Эта процедура так же проста и быстра, как и масштабирование Платта, но обеспечивает формальную гарантию покрытия конечной выборки для каждой модели и набора данных.
Примеры наборов прогнозов на Imagenet. мы показываем три примера класса лисицы вместе с наборами прогнозов 95%, созданными нашим методом, чтобы проиллюстрировать, как изменяется размер набора в зависимости от сложности изображения во время тестирования. Мы написали Colab, который позволяет вам исследовать RAPS
и конформную классификацию. Вам не нужно ничего устанавливать для запуска Colab. Блокнот поможет вам построить прогнозные наборы на основе предварительно обученной модели. Вы также можете визуализировать примеры из ImageNet вместе с соответствующими наборами RAPS
и поиграть с параметрами регуляризации.
Вы можете получить доступ к Colab, щелкнув щит ниже.
Если вы хотите использовать наш код в своих проектах и воспроизвести наши эксперименты, мы предоставляем инструменты ниже. Обратите внимание: хотя наша кодовая база не является пакетом, ее легко использовать как пакет, и мы делаем это в блокноте Colab выше.
Из корневого каталога установите зависимости и запустите наш пример, выполнив:
git clone https://github.com/aangelopoulos/conformal-classification
cd conformal-classification
conda env create -f environment.yml
conda activate conformal
python example.py 'path/to/imagenet/val/'
Загляните в example.py
чтобы найти минимальный пример, который изменяет предварительно обученный классификатор для вывода 90% наборов прогнозов.
Если вы хотите использовать нашу кодовую базу в своей модели , сначала поместите это в начало файла:
from conformal.py import *
from utils.py import *
Затем создайте контрольный набор для конформной калибровки, используя следующую строку:
calib, val = random_split(mydataset, [num_calib,total-num_calib])
Наконец, вы можете создать модель
model = ConformalModel(model, calib_loader, alpha=0.1, lamda_criterion='size')
Объект ConformalModel
принимает логический флаг randomized
. Если randomized=True
во время тестирования, наборы не будут рандомизированы. Это приведет к консервативному охвату, но детерминированному поведению.
Объект ConformalModel
принимает второй логический allow_zero_sets
. allow_zero_sets=True
во время тестирования наборы нулевого размера запрещены. Это приведет к консервативному охвату, но не к наборам нулевого размера.
См. обсуждение ниже, чтобы вручную выбрать alpha
, kreg
и lamda
.
Вывод example.py
должен быть:
Begin Platt scaling.
Computing logits for model (only happens once).
100%|███████████████████████████████████████| 79/79 [02:24<00:00, 1.83s/it]
Optimal T=1.1976691484451294
Model calibrated and conformalized! Now evaluate over remaining data.
N: 40000 | Time: 1.686 (2.396) | Cvg@1: 0.766 (0.782) | Cvg@5: 0.969 (0.941) | Cvg@RAPS: 0.891 (0.914) | Size@RAPS: 2.953 (2.982)
Complete!
Значения в скобках являются средними значениями. Предыдущие значения относятся только к самой последней партии. Значения времени в вашей системе будут другими, но остальные числа должны быть точно такими же. Индикатор выполнения может состоять из нескольких строк, если окно терминала маленькое.
Ожидаемые результаты экспериментов хранятся в файле experiments/outputs
и они точно идентичны результатам, представленным в нашей статье. Вы можете воспроизвести результаты, выполнив сценарии Python в «./experiments/» после установки наших зависимостей. Для таблицы 2 мы использовали версию ImageNet-V2 matched-frequencies
.
alpha
, kreg
и lamda
alpha
— это максимальная доля ошибок, которую вы готовы допустить. Таким образом, целевое покрытие составляет 1-alpha
. Меньшая alpha
обычно приводит к увеличению наборов, поскольку желаемое покрытие является более строгим.
Мы включили две оптимальные процедуры для выбора «крега» и «лямды». Если вам нужны наборы небольшого размера, установите «lamda_criterion='size''. Если вам нужны наборы, приближающиеся к условному покрытию, установите «lamda_criterion='adaptiveness».
Лицензия MIT