Conjuntos de incertidumbre para clasificadores de imágenes que utilizan predicción conforme
@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}
}
Esta base de código modifica cualquier clasificador de PyTorch para generar un conjunto predictivo que probablemente contenga la clase verdadera con una probabilidad que usted especifique. Utiliza un método llamado Conjuntos de predicción adaptativos regularizados (RAPS), que presentamos en el artículo adjunto. El procedimiento es tan simple y rápido como el escalado de Platt, pero proporciona una garantía formal de cobertura de muestra finita para cada modelo y conjunto de datos.
Ejemplos de conjuntos de predicción en Imagenet. Mostramos tres ejemplos de la clase ardilla zorro junto con conjuntos de predicción del 95% generados por nuestro método para ilustrar cómo cambia el tamaño del conjunto según la dificultad de una imagen en el momento de la prueba. Hemos escrito un Colab que le permite explorar RAPS
y la clasificación conforme. No es necesario instalar nada para ejecutar Colab. El cuaderno le guiará en la construcción de conjuntos predictivos a partir de un modelo previamente entrenado. También puede visualizar ejemplos de ImageNet junto con sus correspondientes conjuntos RAPS
y jugar con los parámetros de regularización.
Puede acceder a Colab haciendo clic en el escudo a continuación.
Si desea utilizar nuestro código en sus propios proyectos y reproducir nuestros experimentos, le proporcionamos las herramientas a continuación. Tenga en cuenta que, aunque nuestro código base no es un paquete, es fácil usarlo como un paquete, y lo hacemos en el cuaderno de Colab anterior.
Desde el directorio raíz, instale las dependencias y ejecute nuestro ejemplo ejecutando:
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/'
Mire dentro de example.py
para ver un ejemplo mínimo que modifica un clasificador previamente entrenado para generar conjuntos de predicción del 90%.
Si desea utilizar nuestro código base en su propio modelo , primero coloque esto en la parte superior de su archivo:
from conformal.py import *
from utils.py import *
Luego cree un conjunto de reserva para la calibración conforme usando una línea como:
calib, val = random_split(mydataset, [num_calib,total-num_calib])
Finalmente, puedes crear el modelo.
model = ConformalModel(model, calib_loader, alpha=0.1, lamda_criterion='size')
El objeto ConformalModel
toma un indicador booleano randomized
. Cuando randomized=True
, en el momento de la prueba, los conjuntos no serán aleatorios. Esto conducirá a una cobertura conservadora, pero a un comportamiento determinista.
El objeto ConformalModel
toma un segundo indicador booleano allow_zero_sets
. Cuando allow_zero_sets=True
, en el momento de la prueba, no se permiten conjuntos de tamaño cero. Esto conducirá a una cobertura conservadora, pero no a conjuntos de tamaño cero.
Consulte la discusión a continuación para seleccionar alpha
, kreg
y lamda
manualmente.
La salida de example.py
debería ser:
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!
Los valores entre paréntesis son promedios móviles. Los valores anteriores son solo para el lote más reciente. Los valores de tiempo serán diferentes en su sistema, pero el resto de los números deberían ser exactamente iguales. La barra de progreso puede imprimirse en muchas líneas si la ventana de su terminal es pequeña.
Los resultados esperados de los experimentos se almacenan en experiments/outputs
y son exactamente idénticos a los resultados informados en nuestro artículo. Puede reproducir los resultados ejecutando los scripts de Python en './experiments/' después de haber instalado nuestras dependencias. Para la Tabla 2, utilizamos la versión matched-frequencies
de ImageNet-V2.
alpha
, kreg
y lamda
alpha
es la proporción máxima de errores que está dispuesto a tolerar. Por tanto, la cobertura objetivo es 1-alpha
. Un alpha
más pequeño normalmente conducirá a conjuntos más grandes, ya que la cobertura deseada es más estricta.
Hemos incluido dos procedimientos óptimos para seleccionar 'kreg' y 'lamda'. Si desea conjuntos de tamaño pequeño, establezca 'lamda_criterion='size''. Si desea conjuntos que se aproximen a la cobertura condicional, establezca 'lamda_criterion='adaptiveness'.
Licencia MIT