Torchattacks - это библиотека Pytorch, которая обеспечивает состязательные атаки для создания состязательных примеров.
Он содержит Pytorch, похожий на интерфейс и функции, которые облегчают пользователям Pytorch в реализацию состязательных атак.
import torchattacks
atk = torchattacks . PGD ( model , eps = 8 / 255 , alpha = 2 / 255 , steps = 4 )
# If inputs were normalized, then
# atk.set_normalization_used(mean=[...], std=[...])
adv_images = atk ( images , labels )Дополнительные рекомендуемые пакеты .
Цитирование. Если вы используете этот пакет, указать следующий Bibtex (Googlescholar):
@article{kim2020torchattacks,
title={Torchattacks: A pytorch repository for adversarial attacks},
author={Kim, Hoki},
journal={arXiv preprint arXiv:2010.01950},
year={2020}
}
Требования
Установка
# pip
pip install torchattacks
# source
pip install git+https://github.com/Harry24k/adversarial-attacks-pytorch.git
# git clone
git clone https://github.com/Harry24k/adversarial-attacks-pytorch.git
cd adversarial-attacks-pytorch/
pip install -e .
Меры предосторожности
(N, C) , где C = number of classes . Принимая во внимание большинство моделей в Torchvision.Models возвращают один вектор (N,C) , где N - количество входов, а C - это тогдашние классы, Torchattacks также поддерживает только ограниченные формы вывода. Пожалуйста, внимательно проверьте форму вывода модели.torch.backends.cudnn.deterministic = True чтобы получить те же самые состязательные примеры с фиксированными случайными семенами . Некоторые операции являются не определенными с тензорами для поплавки на графическом процессоре [обсудить]. Если вы хотите получить те же результаты с теми же входом, пожалуйста, запустите torch.backends.cudnn.deterministic = True [ref].Демо
Целевой режим
# random labels as target labels.
atk . set_mode_targeted_random () # labels with the k-th smallest probability as target labels.
atk . set_mode_targeted_least_likely ( kth_min ) # labels obtained by mapping function as target labels.
# shift all class loops one to the right, 1=>2, 2=>3, .., 9=>0
atk . set_mode_targeted_by_function ( target_map_function = lambda images , labels :( labels + 1 ) % 10 ) atk . set_mode_targeted_by_label ( quiet = True )
# shift all class loops one to the right, 1=>2, 2=>3, .., 9=>0
target_labels = ( labels + 1 ) % 10
adv_images = atk ( images , target_labels ) atk . set_mode_default ()Сохранить состязательные изображения
# Save
atk . save ( data_loader , save_path = "./data.pt" , verbose = True )
# Load
adv_loader = atk . load ( load_path = "./data.pt" )Обучение/Оценка во время атаки
# For RNN-based models, we cannot calculate gradients with eval mode.
# Thus, it should be changed to the training mode during the attack.
atk . set_model_training_mode ( model_training = False , batchnorm_training = False , dropout_training = False )Делать набор атак
atk1 = torchattacks . FGSM ( model , eps = 8 / 255 )
atk2 = torchattacks . PGD ( model , eps = 8 / 255 , alpha = 2 / 255 , iters = 40 , random_start = True )
atk = torchattacks . MultiAttack ([ atk1 , atk2 ]) atk1 = torchattacks . CW ( model , c = 0.1 , steps = 1000 , lr = 0.01 )
atk2 = torchattacks . CW ( model , c = 1 , steps = 1000 , lr = 0.01 )
atk = torchattacks . MultiAttack ([ atk1 , atk2 ]) atk1 = torchattacks . PGD ( model , eps = 8 / 255 , alpha = 2 / 255 , iters = 40 , random_start = True )
atk2 = torchattacks . PGD ( model , eps = 8 / 255 , alpha = 2 / 255 , iters = 40 , random_start = True )
atk = torchattacks . MultiAttack ([ atk1 , atk2 ])Мера расстояния в скобках.
| Имя | Бумага | Примечание |
|---|---|---|
| FGSM (Линф) | Объяснение и использование состязательных примеров (Goodfellow et al., 2014) | |
| Бимм (Линф) | Состязательные примеры в физическом мире (Kurakin et al., 2016) | Основной итеративный метод или итеративный FSGM |
| CW (L2) | К оценке надежности нейронных сетей (Carlini et al., 2016) | |
| RFGSM (Линф) | Ансамблевое состязательное транзинг: атаки и защита (Tramèr et al., 2017) | Случайная инициализация + FGSM |
| Pgd (Линф) | На пути к моделям глубокого обучения, устойчивыми к состязательным атакам (Marrry et al., 2017) | Прогнозируемый метод градиента |
| Pgdl2 (L2) | На пути к моделям глубокого обучения, устойчивыми к состязательным атакам (Marrry et al., 2017) | Прогнозируемый метод градиента |
| Mifgsm (Линф) | Увеличение состязательных атак с импульсом (Dong et al., 2017) | ? Автор Zhuangzi926, Huitailangyz |
| TPGD (Линф) | Теоретически принципиальный компромисс между надежностью и точностью (Zhang et al., 2019) | |
| Eotpgd (Линф) | Комментарий к «Adv-Bnn: улучшенная состязательная защита через мощную байесовскую нейронную сеть» (Zimmermann, 2019) | EOT+PGD |
| Apgd (Linf, L2) | Надежная оценка состязательной надежности с помощью ансамбля разнообразных атак без параметров (Croce et al., 2020) | |
| Apgdt (Linf, L2) | Надежная оценка состязательной надежности с помощью ансамбля разнообразных атак без параметров (Croce et al., 2020) | Целевой APGD |
| Ткани (Linf, L2, L1) | Минимально искаженные примеры состязания с быстрой адаптивной граничной атакой (Croce et al., 2019) | |
| Квадрат (Linf, L2) | Квадратная атака: запрашиваемая запрашиваемая адвокатская атака черного ящика посредством случайного поиска (Andriushchenko et al., 2019) | |
| Autoattack (Linf, L2) | Надежная оценка состязательной надежности с помощью ансамбля разнообразных атак без параметров (Croce et al., 2020) | Apgd+apgdt+fab+square |
| Deepfool (L2) | Deepfool: простой и точный метод, чтобы обмануть глубокие нейронные сети (Moosavi-Dezfooli et al., 2016) | |
| OnePixel (L0) | Одна атака пикселей за дурачение глубоких нейронных сетей (Su et al., 2019) | |
| Sparsefool (L0) | Sparsefool: несколько пикселей имеют большое значение (Modas et al., 2019) | |
| Difgsm (Линф) | Улучшение переносимости состязательных примеров с разнообразием ввода (Xie et al., 2019) | ? Автор Таобай |
| Тифгсм (Линф) | Уклонение от обороны передаваемым состязательным примерам путем перевода-инвариантных атак (Dong et al., 2019) | ? Автор Таобай |
| Nifgsm (Линф) | Ускоренный градиент и масштабная инвариантность для борьбы с ускоренными атаками (Lin, et al., 2022) | ? Автор Жиджин-Ге |
| Sinifgsm (Линф) | Ускоренный градиент и масштабная инвариантность для борьбы с ускоренными атаками (Lin, et al., 2022) | ? Автор Жиджин-Ге |
| Vmifgsm (Линф) | Увеличение передачи оттенка приступов посредством настройки дисперсии (Wang, et al., 2022) | ? Автор Жиджин-Ге |
| Vnifgsm (Линф) | Увеличение передачи оттенка приступов посредством настройки дисперсии (Wang, et al., 2022) | ? Автор Жиджин-Ге |
| Джанитер (Линф) | Изучение неправильных классификаций надежных нейронных сетей для усиления состязательных атак (Schwinn, Leo, et al., 2021) | |
| Пикл (L0) | Pixle: быстрая и эффективная атака черной коробки на основе перестановки пикселей (Pomponi, Jary, et al., 2022) | |
| LGV (Linf, L2, L1, L0) | LGV: повышение передачи примера примера от большой геометрической окрестности (Gubri, et al., 2022) | ? Автор Мартин Губри |
| SPSA (Линф) | Адверсенный риск и опасности оценки с слабыми атаками (Uesato, Jonathan, et al., 2018) | ? Автор Рико Нака |
| JSMA (L0) | Ограничения глубокого обучения в состязательных условиях (Papernot, Nicolas, et al., 2016) | ? Автор Рико Нака |
| Eadl1 (L1) | EAD: Эластичная сеть атаки на глубокие нейронные сети (Chen, Pin-Yu, et al., 2018) | ? Автор Рико Нака |
| Иаден (L1, L2) | EAD: Эластичная сеть атаки на глубокие нейронные сети (Chen, Pin-Yu, et al., 2018) | ? Автор Рико Нака |
| Pifgsm (PIM) (Линф) | Патч-атака за дурачение глубокой нейронной сети (Gao, Lianli, et al., 2020) | ? Автор Рико Нака |
| Pifgsm ++ (pim ++) (Линф) | Патч-мимо ++ возмущение для состязательных целевых атак (Gao, Lianli, et al., 2021) | ? Автор Рико Нака |
Что касается пакетов сравнения, в настоящее время обновляются и были выбраны наиболее цитируемые методы:
Надежная точность против каждой атаки и прошло время на первых 50 изображениях CIFAR10. Для атак L2 средние расстояния L2 между состязательными изображениями и исходными изображениями записываются. Все эксперименты были проведены на GeForce RTX 2080. Для последней версии, пожалуйста, см. Здесь (Code, NBViewer).
| Атака | Упаковка | Стандартный | Wong2020Fast | Rice20202020202020202020202020202020202 | Примечание |
|---|---|---|---|---|---|
| FGSM (LINF) | Торхатты | 34% (54 мс) | 48% (5 мс) | 62% (82 мс) | |
| Pourtbox * | 34% (15 мс) | 48% (8 мс) | 62% (30 мс) | ||
| ИСКУССТВО | 34% (214 мс) | 48% (59 мс) | 62% (768 мс) | ||
| PGD (LINF) | Торхатты | 0% (174 мс) | 44% (52 мс) | 58% (1348 мс) | ? Самый быстрый |
| Pourtbox * | 0% (354 мс) | 44% (56 мс) | 58% (1856 мс) | ||
| ИСКУССТВО | 0% (1384 мс) | 44% (437 мс) | 58% (4704 мс) | ||
| CW † (L2) | Торхатты | 0% / 0,40 (2596 мс) | 14% / 0,61 (3795 мс) | 22% / 0,56 (43484 мс) | ? Самый высокий уровень успеха ? Самый быстрый |
| Pourtbox * | 0% / 0,40 (2668 мс) | 32% / 0,41 (3928 мс) | 34% / 0,43 (44418 мс) | ||
| ИСКУССТВО | 0% / 0,59 (196738ms) | 24% / 0,70 (66067 мс) | 26% / 0,65 (694972 мс) | ||
| PGD (L2) | Торхатты | 0% / 0,41 (184 мс) | 68% / 0,5 (52 мс) | 70% / 0,5 (1377 мс) | ? Самый быстрый |
| Pourtbox * | 0% / 0,41 (396 мс) | 68% / 0,5 (57 мс) | 70% / 0,5 (1968ms) | ||
| ИСКУССТВО | 0% / 0,40 (1364 мс) | 68% / 0,5 (429 мс) | 70% / 0,5 (4777 мс) |
* Обратите внимание, что Pountbox возвращает точность и состязательные изображения одновременно, поэтому фактическое время для генерации состязательных изображений может быть короче записей.
† Учитывая, что алгоритм бинарного поиска для Const c может быть трудоемким, Torchattacks поддерживает Mutliattack для поиска сетки c .
Кроме того, я также рекомендую использовать недавно предложенный пакет Rai-Toolbox .
| Атака | Упаковка | Время/шаг (точность) |
|---|---|---|
| FGSM (LINF) | Rai-Toolbox | 58 мс (0%) |
| Торхатты | 81 мс (0%) | |
| Pountbox | 105 мс (0%) | |
| ИСКУССТВО | 83 мс (0%) | |
| PGD (LINF) | Rai-Toolbox | 58 мс (44%) |
| Торхатты | 79 мс (44%) | |
| Pountbox | 82 мс (44%) | |
| ИСКУССТВО | 90 мс (44%) | |
| PGD (L2) | Rai-Toolbox | 58 мс (70%) |
| Торхатты | 81 мс (70%) | |
| Pountbox | 82 мс (70%) | |
| ИСКУССТВО | 89 мс (70%) |
Rai-Toolbox использует уникальный подход к возмущениям на основе градиента: они реализованы с точки зрения оптимизаторов, преобразующих параметры и модели возмущений. Это позволяет пользователям реализовать различные алгоритмы (например, универсальные возмущения и концепция зондирования с помощью редких градиентов), используя ту же парадигму, что и стандартная атака PGD.