
درّب الشبكات العصبية وقُيّمها واستكشفها باستخدام أدوات متانة ضد الهجمات العدائية مدمجة، بما في ذلك هجمات PGD، والتدريب ضد الهجمات العدائية، ونماذج مدربة مسبقًا متينة لأبحاث الرؤية الحاسوبية.
التثبيت عبر pip: pip install robustness
اقرأ الوثائق: https://robustness.readthedocs.io/en/latest/index.html
robustness حزمة أنشأناها (نحن طلاب في MadryLab <http://madry-lab.ml>_)
لجعل تدريب الشبكات العصبية وتقييمها واستكشافها مرنًا وسهلًا.
نستخدمها في جميع مشاريعنا تقريبًا (سواء تضمنت
تدريبًا عدائيًا أم لا!) وستكون اعتمادًا في العديد من
إصداراتنا القادمة من التعليمات البرمجية. من بين المشاريع التي تستخدم المكتبة:
الكود الخاص بـ "Learning Perceptually-Aligned Representations via Adversarial Robustness" <https://github.com/MadryLab/robust_representations>_ (https://arxiv.org/abs/1906.00945)الكود الخاص بـ "Image Synthesis with a Single (Robust) Classifier" <https://github.com/MadryLab/robustness_applications>_ (https://arxiv.org/abs/1906.09453)الكود الخاص بـ "Do Adversarially Robust ImageNet Models Transfer Better?" <https://github.com/microsoft/robust-models-transfer>_ (https://arxiv.org/abs/2007.08489)الكود الخاص بـ "BREEDS: Benchmarks for Subpopulation Shift" <https://github.com/MadryLab/BREEDS-Benchmarks>_ (https://arxiv.org/abs/2008.04859)الكود الخاص بـ "Certified Patch Robustness via Smoothed Vision Transformers." <https://github.com/MadryLab/smoothed-vit>_ (https://arxiv.org/abs/2110.07719)الكود الخاص بـ "Unadversarial Examples: Designing Objects for Robust Vision." <https://github.com/microsoft/unadversarial>_ (https://arxiv.org/abs/2012.12235)نحن نوضح كيفية استخدام المكتبة في مجموعة من الأدلة العملية ومرجع API الخاص بنا. تشمل الوظائف التي توفرها المكتبة:
واجهة CLI <https://robustness.readthedocs.io/en/latest/example_usage/cli_usage.html>. توفر المكتبة أيضًا دعمًا لإضافة
مجموعات بيانات مخصصة <https://robustness.readthedocs.io/en/latest/example_usage/training_lib_part_2.html#training-on-custom-datasets> وبنى معمارية للنماذج <https://robustness.readthedocs.io/en/latest/example_usage/training_lib_part_2.html#training-with-custom-architectures>_... code-block:: bash
python -m robustness.main --dataset cifar --data /path/to/cifar
--adv-train 0 --arch resnet18 --out-dir /logs/checkpoints/dir/
معالجة المدخلات <https://robustness.readthedocs.io/en/latest/example_usage/input_space_manipulation.html>_ باستخدام نماذج متينة (أو قياسية)
نماذج---يشمل ذلك إنشاء أمثلة عدائية، وعكس التمثيلات،
وتصور السمات، وما إلى ذلك. توفر المكتبة مجموعة متنوعة من خيارات
التحسين (مثل الاختيار بين التدرجات الحقيقية/المقدرة، وأساس فورييه/البكسل،
ودوال الخسارة المخصصة، وما إلى ذلك)، ويسهل توسيعها... code-block:: python
import torch as ch from robustness.datasets import CIFAR from robustness.model_utils import make_and_restore_model
ds = CIFAR('/path/to/cifar') model, _ = make_and_restore_model(arch='resnet50', dataset=ds, resume_path='/path/to/model', state_dict_path='model') model.eval() attack_kwargs = { 'constraint': 'inf', # L-inf PGD 'eps': 0.05, # Epsilon constraint (L-inf norm) 'step_size': 0.01, # Learning rate for PGD 'iterations': 100, # Number of PGD steps 'targeted': True # Targeted attack 'custom_loss': None # Use default cross-entropy loss }
_, test_loader = ds.make_loaders(workers=0, batch_size=10) im, label = next(iter(test_loader)) target_label = (label + ch.randint_like(label, high=9)) % 10 adv_out, adv_im = model(im, target_label, make_adv, **attack_kwargs)
robustness كحزمة، مما يتيح سهولة تدريب
الشبكات العصبية مع دعم دوال الخسارة المخصصة، والتسجيل، وتحميل البيانات،
والمزيد! يمكن العثور على مقدمة جيدة في دليلنا العملي المكوّن من جزأين
(الجزء 1 <https://robustness.readthedocs.io/en/latest/example_usage/training_lib_part_1.html>,
الجزء 2 <https://robustness.readthedocs.io/en/latest/example_usage/training_lib_part_2.html>)... code-block:: python
from robustness import model_utils, datasets, train, defaults from robustness.datasets import CIFAR
from cox.utils import Parameters import cox.store
ds = CIFAR('/path/to/cifar') m, _ = model_utils.make_and_restore_model(arch='resnet50', dataset=ds) train_loader, val_loader = ds.make_loaders(batch_size=128, workers=8)
out_store = cox.store.Store(OUT_DIR)
train_kwargs = { 'out_dir': "train_out", 'adv_train': 1, 'constraint': '2', 'eps': 0.5, 'attack_lr': 1.5, 'attack_steps': 20 } train_args = Parameters(train_kwargs)
train_args = defaults.check_and_fill_args(train_args, defaults.TRAINING_ARGS, CIFAR) train_args = defaults.check_and_fill_args(train_args, defaults.PGD_ARGS, CIFAR)
train.train_model(train_args, m, (train_loader, val_loader), store=out_store)
ملاحظة: تتطلب robustness تثبيت PyTorch مع دعم CUDA.
إلى جانب كود التدريب، نُصدر عددًا من النماذج المدربة مسبقًا لمجموعات بيانات ومعايير وقيم ε-train مختلفة. سيتم تحديث هذه القائمة كلما أصدرنا نماذج أكثر أو محسّنة. يرجى الاستشهاد بهذه المكتبة (انظر إدخال bibtex أدناه) إذا استخدمت هذه النماذج في أبحاثك.
لكل مجموعة (نموذج، ε-test) نقوم بتقييم PGD بخطوات 20 و100 خطوة بحجم
خطوة قدره 2.5 * ε-test / num_steps. نظرًا لأن هاتين الدقتين متقاربتان
جدًا من بعضهما البعض، فإننا لا نأخذ في الاعتبار المزيد من خطوات PGD.
لكل قيمة ε-test، نبرز أفضل دقة متينة تم تحقيقها عبر
قيم ε-train مختلفة بالخط العريض.
ملاحظة #1: لم نقم بأي ضبط لفرط المعلمات (hyperparameters) واستخدمنا ببساطة نفس فرط المعلمات المستخدمة في التدريب القياسي. من المحتمل أن استكشاف فرط معلمات تدريب مختلفة سيزيد هذه الدقة المتينة ببضع نقاط مئوية.
ملاحظة #2: تم حفظ ملفات نقاط تفتيش pytorch (.pt) أدناه باستخدام الإصدارات التالية من PyTorch و Dill:
.. code-block::
torch==1.1.0 dill==0.2.9
CIFAR10 معيار L2 (ResNet50):
ε = 0.0 <https://www.dropbox.com/s/yhpp4yws7sgi6lj/cifar_nat.pt?dl=0>_ (تدريب قياسي)ε = 0.25 <https://www.dropbox.com/s/2qsp7pt6t7uo71w/cifar_l2_0_25.pt?dl=0>_ε = 0.5 <https://www.dropbox.com/s/1zazwjfzee7c8i4/cifar_l2_0_5.pt?dl=0>_ε = 1.0 <https://www.dropbox.com/s/s2x7thisiqxz095/cifar_l2_1_0.pt?dl=0>_+--------------+----------------+-----------------+---------------------+---------------------+ | دقة CIFAR10 المتينة وفق L2 | +--------------+----------------+-----------------+---------------------+---------------------+ | | ε-train | +--------------+----------------+-----------------+---------------------+---------------------+ | ε-test | 0.0 | 0.25 | 0.5 | 1.0 | +==============+================+=================+=====================+=====================+ | 0.0 | 95.25% / - | 92.77% / - | 90.83% / - | 81.62% / - | +--------------+----------------+-----------------+---------------------+---------------------+ | 0.25 | 8.66% / 7.34% | 81.21% / 81.19% | 82.34% / 82.31% | 75.53% / 75.53% | +--------------+----------------+-----------------+---------------------+---------------------+ | 0.5 | 0.28% / 0.14% | 62.30% / 62.13% | 70.17% / 70.11% | 68.63% / 68.61% | +--------------+----------------+-----------------+---------------------+---------------------+ | 1.0 | 0.00% / 0.00% | 21.18% / 20.66% | 40.47% / 40.22% | 52.72% / 52.61% | +--------------+----------------+-----------------+---------------------+---------------------+ | 2.0 | 0.00% / 0.00% | 0.58% / 0.46% | 5.23% / 4.97% | 18.59% / 18.05% | +--------------+----------------+-----------------+---------------------+---------------------+
CIFAR10 معيار Linf (ResNet50):
ε = 8/255 <https://www.dropbox.com/s/c9qlt1lbdnu9tlo/cifar_linf_8.pt?dl=0>_+--------------+-----------------+---------------------+ | دقة CIFAR10 المتينة وفق Linf | +--------------+-----------------+---------------------+ | | ε-train | +--------------+-----------------+---------------------+ | ε-test | 0 / 255 | 8 / 255 | +==============+=================+=====================+ | 0 / 255 | 95.25% / - | 87.03% / - | +--------------+-----------------+---------------------+ | 8 / 255 | 0.00% / 0.00% | 53.49% / 53.29% | +--------------+-----------------+---------------------+ | 16 / 255 | 0.00% / 0.00% | 18.13% / 17.62% | +--------------+-----------------+---------------------+
ImageNet معيار L2 (ResNet50):
ε = 3.0 <https://www.dropbox.com/s/knf4uimlqsi1yz8/imagenet_l2_3_0.pt?dl=0>_+--------------+-----------------+---------------------+ | دقة ImageNet المتينة وفق L2 | +--------------+-----------------+---------------------+ | | ε-train | +--------------+-----------------+---------------------+ | ε-test | 0.0 | 3.0 | +==============+=================+=====================+ | 0.0 | 76.13% / - | 57.90% / - | +--------------+-----------------+---------------------+ | 0.5 | 3.35% / 2.98% | 54.42% / 54.42% | +--------------+-----------------+---------------------+ | 1.0 | 0.44% / 0.37% | 50.67% / 50.67% | +--------------+-----------------+---------------------+ | 2.0 | 0.16% / 0.14% | 43.04% / 43.02% | +--------------+-----------------+---------------------+ | 3.0 | 0.13% / 0.12% | 35.16% / 35.09% | +--------------+-----------------+---------------------+
ImageNet معيار Linf (ResNet50):
ε = 4 / 255 <https://www.dropbox.com/s/axfuary2w1cnyrg/imagenet_linf_4.pt?dl=0>_ε = 8 / 255 <https://www.dropbox.com/s/yxn15a9zklz3s8q/imagenet_linf_8.pt?dl=0>_+--------------+-----------------+---------------------+---------------------+ | دقة ImageNet المتينة وفق Linf | +--------------+-----------------+---------------------+---------------------+ | | ε-train | +--------------+-----------------+---------------------+---------------------+ | ε-test | 0.0 | 4 / 255 | 8 / 255 | +==============+=================+=====================+=====================+ | 0 / 255 | 76.13% / - | 62.42% / - | 47.91% / - | +--------------+-----------------+---------------------+---------------------+ | 4 / 255 | 0.04% / 0.03% | 33.58% / 33.38% | 33.06% / 33.03% | +--------------+-----------------+---------------------+---------------------+ | 8 / 255 | 0.01% / 0.01% | 13.13% / 12.73% | 19.63% / 19.52% | +--------------+-----------------+---------------------+---------------------+ | 16 / 255 | 0.01% / 0.01% | 1.53% / 1.37% | 5.00% / 4.82% | +--------------+-----------------+---------------------+---------------------+
إذا استخدمت هذه المكتبة في أبحاثك، فاستشهد بها على النحو التالي:
.. code-block:: bibtex
@misc{robustness, title={Robustness (Python Library)}, author={Logan Engstrom and Andrew Ilyas and Hadi Salman and Shibani Santurkar and Dimitris Tsipras}, year={2019}, url={https://github.com/MadryLab/robustness} }
(هل استخدمت الحزمة ووجدتها مفيدة؟ أخبرنا!).
Andrew Ilyas <https://twitter.com/andrew_ilyas>_Logan Engstrom <https://twitter.com/logan_engstrom>_Shibani Santurkar <https://twitter.com/ShibaniSan>_Dimitris Tsipras <https://twitter.com/tsiprasd>_Hadi Salman <https://twitter.com/hadisalmanX>_المساهمون/المُلتزمون '''''''''''''''''''''''
هنا <https://github.com/MadryLab/robustness/pulse>_