使用保形預測的影像分類器的不確定性集
@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)的方法,我們在隨附的論文中介紹了該方法。該過程與 Platt 縮放一樣簡單且快速,但為每個模型和資料集提供了正式的有限樣本覆蓋保證。
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
中,它們與我們論文中報告的結果完全相同。安裝我們的依賴項後,您可以透過執行「./experiments/」中的 python 腳本來重現結果。對於表 2,我們使用了 ImageNet-V2 的matched-frequencies
版本。
alpha
、 kreg
和lamda
alpha
是您願意容忍的最大錯誤比例。因此,目標覆蓋範圍為1-alpha
。較小的alpha
通常會導致較大的集合,因為所需的覆蓋範圍更嚴格。
我們提供了兩個挑選“kreg”和“lamda”的最佳程序。如果您想要小尺寸的集合,請設定 'lamda_criterion='size''。如果您想要設定近似條件覆蓋範圍,請設定「lamda_criterion='adaptiveness」。
麻省理工學院許可證