等角予測を使用した画像分類器の不確実性セット
@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 の予測セットの例。クラスキツネリスの 3 つの例と、私たちの方法で生成された 95% 予測セットを示し、テスト時の画像の難易度に基づいてセット サイズがどのように変化するかを示します。私たちは、 RAPS
と等角分類を探索できる Colab を作成しました。 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
オブジェクトは 2 番目のブール フラグallow_zero_sets
を受け取ります。 allow_zero_sets=True
の場合、テスト時にサイズ 0 のセットは許可されません。これにより、保守的なカバレッジが得られますが、ゼロサイズのセットは得られません。
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」を選択するための 2 つの最適な手順が含まれています。小さいサイズのセットが必要な場合は、「lamda_criterion='size」を設定します。条件付きカバレッジに近いセットが必要な場合は、「lamda_criterion='adaptiveness」を設定します。
MITライセンス