Kumpulan Ketidakpastian untuk Pengklasifikasi Gambar menggunakan Prediksi Konformal
@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}
}
Basis kode ini memodifikasi pengklasifikasi PyTorch apa pun untuk menghasilkan kumpulan prediktif yang terbukti berisi kelas sebenarnya dengan probabilitas yang Anda tentukan. Ini menggunakan metode yang disebut Regularized Adaptive Prediction Sets (RAPS), yang kami perkenalkan dalam makalah pendamping kami. Prosedurnya sederhana dan cepat seperti penskalaan Platt, namun memberikan jaminan cakupan sampel terbatas formal untuk setiap model dan kumpulan data.
Contoh kumpulan prediksi di Imagenet. kami menunjukkan tiga contoh kelas tupai rubah bersama dengan 95% kumpulan prediksi yang dihasilkan oleh metode kami untuk mengilustrasikan bagaimana ukuran kumpulan berubah berdasarkan tingkat kesulitan gambar waktu pengujian. Kami telah menulis Colab yang memungkinkan Anda menjelajahi RAPS
dan klasifikasi konformal. Anda tidak perlu memasang apa pun untuk menjalankan Colab. Buku catatan ini akan memandu Anda dalam membuat kumpulan prediktif dari model yang telah dilatih sebelumnya. Anda juga dapat memvisualisasikan contoh dari ImageNet beserta kumpulan RAPS
yang sesuai dan bermain dengan parameter regularisasi.
Anda dapat mengakses Colab dengan mengklik perisai di bawah.
Jika Anda ingin menggunakan kode kami dalam proyek Anda sendiri dan mereproduksi eksperimen kami, kami menyediakan alat di bawah ini. Perhatikan bahwa meskipun basis kode kita bukan sebuah paket, mudah untuk menggunakannya seperti sebuah paket, dan kita melakukannya di notebook Colab di atas.
Dari direktori root, instal dependensi dan jalankan contoh kita dengan mengeksekusi:
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/'
Lihat ke dalam example.py
untuk contoh minimal yang memodifikasi pengklasifikasi terlatih untuk menghasilkan 90% kumpulan prediksi.
Jika Anda ingin menggunakan basis kode kami pada model Anda sendiri , letakkan ini terlebih dahulu di bagian atas file Anda:
from conformal.py import *
from utils.py import *
Kemudian buat set ketidaksepakatan untuk kalibrasi konformal menggunakan garis seperti:
calib, val = random_split(mydataset, [num_calib,total-num_calib])
Terakhir, Anda dapat membuat modelnya
model = ConformalModel(model, calib_loader, alpha=0.1, lamda_criterion='size')
Objek ConformalModel
mengambil bendera boolean randomized
. Ketika randomized=True
, pada waktu pengujian, set tidak akan diacak. Hal ini akan mengarah pada pemberitaan yang konservatif, namun berperilaku deterministik.
Objek ConformalModel
mengambil tanda boolean kedua allow_zero_sets
. Ketikaallow_zero_sets allow_zero_sets=True
, pada waktu pengujian, set ukuran nol tidak diizinkan. Hal ini akan menghasilkan cakupan yang konservatif, namun tidak ada zero-size set.
Lihat pembahasan di bawah untuk memilih alpha
, kreg
, dan lamda
secara manual.
Output dari example.py
seharusnya:
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!
Nilai dalam tanda kurung adalah rata-rata berjalan. Nilai sebelumnya hanya untuk kumpulan terbaru. Nilai waktunya akan berbeda di sistem Anda, namun angka lainnya harus sama persis. Bilah kemajuan mungkin mencetak banyak baris jika jendela terminal Anda kecil.
Keluaran percobaan yang diharapkan disimpan dalam experiments/outputs
, dan hasilnya sama persis dengan hasil yang dilaporkan dalam makalah kami. Anda dapat mereproduksi hasilnya dengan menjalankan skrip python di './experiments/' setelah Anda menginstal dependensi kami. Untuk Tabel 2, kami menggunakan versi ImageNet-V2 matched-frequencies
.
alpha
, kreg
, dan lamda
alpha
adalah proporsi kesalahan maksimum yang dapat Anda toleransi. Oleh karena itu, cakupan targetnya adalah 1-alpha
. alpha
yang lebih kecil biasanya akan menghasilkan kumpulan yang lebih besar, karena cakupan yang diinginkan lebih ketat.
Kami telah menyertakan dua prosedur optimal untuk memilih 'kreg' dan 'lamda'. Jika Anda ingin set dengan ukuran kecil, setel 'lamda_criterion='size''. Jika Anda ingin menetapkan perkiraan cakupan bersyarat, tetapkan 'lamda_criterion='adaptiveness''.
Lisensi MIT