稳健性工具
项目描述
通过pip安装:pip install 健壮性
阅读文档:https ://robustness.readthedocs.io/en/latest/index.html
鲁棒性是我们(MadryLab的学生)创建的一个软件包,用于使训练、评估和探索神经网络变得灵活和容易。我们在几乎所有项目中都使用它(无论它们是否涉及对抗训练!),它将成为我们即将发布的许多代码版本的依赖项。使用该库的一些项目包括:
我们在一组演练和我们的 API 参考中演示了如何使用该库。该库提供的功能包括:
python -m robustness.main --dataset cifar --data /path/to/cifar \
--adv-train 0 --arch resnet18 --out-dir /logs/checkpoints/dir/
使用稳健(或标准)模型执行输入操作——这包括制作对抗性示例、反转表示、特征可视化等。该库提供了多种优化选项(例如,在真实/估计梯度之间进行选择、傅立叶/像素基础、自定义损失函数等),并且易于扩展。
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)
将鲁棒性作为一个包导入,允许轻松训练神经网络,支持自定义损失函数、日志记录、数据加载等!在我们的两部分演练(第 1部分, 第 2 部分)中可以找到一个很好的介绍。
from robustness import model_utils, datasets, train, defaults
from robustness.datasets import CIFAR
# We use cox (http://github.com/MadryLab/cox) to log, store and analyze
# results. Read more at https//cox.readthedocs.io.
from cox.utils import Parameters
import cox.store
# Hard-coded dataset, architecture, batch size, workers
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)
# Create a cox store for logging
out_store = cox.store.Store(OUT_DIR)
# Hard-coded base parameters
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)
# Fill whatever parameters are missing from the defaults
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 a model
train.train_model(train_args, m, (train_loader, val_loader), store=out_store)
注意:稳健性要求安装 PyTorch 并支持 CUDA。
预训练模型
除了训练代码,我们还发布了许多针对不同数据集、规范和 ε-train 值的预训练模型。此列表将随着我们发布更多或改进的模型而更新。如果您在研究中使用这些模型,请引用此库(请参阅下面的 bibtex 条目)。
对于每个(模型,ε-test)组合,我们评估 20 步和 100 步 PGD,步长为2.5 * ε-test / num_steps。由于这两个精度非常接近,我们不考虑更多的 PGD 步骤。对于 ε-test 的每个值,我们以粗体突出显示在不同 ε-train 上实现的最佳鲁棒精度。
注意#1:我们没有执行任何超参数调整,只是使用与标准训练相同的超参数。探索不同的训练超参数很可能会将这些稳健的准确性提高几个百分点。
注意 #2:下面的 pytorch 检查点 ( .pt ) 文件是使用以下版本的 PyTorch 和 Dill 保存的:
torch==1.1.0
dill==0.2.9
CIFAR10 L2 范数(ResNet50):
CIFAR10 L2-鲁棒精度 |
||||
|---|---|---|---|---|
ε-train |
||||
ε-检验 |
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-norm (ResNet50):
ε = 0.0(PyTorch 预训练)
CIFAR10 Linf-稳健的精度 |
||
|---|---|---|
ε-train |
||
ε-检验 |
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):
ε = 0.0(PyTorch 预训练)
ImageNet L2-鲁棒精度 |
||
|---|---|---|
ε-train |
||
ε-检验 |
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-norm (ResNet50):
ε = 0.0(PyTorch 预训练)
ImageNet Linf-鲁棒的准确度 |
|||
|---|---|---|---|
ε-train |
|||
ε-检验 |
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% |
引文
如果您在研究中使用此库,请按如下方式引用:
@misc{robustness,
title=<s>{Robustness (Python Library)}</s>,
author=<s>{Logan Engstrom and Andrew Ilyas and Hadi Salman and Shibani Santurkar and Dimitris Tsipras}</s>,
year=<s>{2019}</s>,
url=<s>{https://github.com/MadryLab/robustness}</s>
}
(您使用过该软件包并发现它有用吗?让我们知道!)。
维护者
贡献者/提交者
看这里
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。