مجموعات عدم اليقين لمصنفات الصور باستخدام التنبؤ المطابق
@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
، وهي مطابقة تمامًا للنتائج الواردة في ورقتنا. يمكنك إعادة إنتاج النتائج عن طريق تنفيذ نصوص بايثون النصية في './experiments/' بعد تثبيت تبعياتنا. بالنسبة للجدول 2، استخدمنا إصدار matched-frequencies
لـ ImageNet-V2.
alpha
، kreg
، lamda
alpha
هو الحد الأقصى لنسبة الأخطاء التي ترغب في تحملها. وبالتالي فإن التغطية المستهدفة هي 1-alpha
. عادة ما تؤدي alpha
الأصغر إلى مجموعات أكبر، لأن التغطية المطلوبة أكثر صرامة.
لقد قمنا بتضمين إجراءين مثاليين لاختيار "kreg" و"lamda". إذا كنت تريد مجموعات ذات حجم صغير، فاضبط 'lamda_criterion='size''. إذا كنت تريد مجموعات ذات تغطية مشروطة تقريبية، فاضبط 'lamda_criterion='adaptiveness''.
رخصة معهد ماساتشوستس للتكنولوجيا