diff --git a/.github/workflows/build_coverage.yml b/.github/workflows/build_coverage.yml index 44f73053..3c95ed08 100644 --- a/.github/workflows/build_coverage.yml +++ b/.github/workflows/build_coverage.yml @@ -23,36 +23,69 @@ jobs: matrix: os: - ubuntu-latest - python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"] + python-version: ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12"] # Bugs: 3.10 will become 3.1 if without quotes -> https://github.com/actions/setup-python/issues/695 # For ubuntu 22.04: https://raw.githubusercontent.com/actions/python-versions/main/versions-manifest.json - pytorch-version: ["1.9.1", "1.10.1", "1.11.0", "1.12.1", "1.13.1", "2.0.1"] + pytorch-version: ["1.9.1", "1.10.1", "1.11.0", "1.12.1", "1.13.1", "2.0.1", "2.1.2", "2.2.0", "2.3.1", "2.4.1", "2.5.1"] # 1.5.1, 1.4.0 Model load error in robustbench. # 1.8.1, 1.7.1, 1.6.0 'padding==same' error in TIFGSM exclude: # https://github.com/pytorch/vision#installation + # pytorch 2.5 support python from 3.9 to 3.12 + - pytorch-version: "2.5.1" + python-version: "3.7" + - pytorch-version: "2.5.1" + python-version: "3.8" + # pytorch 2.4 support python from 3.8 to 3.12 + - pytorch-version: "2.4.1" + python-version: "3.7" + # pytorch 2.3 support python from 3.8 to 3.12 + - pytorch-version: "2.3.1" + python-version: "3.7" + # pytorch 2.2 support python from 3.8 to 3.11 + - pytorch-version: "2.2.0" + python-version: "3.7" + - pytorch-version: "2.2.0" + python-version: "3.12" + # pytorch 2.1 support python from 3.8 to 3.11 + - pytorch-version: "2.1.2" + python-version: "3.7" + - pytorch-version: "2.1.2" + python-version: "3.12" # pytorch 2.0 support python from 3.8 to 3.11 - pytorch-version: "2.0.1" python-version: "3.7" + - pytorch-version: "2.0.1" + python-version: "3.12" # pytorch 1.13 support python from 3.7.2 to 3.10 - pytorch-version: "1.13.1" python-version: "3.11" + - pytorch-version: "1.13.1" + python-version: "3.12" # pytorch 1.12 support python from 3.7 to 3.10 - pytorch-version: "1.12.1" python-version: "3.11" + - pytorch-version: "1.12.1" + python-version: "3.12" # pytorch 1.11 support python from 3.7 to 3.10 - pytorch-version: "1.11.0" python-version: "3.11" + - pytorch-version: "1.11.0" + python-version: "3.12" # pytorch 1.10 support python from 3.6 to 3.9 - pytorch-version: "1.10.1" python-version: "3.10" - pytorch-version: "1.10.1" python-version: "3.11" + - pytorch-version: "1.10.1" + python-version: "3.12" # pytorch 1.9 support python from 3.6 to 3.9 - pytorch-version: "1.9.1" python-version: "3.10" - pytorch-version: "1.9.1" python-version: "3.11" + - pytorch-version: "1.9.1" + python-version: "3.12" runs-on: ${{ matrix.os }} diff --git a/.gitignore b/.gitignore index 7b58903a..0356639a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,28 +1,28 @@ +.vscode/ __pycache__ -.ipynb_checkpoints/* +.ipynb_checkpoints/ debug.log -build/* -_build -dist/* -torchattacks.egg-info/* -data/* -models/* +build/ +dist/ +torchattacks.egg-info/ +data/ */.* MENIFEST.in setup.cfg _commit.bat +code_coverage/data/ -autoattack/* +autoattack/ +.pytest_cache/ demo/_* -demo/data/* -demo/models/* -demo/torchdefenses/* -demo/robustbench/* -demo/autoattack/* +demo/data +demo/models +demo/torchdefenses +demo/autoattack + TODO.txt -.vscode/ coverage.xml .coverage black.ipynb diff --git a/README.md b/README.md index 79528a86..b3eaeacd 100644 --- a/README.md +++ b/README.md @@ -94,10 +94,10 @@ pip install -e . ``` * By label ```python - 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_targeted_by_label(target_labels=target_labels, quiet=True) + adv_images = atk(images, labels) ``` * Return to default ```python @@ -128,12 +128,6 @@ pip install -e . atk2 = torchattacks.PGD(model, eps=8/255, alpha=2/255, iters=40, random_start=True) atk = torchattacks.MultiAttack([atk1, atk2]) ``` - * Binary search for CW - ```python - 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]) - ``` * Random restarts ```python atk1 = torchattacks.PGD(model, eps=8/255, alpha=2/255, iters=40, random_start=True) @@ -160,7 +154,7 @@ The distance measure in parentheses. | **EOTPGD**
(Linf) | Comment on "Adv-BNN: Improved Adversarial Defense through Robust Bayesian Neural Network" ([Zimmermann, 2019](https://arxiv.org/abs/1907.00895)) | [EOT](https://arxiv.org/abs/1707.07397)+PGD | | **APGD**
(Linf, L2) | Reliable evaluation of adversarial robustness with an ensemble of diverse parameter-free attacks ([Croce et al., 2020](https://arxiv.org/abs/2001.03994)) | | | **APGDT**
(Linf, L2) | Reliable evaluation of adversarial robustness with an ensemble of diverse parameter-free attacks ([Croce et al., 2020](https://arxiv.org/abs/2001.03994)) | Targeted APGD | -| **FAB**
(Linf, L2, L1) | Minimally distorted Adversarial Examples with a Fast Adaptive Boundary Attack ([Croce et al., 2019](https://arxiv.org/abs/1907.02044)) | | +| **AFAB**
(Linf, L1, L2) | Minimally distorted Adversarial Examples with a Fast Adaptive Boundary Attack ([Croce et al., 2019](https://arxiv.org/abs/1907.02044)) | | | **Square**
(Linf, L2) | Square Attack: a query-efficient black-box adversarial attack via random search ([Andriushchenko et al., 2019](https://arxiv.org/abs/1912.00049)) | | | **AutoAttack**
(Linf, L2) | Reliable evaluation of adversarial robustness with an ensemble of diverse parameter-free attacks ([Croce et al., 2020](https://arxiv.org/abs/2001.03994)) | APGD+APGDT+FAB+Square | | **DeepFool**
(L2) | DeepFool: A Simple and Accurate Method to Fool Deep Neural Networks ([Moosavi-Dezfooli et al., 2016](https://arxiv.org/abs/1511.04599)) | | @@ -181,8 +175,15 @@ The distance measure in parentheses. | **EADEN**
(L1, L2) | EAD: Elastic-Net Attacks to Deep Neural Networks ([Chen, Pin-Yu, et al., 2018](https://arxiv.org/abs/1709.04114)) | :heart_eyes: Contributor [Riko Naka](https://github.com/rikonaka) | | **PIFGSM (PIM)**
(Linf) | Patch-wise Attack for Fooling Deep Neural Network ([Gao, Lianli, et al., 2020](https://arxiv.org/abs/2007.06765)) | :heart_eyes: Contributor [Riko Naka](https://github.com/rikonaka) | | **PIFGSM++ (PIM++)**
(Linf) | Patch-wise++ Perturbation for Adversarial Targeted Attacks ([Gao, Lianli, et al., 2021](https://arxiv.org/abs/2012.15503)) | :heart_eyes: Contributor [Riko Naka](https://github.com/rikonaka) | - - +| **CWL0**
(L0) | Towards Evaluating the Robustness of Neural Networks ([Carlini N, Wagner D, 2017](https://arxiv.org/abs/1608.046443)) | :heart_eyes: Contributor [Riko Naka](https://github.com/rikonaka) | +| **CWLinf**
(Linf) | Towards Evaluating the Robustness of Neural Networks ([Carlini N, Wagner D, 2017](https://arxiv.org/abs/1608.046443)) | :heart_eyes: Contributor [Riko Naka](https://github.com/rikonaka) | +| **CWBSL0 (Binary Search Version)**
(L0) | Towards Evaluating the Robustness of Neural Networks ([Carlini N, Wagner D, 2017](https://arxiv.org/abs/1608.046443)) | :heart_eyes: Contributor [Riko Naka](https://github.com/rikonaka) | +| **CWBSL2 (Binary Search Version)**
(L2) | Towards Evaluating the Robustness of Neural Networks ([Carlini N, Wagner D, 2017](https://arxiv.org/abs/1608.046443)) | :heart_eyes: Contributor [Riko Naka](https://github.com/rikonaka) | +| **CWBSLinf (Binary Search Version)**
(Linf) | Towards Evaluating the Robustness of Neural Networks ([Carlini N, Wagner D, 2017](https://arxiv.org/abs/1608.046443)) | :heart_eyes: Contributor [Riko Naka](https://github.com/rikonaka) | +| **ESPGD (Early-Stopped PGD Version)**
(Linf) | Attacks Which Do Not Kill Training Make Adversarial Learning Stronger ([Zhang, Jingfeng, 2020](https://arxiv.org/abs/2002.11242)) | :heart_eyes: Contributor [Riko Naka](https://github.com/rikonaka) | +| **FAB**
(Linf) | Minimally distorted Adversarial Examples with a Fast Adaptive Boundary Attack ([Croce et al., 2019](https://arxiv.org/abs/1907.02044)) | :heart_eyes: Contributor [Riko Naka](https://github.com/rikonaka) | +| **FABL1**
(L1) | Minimally distorted Adversarial Examples with a Fast Adaptive Boundary Attack ([Croce et al., 2019](https://arxiv.org/abs/1907.02044)) | :heart_eyes: Contributor [Riko Naka](https://github.com/rikonaka) | +| **FABL2**
(L2) | Minimally distorted Adversarial Examples with a Fast Adaptive Boundary Attack ([Croce et al., 2019](https://arxiv.org/abs/1907.02044)) | :heart_eyes: Contributor [Riko Naka](https://github.com/rikonaka) | ## :bar_chart: Performance Comparison diff --git a/code_coverage/images.pth b/code_coverage/images.pth new file mode 100644 index 00000000..9b5d7ffd Binary files /dev/null and b/code_coverage/images.pth differ diff --git a/code_coverage/labels.pth b/code_coverage/labels.pth new file mode 100644 index 00000000..0fd708ca Binary files /dev/null and b/code_coverage/labels.pth differ diff --git a/code_coverage/resnet18_eval.pth b/code_coverage/resnet18_eval.pth new file mode 100644 index 00000000..7606da16 Binary files /dev/null and b/code_coverage/resnet18_eval.pth differ diff --git a/code_coverage/script/pickle_cifar10.py b/code_coverage/script/pickle_cifar10.py new file mode 100644 index 00000000..2ece930d --- /dev/null +++ b/code_coverage/script/pickle_cifar10.py @@ -0,0 +1,25 @@ +import torch +from torchvision import datasets, transforms + +transform_test = transforms.Compose([ + transforms.ToTensor(), +]) +testset = datasets.CIFAR10( + root='../data', train=False, download=True, transform=transform_test) +test_loader = torch.utils.data.DataLoader( + testset, batch_size=10, shuffle=False) + + +def split(testloader): + for (x, y) in testloader: + torch.save(x, 'images.pth') + torch.save(y, 'labels.pth') + break + + +def main(): + split(test_loader) + + +if __name__ == '__main__': + main() diff --git a/code_coverage/script/resnet.py b/code_coverage/script/resnet.py new file mode 100644 index 00000000..43324c64 --- /dev/null +++ b/code_coverage/script/resnet.py @@ -0,0 +1,117 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F + + +class BasicBlock(nn.Module): + expansion = 1 + + def __init__(self, in_planes, planes, stride=1): + super(BasicBlock, self).__init__() + self.conv1 = nn.Conv2d(in_planes, planes, kernel_size=3, stride=stride, padding=1, bias=False) + self.bn1 = nn.BatchNorm2d(planes) + self.conv2 = nn.Conv2d(planes, planes, kernel_size=3, stride=1, padding=1, bias=False) + self.bn2 = nn.BatchNorm2d(planes) + self.relu = nn.ReLU() + + self.shortcut = nn.Sequential() + if stride != 1 or in_planes != self.expansion * planes: + self.shortcut = nn.Sequential( + nn.Conv2d(in_planes, self.expansion * planes, kernel_size=1, stride=stride, bias=False), + nn.BatchNorm2d(self.expansion * planes) + ) + + def forward(self, x): + out = self.relu(self.bn1(self.conv1(x))) + out = self.bn2(self.conv2(out)) + out += self.shortcut(x) + out = F.relu(out) + return out + + +class Bottleneck(nn.Module): + expansion = 4 + + def __init__(self, in_planes, planes, stride=1): + super(Bottleneck, self).__init__() + self.conv1 = nn.Conv2d(in_planes, planes, kernel_size=1, bias=False) + self.bn1 = nn.BatchNorm2d(planes) + self.conv2 = nn.Conv2d(planes, planes, kernel_size=3, stride=stride, padding=1, bias=False) + self.bn2 = nn.BatchNorm2d(planes) + self.conv3 = nn.Conv2d(planes, self.expansion * planes, kernel_size=1, bias=False) + self.bn3 = nn.BatchNorm2d(self.expansion * planes) + self.relu = nn.ReLU() + + self.shortcut = nn.Sequential() + if stride != 1 or in_planes != self.expansion * planes: + self.shortcut = nn.Sequential( + nn.Conv2d(in_planes, self.expansion * planes, kernel_size=1, stride=stride, bias=False), + nn.BatchNorm2d(self.expansion * planes) + ) + + def forward(self, x): + out = self.relu(self.bn1(self.conv1(x))) + out = self.relu(self.bn2(self.conv2(out))) + out = self.bn3(self.conv3(out)) + out += self.shortcut(x) + out = F.relu(out) + return out + + +class ResNet(nn.Module): + def __init__(self, block, num_blocks, num_classes=10): + super(ResNet, self).__init__() + self.in_planes = 64 + + self.conv1 = nn.Conv2d(3, 64, kernel_size=3, stride=1, padding=1, bias=False) + self.bn1 = nn.BatchNorm2d(64) + self.layer1 = self._make_layer(block, 64, num_blocks[0], stride=1) + self.layer2 = self._make_layer(block, 128, num_blocks[1], stride=2) + self.layer3 = self._make_layer(block, 256, num_blocks[2], stride=2) + self.layer4 = self._make_layer(block, 512, num_blocks[3], stride=2) + self.linear = nn.Linear(512 * block.expansion, num_classes) + + def _make_layer(self, block, planes, num_blocks, stride): + strides = [stride] + [1] * (num_blocks - 1) + layers = [] + for stride in strides: + layers.append(block(self.in_planes, planes, stride)) + self.in_planes = planes * block.expansion + return nn.Sequential(*layers) + + def forward(self, x): + out = F.relu(self.bn1(self.conv1(x))) + out = self.layer1(out) + out = self.layer2(out) + out = self.layer3(out) + out = self.layer4(out) + out = F.avg_pool2d(out, 4) + out = out.view(out.size(0), -1) + out = self.linear(out) + return out + + +def ResNet18(num_classes=10): + return ResNet(BasicBlock, [2, 2, 2, 2]) + + +def ResNet34(): + return ResNet(BasicBlock, [3, 4, 6, 3]) + + +def ResNet50(): + return ResNet(Bottleneck, [3, 4, 6, 3]) + + +def ResNet101(): + return ResNet(Bottleneck, [3, 4, 23, 3]) + + +def ResNet152(): + return ResNet(Bottleneck, [3, 8, 36, 3]) + + +def test(): + net = ResNet18() + y = net(torch.randn(1, 3, 32, 32)) + print(y.size()) \ No newline at end of file diff --git a/code_coverage/script/train_simple_resnet18.py b/code_coverage/script/train_simple_resnet18.py new file mode 100644 index 00000000..99a4115d --- /dev/null +++ b/code_coverage/script/train_simple_resnet18.py @@ -0,0 +1,128 @@ +import torch +import torch.nn as nn +import torch.optim as optim +import torch.backends.cudnn as cudnn +from torchvision import datasets, transforms +from tqdm import tqdm +import time +import os + +from resnet import ResNet18 + +device = 'cuda' if torch.cuda.is_available() else 'cpu' +cudnn.benchmark = True + +transform_train = transforms.Compose([ + transforms.RandomCrop(32, padding=4), + transforms.RandomHorizontalFlip(), + transforms.ToTensor(), +]) +transform_test = transforms.Compose([ + transforms.ToTensor(), +]) + +trainset = datasets.CIFAR10( + root='./data', train=True, download=True, transform=transform_train) +testset = datasets.CIFAR10( + root='./data', train=False, download=True, transform=transform_test) + +train_loader = torch.utils.data.DataLoader( + trainset, batch_size=128, shuffle=True, num_workers=32) +test_loader = torch.utils.data.DataLoader( + testset, batch_size=100, shuffle=False, num_workers=32) + + +def train(net, loss, optimizer, trainloader, epoch): + # Training + print('\nEpoch: {}'.format(epoch)) + net.train() + train_loss = 0 + correct = 0 + total = 0 + + with tqdm(total=len(trainloader), desc='Train') as tbar: + for batch_idx, (x, y) in enumerate(trainloader): + x, y = x.to(device), y.to(device) + total += y.shape[0] + + optimizer.zero_grad() + outputs = net(x) + _loss = loss(outputs, y) + _loss.backward() + optimizer.step() + + train_loss += _loss.item() + predicted = torch.argmax(outputs, 1) + correct += torch.sum((predicted == y)).item() + + lr = optimizer.param_groups[0].get('lr') + tbar.set_postfix(loss=train_loss/(batch_idx+1), + acc=(correct/total)*100., lr=lr) + tbar.update() + + return (correct / total) * 100. + + +def test(net, loss, testloader, epoch, best_acc): + # Test + net.eval() + correct = 0 + total = 0 + test_loss = 0 + + with tqdm(total=len(testloader), desc='Test') as tbar: + for batch_idx, (x, y) in enumerate(testloader): + x, y = x.to(device), y.to(device) + total += y.shape[0] + + outputs = net(x) + _loss = loss(outputs, y) + test_loss += _loss.item() + predicted = torch.argmax(outputs, 1) + correct += torch.sum((predicted == y)).item() + + # tbar.set_description('loss: {:.3f} acc: {:.3f} aacc: {:.3f}'.format( + # test_loss/(batch_idx+1, (correct/total)*100, (adv_correct/total)*100))) + tbar.set_postfix(loss=test_loss/(batch_idx+1), + acc=(correct/total)*100.) + tbar.update() + + acc = (correct / total) * 100. + # Save checkpoint. + if acc > best_acc: + best_acc = acc + p = os.path.join('./', f'resnet18_eval.pth') + state = { + 'net': net.state_dict(), + 'acc': acc, + 'epoch': epoch, + } + torch.save(state, p) + + return best_acc + + +def main(): + lr = 0.01 + momentum = 0.9 + weight_decay = 3.5e-3 + best_acc = 0 + epochs = 100 + + net = ResNet18().to(device) + loss = nn.CrossEntropyLoss() + optimizer = optim.SGD(net.parameters(), lr=lr, + momentum=momentum, weight_decay=weight_decay) + scheduler = torch.optim.lr_scheduler.CosineAnnealingLR( + optimizer, T_max=100) + for epoch in range(1, epochs + 1): + _ = train(net, loss, optimizer, train_loader, epoch) # nopep8 + best_acc = test(net, loss, test_loader, epoch, best_acc) # nopep8 + scheduler.step() + + time_str = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())) + print(f'END: {time_str}') + + +if __name__ == '__main__': + main() diff --git a/code_coverage/test_atks.py b/code_coverage/test_atks.py index f2f868dc..7c4488ca 100644 --- a/code_coverage/test_atks.py +++ b/code_coverage/test_atks.py @@ -1,44 +1,56 @@ -import sys -import os # Importing the parent directory # This line must be preceded by -sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) # nopep8 +import sys +import os +sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) + +import torchattacks +import pytest +import time +import torch + +from script.resnet import ResNet18 -from robustbench.utils import load_model # nopep8 -from robustbench.utils import clean_accuracy # nopep8 -from robustbench.data import load_cifar10 # nopep8 -import torchattacks # nopep8 -import torch # nopep8 -import pytest # nopep8 -import time # nopep8 CACHE = {} -def get_model(model_name='Standard', device='cpu', model_dir='./models'): - model = load_model(model_name, model_dir=model_dir, norm='Linf') - # fsize = os.path.getsize(filePath) - return model.to(device) +def get_model(device='cpu'): + # load checkpoint. + print(os.getcwd()) + checkpoint = torch.load('./code_coverage/resnet18_eval.pth', + map_location=torch.device(device)) + net = ResNet18().to(device) + net.load_state_dict(checkpoint['net']) + return net.to(device) -def get_data(data_name='CIFAR10', device='cpu', n_examples=5, data_dir='./data'): - images, labels = load_cifar10(n_examples=n_examples, data_dir=data_dir) +def get_data(device='cpu'): + images = torch.load('./code_coverage/images.pth') # 10 images + labels = torch.load('./code_coverage/labels.pth') # 10 images return images.to(device), labels.to(device) +def clean_accuracy(model, images, labels): + model.eval() + pred = torch.argmax(model(images), dim=1) + correct = torch.sum(labels == pred) + total = images.shape[0] + return correct / total + + @torch.no_grad() @pytest.mark.parametrize('atk_class', [atk_class for atk_class in torchattacks.__all__ if atk_class not in torchattacks.__wrapper__]) -def test_atks_on_cifar10(atk_class, device='cpu', n_examples=5, model_dir='./models', data_dir='./data'): +def test_atks_on_cifar10(atk_class, device='cpu'): global CACHE if CACHE.get('model') is None: - model = get_model(device=device, model_dir=model_dir) + model = get_model(device=device) CACHE['model'] = model else: model = CACHE['model'] - if CACHE.get('images') is None: - images, labels = get_data( - device=device, n_examples=n_examples, data_dir=data_dir) + if CACHE.get('images') is None or CACHE.get('labels') is None: + images, labels = get_data() CACHE['images'] = images CACHE['labels'] = labels else: @@ -51,32 +63,38 @@ def test_atks_on_cifar10(atk_class, device='cpu', n_examples=5, model_dir='./mod else: clean_acc = CACHE['clean_acc'] - try: - kargs = {} - if atk_class in ['SPSA']: - kargs['max_batch_size'] = 5 - atk = eval("torchattacks."+atk_class)(model, **kargs) + kargs = {} + if atk_class in ['SPSA']: + kargs['max_batch_size'] = 5 + + atk = eval("torchattacks."+atk_class)(model, **kargs) + start = time.time() + with torch.enable_grad(): + adv_images = atk(images, labels) + + # non-targeted attack test + robust_acc_1 = clean_accuracy(model, adv_images, labels) + assert clean_acc >= robust_acc_1 + end = time.time() + + sec = float(end - start) + print('{0:<12}: clean_acc={1:2.2f} robust_acc={2:2.2f} sec={3:2.2f}'.format( + atk_class, clean_acc, robust_acc_1, sec)) + + # targeted attack test + start = time.time() + if 'targeted' in atk.supported_mode: + atk.set_mode_targeted_random(quiet=True) start = time.time() with torch.enable_grad(): adv_images = atk(images, labels) end = time.time() - robust_acc = clean_accuracy(model, adv_images, labels) - sec = float(end - start) - print('{0:<12}: clean_acc={1:2.2f} robust_acc={2:2.2f} sec={3:2.2f}'.format( - atk_class, clean_acc, robust_acc, sec)) - - if 'targeted' in atk.supported_mode: - atk.set_mode_targeted_random(quiet=True) - with torch.enable_grad(): - adv_images = atk(images, labels) - robust_acc = clean_accuracy(model, adv_images, labels) - sec = float(end - start) - print('{0:<12}: clean_acc={1:2.2f} robust_acc={2:2.2f} sec={3:2.2f}'.format( - "- targeted", clean_acc, robust_acc, sec)) - - except Exception as e: - robust_acc = clean_acc + 1 # It will cuase assertion. - print('{0:<12} test acc Error'.format(atk_class)) - print(e) - - assert clean_acc >= robust_acc + robust_acc_2 = clean_accuracy(model, adv_images, labels) + else: + robust_acc_2 = 0 + assert clean_acc >= robust_acc_2 + end = time.time() + + sec = float(end - start) + print('{0:<12}: clean_acc={1:2.2f} robust_acc={2:2.2f} sec={3:2.2f}'.format( + "- targeted", clean_acc, robust_acc_2, sec)) diff --git a/demo/White-box Targeted Attack on CIFAR10.ipynb b/demo/White-box Targeted Attack on CIFAR10.ipynb index 0c6542bc..55475990 100644 --- a/demo/White-box Targeted Attack on CIFAR10.ipynb +++ b/demo/White-box Targeted Attack on CIFAR10.ipynb @@ -71,28 +71,9 @@ "source": [ "from torchattacks import PGD\n", "atk = PGD(model, eps=8/255, alpha=2/225, steps=10, random_start=True)\n", - "atk.set_mode_targeted_by_label()\n", - "print(atk)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "tensor([3, 8, 8, 0, 6])\n", - "tensor([4, 9, 9, 1, 7])\n" - ] - } - ], - "source": [ - "print(labels)\n", "new_labels = (labels + 1) % 10\n", - "print(new_labels)" + "atk.set_mode_targeted_by_label(target_labels=new_labels)\n", + "print(atk)" ] }, { @@ -111,7 +92,7 @@ } ], "source": [ - "adv_images = atk(images, new_labels)\n", + "adv_images = atk(images, labels)\n", "adv_pred = model(adv_images)\n", "print(labels)\n", "print(torch.argmax(adv_pred, 1))" diff --git a/requirements.txt b/requirements.txt index 96c1582e..c413a9b7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,4 +6,5 @@ scipy>=0.14.0 tqdm>=4.56.1 requests>=2.25.1 pandas>=1.2.4 -numpy>=1.19.4 +# The last stable 1.x version of numpy +numpy<=1.26.4 diff --git a/robustbench/README.md b/robustbench/README.md deleted file mode 100644 index 7d38a0f3..00000000 --- a/robustbench/README.md +++ /dev/null @@ -1,11 +0,0 @@ -Please refer to [https://github.com/RobustBench/robustbench](https://github.com/RobustBench/robustbench) for the original version. - -For faster coverage computation, remove some modules. - - * Remove timm. - - * Remove sodef_layers. - - * Remove xcit. - - * Disable eval.py for removing autoattack. \ No newline at end of file diff --git a/robustbench/__init__.py b/robustbench/__init__.py deleted file mode 100644 index f685f04a..00000000 --- a/robustbench/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from .data import load_cifar10 -from .utils import load_model -# from .eval import benchmark diff --git a/robustbench/data.py b/robustbench/data.py deleted file mode 100644 index 5b777c8e..00000000 --- a/robustbench/data.py +++ /dev/null @@ -1,315 +0,0 @@ -from typing import Callable, Union -import os -from pathlib import Path -from typing import Callable, Dict, Optional, Sequence, Set, Tuple - -import numpy as np -import torch -import torch.utils.data as data -import torchvision.datasets as datasets -import torchvision.transforms as transforms -from torch.utils.data import Dataset - -from robustbench.model_zoo import model_dicts as all_models -from robustbench.model_zoo.enums import BenchmarkDataset, ThreatModel -from robustbench.zenodo_download import DownloadError, zenodo_download -from robustbench.loaders import CustomImageFolder - -PREPROCESSINGS = { - 'Res256Crop224': - transforms.Compose([ - transforms.Resize(256), - transforms.CenterCrop(224), - transforms.ToTensor() - ]), - 'Crop288': - transforms.Compose([transforms.CenterCrop(288), - transforms.ToTensor()]), - None: - transforms.Compose([transforms.ToTensor()]), -} - - -def get_preprocessing( - dataset: BenchmarkDataset, threat_model: ThreatModel, - model_name: Optional[str], - preprocessing: Optional[Union[str, Callable]]) -> Callable: - if isinstance(preprocessing, Callable): - return preprocessing - - if dataset == BenchmarkDataset.imagenet: - if model_name is not None and model_name in all_models[dataset][ - threat_model]: - prepr = all_models[dataset][threat_model][model_name][ - 'preprocessing'] - elif preprocessing is not None: - prepr = preprocessing - else: - raise Exception( - "Preprocessing should be specified if the model is not already in the model zoo" - ) - else: - prepr = None - - return PREPROCESSINGS[prepr] - - -def _load_dataset( - dataset: Dataset, - n_examples: Optional[int] = None) -> Tuple[torch.Tensor, torch.Tensor]: - batch_size = 100 - test_loader = data.DataLoader(dataset, - batch_size=batch_size, - shuffle=False, - num_workers=0) - - x_test, y_test = [], [] - for i, (x, y) in enumerate(test_loader): - x_test.append(x) - y_test.append(y) - if n_examples is not None and batch_size * i >= n_examples: - break - x_test_tensor = torch.cat(x_test) - y_test_tensor = torch.cat(y_test) - - if n_examples is not None: - x_test_tensor = x_test_tensor[:n_examples] - y_test_tensor = y_test_tensor[:n_examples] - - return x_test_tensor, y_test_tensor - - -def load_cifar10( - n_examples: Optional[int] = None, - data_dir: str = './data', - transforms_test: Callable = PREPROCESSINGS[None] -) -> Tuple[torch.Tensor, torch.Tensor]: - dataset = datasets.CIFAR10(root=data_dir, - train=False, - transform=transforms_test, - download=True) - return _load_dataset(dataset, n_examples) - - -def load_cifar100( - n_examples: Optional[int] = None, - data_dir: str = './data', - transforms_test: Callable = PREPROCESSINGS[None] -) -> Tuple[torch.Tensor, torch.Tensor]: - dataset = datasets.CIFAR100(root=data_dir, - train=False, - transform=transforms_test, - download=True) - return _load_dataset(dataset, n_examples) - - -def load_imagenet( - n_examples: Optional[int] = 5000, - data_dir: str = './data', - transforms_test: Callable = PREPROCESSINGS['Res256Crop224'] -) -> Tuple[torch.Tensor, torch.Tensor]: - if n_examples > 5000: - raise ValueError( - 'The evaluation is currently possible on at most 5000 points-') - - imagenet = CustomImageFolder(data_dir + '/val', transforms_test) - - test_loader = data.DataLoader(imagenet, - batch_size=n_examples, - shuffle=False, - num_workers=4) - - x_test, y_test, paths = next(iter(test_loader)) - - return x_test, y_test - - -CleanDatasetLoader = Callable[[Optional[int], str, Callable], - Tuple[torch.Tensor, torch.Tensor]] -_clean_dataset_loaders: Dict[BenchmarkDataset, CleanDatasetLoader] = { - BenchmarkDataset.cifar_10: load_cifar10, - BenchmarkDataset.cifar_100: load_cifar100, - BenchmarkDataset.imagenet: load_imagenet, -} - - -def load_clean_dataset(dataset: BenchmarkDataset, n_examples: Optional[int], - data_dir: str, - prepr: Callable) -> Tuple[torch.Tensor, torch.Tensor]: - return _clean_dataset_loaders[dataset](n_examples, data_dir, prepr) - - -CORRUPTIONS = ("shot_noise", "motion_blur", "snow", "pixelate", - "gaussian_noise", "defocus_blur", "brightness", "fog", - "zoom_blur", "frost", "glass_blur", "impulse_noise", "contrast", - "jpeg_compression", "elastic_transform") - -CORRUPTIONS_3DCC = ('near_focus', 'far_focus', 'bit_error', 'color_quant', - 'flash', 'fog_3d', 'h265_abr', 'h265_crf', 'iso_noise', - 'low_light', 'xy_motion_blur', 'z_motion_blur') - -ZENODO_CORRUPTIONS_LINKS: Dict[BenchmarkDataset, Tuple[str, Set[str]]] = { - BenchmarkDataset.cifar_10: ("2535967", {"CIFAR-10-C.tar"}), - BenchmarkDataset.cifar_100: ("3555552", {"CIFAR-100-C.tar"}) -} - -CORRUPTIONS_DIR_NAMES: Dict[BenchmarkDataset, str] = { - BenchmarkDataset.cifar_10: "CIFAR-10-C", - BenchmarkDataset.cifar_100: "CIFAR-100-C", - BenchmarkDataset.imagenet: "ImageNet-C", - # BenchmarkDataset.imagenet_3d: "ImageNet-3DCC" -} - - -def load_cifar10c( - n_examples: int, - severity: int = 5, - data_dir: str = './data', - shuffle: bool = False, - corruptions: Sequence[str] = CORRUPTIONS, - _: Callable = PREPROCESSINGS[None] -) -> Tuple[torch.Tensor, torch.Tensor]: - return load_corruptions_cifar(BenchmarkDataset.cifar_10, n_examples, - severity, data_dir, corruptions, shuffle) - - -def load_cifar100c( - n_examples: int, - severity: int = 5, - data_dir: str = './data', - shuffle: bool = False, - corruptions: Sequence[str] = CORRUPTIONS, - _: Callable = PREPROCESSINGS[None]) -> Tuple[torch.Tensor, torch.Tensor]: - return load_corruptions_cifar(BenchmarkDataset.cifar_100, n_examples, - severity, data_dir, corruptions, shuffle) - - -def load_imagenetc( - n_examples: Optional[int] = 5000, - severity: int = 5, - data_dir: str = './data', - shuffle: bool = False, - corruptions: Sequence[str] = CORRUPTIONS, - prepr: Callable = PREPROCESSINGS[None] -) -> Tuple[torch.Tensor, torch.Tensor]: - if n_examples > 5000: - raise ValueError( - 'The evaluation is currently possible on at most 5000 points.') - - assert len( - corruptions - ) == 1, "so far only one corruption is supported (that's how this function is called in eval.py" - # TODO: generalize this (although this would probably require writing a function similar to `load_corruptions_cifar` - # or alternatively creating yet another CustomImageFolder class that fetches images from multiple corruption types - # at once -- perhaps this is a cleaner solution) - - data_folder_path = Path(data_dir) / CORRUPTIONS_DIR_NAMES[ - BenchmarkDataset.imagenet] / corruptions[0] / str(severity) - imagenet = CustomImageFolder(data_folder_path, prepr) - test_loader = data.DataLoader(imagenet, - batch_size=n_examples, - shuffle=shuffle, - num_workers=2) - - x_test, y_test, paths = next(iter(test_loader)) - - return x_test, y_test - - -# def load_imagenet3dcc( -# n_examples: Optional[int] = 5000, -# severity: int = 5, -# data_dir: str = './data', -# shuffle: bool = False, -# corruptions: Sequence[str] = CORRUPTIONS_3DCC, -# prepr: Callable = PREPROCESSINGS[None] -# ) -> Tuple[torch.Tensor, torch.Tensor]: -# if n_examples > 5000: -# raise ValueError( -# 'The evaluation is currently possible on at most 5000 points.') - -# assert len( -# corruptions -# ) == 1, "so far only one corruption is supported (that's how this function is called in eval.py" -# # TODO: generalize this (although this would probably require writing a function similar to `load_corruptions_cifar` -# # or alternatively creating yet another CustomImageFolder class that fetches images from multiple corruption types -# # at once -- perhaps this is a cleaner solution) - -# data_folder_path = Path(data_dir) / CORRUPTIONS_DIR_NAMES[ -# BenchmarkDataset.imagenet_3d] / corruptions[0] / str(severity) -# imagenet = CustomImageFolder(data_folder_path, prepr) -# test_loader = data.DataLoader(imagenet, -# batch_size=n_examples, -# shuffle=shuffle, -# num_workers=2) - -# x_test, y_test, paths = next(iter(test_loader)) - -# return x_test, y_test - - -CorruptDatasetLoader = Callable[[int, int, str, bool, Sequence[str], Callable], - Tuple[torch.Tensor, torch.Tensor]] -CORRUPTION_DATASET_LOADERS: Dict[BenchmarkDataset, CorruptDatasetLoader] = { - BenchmarkDataset.cifar_10: load_cifar10c, - BenchmarkDataset.cifar_100: load_cifar100c, - BenchmarkDataset.imagenet: load_imagenetc, - # BenchmarkDataset.imagenet_3d: load_imagenet3dcc, -} - - -def load_corruptions_cifar( - dataset: BenchmarkDataset, - n_examples: int, - severity: int, - data_dir: str, - corruptions: Sequence[str] = CORRUPTIONS, - shuffle: bool = False) -> Tuple[torch.Tensor, torch.Tensor]: - assert 1 <= severity <= 5 - n_total_cifar = 10000 - - if not os.path.exists(data_dir): - os.makedirs(data_dir) - - data_dir = Path(data_dir) - data_root_dir = data_dir / CORRUPTIONS_DIR_NAMES[dataset] - - if not data_root_dir.exists(): - zenodo_download(*ZENODO_CORRUPTIONS_LINKS[dataset], save_dir=data_dir) - - # Download labels - labels_path = data_root_dir / 'labels.npy' - if not os.path.isfile(labels_path): - raise DownloadError("Labels are missing, try to re-download them.") - labels = np.load(labels_path) - - x_test_list, y_test_list = [], [] - n_pert = len(corruptions) - for corruption in corruptions: - corruption_file_path = data_root_dir / (corruption + '.npy') - if not corruption_file_path.is_file(): - raise DownloadError( - f"{corruption} file is missing, try to re-download it.") - - images_all = np.load(corruption_file_path) - images = images_all[(severity - 1) * n_total_cifar:severity * - n_total_cifar] - n_img = int(np.ceil(n_examples / n_pert)) - x_test_list.append(images[:n_img]) - # Duplicate the same labels potentially multiple times - y_test_list.append(labels[:n_img]) - - x_test, y_test = np.concatenate(x_test_list), np.concatenate(y_test_list) - if shuffle: - rand_idx = np.random.permutation(np.arange(len(x_test))) - x_test, y_test = x_test[rand_idx], y_test[rand_idx] - - # Make it in the PyTorch format - x_test = np.transpose(x_test, (0, 3, 1, 2)) - # Make it compatible with our models - x_test = x_test.astype(np.float32) / 255 - # Make sure that we get exactly n_examples but not a few samples more - x_test = torch.tensor(x_test)[:n_examples] - y_test = torch.tensor(y_test)[:n_examples] - - return x_test, y_test diff --git a/robustbench/eval.py b/robustbench/eval.py deleted file mode 100644 index 7b34952f..00000000 --- a/robustbench/eval.py +++ /dev/null @@ -1,223 +0,0 @@ -# import warnings -# from argparse import Namespace -# from pathlib import Path -# from typing import Callable, Dict, Optional, Sequence, Tuple, Union - -# import numpy as np -# import pandas as pd -# import torch -# import random -# from autoattack import AutoAttack -# from torch import nn -# from tqdm import tqdm - -# from robustbench.data import CORRUPTIONS, get_preprocessing, load_clean_dataset, \ -# CORRUPTION_DATASET_LOADERS -# from robustbench.model_zoo.enums import BenchmarkDataset, ThreatModel -# from robustbench.utils import clean_accuracy, load_model, parse_args, update_json -# from robustbench.model_zoo import model_dicts as all_models - - -# def benchmark( -# model: Union[nn.Module, Sequence[nn.Module]], -# n_examples: int = 10000, -# dataset: Union[str, BenchmarkDataset] = BenchmarkDataset.cifar_10, -# threat_model: Union[str, ThreatModel] = ThreatModel.Linf, -# to_disk: bool = False, -# model_name: Optional[str] = None, -# data_dir: str = "./data", -# device: Optional[Union[torch.device, Sequence[torch.device]]] = None, -# batch_size: int = 32, -# eps: Optional[float] = None, -# log_path: Optional[str] = None, -# preprocessing: Optional[Union[str, -# Callable]] = None) -> Tuple[float, float]: -# """Benchmarks the given model(s). - -# It is possible to benchmark on 3 different threat models, and to save the results on disk. In -# the future benchmarking multiple models in parallel is going to be possible. - -# :param model: The model to benchmark. -# :param n_examples: The number of examples to use to benchmark the model. -# :param dataset: The dataset to use to benchmark. Must be one of {cifar10, cifar100} -# :param threat_model: The threat model to use to benchmark, must be one of {L2, Linf -# corruptions} -# :param to_disk: Whether the results must be saved on disk as .json. -# :param model_name: The name of the model to use to save the results. Must be specified if -# to_json is True. -# :param data_dir: The directory where the dataset is or where the dataset must be downloaded. -# :param device: The device to run the computations. -# :param batch_size: The batch size to run the computations. The larger, the faster the -# evaluation. -# :param eps: The epsilon to use for L2 and Linf threat models. Must not be specified for -# corruptions threat model. -# :param preprocessing: The preprocessing that should be used for ImageNet benchmarking. Should be -# specified if `dataset` is `imageget`. - -# :return: A Tuple with the clean accuracy and the accuracy in the given threat model. -# """ -# if isinstance(model, Sequence) or isinstance(device, Sequence): -# # Multiple models evaluation in parallel not yet implemented -# raise NotImplementedError - -# try: -# if model.training: -# warnings.warn(Warning("The given model is *not* in eval mode.")) -# except AttributeError: -# warnings.warn( -# Warning( -# "It is not possible to asses if the model is in eval mode")) - -# dataset_: BenchmarkDataset = BenchmarkDataset(dataset) -# threat_model_: ThreatModel = ThreatModel(threat_model) - -# device = device or torch.device("cpu") -# model = model.to(device) - -# prepr = get_preprocessing(dataset_, threat_model_, model_name, -# preprocessing) - -# clean_x_test, clean_y_test = load_clean_dataset(dataset_, n_examples, -# data_dir, prepr) - -# accuracy = clean_accuracy(model, -# clean_x_test, -# clean_y_test, -# batch_size=batch_size, -# device=device) -# print(f'Clean accuracy: {accuracy:.2%}') - -# if threat_model_ in {ThreatModel.Linf, ThreatModel.L2}: -# if eps is None: -# raise ValueError( -# "If the threat model is L2 or Linf, `eps` must be specified.") - -# adversary = AutoAttack(model, -# norm=threat_model_.value, -# eps=eps, -# version='standard', -# device=device, -# log_path=log_path) -# x_adv = adversary.run_standard_evaluation(clean_x_test, -# clean_y_test, -# bs=batch_size) -# adv_accuracy = clean_accuracy(model, -# x_adv, -# clean_y_test, -# batch_size=batch_size, -# device=device) -# elif threat_model_ == ThreatModel.corruptions: -# corruptions = CORRUPTIONS -# print(f"Evaluating over {len(corruptions)} corruptions") -# # Save into a dict to make a Pandas DF with nested index -# adv_accuracy = corruptions_evaluation(batch_size, data_dir, dataset_, -# device, model, n_examples, -# to_disk, prepr, model_name) -# else: -# raise NotImplementedError -# print(f'Adversarial accuracy: {adv_accuracy:.2%}') - -# if to_disk: -# if model_name is None: -# raise ValueError( -# "If `to_disk` is True, `model_name` should be specified.") - -# update_json(dataset_, threat_model_, model_name, accuracy, -# adv_accuracy, eps) - -# return accuracy, adv_accuracy - - -# def corruptions_evaluation(batch_size: int, data_dir: str, -# dataset: BenchmarkDataset, device: torch.device, -# model: nn.Module, n_examples: int, to_disk: bool, -# prepr: str, model_name: Optional[str]) -> float: -# if to_disk and model_name is None: -# raise ValueError( -# "If `to_disk` is True, `model_name` should be specified.") - -# corruptions = CORRUPTIONS -# model_results_dict: Dict[Tuple[str, int], float] = {} -# for corruption in tqdm(corruptions): -# for severity in range(1, 6): -# x_corrupt, y_corrupt = CORRUPTION_DATASET_LOADERS[dataset]( -# n_examples, -# severity, -# data_dir, -# shuffle=False, -# corruptions=[corruption], -# prepr=prepr) - -# corruption_severity_accuracy = clean_accuracy( -# model, -# x_corrupt, -# y_corrupt, -# batch_size=batch_size, -# device=device) -# print('corruption={}, severity={}: {:.2%} accuracy'.format( -# corruption, severity, corruption_severity_accuracy)) - -# model_results_dict[(corruption, -# severity)] = corruption_severity_accuracy - -# model_results = pd.DataFrame(model_results_dict, index=[model_name]) -# adv_accuracy = model_results.values.mean() - -# if not to_disk: -# return adv_accuracy - -# # Save disaggregated results on disk -# existing_results_path = Path( -# "model_info" -# ) / dataset.value / "corruptions" / "unaggregated_results.csv" -# if not existing_results_path.parent.exists(): -# existing_results_path.parent.mkdir(parents=True, exist_ok=True) -# try: -# existing_results = pd.read_csv(existing_results_path, -# header=[0, 1], -# index_col=0) -# existing_results.columns = existing_results.columns.set_levels([ -# existing_results.columns.levels[0], -# existing_results.columns.levels[1].astype(int) -# ]) -# full_results = pd.concat([existing_results, model_results]) -# except FileNotFoundError: -# full_results = model_results -# full_results.to_csv(existing_results_path) - -# return adv_accuracy - - -# def main(args: Namespace) -> None: -# torch.manual_seed(args.seed) -# torch.cuda.manual_seed(args.seed) -# np.random.seed(args.seed) -# random.seed(args.seed) - -# model = load_model(args.model_name, -# model_dir=args.model_dir, -# dataset=args.dataset, -# threat_model=args.threat_model) - -# model.eval() - -# device = torch.device(args.device) -# benchmark(model, -# n_examples=args.n_ex, -# dataset=args.dataset, -# threat_model=args.threat_model, -# to_disk=args.to_disk, -# model_name=args.model_name, -# data_dir=args.data_dir, -# device=device, -# batch_size=args.batch_size, -# eps=args.eps) - - -# if __name__ == '__main__': -# # Example: -# # python -m robustbench.eval --n_ex=5000 --dataset=imagenet --threat_model=Linf \ -# # --model_name=Salman2020Do_R18 --data_dir=/tmldata1/andriush/imagenet/val \ -# # --batch_size=128 --eps=0.0156862745 -# args_ = parse_args() -# main(args_) diff --git a/robustbench/helper_files/imagenet_class_to_id_map.json b/robustbench/helper_files/imagenet_class_to_id_map.json deleted file mode 100644 index bf064b3b..00000000 --- a/robustbench/helper_files/imagenet_class_to_id_map.json +++ /dev/null @@ -1 +0,0 @@ -{"n01440764": 0, "n01443537": 1, "n01484850": 2, "n01491361": 3, "n01494475": 4, "n01496331": 5, "n01498041": 6, "n01514668": 7, "n01514859": 8, "n01518878": 9, "n01530575": 10, "n01531178": 11, "n01532829": 12, "n01534433": 13, "n01537544": 14, "n01558993": 15, "n01560419": 16, "n01580077": 17, "n01582220": 18, "n01592084": 19, "n01601694": 20, "n01608432": 21, "n01614925": 22, "n01616318": 23, "n01622779": 24, "n01629819": 25, "n01630670": 26, "n01631663": 27, "n01632458": 28, "n01632777": 29, "n01641577": 30, "n01644373": 31, "n01644900": 32, "n01664065": 33, "n01665541": 34, "n01667114": 35, "n01667778": 36, "n01669191": 37, "n01675722": 38, "n01677366": 39, "n01682714": 40, "n01685808": 41, "n01687978": 42, "n01688243": 43, "n01689811": 44, "n01692333": 45, "n01693334": 46, "n01694178": 47, "n01695060": 48, "n01697457": 49, "n01698640": 50, "n01704323": 51, "n01728572": 52, "n01728920": 53, "n01729322": 54, "n01729977": 55, "n01734418": 56, "n01735189": 57, "n01737021": 58, "n01739381": 59, "n01740131": 60, "n01742172": 61, "n01744401": 62, "n01748264": 63, "n01749939": 64, "n01751748": 65, "n01753488": 66, "n01755581": 67, "n01756291": 68, "n01768244": 69, "n01770081": 70, "n01770393": 71, "n01773157": 72, "n01773549": 73, "n01773797": 74, "n01774384": 75, "n01774750": 76, "n01775062": 77, "n01776313": 78, "n01784675": 79, "n01795545": 80, "n01796340": 81, "n01797886": 82, "n01798484": 83, "n01806143": 84, "n01806567": 85, "n01807496": 86, "n01817953": 87, "n01818515": 88, "n01819313": 89, "n01820546": 90, "n01824575": 91, "n01828970": 92, "n01829413": 93, "n01833805": 94, "n01843065": 95, "n01843383": 96, "n01847000": 97, "n01855032": 98, "n01855672": 99, "n01860187": 100, "n01871265": 101, "n01872401": 102, "n01873310": 103, "n01877812": 104, "n01882714": 105, "n01883070": 106, "n01910747": 107, "n01914609": 108, "n01917289": 109, "n01924916": 110, "n01930112": 111, "n01943899": 112, "n01944390": 113, "n01945685": 114, "n01950731": 115, "n01955084": 116, "n01968897": 117, "n01978287": 118, "n01978455": 119, "n01980166": 120, "n01981276": 121, "n01983481": 122, "n01984695": 123, "n01985128": 124, "n01986214": 125, "n01990800": 126, "n02002556": 127, "n02002724": 128, "n02006656": 129, "n02007558": 130, "n02009229": 131, "n02009912": 132, "n02011460": 133, "n02012849": 134, "n02013706": 135, "n02017213": 136, "n02018207": 137, "n02018795": 138, "n02025239": 139, "n02027492": 140, "n02028035": 141, "n02033041": 142, "n02037110": 143, "n02051845": 144, "n02056570": 145, "n02058221": 146, "n02066245": 147, "n02071294": 148, "n02074367": 149, "n02077923": 150, "n02085620": 151, "n02085782": 152, "n02085936": 153, "n02086079": 154, "n02086240": 155, "n02086646": 156, "n02086910": 157, "n02087046": 158, "n02087394": 159, "n02088094": 160, "n02088238": 161, "n02088364": 162, "n02088466": 163, "n02088632": 164, "n02089078": 165, "n02089867": 166, "n02089973": 167, "n02090379": 168, "n02090622": 169, "n02090721": 170, "n02091032": 171, "n02091134": 172, "n02091244": 173, "n02091467": 174, "n02091635": 175, "n02091831": 176, "n02092002": 177, "n02092339": 178, "n02093256": 179, "n02093428": 180, "n02093647": 181, "n02093754": 182, "n02093859": 183, "n02093991": 184, "n02094114": 185, "n02094258": 186, "n02094433": 187, "n02095314": 188, "n02095570": 189, "n02095889": 190, "n02096051": 191, "n02096177": 192, "n02096294": 193, "n02096437": 194, "n02096585": 195, "n02097047": 196, "n02097130": 197, "n02097209": 198, "n02097298": 199, "n02097474": 200, "n02097658": 201, "n02098105": 202, "n02098286": 203, "n02098413": 204, "n02099267": 205, "n02099429": 206, "n02099601": 207, "n02099712": 208, "n02099849": 209, "n02100236": 210, "n02100583": 211, "n02100735": 212, "n02100877": 213, "n02101006": 214, "n02101388": 215, "n02101556": 216, "n02102040": 217, "n02102177": 218, "n02102318": 219, "n02102480": 220, "n02102973": 221, "n02104029": 222, "n02104365": 223, "n02105056": 224, "n02105162": 225, "n02105251": 226, "n02105412": 227, "n02105505": 228, "n02105641": 229, "n02105855": 230, "n02106030": 231, "n02106166": 232, "n02106382": 233, "n02106550": 234, "n02106662": 235, "n02107142": 236, "n02107312": 237, "n02107574": 238, "n02107683": 239, "n02107908": 240, "n02108000": 241, "n02108089": 242, "n02108422": 243, "n02108551": 244, "n02108915": 245, "n02109047": 246, "n02109525": 247, "n02109961": 248, "n02110063": 249, "n02110185": 250, "n02110341": 251, "n02110627": 252, "n02110806": 253, "n02110958": 254, "n02111129": 255, "n02111277": 256, "n02111500": 257, "n02111889": 258, "n02112018": 259, "n02112137": 260, "n02112350": 261, "n02112706": 262, "n02113023": 263, "n02113186": 264, "n02113624": 265, "n02113712": 266, "n02113799": 267, "n02113978": 268, "n02114367": 269, "n02114548": 270, "n02114712": 271, "n02114855": 272, "n02115641": 273, "n02115913": 274, "n02116738": 275, "n02117135": 276, "n02119022": 277, "n02119789": 278, "n02120079": 279, "n02120505": 280, "n02123045": 281, "n02123159": 282, "n02123394": 283, "n02123597": 284, "n02124075": 285, "n02125311": 286, "n02127052": 287, "n02128385": 288, "n02128757": 289, "n02128925": 290, "n02129165": 291, "n02129604": 292, "n02130308": 293, "n02132136": 294, "n02133161": 295, "n02134084": 296, "n02134418": 297, "n02137549": 298, "n02138441": 299, "n02165105": 300, "n02165456": 301, "n02167151": 302, "n02168699": 303, "n02169497": 304, "n02172182": 305, "n02174001": 306, "n02177972": 307, "n02190166": 308, "n02206856": 309, "n02219486": 310, "n02226429": 311, "n02229544": 312, "n02231487": 313, "n02233338": 314, "n02236044": 315, "n02256656": 316, "n02259212": 317, "n02264363": 318, "n02268443": 319, "n02268853": 320, "n02276258": 321, "n02277742": 322, "n02279972": 323, "n02280649": 324, "n02281406": 325, "n02281787": 326, "n02317335": 327, "n02319095": 328, "n02321529": 329, "n02325366": 330, "n02326432": 331, "n02328150": 332, "n02342885": 333, "n02346627": 334, "n02356798": 335, "n02361337": 336, "n02363005": 337, "n02364673": 338, "n02389026": 339, "n02391049": 340, "n02395406": 341, "n02396427": 342, "n02397096": 343, "n02398521": 344, "n02403003": 345, "n02408429": 346, "n02410509": 347, "n02412080": 348, "n02415577": 349, "n02417914": 350, "n02422106": 351, "n02422699": 352, "n02423022": 353, "n02437312": 354, "n02437616": 355, "n02441942": 356, "n02442845": 357, "n02443114": 358, "n02443484": 359, "n02444819": 360, "n02445715": 361, "n02447366": 362, "n02454379": 363, "n02457408": 364, "n02480495": 365, "n02480855": 366, "n02481823": 367, "n02483362": 368, "n02483708": 369, "n02484975": 370, "n02486261": 371, "n02486410": 372, "n02487347": 373, "n02488291": 374, "n02488702": 375, "n02489166": 376, "n02490219": 377, "n02492035": 378, "n02492660": 379, "n02493509": 380, "n02493793": 381, "n02494079": 382, "n02497673": 383, "n02500267": 384, "n02504013": 385, "n02504458": 386, "n02509815": 387, "n02510455": 388, "n02514041": 389, "n02526121": 390, "n02536864": 391, "n02606052": 392, "n02607072": 393, "n02640242": 394, "n02641379": 395, "n02643566": 396, "n02655020": 397, "n02666196": 398, "n02667093": 399, "n02669723": 400, "n02672831": 401, "n02676566": 402, "n02687172": 403, "n02690373": 404, "n02692877": 405, "n02699494": 406, "n02701002": 407, "n02704792": 408, "n02708093": 409, "n02727426": 410, "n02730930": 411, "n02747177": 412, "n02749479": 413, "n02769748": 414, "n02776631": 415, "n02777292": 416, "n02782093": 417, "n02783161": 418, "n02786058": 419, "n02787622": 420, "n02788148": 421, "n02790996": 422, "n02791124": 423, "n02791270": 424, "n02793495": 425, "n02794156": 426, "n02795169": 427, "n02797295": 428, "n02799071": 429, "n02802426": 430, "n02804414": 431, "n02804610": 432, "n02807133": 433, "n02808304": 434, "n02808440": 435, "n02814533": 436, "n02814860": 437, "n02815834": 438, "n02817516": 439, "n02823428": 440, "n02823750": 441, "n02825657": 442, "n02834397": 443, "n02835271": 444, "n02837789": 445, "n02840245": 446, "n02841315": 447, "n02843684": 448, "n02859443": 449, "n02860847": 450, "n02865351": 451, "n02869837": 452, "n02870880": 453, "n02871525": 454, "n02877765": 455, "n02879718": 456, "n02883205": 457, "n02892201": 458, "n02892767": 459, "n02894605": 460, "n02895154": 461, "n02906734": 462, "n02909870": 463, "n02910353": 464, "n02916936": 465, "n02917067": 466, "n02927161": 467, "n02930766": 468, "n02939185": 469, "n02948072": 470, "n02950826": 471, "n02951358": 472, "n02951585": 473, "n02963159": 474, "n02965783": 475, "n02966193": 476, "n02966687": 477, "n02971356": 478, "n02974003": 479, "n02977058": 480, "n02978881": 481, "n02979186": 482, "n02980441": 483, "n02981792": 484, "n02988304": 485, "n02992211": 486, "n02992529": 487, "n02999410": 488, "n03000134": 489, "n03000247": 490, "n03000684": 491, "n03014705": 492, "n03016953": 493, "n03017168": 494, "n03018349": 495, "n03026506": 496, "n03028079": 497, "n03032252": 498, "n03041632": 499, "n03042490": 500, "n03045698": 501, "n03047690": 502, "n03062245": 503, "n03063599": 504, "n03063689": 505, "n03065424": 506, "n03075370": 507, "n03085013": 508, "n03089624": 509, "n03095699": 510, "n03100240": 511, "n03109150": 512, "n03110669": 513, "n03124043": 514, "n03124170": 515, "n03125729": 516, "n03126707": 517, "n03127747": 518, "n03127925": 519, "n03131574": 520, "n03133878": 521, "n03134739": 522, "n03141823": 523, "n03146219": 524, "n03160309": 525, "n03179701": 526, "n03180011": 527, "n03187595": 528, "n03188531": 529, "n03196217": 530, "n03197337": 531, "n03201208": 532, "n03207743": 533, "n03207941": 534, "n03208938": 535, "n03216828": 536, "n03218198": 537, "n03220513": 538, "n03223299": 539, "n03240683": 540, "n03249569": 541, "n03250847": 542, "n03255030": 543, "n03259280": 544, "n03271574": 545, "n03272010": 546, "n03272562": 547, "n03290653": 548, "n03291819": 549, "n03297495": 550, "n03314780": 551, "n03325584": 552, "n03337140": 553, "n03344393": 554, "n03345487": 555, "n03347037": 556, "n03355925": 557, "n03372029": 558, "n03376595": 559, "n03379051": 560, "n03384352": 561, "n03388043": 562, "n03388183": 563, "n03388549": 564, "n03393912": 565, "n03394916": 566, "n03400231": 567, "n03404251": 568, "n03417042": 569, "n03424325": 570, "n03425413": 571, "n03443371": 572, "n03444034": 573, "n03445777": 574, "n03445924": 575, "n03447447": 576, "n03447721": 577, "n03450230": 578, "n03452741": 579, "n03457902": 580, "n03459775": 581, "n03461385": 582, "n03467068": 583, "n03476684": 584, "n03476991": 585, "n03478589": 586, "n03481172": 587, "n03482405": 588, "n03483316": 589, "n03485407": 590, "n03485794": 591, "n03492542": 592, "n03494278": 593, "n03495258": 594, "n03496892": 595, "n03498962": 596, "n03527444": 597, "n03529860": 598, "n03530642": 599, "n03532672": 600, "n03534580": 601, "n03535780": 602, "n03538406": 603, "n03544143": 604, "n03584254": 605, "n03584829": 606, "n03590841": 607, "n03594734": 608, "n03594945": 609, "n03595614": 610, "n03598930": 611, "n03599486": 612, "n03602883": 613, "n03617480": 614, "n03623198": 615, "n03627232": 616, "n03630383": 617, "n03633091": 618, "n03637318": 619, "n03642806": 620, "n03649909": 621, "n03657121": 622, "n03658185": 623, "n03661043": 624, "n03662601": 625, "n03666591": 626, "n03670208": 627, "n03673027": 628, "n03676483": 629, "n03680355": 630, "n03690938": 631, "n03691459": 632, "n03692522": 633, "n03697007": 634, "n03706229": 635, "n03709823": 636, "n03710193": 637, "n03710637": 638, "n03710721": 639, "n03717622": 640, "n03720891": 641, "n03721384": 642, "n03724870": 643, "n03729826": 644, "n03733131": 645, "n03733281": 646, "n03733805": 647, "n03742115": 648, "n03743016": 649, "n03759954": 650, "n03761084": 651, "n03763968": 652, "n03764736": 653, "n03769881": 654, "n03770439": 655, "n03770679": 656, "n03773504": 657, "n03775071": 658, "n03775546": 659, "n03776460": 660, "n03777568": 661, "n03777754": 662, "n03781244": 663, "n03782006": 664, "n03785016": 665, "n03786901": 666, "n03787032": 667, "n03788195": 668, "n03788365": 669, "n03791053": 670, "n03792782": 671, "n03792972": 672, "n03793489": 673, "n03794056": 674, "n03796401": 675, "n03803284": 676, "n03804744": 677, "n03814639": 678, "n03814906": 679, "n03825788": 680, "n03832673": 681, "n03837869": 682, "n03838899": 683, "n03840681": 684, "n03841143": 685, "n03843555": 686, "n03854065": 687, "n03857828": 688, "n03866082": 689, "n03868242": 690, "n03868863": 691, "n03871628": 692, "n03873416": 693, "n03874293": 694, "n03874599": 695, "n03876231": 696, "n03877472": 697, "n03877845": 698, "n03884397": 699, "n03887697": 700, "n03888257": 701, "n03888605": 702, "n03891251": 703, "n03891332": 704, "n03895866": 705, "n03899768": 706, "n03902125": 707, "n03903868": 708, "n03908618": 709, "n03908714": 710, "n03916031": 711, "n03920288": 712, "n03924679": 713, "n03929660": 714, "n03929855": 715, "n03930313": 716, "n03930630": 717, "n03933933": 718, "n03935335": 719, "n03937543": 720, "n03938244": 721, "n03942813": 722, "n03944341": 723, "n03947888": 724, "n03950228": 725, "n03954731": 726, "n03956157": 727, "n03958227": 728, "n03961711": 729, "n03967562": 730, "n03970156": 731, "n03976467": 732, "n03976657": 733, "n03977966": 734, "n03980874": 735, "n03982430": 736, "n03983396": 737, "n03991062": 738, "n03992509": 739, "n03995372": 740, "n03998194": 741, "n04004767": 742, "n04005630": 743, "n04008634": 744, "n04009552": 745, "n04019541": 746, "n04023962": 747, "n04026417": 748, "n04033901": 749, "n04033995": 750, "n04037443": 751, "n04039381": 752, "n04040759": 753, "n04041544": 754, "n04044716": 755, "n04049303": 756, "n04065272": 757, "n04067472": 758, "n04069434": 759, "n04070727": 760, "n04074963": 761, "n04081281": 762, "n04086273": 763, "n04090263": 764, "n04099969": 765, "n04111531": 766, "n04116512": 767, "n04118538": 768, "n04118776": 769, "n04120489": 770, "n04125021": 771, "n04127249": 772, "n04131690": 773, "n04133789": 774, "n04136333": 775, "n04141076": 776, "n04141327": 777, "n04141975": 778, "n04146614": 779, "n04147183": 780, "n04149813": 781, "n04152593": 782, "n04153751": 783, "n04154565": 784, "n04162706": 785, "n04179913": 786, "n04192698": 787, "n04200800": 788, "n04201297": 789, "n04204238": 790, "n04204347": 791, "n04208210": 792, "n04209133": 793, "n04209239": 794, "n04228054": 795, "n04229816": 796, "n04235860": 797, "n04238763": 798, "n04239074": 799, "n04243546": 800, "n04251144": 801, "n04252077": 802, "n04252225": 803, "n04254120": 804, "n04254680": 805, "n04254777": 806, "n04258138": 807, "n04259630": 808, "n04263257": 809, "n04264628": 810, "n04265275": 811, "n04266014": 812, "n04270147": 813, "n04273569": 814, "n04275548": 815, "n04277352": 816, "n04285008": 817, "n04286575": 818, "n04296562": 819, "n04310018": 820, "n04311004": 821, "n04311174": 822, "n04317175": 823, "n04325704": 824, "n04326547": 825, "n04328186": 826, "n04330267": 827, "n04332243": 828, "n04335435": 829, "n04336792": 830, "n04344873": 831, "n04346328": 832, "n04347754": 833, "n04350905": 834, "n04355338": 835, "n04355933": 836, "n04356056": 837, "n04357314": 838, "n04366367": 839, "n04367480": 840, "n04370456": 841, "n04371430": 842, "n04371774": 843, "n04372370": 844, "n04376876": 845, "n04380533": 846, "n04389033": 847, "n04392985": 848, "n04398044": 849, "n04399382": 850, "n04404412": 851, "n04409515": 852, "n04417672": 853, "n04418357": 854, "n04423845": 855, "n04428191": 856, "n04429376": 857, "n04435653": 858, "n04442312": 859, "n04443257": 860, "n04447861": 861, "n04456115": 862, "n04458633": 863, "n04461696": 864, "n04462240": 865, "n04465501": 866, "n04467665": 867, "n04476259": 868, "n04479046": 869, "n04482393": 870, "n04483307": 871, "n04485082": 872, "n04486054": 873, "n04487081": 874, "n04487394": 875, "n04493381": 876, "n04501370": 877, "n04505470": 878, "n04507155": 879, "n04509417": 880, "n04515003": 881, "n04517823": 882, "n04522168": 883, "n04523525": 884, "n04525038": 885, "n04525305": 886, "n04532106": 887, "n04532670": 888, "n04536866": 889, "n04540053": 890, "n04542943": 891, "n04548280": 892, "n04548362": 893, "n04550184": 894, "n04552348": 895, "n04553703": 896, "n04554684": 897, "n04557648": 898, "n04560804": 899, "n04562935": 900, "n04579145": 901, "n04579432": 902, "n04584207": 903, "n04589890": 904, "n04590129": 905, "n04591157": 906, "n04591713": 907, "n04592741": 908, "n04596742": 909, "n04597913": 910, "n04599235": 911, "n04604644": 912, "n04606251": 913, "n04612504": 914, "n04613696": 915, "n06359193": 916, "n06596364": 917, "n06785654": 918, "n06794110": 919, "n06874185": 920, "n07248320": 921, "n07565083": 922, "n07579787": 923, "n07583066": 924, "n07584110": 925, "n07590611": 926, "n07613480": 927, "n07614500": 928, "n07615774": 929, "n07684084": 930, "n07693725": 931, "n07695742": 932, "n07697313": 933, "n07697537": 934, "n07711569": 935, "n07714571": 936, "n07714990": 937, "n07715103": 938, "n07716358": 939, "n07716906": 940, "n07717410": 941, "n07717556": 942, "n07718472": 943, "n07718747": 944, "n07720875": 945, "n07730033": 946, "n07734744": 947, "n07742313": 948, "n07745940": 949, "n07747607": 950, "n07749582": 951, "n07753113": 952, "n07753275": 953, "n07753592": 954, "n07754684": 955, "n07760859": 956, "n07768694": 957, "n07802026": 958, "n07831146": 959, "n07836838": 960, "n07860988": 961, "n07871810": 962, "n07873807": 963, "n07875152": 964, "n07880968": 965, "n07892512": 966, "n07920052": 967, "n07930864": 968, "n07932039": 969, "n09193705": 970, "n09229709": 971, "n09246464": 972, "n09256479": 973, "n09288635": 974, "n09332890": 975, "n09399592": 976, "n09421951": 977, "n09428293": 978, "n09468604": 979, "n09472597": 980, "n09835506": 981, "n10148035": 982, "n10565667": 983, "n11879895": 984, "n11939491": 985, "n12057211": 986, "n12144580": 987, "n12267677": 988, "n12620546": 989, "n12768682": 990, "n12985857": 991, "n12998815": 992, "n13037406": 993, "n13040303": 994, "n13044778": 995, "n13052670": 996, "n13054560": 997, "n13133613": 998, "n15075141": 999} \ No newline at end of file diff --git a/robustbench/helper_files/imagenet_test_image_ids.txt b/robustbench/helper_files/imagenet_test_image_ids.txt deleted file mode 100644 index cb6494cb..00000000 --- a/robustbench/helper_files/imagenet_test_image_ids.txt +++ /dev/null @@ -1,5000 +0,0 @@ -n09468604/ILSVRC2012_val_00015253.JPEG -n02823750/ILSVRC2012_val_00020685.JPEG -n09472597/ILSVRC2012_val_00039611.JPEG -n03983396/ILSVRC2012_val_00004059.JPEG -n03459775/ILSVRC2012_val_00029201.JPEG -n01770081/ILSVRC2012_val_00035512.JPEG -n03240683/ILSVRC2012_val_00035210.JPEG -n04070727/ILSVRC2012_val_00030280.JPEG -n02948072/ILSVRC2012_val_00014444.JPEG -n03676483/ILSVRC2012_val_00014112.JPEG -n01685808/ILSVRC2012_val_00022003.JPEG -n03814906/ILSVRC2012_val_00033046.JPEG -n04485082/ILSVRC2012_val_00036322.JPEG -n01818515/ILSVRC2012_val_00032473.JPEG -n03534580/ILSVRC2012_val_00001418.JPEG -n02807133/ILSVRC2012_val_00045678.JPEG -n02804610/ILSVRC2012_val_00021821.JPEG -n03000247/ILSVRC2012_val_00033473.JPEG -n01819313/ILSVRC2012_val_00023805.JPEG -n02666196/ILSVRC2012_val_00031659.JPEG -n02093754/ILSVRC2012_val_00024411.JPEG -n02011460/ILSVRC2012_val_00047470.JPEG -n02051845/ILSVRC2012_val_00038981.JPEG -n03792782/ILSVRC2012_val_00018074.JPEG -n04515003/ILSVRC2012_val_00023889.JPEG -n03594734/ILSVRC2012_val_00005849.JPEG -n02108422/ILSVRC2012_val_00042576.JPEG -n03657121/ILSVRC2012_val_00029482.JPEG -n03937543/ILSVRC2012_val_00025358.JPEG -n01749939/ILSVRC2012_val_00042383.JPEG -n02815834/ILSVRC2012_val_00044110.JPEG -n01518878/ILSVRC2012_val_00039355.JPEG -n07873807/ILSVRC2012_val_00026333.JPEG -n01484850/ILSVRC2012_val_00040710.JPEG -n02319095/ILSVRC2012_val_00000142.JPEG -n02120505/ILSVRC2012_val_00043918.JPEG -n02108551/ILSVRC2012_val_00045160.JPEG -n04026417/ILSVRC2012_val_00019537.JPEG -n02708093/ILSVRC2012_val_00044469.JPEG -n02769748/ILSVRC2012_val_00016010.JPEG -n03110669/ILSVRC2012_val_00038881.JPEG -n02480855/ILSVRC2012_val_00042024.JPEG -n02231487/ILSVRC2012_val_00001714.JPEG -n03047690/ILSVRC2012_val_00030355.JPEG -n03729826/ILSVRC2012_val_00023649.JPEG -n03706229/ILSVRC2012_val_00032353.JPEG -n02776631/ILSVRC2012_val_00012943.JPEG -n02087394/ILSVRC2012_val_00037577.JPEG -n04179913/ILSVRC2012_val_00015951.JPEG -n02128925/ILSVRC2012_val_00036139.JPEG -n03791053/ILSVRC2012_val_00010227.JPEG -n01983481/ILSVRC2012_val_00015749.JPEG -n01855672/ILSVRC2012_val_00002997.JPEG -n01695060/ILSVRC2012_val_00030703.JPEG -n03887697/ILSVRC2012_val_00008442.JPEG -n04111531/ILSVRC2012_val_00011779.JPEG -n03706229/ILSVRC2012_val_00005700.JPEG -n01843065/ILSVRC2012_val_00003672.JPEG -n02690373/ILSVRC2012_val_00034342.JPEG -n03444034/ILSVRC2012_val_00010927.JPEG -n01828970/ILSVRC2012_val_00037031.JPEG -n02111277/ILSVRC2012_val_00023569.JPEG -n03954731/ILSVRC2012_val_00037755.JPEG -n04254777/ILSVRC2012_val_00021862.JPEG -n01871265/ILSVRC2012_val_00005860.JPEG -n04008634/ILSVRC2012_val_00009588.JPEG -n03595614/ILSVRC2012_val_00016334.JPEG -n02105162/ILSVRC2012_val_00023289.JPEG -n02105412/ILSVRC2012_val_00027094.JPEG -n03763968/ILSVRC2012_val_00040966.JPEG -n03141823/ILSVRC2012_val_00032252.JPEG -n02445715/ILSVRC2012_val_00004601.JPEG -n02109961/ILSVRC2012_val_00035036.JPEG -n09835506/ILSVRC2012_val_00024079.JPEG -n03956157/ILSVRC2012_val_00000753.JPEG -n02951585/ILSVRC2012_val_00015663.JPEG -n03063689/ILSVRC2012_val_00036221.JPEG -n09288635/ILSVRC2012_val_00032546.JPEG -n02769748/ILSVRC2012_val_00042967.JPEG -n04273569/ILSVRC2012_val_00020353.JPEG -n01860187/ILSVRC2012_val_00007423.JPEG -n07754684/ILSVRC2012_val_00013939.JPEG -n04328186/ILSVRC2012_val_00035731.JPEG -n02980441/ILSVRC2012_val_00018553.JPEG -n02099849/ILSVRC2012_val_00017132.JPEG -n04370456/ILSVRC2012_val_00027573.JPEG -n03595614/ILSVRC2012_val_00025000.JPEG -n03598930/ILSVRC2012_val_00037231.JPEG -n03481172/ILSVRC2012_val_00024678.JPEG -n04553703/ILSVRC2012_val_00037093.JPEG -n03770439/ILSVRC2012_val_00034389.JPEG -n01616318/ILSVRC2012_val_00045589.JPEG -n01669191/ILSVRC2012_val_00027858.JPEG -n03337140/ILSVRC2012_val_00016690.JPEG -n02480495/ILSVRC2012_val_00015704.JPEG -n03026506/ILSVRC2012_val_00040019.JPEG -n04039381/ILSVRC2012_val_00008637.JPEG -n02017213/ILSVRC2012_val_00023773.JPEG -n03444034/ILSVRC2012_val_00005381.JPEG -n04286575/ILSVRC2012_val_00026988.JPEG -n04258138/ILSVRC2012_val_00028650.JPEG -n04376876/ILSVRC2012_val_00037562.JPEG -n03045698/ILSVRC2012_val_00029544.JPEG -n01537544/ILSVRC2012_val_00044540.JPEG -n04136333/ILSVRC2012_val_00018763.JPEG -n07716906/ILSVRC2012_val_00034580.JPEG -n04296562/ILSVRC2012_val_00041663.JPEG -n07697537/ILSVRC2012_val_00040060.JPEG -n01608432/ILSVRC2012_val_00027693.JPEG -n04069434/ILSVRC2012_val_00010481.JPEG -n03347037/ILSVRC2012_val_00001413.JPEG -n02094258/ILSVRC2012_val_00045518.JPEG -n03930630/ILSVRC2012_val_00024317.JPEG -n03417042/ILSVRC2012_val_00006922.JPEG -n09428293/ILSVRC2012_val_00015233.JPEG -n03459775/ILSVRC2012_val_00016371.JPEG -n02025239/ILSVRC2012_val_00034760.JPEG -n03977966/ILSVRC2012_val_00010166.JPEG -n03459775/ILSVRC2012_val_00036180.JPEG -n01742172/ILSVRC2012_val_00008849.JPEG -n06359193/ILSVRC2012_val_00013312.JPEG -n03134739/ILSVRC2012_val_00015656.JPEG -n04435653/ILSVRC2012_val_00022683.JPEG -n02110063/ILSVRC2012_val_00012935.JPEG -n02120079/ILSVRC2012_val_00037005.JPEG -n07871810/ILSVRC2012_val_00014188.JPEG -n02114548/ILSVRC2012_val_00028165.JPEG -n03272010/ILSVRC2012_val_00042093.JPEG -n04153751/ILSVRC2012_val_00039490.JPEG -n04265275/ILSVRC2012_val_00014737.JPEG -n03814906/ILSVRC2012_val_00027073.JPEG -n03627232/ILSVRC2012_val_00037520.JPEG -n02843684/ILSVRC2012_val_00011133.JPEG -n02112137/ILSVRC2012_val_00009909.JPEG -n09246464/ILSVRC2012_val_00007042.JPEG -n02951358/ILSVRC2012_val_00041830.JPEG -n13054560/ILSVRC2012_val_00037445.JPEG -n03089624/ILSVRC2012_val_00006745.JPEG -n02110063/ILSVRC2012_val_00040096.JPEG -n02817516/ILSVRC2012_val_00024828.JPEG -n03958227/ILSVRC2012_val_00002885.JPEG -n02536864/ILSVRC2012_val_00040726.JPEG -n04263257/ILSVRC2012_val_00038858.JPEG -n02815834/ILSVRC2012_val_00005508.JPEG -n03793489/ILSVRC2012_val_00040362.JPEG -n07248320/ILSVRC2012_val_00037923.JPEG -n01753488/ILSVRC2012_val_00023970.JPEG -n03379051/ILSVRC2012_val_00046816.JPEG -n01734418/ILSVRC2012_val_00008534.JPEG -n02480495/ILSVRC2012_val_00020525.JPEG -n04487081/ILSVRC2012_val_00010937.JPEG -n03445777/ILSVRC2012_val_00011581.JPEG -n04286575/ILSVRC2012_val_00001679.JPEG -n02106550/ILSVRC2012_val_00019518.JPEG -n02051845/ILSVRC2012_val_00024180.JPEG -n03041632/ILSVRC2012_val_00021297.JPEG -n01669191/ILSVRC2012_val_00036944.JPEG -n03220513/ILSVRC2012_val_00007952.JPEG -n03950228/ILSVRC2012_val_00019039.JPEG -n02870880/ILSVRC2012_val_00023672.JPEG -n06596364/ILSVRC2012_val_00047158.JPEG -n01695060/ILSVRC2012_val_00011093.JPEG -n02111129/ILSVRC2012_val_00030445.JPEG -n02056570/ILSVRC2012_val_00011100.JPEG -n04442312/ILSVRC2012_val_00025862.JPEG -n04162706/ILSVRC2012_val_00034609.JPEG -n03942813/ILSVRC2012_val_00005631.JPEG -n03627232/ILSVRC2012_val_00031229.JPEG -n02097209/ILSVRC2012_val_00008453.JPEG -n07892512/ILSVRC2012_val_00019736.JPEG -n07768694/ILSVRC2012_val_00036377.JPEG -n02493509/ILSVRC2012_val_00046527.JPEG -n02099429/ILSVRC2012_val_00003061.JPEG -n01855672/ILSVRC2012_val_00009610.JPEG -n03887697/ILSVRC2012_val_00049213.JPEG -n03692522/ILSVRC2012_val_00000999.JPEG -n03197337/ILSVRC2012_val_00007983.JPEG -n03485794/ILSVRC2012_val_00018873.JPEG -n07716358/ILSVRC2012_val_00013849.JPEG -n03535780/ILSVRC2012_val_00027475.JPEG -n02111277/ILSVRC2012_val_00048512.JPEG -n04263257/ILSVRC2012_val_00024876.JPEG -n04347754/ILSVRC2012_val_00013200.JPEG -n01580077/ILSVRC2012_val_00028440.JPEG -n03630383/ILSVRC2012_val_00016958.JPEG -n03532672/ILSVRC2012_val_00026821.JPEG -n04136333/ILSVRC2012_val_00031664.JPEG -n04332243/ILSVRC2012_val_00002981.JPEG -n02105505/ILSVRC2012_val_00003152.JPEG -n02095314/ILSVRC2012_val_00048955.JPEG -n04273569/ILSVRC2012_val_00031708.JPEG -n03594945/ILSVRC2012_val_00019849.JPEG -n04536866/ILSVRC2012_val_00021977.JPEG -n02483362/ILSVRC2012_val_00046783.JPEG -n04597913/ILSVRC2012_val_00014544.JPEG -n03063599/ILSVRC2012_val_00037302.JPEG -n02018207/ILSVRC2012_val_00002144.JPEG -n02643566/ILSVRC2012_val_00046455.JPEG -n03937543/ILSVRC2012_val_00023209.JPEG -n02007558/ILSVRC2012_val_00017796.JPEG -n02231487/ILSVRC2012_val_00021735.JPEG -n07753592/ILSVRC2012_val_00022193.JPEG -n03697007/ILSVRC2012_val_00005462.JPEG -n04532106/ILSVRC2012_val_00032645.JPEG -n02114855/ILSVRC2012_val_00029186.JPEG -n02892767/ILSVRC2012_val_00046365.JPEG -n02128757/ILSVRC2012_val_00048394.JPEG -n01665541/ILSVRC2012_val_00016779.JPEG -n02895154/ILSVRC2012_val_00013983.JPEG -n02097047/ILSVRC2012_val_00017832.JPEG -n02606052/ILSVRC2012_val_00042242.JPEG -n03014705/ILSVRC2012_val_00018061.JPEG -n02088632/ILSVRC2012_val_00049516.JPEG -n03481172/ILSVRC2012_val_00027296.JPEG -n02167151/ILSVRC2012_val_00037453.JPEG -n03584254/ILSVRC2012_val_00031376.JPEG -n02788148/ILSVRC2012_val_00025392.JPEG -n10565667/ILSVRC2012_val_00040033.JPEG -n02389026/ILSVRC2012_val_00044391.JPEG -n02672831/ILSVRC2012_val_00009600.JPEG -n02441942/ILSVRC2012_val_00042483.JPEG -n10148035/ILSVRC2012_val_00049999.JPEG -n03481172/ILSVRC2012_val_00038221.JPEG -n01530575/ILSVRC2012_val_00027507.JPEG -n02125311/ILSVRC2012_val_00000487.JPEG -n12267677/ILSVRC2012_val_00019713.JPEG -n02106662/ILSVRC2012_val_00019267.JPEG -n02510455/ILSVRC2012_val_00042190.JPEG -n04560804/ILSVRC2012_val_00005081.JPEG -n01755581/ILSVRC2012_val_00037451.JPEG -n03895866/ILSVRC2012_val_00001450.JPEG -n02011460/ILSVRC2012_val_00002242.JPEG -n03394916/ILSVRC2012_val_00042707.JPEG -n04505470/ILSVRC2012_val_00048598.JPEG -n03947888/ILSVRC2012_val_00045572.JPEG -n02939185/ILSVRC2012_val_00014853.JPEG -n02256656/ILSVRC2012_val_00041190.JPEG -n07768694/ILSVRC2012_val_00009431.JPEG -n02672831/ILSVRC2012_val_00040418.JPEG -n01737021/ILSVRC2012_val_00010522.JPEG -n01773797/ILSVRC2012_val_00023301.JPEG -n03291819/ILSVRC2012_val_00007215.JPEG -n02494079/ILSVRC2012_val_00030313.JPEG -n03787032/ILSVRC2012_val_00001035.JPEG -n02787622/ILSVRC2012_val_00022234.JPEG -n13037406/ILSVRC2012_val_00045909.JPEG -n02317335/ILSVRC2012_val_00048546.JPEG -n02268443/ILSVRC2012_val_00046425.JPEG -n04579432/ILSVRC2012_val_00004456.JPEG -n02090721/ILSVRC2012_val_00035108.JPEG -n02112018/ILSVRC2012_val_00024277.JPEG -n03796401/ILSVRC2012_val_00027133.JPEG -n03977966/ILSVRC2012_val_00046876.JPEG -n01729977/ILSVRC2012_val_00033617.JPEG -n03895866/ILSVRC2012_val_00023946.JPEG -n01530575/ILSVRC2012_val_00015223.JPEG -n02321529/ILSVRC2012_val_00018073.JPEG -n03840681/ILSVRC2012_val_00047219.JPEG -n11879895/ILSVRC2012_val_00011338.JPEG -n02494079/ILSVRC2012_val_00002011.JPEG -n01440764/ILSVRC2012_val_00031094.JPEG -n02113186/ILSVRC2012_val_00028146.JPEG -n02105505/ILSVRC2012_val_00041147.JPEG -n04275548/ILSVRC2012_val_00026078.JPEG -n03017168/ILSVRC2012_val_00036837.JPEG -n02791270/ILSVRC2012_val_00018164.JPEG -n01728572/ILSVRC2012_val_00040382.JPEG -n02018795/ILSVRC2012_val_00025273.JPEG -n01629819/ILSVRC2012_val_00009674.JPEG -n13054560/ILSVRC2012_val_00004877.JPEG -n02088466/ILSVRC2012_val_00039741.JPEG -n04099969/ILSVRC2012_val_00022208.JPEG -n03709823/ILSVRC2012_val_00022534.JPEG -n04344873/ILSVRC2012_val_00041978.JPEG -n04081281/ILSVRC2012_val_00028580.JPEG -n02808440/ILSVRC2012_val_00033106.JPEG -n02107908/ILSVRC2012_val_00041844.JPEG -n01796340/ILSVRC2012_val_00024630.JPEG -n04418357/ILSVRC2012_val_00021010.JPEG -n02841315/ILSVRC2012_val_00012679.JPEG -n02447366/ILSVRC2012_val_00035718.JPEG -n02279972/ILSVRC2012_val_00035113.JPEG -n02097474/ILSVRC2012_val_00036865.JPEG -n02769748/ILSVRC2012_val_00025286.JPEG -n02018207/ILSVRC2012_val_00008951.JPEG -n02346627/ILSVRC2012_val_00024325.JPEG -n02749479/ILSVRC2012_val_00040754.JPEG -n03877472/ILSVRC2012_val_00022479.JPEG -n02172182/ILSVRC2012_val_00029856.JPEG -n03729826/ILSVRC2012_val_00038281.JPEG -n03967562/ILSVRC2012_val_00019662.JPEG -n03075370/ILSVRC2012_val_00038524.JPEG -n02114548/ILSVRC2012_val_00002948.JPEG -n04229816/ILSVRC2012_val_00023612.JPEG -n04228054/ILSVRC2012_val_00011377.JPEG -n02101556/ILSVRC2012_val_00031411.JPEG -n07871810/ILSVRC2012_val_00026959.JPEG -n13054560/ILSVRC2012_val_00010280.JPEG -n03445777/ILSVRC2012_val_00003793.JPEG -n03983396/ILSVRC2012_val_00028328.JPEG -n02132136/ILSVRC2012_val_00035969.JPEG -n02782093/ILSVRC2012_val_00014172.JPEG -n02977058/ILSVRC2012_val_00010658.JPEG -n02966687/ILSVRC2012_val_00046479.JPEG -n01984695/ILSVRC2012_val_00037235.JPEG -n03871628/ILSVRC2012_val_00002069.JPEG -n04560804/ILSVRC2012_val_00004773.JPEG -n02100735/ILSVRC2012_val_00003077.JPEG -n01518878/ILSVRC2012_val_00015706.JPEG -n02910353/ILSVRC2012_val_00008958.JPEG -n02480495/ILSVRC2012_val_00047956.JPEG -n04263257/ILSVRC2012_val_00008511.JPEG -n02704792/ILSVRC2012_val_00010301.JPEG -n04069434/ILSVRC2012_val_00049582.JPEG -n07734744/ILSVRC2012_val_00015748.JPEG -n03770439/ILSVRC2012_val_00019644.JPEG -n03903868/ILSVRC2012_val_00010953.JPEG -n01632777/ILSVRC2012_val_00034583.JPEG -n02510455/ILSVRC2012_val_00041143.JPEG -n04552348/ILSVRC2012_val_00022103.JPEG -n03630383/ILSVRC2012_val_00040416.JPEG -n03394916/ILSVRC2012_val_00044598.JPEG -n01748264/ILSVRC2012_val_00017753.JPEG -n01582220/ILSVRC2012_val_00018183.JPEG -n02099712/ILSVRC2012_val_00048301.JPEG -n03814639/ILSVRC2012_val_00033296.JPEG -n01494475/ILSVRC2012_val_00020418.JPEG -n01872401/ILSVRC2012_val_00015560.JPEG -n04501370/ILSVRC2012_val_00009103.JPEG -n03657121/ILSVRC2012_val_00017810.JPEG -n02280649/ILSVRC2012_val_00030984.JPEG -n01734418/ILSVRC2012_val_00016897.JPEG -n04447861/ILSVRC2012_val_00038860.JPEG -n02606052/ILSVRC2012_val_00019218.JPEG -n01632458/ILSVRC2012_val_00015709.JPEG -n02105056/ILSVRC2012_val_00011573.JPEG -n03065424/ILSVRC2012_val_00028620.JPEG -n02129604/ILSVRC2012_val_00002601.JPEG -n02483708/ILSVRC2012_val_00023772.JPEG -n02488702/ILSVRC2012_val_00039808.JPEG -n02097130/ILSVRC2012_val_00005896.JPEG -n09193705/ILSVRC2012_val_00011306.JPEG -n07920052/ILSVRC2012_val_00032165.JPEG -n01843065/ILSVRC2012_val_00039988.JPEG -n02804610/ILSVRC2012_val_00018806.JPEG -n03982430/ILSVRC2012_val_00004246.JPEG -n01622779/ILSVRC2012_val_00006472.JPEG -n02113023/ILSVRC2012_val_00013105.JPEG -n02699494/ILSVRC2012_val_00012734.JPEG -n02281406/ILSVRC2012_val_00038721.JPEG -n03388549/ILSVRC2012_val_00002945.JPEG -n04579145/ILSVRC2012_val_00043865.JPEG -n03992509/ILSVRC2012_val_00038358.JPEG -n03950228/ILSVRC2012_val_00033857.JPEG -n02843684/ILSVRC2012_val_00006780.JPEG -n04507155/ILSVRC2012_val_00048492.JPEG -n03444034/ILSVRC2012_val_00013026.JPEG -n04275548/ILSVRC2012_val_00009763.JPEG -n03459775/ILSVRC2012_val_00041276.JPEG -n01728572/ILSVRC2012_val_00035265.JPEG -n02086079/ILSVRC2012_val_00041043.JPEG -n04238763/ILSVRC2012_val_00010211.JPEG -n04462240/ILSVRC2012_val_00014406.JPEG -n03630383/ILSVRC2012_val_00023509.JPEG -n04462240/ILSVRC2012_val_00002632.JPEG -n03062245/ILSVRC2012_val_00047232.JPEG -n02092339/ILSVRC2012_val_00001425.JPEG -n04136333/ILSVRC2012_val_00000615.JPEG -n03773504/ILSVRC2012_val_00027130.JPEG -n02095889/ILSVRC2012_val_00015338.JPEG -n03775071/ILSVRC2012_val_00035581.JPEG -n02093647/ILSVRC2012_val_00013873.JPEG -n01984695/ILSVRC2012_val_00012455.JPEG -n03998194/ILSVRC2012_val_00009724.JPEG -n04277352/ILSVRC2012_val_00003535.JPEG -n04336792/ILSVRC2012_val_00006911.JPEG -n01981276/ILSVRC2012_val_00002157.JPEG -n04270147/ILSVRC2012_val_00002285.JPEG -n04040759/ILSVRC2012_val_00026609.JPEG -n03792972/ILSVRC2012_val_00041295.JPEG -n02408429/ILSVRC2012_val_00022696.JPEG -n03920288/ILSVRC2012_val_00014663.JPEG -n03089624/ILSVRC2012_val_00046798.JPEG -n03777754/ILSVRC2012_val_00027890.JPEG -n03496892/ILSVRC2012_val_00030173.JPEG -n02106382/ILSVRC2012_val_00014490.JPEG -n04465501/ILSVRC2012_val_00003326.JPEG -n04252077/ILSVRC2012_val_00026759.JPEG -n03272010/ILSVRC2012_val_00039867.JPEG -n03933933/ILSVRC2012_val_00026135.JPEG -n04296562/ILSVRC2012_val_00020163.JPEG -n03476684/ILSVRC2012_val_00008548.JPEG -n01748264/ILSVRC2012_val_00010194.JPEG -n03874293/ILSVRC2012_val_00004863.JPEG -n03017168/ILSVRC2012_val_00036909.JPEG -n03670208/ILSVRC2012_val_00047170.JPEG -n04505470/ILSVRC2012_val_00005863.JPEG -n02727426/ILSVRC2012_val_00017703.JPEG -n02699494/ILSVRC2012_val_00005289.JPEG -n02096051/ILSVRC2012_val_00030238.JPEG -n02279972/ILSVRC2012_val_00036259.JPEG -n02483362/ILSVRC2012_val_00049019.JPEG -n04523525/ILSVRC2012_val_00020794.JPEG -n07716906/ILSVRC2012_val_00038315.JPEG -n02088238/ILSVRC2012_val_00034260.JPEG -n02107142/ILSVRC2012_val_00045894.JPEG -n12768682/ILSVRC2012_val_00014680.JPEG -n02120079/ILSVRC2012_val_00024465.JPEG -n03188531/ILSVRC2012_val_00021254.JPEG -n02093428/ILSVRC2012_val_00028963.JPEG -n02977058/ILSVRC2012_val_00037304.JPEG -n04597913/ILSVRC2012_val_00002685.JPEG -n04065272/ILSVRC2012_val_00002117.JPEG -n01806143/ILSVRC2012_val_00028208.JPEG -n03379051/ILSVRC2012_val_00008234.JPEG -n04286575/ILSVRC2012_val_00044452.JPEG -n02095889/ILSVRC2012_val_00030377.JPEG -n03825788/ILSVRC2012_val_00039757.JPEG -n02500267/ILSVRC2012_val_00042211.JPEG -n02607072/ILSVRC2012_val_00003033.JPEG -n02999410/ILSVRC2012_val_00017738.JPEG -n04493381/ILSVRC2012_val_00014421.JPEG -n04040759/ILSVRC2012_val_00015712.JPEG -n03930313/ILSVRC2012_val_00046309.JPEG -n01817953/ILSVRC2012_val_00001629.JPEG -n03485794/ILSVRC2012_val_00019813.JPEG -n01667778/ILSVRC2012_val_00034770.JPEG -n04550184/ILSVRC2012_val_00041408.JPEG -n03584829/ILSVRC2012_val_00022284.JPEG -n04442312/ILSVRC2012_val_00048721.JPEG -n01685808/ILSVRC2012_val_00005590.JPEG -n04254777/ILSVRC2012_val_00039044.JPEG -n03026506/ILSVRC2012_val_00043360.JPEG -n03874599/ILSVRC2012_val_00027371.JPEG -n03467068/ILSVRC2012_val_00007208.JPEG -n03770439/ILSVRC2012_val_00049078.JPEG -n02749479/ILSVRC2012_val_00000790.JPEG -n04238763/ILSVRC2012_val_00013058.JPEG -n03450230/ILSVRC2012_val_00007147.JPEG -n04501370/ILSVRC2012_val_00010488.JPEG -n03874293/ILSVRC2012_val_00030003.JPEG -n02102318/ILSVRC2012_val_00041928.JPEG -n01924916/ILSVRC2012_val_00024457.JPEG -n04041544/ILSVRC2012_val_00002756.JPEG -n04493381/ILSVRC2012_val_00026655.JPEG -n03720891/ILSVRC2012_val_00047710.JPEG -n04252077/ILSVRC2012_val_00041951.JPEG -n01498041/ILSVRC2012_val_00005642.JPEG -n03908714/ILSVRC2012_val_00027234.JPEG -n04044716/ILSVRC2012_val_00002966.JPEG -n01847000/ILSVRC2012_val_00032362.JPEG -n04532670/ILSVRC2012_val_00042666.JPEG -n04532670/ILSVRC2012_val_00012169.JPEG -n01883070/ILSVRC2012_val_00023999.JPEG -n02177972/ILSVRC2012_val_00040996.JPEG -n02795169/ILSVRC2012_val_00026180.JPEG -n02097209/ILSVRC2012_val_00003731.JPEG -n03207941/ILSVRC2012_val_00005008.JPEG -n04044716/ILSVRC2012_val_00002046.JPEG -n02699494/ILSVRC2012_val_00021797.JPEG -n02802426/ILSVRC2012_val_00030155.JPEG -n02112018/ILSVRC2012_val_00001065.JPEG -n07932039/ILSVRC2012_val_00012915.JPEG -n04536866/ILSVRC2012_val_00040936.JPEG -n02978881/ILSVRC2012_val_00047907.JPEG -n02093647/ILSVRC2012_val_00009636.JPEG -n02687172/ILSVRC2012_val_00015250.JPEG -n01773549/ILSVRC2012_val_00008316.JPEG -n03720891/ILSVRC2012_val_00033713.JPEG -n02410509/ILSVRC2012_val_00030959.JPEG -n03876231/ILSVRC2012_val_00007959.JPEG -n03733805/ILSVRC2012_val_00000163.JPEG -n02672831/ILSVRC2012_val_00043981.JPEG -n03590841/ILSVRC2012_val_00008702.JPEG -n04243546/ILSVRC2012_val_00013741.JPEG -n07802026/ILSVRC2012_val_00020287.JPEG -n04399382/ILSVRC2012_val_00020037.JPEG -n04040759/ILSVRC2012_val_00030121.JPEG -n02457408/ILSVRC2012_val_00022195.JPEG -n03777754/ILSVRC2012_val_00047569.JPEG -n02259212/ILSVRC2012_val_00030505.JPEG -n01667114/ILSVRC2012_val_00036963.JPEG -n12768682/ILSVRC2012_val_00025053.JPEG -n01978455/ILSVRC2012_val_00013423.JPEG -n03825788/ILSVRC2012_val_00001209.JPEG -n03627232/ILSVRC2012_val_00013065.JPEG -n02099849/ILSVRC2012_val_00040639.JPEG -n03602883/ILSVRC2012_val_00010992.JPEG -n01675722/ILSVRC2012_val_00039378.JPEG -n02123159/ILSVRC2012_val_00011854.JPEG -n02815834/ILSVRC2012_val_00018493.JPEG -n02480495/ILSVRC2012_val_00037212.JPEG -n09421951/ILSVRC2012_val_00026980.JPEG -n07880968/ILSVRC2012_val_00026100.JPEG -n01749939/ILSVRC2012_val_00022436.JPEG -n02172182/ILSVRC2012_val_00007375.JPEG -n07873807/ILSVRC2012_val_00005784.JPEG -n12144580/ILSVRC2012_val_00021581.JPEG -n02094114/ILSVRC2012_val_00029281.JPEG -n02113712/ILSVRC2012_val_00049715.JPEG -n12267677/ILSVRC2012_val_00029915.JPEG -n04127249/ILSVRC2012_val_00041072.JPEG -n07697537/ILSVRC2012_val_00006368.JPEG -n04149813/ILSVRC2012_val_00028121.JPEG -n02704792/ILSVRC2012_val_00006872.JPEG -n02825657/ILSVRC2012_val_00008361.JPEG -n02097658/ILSVRC2012_val_00014259.JPEG -n04116512/ILSVRC2012_val_00003867.JPEG -n04366367/ILSVRC2012_val_00011834.JPEG -n02808440/ILSVRC2012_val_00003786.JPEG -n03028079/ILSVRC2012_val_00006268.JPEG -n03958227/ILSVRC2012_val_00020845.JPEG -n03492542/ILSVRC2012_val_00023887.JPEG -n03888257/ILSVRC2012_val_00029149.JPEG -n07717410/ILSVRC2012_val_00027302.JPEG -n02236044/ILSVRC2012_val_00027153.JPEG -n04040759/ILSVRC2012_val_00018235.JPEG -n02226429/ILSVRC2012_val_00047043.JPEG -n02492035/ILSVRC2012_val_00019432.JPEG -n04023962/ILSVRC2012_val_00017190.JPEG -n02013706/ILSVRC2012_val_00019998.JPEG -n03016953/ILSVRC2012_val_00044562.JPEG -n02423022/ILSVRC2012_val_00029872.JPEG -n01950731/ILSVRC2012_val_00023865.JPEG -n04429376/ILSVRC2012_val_00012217.JPEG -n04044716/ILSVRC2012_val_00046650.JPEG -n01518878/ILSVRC2012_val_00048600.JPEG -n07716358/ILSVRC2012_val_00032041.JPEG -n03933933/ILSVRC2012_val_00041214.JPEG -n07590611/ILSVRC2012_val_00001512.JPEG -n06596364/ILSVRC2012_val_00009053.JPEG -n02974003/ILSVRC2012_val_00004412.JPEG -n04239074/ILSVRC2012_val_00018266.JPEG -n03125729/ILSVRC2012_val_00009778.JPEG -n02793495/ILSVRC2012_val_00024346.JPEG -n02190166/ILSVRC2012_val_00039673.JPEG -n01773797/ILSVRC2012_val_00009108.JPEG -n04243546/ILSVRC2012_val_00004488.JPEG -n02093647/ILSVRC2012_val_00022164.JPEG -n03388183/ILSVRC2012_val_00019194.JPEG -n04136333/ILSVRC2012_val_00006032.JPEG -n04486054/ILSVRC2012_val_00047183.JPEG -n02802426/ILSVRC2012_val_00049469.JPEG -n09421951/ILSVRC2012_val_00040169.JPEG -n07720875/ILSVRC2012_val_00027266.JPEG -n02165105/ILSVRC2012_val_00000768.JPEG -n02094433/ILSVRC2012_val_00008324.JPEG -n02109961/ILSVRC2012_val_00028523.JPEG -n04286575/ILSVRC2012_val_00040305.JPEG -n03680355/ILSVRC2012_val_00049231.JPEG -n03259280/ILSVRC2012_val_00012242.JPEG -n02006656/ILSVRC2012_val_00027667.JPEG -n03623198/ILSVRC2012_val_00038316.JPEG -n03095699/ILSVRC2012_val_00010325.JPEG -n02100877/ILSVRC2012_val_00011706.JPEG -n02105412/ILSVRC2012_val_00042494.JPEG -n02138441/ILSVRC2012_val_00016283.JPEG -n03445777/ILSVRC2012_val_00012634.JPEG -n03920288/ILSVRC2012_val_00024971.JPEG -n03649909/ILSVRC2012_val_00026117.JPEG -n02504458/ILSVRC2012_val_00003747.JPEG -n09472597/ILSVRC2012_val_00044072.JPEG -n07873807/ILSVRC2012_val_00015007.JPEG -n02110341/ILSVRC2012_val_00013861.JPEG -n02794156/ILSVRC2012_val_00032063.JPEG -n02802426/ILSVRC2012_val_00042222.JPEG -n04579432/ILSVRC2012_val_00035203.JPEG -n01796340/ILSVRC2012_val_00022769.JPEG -n03534580/ILSVRC2012_val_00000845.JPEG -n03642806/ILSVRC2012_val_00001713.JPEG -n03290653/ILSVRC2012_val_00043202.JPEG -n04591157/ILSVRC2012_val_00009550.JPEG -n01685808/ILSVRC2012_val_00022711.JPEG -n04086273/ILSVRC2012_val_00018910.JPEG -n02098286/ILSVRC2012_val_00003276.JPEG -n02769748/ILSVRC2012_val_00011933.JPEG -n02091244/ILSVRC2012_val_00018737.JPEG -n03792972/ILSVRC2012_val_00045315.JPEG -n02093991/ILSVRC2012_val_00044532.JPEG -n01910747/ILSVRC2012_val_00047328.JPEG -n02093991/ILSVRC2012_val_00007327.JPEG -n02100877/ILSVRC2012_val_00000161.JPEG -n04483307/ILSVRC2012_val_00032321.JPEG -n03131574/ILSVRC2012_val_00003036.JPEG -n01695060/ILSVRC2012_val_00034125.JPEG -n01753488/ILSVRC2012_val_00040417.JPEG -n02098105/ILSVRC2012_val_00009019.JPEG -n02100877/ILSVRC2012_val_00016589.JPEG -n04229816/ILSVRC2012_val_00009290.JPEG -n02395406/ILSVRC2012_val_00032867.JPEG -n01742172/ILSVRC2012_val_00035425.JPEG -n03841143/ILSVRC2012_val_00013824.JPEG -n03124170/ILSVRC2012_val_00038273.JPEG -n04009552/ILSVRC2012_val_00044512.JPEG -n02493793/ILSVRC2012_val_00003812.JPEG -n04065272/ILSVRC2012_val_00014054.JPEG -n07873807/ILSVRC2012_val_00015340.JPEG -n03724870/ILSVRC2012_val_00029084.JPEG -n01601694/ILSVRC2012_val_00006907.JPEG -n02509815/ILSVRC2012_val_00003158.JPEG -n03197337/ILSVRC2012_val_00003455.JPEG -n02100236/ILSVRC2012_val_00017442.JPEG -n02906734/ILSVRC2012_val_00036355.JPEG -n03447721/ILSVRC2012_val_00010239.JPEG -n03047690/ILSVRC2012_val_00037434.JPEG -n03026506/ILSVRC2012_val_00045301.JPEG -n03109150/ILSVRC2012_val_00007412.JPEG -n04332243/ILSVRC2012_val_00018089.JPEG -n03876231/ILSVRC2012_val_00016176.JPEG -n03047690/ILSVRC2012_val_00040110.JPEG -n01728920/ILSVRC2012_val_00001042.JPEG -n03393912/ILSVRC2012_val_00020863.JPEG -n02814860/ILSVRC2012_val_00045456.JPEG -n01685808/ILSVRC2012_val_00046349.JPEG -n04285008/ILSVRC2012_val_00008392.JPEG -n01616318/ILSVRC2012_val_00024514.JPEG -n01734418/ILSVRC2012_val_00019383.JPEG -n02134084/ILSVRC2012_val_00007713.JPEG -n03494278/ILSVRC2012_val_00028082.JPEG -n03970156/ILSVRC2012_val_00044213.JPEG -n03786901/ILSVRC2012_val_00006228.JPEG -n01798484/ILSVRC2012_val_00041021.JPEG -n04239074/ILSVRC2012_val_00014551.JPEG -n02793495/ILSVRC2012_val_00035179.JPEG -n01667114/ILSVRC2012_val_00001636.JPEG -n01943899/ILSVRC2012_val_00009730.JPEG -n01983481/ILSVRC2012_val_00028657.JPEG -n03759954/ILSVRC2012_val_00047866.JPEG -n03376595/ILSVRC2012_val_00038258.JPEG -n11939491/ILSVRC2012_val_00009188.JPEG -n03445924/ILSVRC2012_val_00032168.JPEG -n01986214/ILSVRC2012_val_00040059.JPEG -n01945685/ILSVRC2012_val_00016138.JPEG -n02108000/ILSVRC2012_val_00048636.JPEG -n03887697/ILSVRC2012_val_00007657.JPEG -n02108000/ILSVRC2012_val_00023760.JPEG -n02092002/ILSVRC2012_val_00013361.JPEG -n02087394/ILSVRC2012_val_00000102.JPEG -n02115641/ILSVRC2012_val_00017164.JPEG -n01820546/ILSVRC2012_val_00006715.JPEG -n02165105/ILSVRC2012_val_00038929.JPEG -n03595614/ILSVRC2012_val_00005596.JPEG -n01930112/ILSVRC2012_val_00012846.JPEG -n02134084/ILSVRC2012_val_00010742.JPEG -n03424325/ILSVRC2012_val_00009791.JPEG -n04317175/ILSVRC2012_val_00009153.JPEG -n01695060/ILSVRC2012_val_00014794.JPEG -n04604644/ILSVRC2012_val_00021878.JPEG -n01807496/ILSVRC2012_val_00003676.JPEG -n02086079/ILSVRC2012_val_00020926.JPEG -n04252225/ILSVRC2012_val_00043941.JPEG -n07768694/ILSVRC2012_val_00012211.JPEG -n04435653/ILSVRC2012_val_00027772.JPEG -n04270147/ILSVRC2012_val_00004044.JPEG -n01592084/ILSVRC2012_val_00012836.JPEG -n02834397/ILSVRC2012_val_00041817.JPEG -n03662601/ILSVRC2012_val_00016448.JPEG -n03920288/ILSVRC2012_val_00011763.JPEG -n04347754/ILSVRC2012_val_00011046.JPEG -n04328186/ILSVRC2012_val_00031291.JPEG -n03223299/ILSVRC2012_val_00004922.JPEG -n03444034/ILSVRC2012_val_00047734.JPEG -n07718747/ILSVRC2012_val_00006854.JPEG -n04311174/ILSVRC2012_val_00030265.JPEG -n03803284/ILSVRC2012_val_00020872.JPEG -n02802426/ILSVRC2012_val_00003772.JPEG -n02226429/ILSVRC2012_val_00037042.JPEG -n03691459/ILSVRC2012_val_00034656.JPEG -n09421951/ILSVRC2012_val_00036544.JPEG -n02802426/ILSVRC2012_val_00018104.JPEG -n02807133/ILSVRC2012_val_00049413.JPEG -n02966687/ILSVRC2012_val_00043450.JPEG -n01729977/ILSVRC2012_val_00007710.JPEG -n03404251/ILSVRC2012_val_00004835.JPEG -n02870880/ILSVRC2012_val_00018286.JPEG -n01914609/ILSVRC2012_val_00031110.JPEG -n03617480/ILSVRC2012_val_00018442.JPEG -n07714571/ILSVRC2012_val_00007647.JPEG -n03141823/ILSVRC2012_val_00007337.JPEG -n03218198/ILSVRC2012_val_00049755.JPEG -n07718747/ILSVRC2012_val_00040344.JPEG -n02123394/ILSVRC2012_val_00008986.JPEG -n02091134/ILSVRC2012_val_00012262.JPEG -n02097298/ILSVRC2012_val_00043974.JPEG -n04317175/ILSVRC2012_val_00032866.JPEG -n03691459/ILSVRC2012_val_00000783.JPEG -n02951585/ILSVRC2012_val_00018344.JPEG -n02870880/ILSVRC2012_val_00019950.JPEG -n02769748/ILSVRC2012_val_00008482.JPEG -n03598930/ILSVRC2012_val_00041984.JPEG -n03450230/ILSVRC2012_val_00004901.JPEG -n01697457/ILSVRC2012_val_00007266.JPEG -n04264628/ILSVRC2012_val_00024441.JPEG -n03481172/ILSVRC2012_val_00025789.JPEG -n03930630/ILSVRC2012_val_00035897.JPEG -n07579787/ILSVRC2012_val_00039997.JPEG -n04509417/ILSVRC2012_val_00026754.JPEG -n02107574/ILSVRC2012_val_00004666.JPEG -n03642806/ILSVRC2012_val_00045326.JPEG -n02112706/ILSVRC2012_val_00028694.JPEG -n02109047/ILSVRC2012_val_00003069.JPEG -n03425413/ILSVRC2012_val_00015654.JPEG -n07920052/ILSVRC2012_val_00022894.JPEG -n02268443/ILSVRC2012_val_00016926.JPEG -n01735189/ILSVRC2012_val_00039522.JPEG -n03291819/ILSVRC2012_val_00038807.JPEG -n02965783/ILSVRC2012_val_00021101.JPEG -n03633091/ILSVRC2012_val_00006333.JPEG -n04326547/ILSVRC2012_val_00001505.JPEG -n02101388/ILSVRC2012_val_00036408.JPEG -n03000247/ILSVRC2012_val_00016036.JPEG -n03792972/ILSVRC2012_val_00002528.JPEG -n04392985/ILSVRC2012_val_00023462.JPEG -n01843383/ILSVRC2012_val_00014068.JPEG -n04208210/ILSVRC2012_val_00049452.JPEG -n07860988/ILSVRC2012_val_00038923.JPEG -n07749582/ILSVRC2012_val_00040080.JPEG -n02091831/ILSVRC2012_val_00000300.JPEG -n07753592/ILSVRC2012_val_00002187.JPEG -n03527444/ILSVRC2012_val_00024999.JPEG -n01776313/ILSVRC2012_val_00003577.JPEG -n01728920/ILSVRC2012_val_00042312.JPEG -n02860847/ILSVRC2012_val_00042115.JPEG -n04154565/ILSVRC2012_val_00039125.JPEG -n01580077/ILSVRC2012_val_00022505.JPEG -n01847000/ILSVRC2012_val_00006399.JPEG -n02101556/ILSVRC2012_val_00047295.JPEG -n02666196/ILSVRC2012_val_00009782.JPEG -n03666591/ILSVRC2012_val_00015019.JPEG -n04086273/ILSVRC2012_val_00009333.JPEG -n04447861/ILSVRC2012_val_00000449.JPEG -n02105641/ILSVRC2012_val_00041351.JPEG -n03623198/ILSVRC2012_val_00016824.JPEG -n02106550/ILSVRC2012_val_00049351.JPEG -n04192698/ILSVRC2012_val_00049941.JPEG -n04263257/ILSVRC2012_val_00009658.JPEG -n07579787/ILSVRC2012_val_00017367.JPEG -n02091467/ILSVRC2012_val_00049263.JPEG -n03895866/ILSVRC2012_val_00012886.JPEG -n04532106/ILSVRC2012_val_00019133.JPEG -n02423022/ILSVRC2012_val_00046413.JPEG -n02097209/ILSVRC2012_val_00011057.JPEG -n02114367/ILSVRC2012_val_00047767.JPEG -n02110063/ILSVRC2012_val_00034291.JPEG -n01614925/ILSVRC2012_val_00046632.JPEG -n02088094/ILSVRC2012_val_00036395.JPEG -n01739381/ILSVRC2012_val_00039455.JPEG -n03775546/ILSVRC2012_val_00000173.JPEG -n02909870/ILSVRC2012_val_00042633.JPEG -n02259212/ILSVRC2012_val_00010192.JPEG -n02999410/ILSVRC2012_val_00035721.JPEG -n01664065/ILSVRC2012_val_00014316.JPEG -n04026417/ILSVRC2012_val_00026615.JPEG -n02226429/ILSVRC2012_val_00000972.JPEG -n02788148/ILSVRC2012_val_00022424.JPEG -n01774384/ILSVRC2012_val_00048406.JPEG -n07590611/ILSVRC2012_val_00014121.JPEG -n02106166/ILSVRC2012_val_00008138.JPEG -n04141076/ILSVRC2012_val_00026817.JPEG -n03347037/ILSVRC2012_val_00033001.JPEG -n02787622/ILSVRC2012_val_00018617.JPEG -n01986214/ILSVRC2012_val_00040913.JPEG -n01693334/ILSVRC2012_val_00023246.JPEG -n04515003/ILSVRC2012_val_00038019.JPEG -n02489166/ILSVRC2012_val_00011904.JPEG -n04560804/ILSVRC2012_val_00013257.JPEG -n03916031/ILSVRC2012_val_00013585.JPEG -n02085936/ILSVRC2012_val_00012291.JPEG -n04099969/ILSVRC2012_val_00037756.JPEG -n03495258/ILSVRC2012_val_00021401.JPEG -n04149813/ILSVRC2012_val_00021901.JPEG -n07745940/ILSVRC2012_val_00012728.JPEG -n02086910/ILSVRC2012_val_00021961.JPEG -n02088364/ILSVRC2012_val_00042531.JPEG -n02510455/ILSVRC2012_val_00045697.JPEG -n04465501/ILSVRC2012_val_00028200.JPEG -n07590611/ILSVRC2012_val_00039174.JPEG -n01872401/ILSVRC2012_val_00034476.JPEG -n04270147/ILSVRC2012_val_00005377.JPEG -n03929855/ILSVRC2012_val_00013102.JPEG -n07684084/ILSVRC2012_val_00043611.JPEG -n03160309/ILSVRC2012_val_00000330.JPEG -n03633091/ILSVRC2012_val_00022723.JPEG -n01871265/ILSVRC2012_val_00049994.JPEG -n02795169/ILSVRC2012_val_00014204.JPEG -n03127925/ILSVRC2012_val_00037023.JPEG -n03666591/ILSVRC2012_val_00041936.JPEG -n04264628/ILSVRC2012_val_00031902.JPEG -n04026417/ILSVRC2012_val_00006166.JPEG -n02102973/ILSVRC2012_val_00009428.JPEG -n04201297/ILSVRC2012_val_00046889.JPEG -n01983481/ILSVRC2012_val_00048921.JPEG -n02096585/ILSVRC2012_val_00035182.JPEG -n04033901/ILSVRC2012_val_00034976.JPEG -n01855672/ILSVRC2012_val_00016195.JPEG -n06596364/ILSVRC2012_val_00009212.JPEG -n03250847/ILSVRC2012_val_00011127.JPEG -n04275548/ILSVRC2012_val_00018751.JPEG -n02101388/ILSVRC2012_val_00031633.JPEG -n03930630/ILSVRC2012_val_00038049.JPEG -n13037406/ILSVRC2012_val_00000200.JPEG -n01498041/ILSVRC2012_val_00006402.JPEG -n02981792/ILSVRC2012_val_00019980.JPEG -n02120079/ILSVRC2012_val_00046934.JPEG -n02006656/ILSVRC2012_val_00000878.JPEG -n02951358/ILSVRC2012_val_00032600.JPEG -n02834397/ILSVRC2012_val_00010541.JPEG -n02169497/ILSVRC2012_val_00020652.JPEG -n02441942/ILSVRC2012_val_00028413.JPEG -n02391049/ILSVRC2012_val_00019146.JPEG -n04162706/ILSVRC2012_val_00004653.JPEG -n07684084/ILSVRC2012_val_00028029.JPEG -n02883205/ILSVRC2012_val_00015595.JPEG -n03424325/ILSVRC2012_val_00027617.JPEG -n01978287/ILSVRC2012_val_00020675.JPEG -n04265275/ILSVRC2012_val_00037218.JPEG -n04228054/ILSVRC2012_val_00006208.JPEG -n04596742/ILSVRC2012_val_00007451.JPEG -n04532670/ILSVRC2012_val_00016295.JPEG -n03899768/ILSVRC2012_val_00023647.JPEG -n01664065/ILSVRC2012_val_00000958.JPEG -n07749582/ILSVRC2012_val_00035888.JPEG -n02229544/ILSVRC2012_val_00004706.JPEG -n02797295/ILSVRC2012_val_00017307.JPEG -n04590129/ILSVRC2012_val_00015963.JPEG -n03947888/ILSVRC2012_val_00032856.JPEG -n02134418/ILSVRC2012_val_00032576.JPEG -n01641577/ILSVRC2012_val_00033863.JPEG -n02018207/ILSVRC2012_val_00038948.JPEG -n02988304/ILSVRC2012_val_00041129.JPEG -n02480855/ILSVRC2012_val_00042839.JPEG -n03417042/ILSVRC2012_val_00005744.JPEG -n04536866/ILSVRC2012_val_00025372.JPEG -n04286575/ILSVRC2012_val_00006882.JPEG -n02110806/ILSVRC2012_val_00045859.JPEG -n02281406/ILSVRC2012_val_00005117.JPEG -n01689811/ILSVRC2012_val_00024252.JPEG -n03291819/ILSVRC2012_val_00009905.JPEG -n01795545/ILSVRC2012_val_00007126.JPEG -n01806567/ILSVRC2012_val_00035426.JPEG -n04501370/ILSVRC2012_val_00024489.JPEG -n02119789/ILSVRC2012_val_00018821.JPEG -n02840245/ILSVRC2012_val_00018669.JPEG -n04525038/ILSVRC2012_val_00012324.JPEG -n02279972/ILSVRC2012_val_00023084.JPEG -n02814860/ILSVRC2012_val_00016685.JPEG -n04209239/ILSVRC2012_val_00044909.JPEG -n01687978/ILSVRC2012_val_00040115.JPEG -n07730033/ILSVRC2012_val_00010660.JPEG -n07697537/ILSVRC2012_val_00023660.JPEG -n03590841/ILSVRC2012_val_00028060.JPEG -n02966193/ILSVRC2012_val_00047099.JPEG -n03733131/ILSVRC2012_val_00034620.JPEG -n03733281/ILSVRC2012_val_00011827.JPEG -n03956157/ILSVRC2012_val_00002620.JPEG -n03763968/ILSVRC2012_val_00011906.JPEG -n06359193/ILSVRC2012_val_00013443.JPEG -n02916936/ILSVRC2012_val_00019479.JPEG -n02280649/ILSVRC2012_val_00035809.JPEG -n01824575/ILSVRC2012_val_00047094.JPEG -n03478589/ILSVRC2012_val_00044229.JPEG -n02655020/ILSVRC2012_val_00008212.JPEG -n02109525/ILSVRC2012_val_00035820.JPEG -n03777568/ILSVRC2012_val_00013826.JPEG -n04335435/ILSVRC2012_val_00049437.JPEG -n02111129/ILSVRC2012_val_00042400.JPEG -n01728920/ILSVRC2012_val_00027773.JPEG -n03483316/ILSVRC2012_val_00026886.JPEG -n01883070/ILSVRC2012_val_00032499.JPEG -n03944341/ILSVRC2012_val_00004364.JPEG -n02095889/ILSVRC2012_val_00038237.JPEG -n12768682/ILSVRC2012_val_00036532.JPEG -n03594734/ILSVRC2012_val_00045325.JPEG -n01753488/ILSVRC2012_val_00025598.JPEG -n07697313/ILSVRC2012_val_00026756.JPEG -n03085013/ILSVRC2012_val_00014436.JPEG -n04597913/ILSVRC2012_val_00034343.JPEG -n01675722/ILSVRC2012_val_00008226.JPEG -n02492660/ILSVRC2012_val_00016829.JPEG -n03291819/ILSVRC2012_val_00023324.JPEG -n03063689/ILSVRC2012_val_00045069.JPEG -n02441942/ILSVRC2012_val_00022744.JPEG -n07873807/ILSVRC2012_val_00035536.JPEG -n01817953/ILSVRC2012_val_00012003.JPEG -n02090721/ILSVRC2012_val_00023769.JPEG -n01817953/ILSVRC2012_val_00002791.JPEG -n03770439/ILSVRC2012_val_00020532.JPEG -n02099712/ILSVRC2012_val_00016148.JPEG -n04443257/ILSVRC2012_val_00032397.JPEG -n02093991/ILSVRC2012_val_00032239.JPEG -n02101388/ILSVRC2012_val_00031014.JPEG -n04542943/ILSVRC2012_val_00021295.JPEG -n04589890/ILSVRC2012_val_00011099.JPEG -n12057211/ILSVRC2012_val_00009076.JPEG -n03792972/ILSVRC2012_val_00038176.JPEG -n02104365/ILSVRC2012_val_00005937.JPEG -n04277352/ILSVRC2012_val_00004080.JPEG -n07684084/ILSVRC2012_val_00046907.JPEG -n03250847/ILSVRC2012_val_00006941.JPEG -n03125729/ILSVRC2012_val_00000041.JPEG -n04004767/ILSVRC2012_val_00031132.JPEG -n03127747/ILSVRC2012_val_00023927.JPEG -n02727426/ILSVRC2012_val_00018587.JPEG -n04552348/ILSVRC2012_val_00047529.JPEG -n02165105/ILSVRC2012_val_00019643.JPEG -n04532670/ILSVRC2012_val_00037270.JPEG -n03796401/ILSVRC2012_val_00040512.JPEG -n03146219/ILSVRC2012_val_00003217.JPEG -n03259280/ILSVRC2012_val_00014647.JPEG -n02667093/ILSVRC2012_val_00029439.JPEG -n01530575/ILSVRC2012_val_00012814.JPEG -n03717622/ILSVRC2012_val_00034613.JPEG -n03485407/ILSVRC2012_val_00005121.JPEG -n03666591/ILSVRC2012_val_00010010.JPEG -n03000684/ILSVRC2012_val_00035266.JPEG -n04482393/ILSVRC2012_val_00038027.JPEG -n04515003/ILSVRC2012_val_00042717.JPEG -n04479046/ILSVRC2012_val_00007996.JPEG -n03995372/ILSVRC2012_val_00027123.JPEG -n02206856/ILSVRC2012_val_00044010.JPEG -n03000134/ILSVRC2012_val_00014448.JPEG -n01917289/ILSVRC2012_val_00008692.JPEG -n04136333/ILSVRC2012_val_00042756.JPEG -n02107312/ILSVRC2012_val_00024305.JPEG -n01924916/ILSVRC2012_val_00039672.JPEG -n07802026/ILSVRC2012_val_00017729.JPEG -n03673027/ILSVRC2012_val_00005111.JPEG -n02129604/ILSVRC2012_val_00034686.JPEG -n03920288/ILSVRC2012_val_00010434.JPEG -n04200800/ILSVRC2012_val_00003880.JPEG -n02281787/ILSVRC2012_val_00040785.JPEG -n03134739/ILSVRC2012_val_00045455.JPEG -n13054560/ILSVRC2012_val_00042631.JPEG -n02097130/ILSVRC2012_val_00048493.JPEG -n01491361/ILSVRC2012_val_00024854.JPEG -n07716906/ILSVRC2012_val_00013755.JPEG -n02100735/ILSVRC2012_val_00030271.JPEG -n02110341/ILSVRC2012_val_00027840.JPEG -n02236044/ILSVRC2012_val_00004255.JPEG -n03347037/ILSVRC2012_val_00023050.JPEG -n02906734/ILSVRC2012_val_00028772.JPEG -n02099267/ILSVRC2012_val_00032490.JPEG -n02009912/ILSVRC2012_val_00034776.JPEG -n01664065/ILSVRC2012_val_00026634.JPEG -n03384352/ILSVRC2012_val_00025503.JPEG -n02484975/ILSVRC2012_val_00017290.JPEG -n04557648/ILSVRC2012_val_00003318.JPEG -n03792972/ILSVRC2012_val_00042646.JPEG -n02808440/ILSVRC2012_val_00002563.JPEG -n03843555/ILSVRC2012_val_00032354.JPEG -n01641577/ILSVRC2012_val_00019578.JPEG -n03594734/ILSVRC2012_val_00028663.JPEG -n02279972/ILSVRC2012_val_00019145.JPEG -n02101006/ILSVRC2012_val_00016520.JPEG -n01986214/ILSVRC2012_val_00012143.JPEG -n04376876/ILSVRC2012_val_00037242.JPEG -n02403003/ILSVRC2012_val_00027362.JPEG -n01592084/ILSVRC2012_val_00007912.JPEG -n02013706/ILSVRC2012_val_00031582.JPEG -n01677366/ILSVRC2012_val_00033698.JPEG -n02488291/ILSVRC2012_val_00003438.JPEG -n03742115/ILSVRC2012_val_00018986.JPEG -n02361337/ILSVRC2012_val_00008030.JPEG -n04235860/ILSVRC2012_val_00048416.JPEG -n02509815/ILSVRC2012_val_00025768.JPEG -n03197337/ILSVRC2012_val_00035747.JPEG -n03777568/ILSVRC2012_val_00026352.JPEG -n02088632/ILSVRC2012_val_00019481.JPEG -n02088094/ILSVRC2012_val_00042972.JPEG -n03527444/ILSVRC2012_val_00035955.JPEG -n03887697/ILSVRC2012_val_00043048.JPEG -n02219486/ILSVRC2012_val_00044296.JPEG -n01824575/ILSVRC2012_val_00019511.JPEG -n04277352/ILSVRC2012_val_00006016.JPEG -n02445715/ILSVRC2012_val_00005312.JPEG -n02091134/ILSVRC2012_val_00007933.JPEG -n02089973/ILSVRC2012_val_00033611.JPEG -n02480855/ILSVRC2012_val_00005826.JPEG -n02012849/ILSVRC2012_val_00037379.JPEG -n02093256/ILSVRC2012_val_00035952.JPEG -n02099712/ILSVRC2012_val_00000375.JPEG -n02177972/ILSVRC2012_val_00041117.JPEG -n01775062/ILSVRC2012_val_00049134.JPEG -n01855672/ILSVRC2012_val_00008834.JPEG -n02097658/ILSVRC2012_val_00049653.JPEG -n04251144/ILSVRC2012_val_00027861.JPEG -n02105641/ILSVRC2012_val_00041865.JPEG -n03272010/ILSVRC2012_val_00000374.JPEG -n13044778/ILSVRC2012_val_00037473.JPEG -n02328150/ILSVRC2012_val_00002723.JPEG -n07932039/ILSVRC2012_val_00029971.JPEG -n03062245/ILSVRC2012_val_00038514.JPEG -n03000247/ILSVRC2012_val_00023046.JPEG -n01735189/ILSVRC2012_val_00018284.JPEG -n09229709/ILSVRC2012_val_00014026.JPEG -n07584110/ILSVRC2012_val_00028538.JPEG -n02749479/ILSVRC2012_val_00034057.JPEG -n01734418/ILSVRC2012_val_00000941.JPEG -n01797886/ILSVRC2012_val_00042038.JPEG -n02233338/ILSVRC2012_val_00021514.JPEG -n06785654/ILSVRC2012_val_00011264.JPEG -n04277352/ILSVRC2012_val_00011226.JPEG -n02085782/ILSVRC2012_val_00048123.JPEG -n04591157/ILSVRC2012_val_00031551.JPEG -n02009912/ILSVRC2012_val_00011369.JPEG -n02091032/ILSVRC2012_val_00045382.JPEG -n03770439/ILSVRC2012_val_00011367.JPEG -n03534580/ILSVRC2012_val_00028977.JPEG -n03697007/ILSVRC2012_val_00040424.JPEG -n04371774/ILSVRC2012_val_00007021.JPEG -n03877472/ILSVRC2012_val_00045869.JPEG -n04525305/ILSVRC2012_val_00049713.JPEG -n04317175/ILSVRC2012_val_00046901.JPEG -n02364673/ILSVRC2012_val_00005591.JPEG -n01514859/ILSVRC2012_val_00032930.JPEG -n02226429/ILSVRC2012_val_00025061.JPEG -n04517823/ILSVRC2012_val_00036519.JPEG -n02102480/ILSVRC2012_val_00000539.JPEG -n09468604/ILSVRC2012_val_00037143.JPEG -n02104365/ILSVRC2012_val_00032923.JPEG -n04266014/ILSVRC2012_val_00039273.JPEG -n04465501/ILSVRC2012_val_00004854.JPEG -n03179701/ILSVRC2012_val_00019796.JPEG -n02643566/ILSVRC2012_val_00003610.JPEG -n02106382/ILSVRC2012_val_00032822.JPEG -n02087394/ILSVRC2012_val_00000077.JPEG -n03481172/ILSVRC2012_val_00021070.JPEG -n03787032/ILSVRC2012_val_00031999.JPEG -n02356798/ILSVRC2012_val_00007315.JPEG -n04389033/ILSVRC2012_val_00048799.JPEG -n01630670/ILSVRC2012_val_00020393.JPEG -n04008634/ILSVRC2012_val_00007055.JPEG -n01631663/ILSVRC2012_val_00023450.JPEG -n03476684/ILSVRC2012_val_00037950.JPEG -n03337140/ILSVRC2012_val_00021258.JPEG -n02791270/ILSVRC2012_val_00022409.JPEG -n03954731/ILSVRC2012_val_00001966.JPEG -n07579787/ILSVRC2012_val_00031247.JPEG -n03250847/ILSVRC2012_val_00000542.JPEG -n04229816/ILSVRC2012_val_00049768.JPEG -n02486261/ILSVRC2012_val_00025698.JPEG -n04465501/ILSVRC2012_val_00020987.JPEG -n02086240/ILSVRC2012_val_00005898.JPEG -n03272562/ILSVRC2012_val_00048678.JPEG -n03857828/ILSVRC2012_val_00013357.JPEG -n02865351/ILSVRC2012_val_00009940.JPEG -n04596742/ILSVRC2012_val_00049551.JPEG -n07747607/ILSVRC2012_val_00023626.JPEG -n02917067/ILSVRC2012_val_00033558.JPEG -n03920288/ILSVRC2012_val_00030325.JPEG -n04366367/ILSVRC2012_val_00027827.JPEG -n04149813/ILSVRC2012_val_00044442.JPEG -n04033901/ILSVRC2012_val_00038824.JPEG -n02786058/ILSVRC2012_val_00038219.JPEG -n01824575/ILSVRC2012_val_00038638.JPEG -n07753592/ILSVRC2012_val_00022037.JPEG -n03355925/ILSVRC2012_val_00046366.JPEG -n02101556/ILSVRC2012_val_00018827.JPEG -n02119022/ILSVRC2012_val_00000157.JPEG -n04525305/ILSVRC2012_val_00039221.JPEG -n04596742/ILSVRC2012_val_00024149.JPEG -n12985857/ILSVRC2012_val_00010464.JPEG -n07873807/ILSVRC2012_val_00048050.JPEG -n03495258/ILSVRC2012_val_00010855.JPEG -n02071294/ILSVRC2012_val_00024324.JPEG -n07615774/ILSVRC2012_val_00049964.JPEG -n02443114/ILSVRC2012_val_00008891.JPEG -n01669191/ILSVRC2012_val_00010145.JPEG -n01692333/ILSVRC2012_val_00046106.JPEG -n02492660/ILSVRC2012_val_00048140.JPEG -n02120505/ILSVRC2012_val_00039937.JPEG -n03775546/ILSVRC2012_val_00029594.JPEG -n02364673/ILSVRC2012_val_00027337.JPEG -n13044778/ILSVRC2012_val_00042840.JPEG -n03992509/ILSVRC2012_val_00025632.JPEG -n02793495/ILSVRC2012_val_00011475.JPEG -n02281787/ILSVRC2012_val_00011979.JPEG -n04179913/ILSVRC2012_val_00001127.JPEG -n04179913/ILSVRC2012_val_00034658.JPEG -n07717410/ILSVRC2012_val_00027719.JPEG -n04507155/ILSVRC2012_val_00019266.JPEG -n02870880/ILSVRC2012_val_00021309.JPEG -n07716906/ILSVRC2012_val_00031469.JPEG -n02096051/ILSVRC2012_val_00011394.JPEG -n01739381/ILSVRC2012_val_00003095.JPEG -n07614500/ILSVRC2012_val_00039323.JPEG -n02871525/ILSVRC2012_val_00047726.JPEG -n02088632/ILSVRC2012_val_00044875.JPEG -n02098413/ILSVRC2012_val_00048235.JPEG -n03958227/ILSVRC2012_val_00004566.JPEG -n02025239/ILSVRC2012_val_00004791.JPEG -n03866082/ILSVRC2012_val_00003476.JPEG -n04515003/ILSVRC2012_val_00007908.JPEG -n02256656/ILSVRC2012_val_00010562.JPEG -n01877812/ILSVRC2012_val_00026606.JPEG -n03742115/ILSVRC2012_val_00004111.JPEG -n02002724/ILSVRC2012_val_00014949.JPEG -n01616318/ILSVRC2012_val_00022088.JPEG -n03781244/ILSVRC2012_val_00049439.JPEG -n06596364/ILSVRC2012_val_00003830.JPEG -n03938244/ILSVRC2012_val_00021635.JPEG -n02606052/ILSVRC2012_val_00045650.JPEG -n02087046/ILSVRC2012_val_00000170.JPEG -n03673027/ILSVRC2012_val_00034477.JPEG -n02328150/ILSVRC2012_val_00015683.JPEG -n02422106/ILSVRC2012_val_00032603.JPEG -n03680355/ILSVRC2012_val_00043555.JPEG -n04200800/ILSVRC2012_val_00024574.JPEG -n04118776/ILSVRC2012_val_00013176.JPEG -n03891251/ILSVRC2012_val_00034458.JPEG -n04350905/ILSVRC2012_val_00031712.JPEG -n02206856/ILSVRC2012_val_00017073.JPEG -n02835271/ILSVRC2012_val_00040248.JPEG -n03775071/ILSVRC2012_val_00019606.JPEG -n03250847/ILSVRC2012_val_00008089.JPEG -n07749582/ILSVRC2012_val_00018769.JPEG -n02279972/ILSVRC2012_val_00049460.JPEG -n02892767/ILSVRC2012_val_00012129.JPEG -n02930766/ILSVRC2012_val_00034269.JPEG -n02011460/ILSVRC2012_val_00008929.JPEG -n02102480/ILSVRC2012_val_00045044.JPEG -n04330267/ILSVRC2012_val_00046914.JPEG -n04367480/ILSVRC2012_val_00039160.JPEG -n01629819/ILSVRC2012_val_00016747.JPEG -n02980441/ILSVRC2012_val_00033614.JPEG -n03133878/ILSVRC2012_val_00011276.JPEG -n02840245/ILSVRC2012_val_00042130.JPEG -n01440764/ILSVRC2012_val_00029930.JPEG -n03623198/ILSVRC2012_val_00039114.JPEG -n04404412/ILSVRC2012_val_00037285.JPEG -n02125311/ILSVRC2012_val_00021045.JPEG -n03857828/ILSVRC2012_val_00039136.JPEG -n09472597/ILSVRC2012_val_00019071.JPEG -n02098413/ILSVRC2012_val_00005255.JPEG -n02487347/ILSVRC2012_val_00039563.JPEG -n02692877/ILSVRC2012_val_00037584.JPEG -n03388043/ILSVRC2012_val_00049852.JPEG -n04347754/ILSVRC2012_val_00029680.JPEG -n02504013/ILSVRC2012_val_00022872.JPEG -n02408429/ILSVRC2012_val_00025011.JPEG -n01860187/ILSVRC2012_val_00015899.JPEG -n09472597/ILSVRC2012_val_00031323.JPEG -n03950228/ILSVRC2012_val_00009107.JPEG -n03657121/ILSVRC2012_val_00007448.JPEG -n03461385/ILSVRC2012_val_00027864.JPEG -n03888605/ILSVRC2012_val_00033964.JPEG -n04392985/ILSVRC2012_val_00017709.JPEG -n02094258/ILSVRC2012_val_00038911.JPEG -n11939491/ILSVRC2012_val_00018189.JPEG -n04409515/ILSVRC2012_val_00046228.JPEG -n02128757/ILSVRC2012_val_00000186.JPEG -n03544143/ILSVRC2012_val_00011019.JPEG -n02190166/ILSVRC2012_val_00014356.JPEG -n02865351/ILSVRC2012_val_00031993.JPEG -n02486410/ILSVRC2012_val_00039253.JPEG -n03991062/ILSVRC2012_val_00043626.JPEG -n01491361/ILSVRC2012_val_00012328.JPEG -n07920052/ILSVRC2012_val_00029463.JPEG -n12985857/ILSVRC2012_val_00044046.JPEG -n03710721/ILSVRC2012_val_00016043.JPEG -n03535780/ILSVRC2012_val_00030209.JPEG -n04141076/ILSVRC2012_val_00017679.JPEG -n03041632/ILSVRC2012_val_00004815.JPEG -n01644373/ILSVRC2012_val_00003985.JPEG -n03796401/ILSVRC2012_val_00008394.JPEG -n03590841/ILSVRC2012_val_00009971.JPEG -n04264628/ILSVRC2012_val_00044098.JPEG -n02325366/ILSVRC2012_val_00033548.JPEG -n02442845/ILSVRC2012_val_00005621.JPEG -n03014705/ILSVRC2012_val_00017258.JPEG -n03388549/ILSVRC2012_val_00016167.JPEG -n04336792/ILSVRC2012_val_00006542.JPEG -n03291819/ILSVRC2012_val_00034362.JPEG -n02102177/ILSVRC2012_val_00010758.JPEG -n03133878/ILSVRC2012_val_00044396.JPEG -n04033901/ILSVRC2012_val_00017841.JPEG -n02536864/ILSVRC2012_val_00004905.JPEG -n07880968/ILSVRC2012_val_00010112.JPEG -n02317335/ILSVRC2012_val_00007644.JPEG -n03775071/ILSVRC2012_val_00030946.JPEG -n04275548/ILSVRC2012_val_00043164.JPEG -n01990800/ILSVRC2012_val_00005954.JPEG -n03891332/ILSVRC2012_val_00044621.JPEG -n03657121/ILSVRC2012_val_00000359.JPEG -n01537544/ILSVRC2012_val_00047272.JPEG -n04263257/ILSVRC2012_val_00045097.JPEG -n01924916/ILSVRC2012_val_00024354.JPEG -n03961711/ILSVRC2012_val_00037441.JPEG -n01665541/ILSVRC2012_val_00015568.JPEG -n04070727/ILSVRC2012_val_00046187.JPEG -n01944390/ILSVRC2012_val_00045031.JPEG -n04591713/ILSVRC2012_val_00027648.JPEG -n03180011/ILSVRC2012_val_00035357.JPEG -n03857828/ILSVRC2012_val_00048946.JPEG -n02092339/ILSVRC2012_val_00015798.JPEG -n01773157/ILSVRC2012_val_00001370.JPEG -n03929855/ILSVRC2012_val_00025618.JPEG -n02437616/ILSVRC2012_val_00020158.JPEG -n03467068/ILSVRC2012_val_00049842.JPEG -n03498962/ILSVRC2012_val_00031055.JPEG -n03534580/ILSVRC2012_val_00039018.JPEG -n04049303/ILSVRC2012_val_00046223.JPEG -n02110341/ILSVRC2012_val_00019824.JPEG -n03417042/ILSVRC2012_val_00037947.JPEG -n02669723/ILSVRC2012_val_00019360.JPEG -n03089624/ILSVRC2012_val_00026113.JPEG -n03658185/ILSVRC2012_val_00037859.JPEG -n07892512/ILSVRC2012_val_00037863.JPEG -n02747177/ILSVRC2012_val_00024193.JPEG -n01950731/ILSVRC2012_val_00031822.JPEG -n02871525/ILSVRC2012_val_00000879.JPEG -n02992529/ILSVRC2012_val_00008314.JPEG -n02111889/ILSVRC2012_val_00041377.JPEG -n03271574/ILSVRC2012_val_00009217.JPEG -n02101556/ILSVRC2012_val_00008944.JPEG -n02091635/ILSVRC2012_val_00041912.JPEG -n02110806/ILSVRC2012_val_00046197.JPEG -n02088238/ILSVRC2012_val_00040185.JPEG -n04550184/ILSVRC2012_val_00043210.JPEG -n04554684/ILSVRC2012_val_00013010.JPEG -n04040759/ILSVRC2012_val_00034869.JPEG -n01677366/ILSVRC2012_val_00027206.JPEG -n03188531/ILSVRC2012_val_00039269.JPEG -n01496331/ILSVRC2012_val_00008749.JPEG -n01818515/ILSVRC2012_val_00007576.JPEG -n01685808/ILSVRC2012_val_00004757.JPEG -n03476684/ILSVRC2012_val_00043418.JPEG -n03388183/ILSVRC2012_val_00035197.JPEG -n01983481/ILSVRC2012_val_00038154.JPEG -n04209239/ILSVRC2012_val_00026264.JPEG -n04517823/ILSVRC2012_val_00039615.JPEG -n03877472/ILSVRC2012_val_00001424.JPEG -n02091635/ILSVRC2012_val_00000079.JPEG -n01514859/ILSVRC2012_val_00039943.JPEG -n02747177/ILSVRC2012_val_00014213.JPEG -n02109047/ILSVRC2012_val_00006257.JPEG -n03297495/ILSVRC2012_val_00004741.JPEG -n03924679/ILSVRC2012_val_00016983.JPEG -n03776460/ILSVRC2012_val_00020024.JPEG -n04258138/ILSVRC2012_val_00032454.JPEG -n03961711/ILSVRC2012_val_00016375.JPEG -n02093647/ILSVRC2012_val_00033466.JPEG -n04355338/ILSVRC2012_val_00036305.JPEG -n02071294/ILSVRC2012_val_00002166.JPEG -n04037443/ILSVRC2012_val_00008457.JPEG -n01749939/ILSVRC2012_val_00046847.JPEG -n01843383/ILSVRC2012_val_00049553.JPEG -n02807133/ILSVRC2012_val_00005145.JPEG -n03544143/ILSVRC2012_val_00022005.JPEG -n02028035/ILSVRC2012_val_00002170.JPEG -n01669191/ILSVRC2012_val_00043444.JPEG -n02799071/ILSVRC2012_val_00006073.JPEG -n02111277/ILSVRC2012_val_00008111.JPEG -n04540053/ILSVRC2012_val_00026071.JPEG -n02894605/ILSVRC2012_val_00025334.JPEG -n03908714/ILSVRC2012_val_00046578.JPEG -n01729322/ILSVRC2012_val_00016392.JPEG -n01945685/ILSVRC2012_val_00041593.JPEG -n03085013/ILSVRC2012_val_00042686.JPEG -n02423022/ILSVRC2012_val_00021795.JPEG -n03717622/ILSVRC2012_val_00015092.JPEG -n01806143/ILSVRC2012_val_00049584.JPEG -n02098286/ILSVRC2012_val_00027017.JPEG -n03065424/ILSVRC2012_val_00047502.JPEG -n03877845/ILSVRC2012_val_00003919.JPEG -n02110341/ILSVRC2012_val_00003355.JPEG -n03690938/ILSVRC2012_val_00037512.JPEG -n13037406/ILSVRC2012_val_00012112.JPEG -n09332890/ILSVRC2012_val_00011436.JPEG -n03814906/ILSVRC2012_val_00040617.JPEG -n02087046/ILSVRC2012_val_00015701.JPEG -n02094114/ILSVRC2012_val_00007392.JPEG -n03841143/ILSVRC2012_val_00014722.JPEG -n03400231/ILSVRC2012_val_00009196.JPEG -n02398521/ILSVRC2012_val_00036081.JPEG -n02096294/ILSVRC2012_val_00011152.JPEG -n03240683/ILSVRC2012_val_00023790.JPEG -n03720891/ILSVRC2012_val_00023160.JPEG -n07860988/ILSVRC2012_val_00011386.JPEG -n03544143/ILSVRC2012_val_00017010.JPEG -n01818515/ILSVRC2012_val_00001163.JPEG -n02454379/ILSVRC2012_val_00038784.JPEG -n02814533/ILSVRC2012_val_00040706.JPEG -n02025239/ILSVRC2012_val_00003526.JPEG -n03733131/ILSVRC2012_val_00024037.JPEG -n07614500/ILSVRC2012_val_00049702.JPEG -n04404412/ILSVRC2012_val_00019755.JPEG -n03775546/ILSVRC2012_val_00035190.JPEG -n01978287/ILSVRC2012_val_00017751.JPEG -n02017213/ILSVRC2012_val_00043456.JPEG -n03042490/ILSVRC2012_val_00009357.JPEG -n01843065/ILSVRC2012_val_00014942.JPEG -n04367480/ILSVRC2012_val_00039395.JPEG -n03400231/ILSVRC2012_val_00022472.JPEG -n02486261/ILSVRC2012_val_00014940.JPEG -n01753488/ILSVRC2012_val_00027790.JPEG -n03131574/ILSVRC2012_val_00036262.JPEG -n04325704/ILSVRC2012_val_00047994.JPEG -n04501370/ILSVRC2012_val_00035595.JPEG -n03590841/ILSVRC2012_val_00039391.JPEG -n03018349/ILSVRC2012_val_00038333.JPEG -n02165105/ILSVRC2012_val_00040348.JPEG -n02488702/ILSVRC2012_val_00043067.JPEG -n07695742/ILSVRC2012_val_00033249.JPEG -n03843555/ILSVRC2012_val_00039328.JPEG -n03970156/ILSVRC2012_val_00033787.JPEG -n07932039/ILSVRC2012_val_00006934.JPEG -n03445924/ILSVRC2012_val_00011173.JPEG -n09835506/ILSVRC2012_val_00025002.JPEG -n02939185/ILSVRC2012_val_00003247.JPEG -n04141076/ILSVRC2012_val_00039518.JPEG -n02097474/ILSVRC2012_val_00025055.JPEG -n01692333/ILSVRC2012_val_00007579.JPEG -n02017213/ILSVRC2012_val_00023024.JPEG -n01729322/ILSVRC2012_val_00032012.JPEG -n02091244/ILSVRC2012_val_00012608.JPEG -n07716906/ILSVRC2012_val_00019550.JPEG -n03781244/ILSVRC2012_val_00014077.JPEG -n04270147/ILSVRC2012_val_00003369.JPEG -n02110627/ILSVRC2012_val_00006933.JPEG -n03498962/ILSVRC2012_val_00041471.JPEG -n03649909/ILSVRC2012_val_00020327.JPEG -n02095889/ILSVRC2012_val_00047487.JPEG -n01739381/ILSVRC2012_val_00013397.JPEG -n12267677/ILSVRC2012_val_00024975.JPEG -n01749939/ILSVRC2012_val_00029525.JPEG -n02105412/ILSVRC2012_val_00003545.JPEG -n04209239/ILSVRC2012_val_00013948.JPEG -n07745940/ILSVRC2012_val_00012216.JPEG -n03733805/ILSVRC2012_val_00023829.JPEG -n02112018/ILSVRC2012_val_00042213.JPEG -n02669723/ILSVRC2012_val_00020475.JPEG -n02094433/ILSVRC2012_val_00028993.JPEG -n03126707/ILSVRC2012_val_00026461.JPEG -n04152593/ILSVRC2012_val_00013135.JPEG -n03124043/ILSVRC2012_val_00032549.JPEG -n01630670/ILSVRC2012_val_00049350.JPEG -n02643566/ILSVRC2012_val_00025355.JPEG -n03837869/ILSVRC2012_val_00026256.JPEG -n04273569/ILSVRC2012_val_00007310.JPEG -n02100735/ILSVRC2012_val_00034436.JPEG -n04467665/ILSVRC2012_val_00032742.JPEG -n03188531/ILSVRC2012_val_00044826.JPEG -n03376595/ILSVRC2012_val_00002914.JPEG -n03459775/ILSVRC2012_val_00010573.JPEG -n03494278/ILSVRC2012_val_00018926.JPEG -n02110063/ILSVRC2012_val_00017722.JPEG -n02481823/ILSVRC2012_val_00038902.JPEG -n01770393/ILSVRC2012_val_00028814.JPEG -n02777292/ILSVRC2012_val_00015457.JPEG -n02095314/ILSVRC2012_val_00037195.JPEG -n02808304/ILSVRC2012_val_00018964.JPEG -n03775546/ILSVRC2012_val_00037888.JPEG -n02090379/ILSVRC2012_val_00024043.JPEG -n03888257/ILSVRC2012_val_00042262.JPEG -n02123597/ILSVRC2012_val_00039931.JPEG -n01644373/ILSVRC2012_val_00048995.JPEG -n03584829/ILSVRC2012_val_00019833.JPEG -n02233338/ILSVRC2012_val_00024767.JPEG -n02174001/ILSVRC2012_val_00038181.JPEG -n03773504/ILSVRC2012_val_00001525.JPEG -n07697313/ILSVRC2012_val_00040728.JPEG -n01820546/ILSVRC2012_val_00013739.JPEG -n03649909/ILSVRC2012_val_00025989.JPEG -n04548280/ILSVRC2012_val_00049764.JPEG -n01558993/ILSVRC2012_val_00028224.JPEG -n02276258/ILSVRC2012_val_00026877.JPEG -n02120079/ILSVRC2012_val_00034065.JPEG -n02033041/ILSVRC2012_val_00045006.JPEG -n09468604/ILSVRC2012_val_00008318.JPEG -n04522168/ILSVRC2012_val_00042947.JPEG -n02643566/ILSVRC2012_val_00021303.JPEG -n02114712/ILSVRC2012_val_00025845.JPEG -n01855672/ILSVRC2012_val_00026155.JPEG -n09229709/ILSVRC2012_val_00023304.JPEG -n02963159/ILSVRC2012_val_00019310.JPEG -n01756291/ILSVRC2012_val_00030623.JPEG -n03530642/ILSVRC2012_val_00007383.JPEG -n03041632/ILSVRC2012_val_00039665.JPEG -n03825788/ILSVRC2012_val_00038613.JPEG -n02102177/ILSVRC2012_val_00013127.JPEG -n02110958/ILSVRC2012_val_00028408.JPEG -n02395406/ILSVRC2012_val_00032734.JPEG -n03791053/ILSVRC2012_val_00045153.JPEG -n04522168/ILSVRC2012_val_00018977.JPEG -n01833805/ILSVRC2012_val_00041200.JPEG -n09399592/ILSVRC2012_val_00041801.JPEG -n04590129/ILSVRC2012_val_00025427.JPEG -n07930864/ILSVRC2012_val_00037747.JPEG -n03124170/ILSVRC2012_val_00035920.JPEG -n03666591/ILSVRC2012_val_00020197.JPEG -n01558993/ILSVRC2012_val_00041944.JPEG -n02441942/ILSVRC2012_val_00021127.JPEG -n03733131/ILSVRC2012_val_00012236.JPEG -n02106166/ILSVRC2012_val_00034069.JPEG -n02106662/ILSVRC2012_val_00031135.JPEG -n04259630/ILSVRC2012_val_00013276.JPEG -n04346328/ILSVRC2012_val_00042051.JPEG -n03187595/ILSVRC2012_val_00020238.JPEG -n02879718/ILSVRC2012_val_00015639.JPEG -n07565083/ILSVRC2012_val_00019149.JPEG -n02526121/ILSVRC2012_val_00041211.JPEG -n03445777/ILSVRC2012_val_00023215.JPEG -n04033901/ILSVRC2012_val_00008657.JPEG -n02120079/ILSVRC2012_val_00023960.JPEG -n01755581/ILSVRC2012_val_00016287.JPEG -n03944341/ILSVRC2012_val_00024974.JPEG -n04154565/ILSVRC2012_val_00031862.JPEG -n02823750/ILSVRC2012_val_00011370.JPEG -n03000134/ILSVRC2012_val_00010835.JPEG -n01914609/ILSVRC2012_val_00049977.JPEG -n02099712/ILSVRC2012_val_00011507.JPEG -n02099601/ILSVRC2012_val_00019212.JPEG -n02747177/ILSVRC2012_val_00021981.JPEG -n02102177/ILSVRC2012_val_00027168.JPEG -n02233338/ILSVRC2012_val_00013951.JPEG -n04591713/ILSVRC2012_val_00007320.JPEG -n04037443/ILSVRC2012_val_00038994.JPEG -n03544143/ILSVRC2012_val_00043070.JPEG -n02966193/ILSVRC2012_val_00007637.JPEG -n02488291/ILSVRC2012_val_00001458.JPEG -n02666196/ILSVRC2012_val_00009486.JPEG -n07248320/ILSVRC2012_val_00041686.JPEG -n02443484/ILSVRC2012_val_00036439.JPEG -n03062245/ILSVRC2012_val_00042505.JPEG -n01924916/ILSVRC2012_val_00027357.JPEG -n03180011/ILSVRC2012_val_00016800.JPEG -n01943899/ILSVRC2012_val_00006713.JPEG -n03216828/ILSVRC2012_val_00037556.JPEG -n02090622/ILSVRC2012_val_00013399.JPEG -n04554684/ILSVRC2012_val_00028059.JPEG -n03991062/ILSVRC2012_val_00040601.JPEG -n03954731/ILSVRC2012_val_00004803.JPEG -n03908714/ILSVRC2012_val_00010000.JPEG -n03868242/ILSVRC2012_val_00001773.JPEG -n04505470/ILSVRC2012_val_00036727.JPEG -n04399382/ILSVRC2012_val_00039275.JPEG -n02840245/ILSVRC2012_val_00021609.JPEG -n02493509/ILSVRC2012_val_00035042.JPEG -n09256479/ILSVRC2012_val_00021175.JPEG -n04081281/ILSVRC2012_val_00007483.JPEG -n02167151/ILSVRC2012_val_00039157.JPEG -n02056570/ILSVRC2012_val_00015660.JPEG -n04153751/ILSVRC2012_val_00013898.JPEG -n02112018/ILSVRC2012_val_00034667.JPEG -n13133613/ILSVRC2012_val_00008281.JPEG -n03804744/ILSVRC2012_val_00035232.JPEG -n04509417/ILSVRC2012_val_00004318.JPEG -n03742115/ILSVRC2012_val_00006806.JPEG -n02795169/ILSVRC2012_val_00031883.JPEG -n03733281/ILSVRC2012_val_00022141.JPEG -n03197337/ILSVRC2012_val_00012383.JPEG -n03417042/ILSVRC2012_val_00028914.JPEG -n03314780/ILSVRC2012_val_00021313.JPEG -n01744401/ILSVRC2012_val_00024851.JPEG -n01601694/ILSVRC2012_val_00045581.JPEG -n01560419/ILSVRC2012_val_00048178.JPEG -n03983396/ILSVRC2012_val_00044297.JPEG -n03877472/ILSVRC2012_val_00022197.JPEG -n02974003/ILSVRC2012_val_00044439.JPEG -n03179701/ILSVRC2012_val_00036160.JPEG -n02096294/ILSVRC2012_val_00013756.JPEG -n03483316/ILSVRC2012_val_00043535.JPEG -n07584110/ILSVRC2012_val_00025228.JPEG -n03495258/ILSVRC2012_val_00002209.JPEG -n01983481/ILSVRC2012_val_00033104.JPEG -n04542943/ILSVRC2012_val_00003642.JPEG -n03814639/ILSVRC2012_val_00011068.JPEG -n07831146/ILSVRC2012_val_00033336.JPEG -n02018795/ILSVRC2012_val_00004001.JPEG -n02174001/ILSVRC2012_val_00047820.JPEG -n03903868/ILSVRC2012_val_00044198.JPEG -n04004767/ILSVRC2012_val_00043636.JPEG -n02276258/ILSVRC2012_val_00014187.JPEG -n03857828/ILSVRC2012_val_00026686.JPEG -n04286575/ILSVRC2012_val_00014051.JPEG -n07714571/ILSVRC2012_val_00027632.JPEG -n07880968/ILSVRC2012_val_00011471.JPEG -n02090379/ILSVRC2012_val_00023101.JPEG -n02112137/ILSVRC2012_val_00020728.JPEG -n01494475/ILSVRC2012_val_00034115.JPEG -n03085013/ILSVRC2012_val_00018846.JPEG -n02978881/ILSVRC2012_val_00005321.JPEG -n07892512/ILSVRC2012_val_00020261.JPEG -n02091032/ILSVRC2012_val_00031302.JPEG -n01443537/ILSVRC2012_val_00002241.JPEG -n03877845/ILSVRC2012_val_00004952.JPEG -n02106030/ILSVRC2012_val_00027164.JPEG -n07697313/ILSVRC2012_val_00047577.JPEG -n01855672/ILSVRC2012_val_00043968.JPEG -n03447721/ILSVRC2012_val_00035792.JPEG -n03630383/ILSVRC2012_val_00021598.JPEG -n03345487/ILSVRC2012_val_00036198.JPEG -n04019541/ILSVRC2012_val_00000682.JPEG -n03710193/ILSVRC2012_val_00028280.JPEG -n04579432/ILSVRC2012_val_00000497.JPEG -n02493793/ILSVRC2012_val_00033780.JPEG -n03089624/ILSVRC2012_val_00025322.JPEG -n03494278/ILSVRC2012_val_00023742.JPEG -n04204238/ILSVRC2012_val_00002519.JPEG -n03637318/ILSVRC2012_val_00012801.JPEG -n02640242/ILSVRC2012_val_00000050.JPEG -n02978881/ILSVRC2012_val_00016154.JPEG -n02108551/ILSVRC2012_val_00006486.JPEG -n04039381/ILSVRC2012_val_00028105.JPEG -n02444819/ILSVRC2012_val_00046184.JPEG -n03447721/ILSVRC2012_val_00030989.JPEG -n01742172/ILSVRC2012_val_00021032.JPEG -n01914609/ILSVRC2012_val_00012332.JPEG -n01917289/ILSVRC2012_val_00037660.JPEG -n03255030/ILSVRC2012_val_00046545.JPEG -n04270147/ILSVRC2012_val_00015262.JPEG -n02840245/ILSVRC2012_val_00036216.JPEG -n03197337/ILSVRC2012_val_00006034.JPEG -n03724870/ILSVRC2012_val_00020896.JPEG -n02226429/ILSVRC2012_val_00009090.JPEG -n01694178/ILSVRC2012_val_00004555.JPEG -n01496331/ILSVRC2012_val_00047589.JPEG -n02236044/ILSVRC2012_val_00011079.JPEG -n01692333/ILSVRC2012_val_00048104.JPEG -n02085782/ILSVRC2012_val_00011749.JPEG -n04235860/ILSVRC2012_val_00049290.JPEG -n02701002/ILSVRC2012_val_00020319.JPEG -n02110185/ILSVRC2012_val_00002283.JPEG -n07920052/ILSVRC2012_val_00049872.JPEG -n02130308/ILSVRC2012_val_00017208.JPEG -n03924679/ILSVRC2012_val_00003366.JPEG -n04483307/ILSVRC2012_val_00005581.JPEG -n03633091/ILSVRC2012_val_00022704.JPEG -n02105162/ILSVRC2012_val_00030239.JPEG -n02492035/ILSVRC2012_val_00039459.JPEG -n06794110/ILSVRC2012_val_00035300.JPEG -n03804744/ILSVRC2012_val_00024466.JPEG -n02514041/ILSVRC2012_val_00019293.JPEG -n04590129/ILSVRC2012_val_00032011.JPEG -n12985857/ILSVRC2012_val_00035903.JPEG -n01530575/ILSVRC2012_val_00037116.JPEG -n02128925/ILSVRC2012_val_00045488.JPEG -n02895154/ILSVRC2012_val_00008968.JPEG -n02963159/ILSVRC2012_val_00013156.JPEG -n02808440/ILSVRC2012_val_00006019.JPEG -n04344873/ILSVRC2012_val_00016616.JPEG -n02167151/ILSVRC2012_val_00018839.JPEG -n02106030/ILSVRC2012_val_00031799.JPEG -n04461696/ILSVRC2012_val_00022323.JPEG -n02361337/ILSVRC2012_val_00037480.JPEG -n11879895/ILSVRC2012_val_00029679.JPEG -n01494475/ILSVRC2012_val_00012546.JPEG -n09421951/ILSVRC2012_val_00001767.JPEG -n02128385/ILSVRC2012_val_00038812.JPEG -n01944390/ILSVRC2012_val_00034957.JPEG -n02268853/ILSVRC2012_val_00036639.JPEG -n04049303/ILSVRC2012_val_00019554.JPEG -n04311174/ILSVRC2012_val_00011156.JPEG -n02835271/ILSVRC2012_val_00034037.JPEG -n02013706/ILSVRC2012_val_00029329.JPEG -n07873807/ILSVRC2012_val_00005438.JPEG -n04311174/ILSVRC2012_val_00006311.JPEG -n02108089/ILSVRC2012_val_00017602.JPEG -n02108089/ILSVRC2012_val_00023231.JPEG -n02423022/ILSVRC2012_val_00028513.JPEG -n01843383/ILSVRC2012_val_00032492.JPEG -n03127925/ILSVRC2012_val_00008681.JPEG -n02091244/ILSVRC2012_val_00036181.JPEG -n02443484/ILSVRC2012_val_00025162.JPEG -n03642806/ILSVRC2012_val_00022093.JPEG -n03443371/ILSVRC2012_val_00045766.JPEG -n03314780/ILSVRC2012_val_00028520.JPEG -n02927161/ILSVRC2012_val_00014566.JPEG -n03180011/ILSVRC2012_val_00001246.JPEG -n02091134/ILSVRC2012_val_00022753.JPEG -n02894605/ILSVRC2012_val_00006881.JPEG -n02667093/ILSVRC2012_val_00008447.JPEG -n03935335/ILSVRC2012_val_00022849.JPEG -n04116512/ILSVRC2012_val_00004247.JPEG -n03146219/ILSVRC2012_val_00048085.JPEG -n01843065/ILSVRC2012_val_00044330.JPEG -n03045698/ILSVRC2012_val_00043446.JPEG -n02134084/ILSVRC2012_val_00048086.JPEG -n01537544/ILSVRC2012_val_00023438.JPEG -n01677366/ILSVRC2012_val_00041096.JPEG -n02099267/ILSVRC2012_val_00030810.JPEG -n01631663/ILSVRC2012_val_00029622.JPEG -n01677366/ILSVRC2012_val_00028571.JPEG -n02437616/ILSVRC2012_val_00022237.JPEG -n03259280/ILSVRC2012_val_00044281.JPEG -n03661043/ILSVRC2012_val_00047573.JPEG -n03109150/ILSVRC2012_val_00026171.JPEG -n01776313/ILSVRC2012_val_00014587.JPEG -n01756291/ILSVRC2012_val_00006690.JPEG -n02114367/ILSVRC2012_val_00011188.JPEG -n03271574/ILSVRC2012_val_00048524.JPEG -n02804610/ILSVRC2012_val_00012025.JPEG -n01978287/ILSVRC2012_val_00030907.JPEG -n03344393/ILSVRC2012_val_00001859.JPEG -n02442845/ILSVRC2012_val_00033047.JPEG -n03710721/ILSVRC2012_val_00044100.JPEG -n03884397/ILSVRC2012_val_00041007.JPEG -n02892767/ILSVRC2012_val_00009816.JPEG -n01855032/ILSVRC2012_val_00041850.JPEG -n02704792/ILSVRC2012_val_00033902.JPEG -n07753592/ILSVRC2012_val_00049606.JPEG -n01829413/ILSVRC2012_val_00026845.JPEG -n07871810/ILSVRC2012_val_00047989.JPEG -n02096585/ILSVRC2012_val_00045047.JPEG -n03837869/ILSVRC2012_val_00036145.JPEG -n04554684/ILSVRC2012_val_00019346.JPEG -n03775071/ILSVRC2012_val_00024697.JPEG -n03697007/ILSVRC2012_val_00024323.JPEG -n02007558/ILSVRC2012_val_00039372.JPEG -n07583066/ILSVRC2012_val_00001378.JPEG -n03776460/ILSVRC2012_val_00009641.JPEG -n04243546/ILSVRC2012_val_00011959.JPEG -n02096294/ILSVRC2012_val_00004354.JPEG -n04525305/ILSVRC2012_val_00034568.JPEG -n02871525/ILSVRC2012_val_00045104.JPEG -n12998815/ILSVRC2012_val_00016330.JPEG -n02114548/ILSVRC2012_val_00006174.JPEG -n03063689/ILSVRC2012_val_00045675.JPEG -n02793495/ILSVRC2012_val_00003727.JPEG -n13037406/ILSVRC2012_val_00043934.JPEG -n01698640/ILSVRC2012_val_00049732.JPEG -n03785016/ILSVRC2012_val_00048082.JPEG -n02894605/ILSVRC2012_val_00001941.JPEG -n03742115/ILSVRC2012_val_00040111.JPEG -n03485407/ILSVRC2012_val_00008016.JPEG -n02457408/ILSVRC2012_val_00044120.JPEG -n01582220/ILSVRC2012_val_00040439.JPEG -n03584254/ILSVRC2012_val_00017141.JPEG -n02011460/ILSVRC2012_val_00008135.JPEG -n02281787/ILSVRC2012_val_00019795.JPEG -n03874599/ILSVRC2012_val_00013842.JPEG -n09332890/ILSVRC2012_val_00043027.JPEG -n03761084/ILSVRC2012_val_00003754.JPEG -n02012849/ILSVRC2012_val_00038886.JPEG -n04429376/ILSVRC2012_val_00042822.JPEG -n02071294/ILSVRC2012_val_00010966.JPEG -n03467068/ILSVRC2012_val_00044502.JPEG -n03062245/ILSVRC2012_val_00041455.JPEG -n07749582/ILSVRC2012_val_00007458.JPEG -n07734744/ILSVRC2012_val_00011179.JPEG -n04208210/ILSVRC2012_val_00002999.JPEG -n03594945/ILSVRC2012_val_00041895.JPEG -n03032252/ILSVRC2012_val_00016574.JPEG -n15075141/ILSVRC2012_val_00041824.JPEG -n03594734/ILSVRC2012_val_00039574.JPEG -n02804414/ILSVRC2012_val_00016280.JPEG -n03837869/ILSVRC2012_val_00037528.JPEG -n02102973/ILSVRC2012_val_00034804.JPEG -n02526121/ILSVRC2012_val_00016239.JPEG -n04208210/ILSVRC2012_val_00030129.JPEG -n04429376/ILSVRC2012_val_00037306.JPEG -n03494278/ILSVRC2012_val_00029729.JPEG -n01735189/ILSVRC2012_val_00032161.JPEG -n02116738/ILSVRC2012_val_00049136.JPEG -n03018349/ILSVRC2012_val_00049207.JPEG -n03272562/ILSVRC2012_val_00018483.JPEG -n03207743/ILSVRC2012_val_00021115.JPEG -n01749939/ILSVRC2012_val_00008829.JPEG -n01675722/ILSVRC2012_val_00036899.JPEG -n02112137/ILSVRC2012_val_00007654.JPEG -n03637318/ILSVRC2012_val_00038494.JPEG -n02389026/ILSVRC2012_val_00039474.JPEG -n01980166/ILSVRC2012_val_00042567.JPEG -n01688243/ILSVRC2012_val_00025581.JPEG -n03843555/ILSVRC2012_val_00044997.JPEG -n02102177/ILSVRC2012_val_00020837.JPEG -n03710193/ILSVRC2012_val_00036617.JPEG -n02116738/ILSVRC2012_val_00039573.JPEG -n03874293/ILSVRC2012_val_00015870.JPEG -n03207941/ILSVRC2012_val_00033207.JPEG -n03791053/ILSVRC2012_val_00009285.JPEG -n02492660/ILSVRC2012_val_00021147.JPEG -n03495258/ILSVRC2012_val_00000448.JPEG -n02107312/ILSVRC2012_val_00048723.JPEG -n01498041/ILSVRC2012_val_00013655.JPEG -n07718747/ILSVRC2012_val_00011408.JPEG -n01494475/ILSVRC2012_val_00023074.JPEG -n02281406/ILSVRC2012_val_00037876.JPEG -n02669723/ILSVRC2012_val_00039353.JPEG -n03240683/ILSVRC2012_val_00040675.JPEG -n04487081/ILSVRC2012_val_00040823.JPEG -n07717556/ILSVRC2012_val_00017014.JPEG -n02782093/ILSVRC2012_val_00003640.JPEG -n02110806/ILSVRC2012_val_00009093.JPEG -n03041632/ILSVRC2012_val_00014528.JPEG -n02417914/ILSVRC2012_val_00038004.JPEG -n12267677/ILSVRC2012_val_00012754.JPEG -n04483307/ILSVRC2012_val_00019354.JPEG -n04372370/ILSVRC2012_val_00026447.JPEG -n02837789/ILSVRC2012_val_00029050.JPEG -n02408429/ILSVRC2012_val_00037147.JPEG -n02037110/ILSVRC2012_val_00049227.JPEG -n02396427/ILSVRC2012_val_00009353.JPEG -n02130308/ILSVRC2012_val_00008094.JPEG -n03459775/ILSVRC2012_val_00034367.JPEG -n01930112/ILSVRC2012_val_00043302.JPEG -n03527444/ILSVRC2012_val_00047608.JPEG -n02009229/ILSVRC2012_val_00018939.JPEG -n04591713/ILSVRC2012_val_00042920.JPEG -n02108089/ILSVRC2012_val_00011921.JPEG -n02457408/ILSVRC2012_val_00041441.JPEG -n07836838/ILSVRC2012_val_00007307.JPEG -n02002724/ILSVRC2012_val_00043307.JPEG -n04487081/ILSVRC2012_val_00043686.JPEG -n09468604/ILSVRC2012_val_00020172.JPEG -n03134739/ILSVRC2012_val_00034751.JPEG -n02916936/ILSVRC2012_val_00040683.JPEG -n02895154/ILSVRC2012_val_00013879.JPEG -n03866082/ILSVRC2012_val_00027238.JPEG -n03777754/ILSVRC2012_val_00007543.JPEG -n02281406/ILSVRC2012_val_00046852.JPEG -n02690373/ILSVRC2012_val_00003960.JPEG -n03026506/ILSVRC2012_val_00009400.JPEG -n01983481/ILSVRC2012_val_00038454.JPEG -n02113624/ILSVRC2012_val_00003698.JPEG -n03657121/ILSVRC2012_val_00011439.JPEG -n01580077/ILSVRC2012_val_00017024.JPEG -n02837789/ILSVRC2012_val_00038813.JPEG -n04404412/ILSVRC2012_val_00042957.JPEG -n01773549/ILSVRC2012_val_00018347.JPEG -n03535780/ILSVRC2012_val_00013706.JPEG -n03866082/ILSVRC2012_val_00024930.JPEG -n09421951/ILSVRC2012_val_00041063.JPEG -n01985128/ILSVRC2012_val_00022720.JPEG -n02231487/ILSVRC2012_val_00001585.JPEG -n02119789/ILSVRC2012_val_00007406.JPEG -n03868863/ILSVRC2012_val_00026092.JPEG -n03216828/ILSVRC2012_val_00024765.JPEG -n03743016/ILSVRC2012_val_00017896.JPEG -n07614500/ILSVRC2012_val_00004495.JPEG -n04462240/ILSVRC2012_val_00006988.JPEG -n03388043/ILSVRC2012_val_00006101.JPEG -n03775071/ILSVRC2012_val_00044497.JPEG -n02106382/ILSVRC2012_val_00046672.JPEG -n02894605/ILSVRC2012_val_00021166.JPEG -n03887697/ILSVRC2012_val_00027867.JPEG -n03485794/ILSVRC2012_val_00022649.JPEG -n04040759/ILSVRC2012_val_00011655.JPEG -n01770393/ILSVRC2012_val_00031977.JPEG -n03598930/ILSVRC2012_val_00024475.JPEG -n02692877/ILSVRC2012_val_00018959.JPEG -n01753488/ILSVRC2012_val_00034461.JPEG -n02749479/ILSVRC2012_val_00044979.JPEG -n03085013/ILSVRC2012_val_00020212.JPEG -n03452741/ILSVRC2012_val_00047672.JPEG -n02777292/ILSVRC2012_val_00021216.JPEG -n04040759/ILSVRC2012_val_00007508.JPEG -n04004767/ILSVRC2012_val_00045332.JPEG -n04147183/ILSVRC2012_val_00027291.JPEG -n02100877/ILSVRC2012_val_00015518.JPEG -n03207941/ILSVRC2012_val_00038108.JPEG -n02666196/ILSVRC2012_val_00008091.JPEG -n02169497/ILSVRC2012_val_00025729.JPEG -n03187595/ILSVRC2012_val_00025136.JPEG -n02391049/ILSVRC2012_val_00035356.JPEG -n03404251/ILSVRC2012_val_00031173.JPEG -n01560419/ILSVRC2012_val_00026929.JPEG -n04540053/ILSVRC2012_val_00021825.JPEG -n02117135/ILSVRC2012_val_00035999.JPEG -n02704792/ILSVRC2012_val_00028986.JPEG -n03938244/ILSVRC2012_val_00014936.JPEG -n04270147/ILSVRC2012_val_00041113.JPEG -n02174001/ILSVRC2012_val_00004339.JPEG -n07613480/ILSVRC2012_val_00010091.JPEG -n02397096/ILSVRC2012_val_00043023.JPEG -n03141823/ILSVRC2012_val_00037313.JPEG -n01768244/ILSVRC2012_val_00023700.JPEG -n04039381/ILSVRC2012_val_00033869.JPEG -n01873310/ILSVRC2012_val_00004678.JPEG -n03792972/ILSVRC2012_val_00034853.JPEG -n03388549/ILSVRC2012_val_00025229.JPEG -n07615774/ILSVRC2012_val_00003471.JPEG -n12144580/ILSVRC2012_val_00007467.JPEG -n02676566/ILSVRC2012_val_00028353.JPEG -n02097658/ILSVRC2012_val_00026153.JPEG -n02488291/ILSVRC2012_val_00041180.JPEG -n04252225/ILSVRC2012_val_00025745.JPEG -n04590129/ILSVRC2012_val_00023491.JPEG -n03804744/ILSVRC2012_val_00037696.JPEG -n02489166/ILSVRC2012_val_00014275.JPEG -n02113186/ILSVRC2012_val_00013557.JPEG -n02177972/ILSVRC2012_val_00012825.JPEG -n02992529/ILSVRC2012_val_00028116.JPEG -n02231487/ILSVRC2012_val_00043867.JPEG -n03291819/ILSVRC2012_val_00037625.JPEG -n03125729/ILSVRC2012_val_00025177.JPEG -n03250847/ILSVRC2012_val_00030142.JPEG -n04523525/ILSVRC2012_val_00001798.JPEG -n02123394/ILSVRC2012_val_00027906.JPEG -n01978455/ILSVRC2012_val_00038694.JPEG -n04266014/ILSVRC2012_val_00023257.JPEG -n02101556/ILSVRC2012_val_00008368.JPEG -n03709823/ILSVRC2012_val_00022303.JPEG -n03680355/ILSVRC2012_val_00000385.JPEG -n04355933/ILSVRC2012_val_00015733.JPEG -n03461385/ILSVRC2012_val_00042117.JPEG -n02276258/ILSVRC2012_val_00042337.JPEG -n02086240/ILSVRC2012_val_00002701.JPEG -n02871525/ILSVRC2012_val_00034004.JPEG -n02091831/ILSVRC2012_val_00025170.JPEG -n13052670/ILSVRC2012_val_00022641.JPEG -n03887697/ILSVRC2012_val_00020299.JPEG -n02799071/ILSVRC2012_val_00033880.JPEG -n04204238/ILSVRC2012_val_00037482.JPEG -n04536866/ILSVRC2012_val_00008158.JPEG -n02277742/ILSVRC2012_val_00016811.JPEG -n03854065/ILSVRC2012_val_00031272.JPEG -n02487347/ILSVRC2012_val_00029161.JPEG -n03680355/ILSVRC2012_val_00024652.JPEG -n02106382/ILSVRC2012_val_00030086.JPEG -n07615774/ILSVRC2012_val_00032703.JPEG -n04270147/ILSVRC2012_val_00031848.JPEG -n03710721/ILSVRC2012_val_00031620.JPEG -n02730930/ILSVRC2012_val_00028783.JPEG -n03804744/ILSVRC2012_val_00022621.JPEG -n02113186/ILSVRC2012_val_00003910.JPEG -n03837869/ILSVRC2012_val_00013406.JPEG -n01871265/ILSVRC2012_val_00008041.JPEG -n03424325/ILSVRC2012_val_00015369.JPEG -n03637318/ILSVRC2012_val_00029645.JPEG -n04332243/ILSVRC2012_val_00004551.JPEG -n02749479/ILSVRC2012_val_00028527.JPEG -n03884397/ILSVRC2012_val_00006638.JPEG -n04209239/ILSVRC2012_val_00010492.JPEG -n04310018/ILSVRC2012_val_00024627.JPEG -n01734418/ILSVRC2012_val_00006218.JPEG -n03532672/ILSVRC2012_val_00040536.JPEG -n02094258/ILSVRC2012_val_00007906.JPEG -n02445715/ILSVRC2012_val_00033947.JPEG -n02097474/ILSVRC2012_val_00038294.JPEG -n02500267/ILSVRC2012_val_00047142.JPEG -n02879718/ILSVRC2012_val_00042569.JPEG -n02815834/ILSVRC2012_val_00036779.JPEG -n03297495/ILSVRC2012_val_00033095.JPEG -n07932039/ILSVRC2012_val_00011790.JPEG -n03729826/ILSVRC2012_val_00028678.JPEG -n02113186/ILSVRC2012_val_00011165.JPEG -n04435653/ILSVRC2012_val_00003912.JPEG -n03627232/ILSVRC2012_val_00021018.JPEG -n04346328/ILSVRC2012_val_00014319.JPEG -n03337140/ILSVRC2012_val_00017828.JPEG -n01917289/ILSVRC2012_val_00000011.JPEG -n01630670/ILSVRC2012_val_00007257.JPEG -n01749939/ILSVRC2012_val_00014252.JPEG -n01737021/ILSVRC2012_val_00010870.JPEG -n03937543/ILSVRC2012_val_00040537.JPEG -n02999410/ILSVRC2012_val_00000376.JPEG -n02174001/ILSVRC2012_val_00016150.JPEG -n02099429/ILSVRC2012_val_00041503.JPEG -n02276258/ILSVRC2012_val_00044711.JPEG -n02097047/ILSVRC2012_val_00032445.JPEG -n01930112/ILSVRC2012_val_00029033.JPEG -n02500267/ILSVRC2012_val_00023461.JPEG -n02667093/ILSVRC2012_val_00035215.JPEG -n04065272/ILSVRC2012_val_00002745.JPEG -n04069434/ILSVRC2012_val_00012086.JPEG -n03026506/ILSVRC2012_val_00040138.JPEG -n02979186/ILSVRC2012_val_00047974.JPEG -n04404412/ILSVRC2012_val_00016605.JPEG -n02028035/ILSVRC2012_val_00040471.JPEG -n07248320/ILSVRC2012_val_00027350.JPEG -n02607072/ILSVRC2012_val_00023406.JPEG -n03534580/ILSVRC2012_val_00015156.JPEG -n04120489/ILSVRC2012_val_00038922.JPEG -n02483362/ILSVRC2012_val_00042637.JPEG -n02009912/ILSVRC2012_val_00049286.JPEG -n01496331/ILSVRC2012_val_00027301.JPEG -n02100583/ILSVRC2012_val_00010808.JPEG -n02415577/ILSVRC2012_val_00016135.JPEG -n07745940/ILSVRC2012_val_00019754.JPEG -n02017213/ILSVRC2012_val_00032538.JPEG -n02105641/ILSVRC2012_val_00013007.JPEG -n02236044/ILSVRC2012_val_00012127.JPEG -n02009229/ILSVRC2012_val_00025421.JPEG -n04209239/ILSVRC2012_val_00028999.JPEG -n09421951/ILSVRC2012_val_00038275.JPEG -n01860187/ILSVRC2012_val_00019022.JPEG -n03000247/ILSVRC2012_val_00047839.JPEG -n02127052/ILSVRC2012_val_00028583.JPEG -n02797295/ILSVRC2012_val_00016849.JPEG -n02088238/ILSVRC2012_val_00026622.JPEG -n01697457/ILSVRC2012_val_00038647.JPEG -n03388549/ILSVRC2012_val_00026165.JPEG -n03670208/ILSVRC2012_val_00007113.JPEG -n04118538/ILSVRC2012_val_00004829.JPEG -n03584254/ILSVRC2012_val_00021482.JPEG -n03983396/ILSVRC2012_val_00035504.JPEG -n06359193/ILSVRC2012_val_00022255.JPEG -n01944390/ILSVRC2012_val_00023958.JPEG -n01744401/ILSVRC2012_val_00016821.JPEG -n02017213/ILSVRC2012_val_00006192.JPEG -n03871628/ILSVRC2012_val_00002169.JPEG -n02056570/ILSVRC2012_val_00046966.JPEG -n01945685/ILSVRC2012_val_00030258.JPEG -n02640242/ILSVRC2012_val_00029790.JPEG -n01770081/ILSVRC2012_val_00045563.JPEG -n02090379/ILSVRC2012_val_00035689.JPEG -n01807496/ILSVRC2012_val_00047397.JPEG -n01622779/ILSVRC2012_val_00004345.JPEG -n02480495/ILSVRC2012_val_00011425.JPEG -n01882714/ILSVRC2012_val_00000970.JPEG -n09472597/ILSVRC2012_val_00029608.JPEG -n03124043/ILSVRC2012_val_00007970.JPEG -n03908714/ILSVRC2012_val_00008499.JPEG -n02098105/ILSVRC2012_val_00036959.JPEG -n04579432/ILSVRC2012_val_00035948.JPEG -n03794056/ILSVRC2012_val_00034073.JPEG -n07745940/ILSVRC2012_val_00035170.JPEG -n02917067/ILSVRC2012_val_00023503.JPEG -n01855032/ILSVRC2012_val_00042824.JPEG -n02007558/ILSVRC2012_val_00034548.JPEG -n03633091/ILSVRC2012_val_00009892.JPEG -n02093991/ILSVRC2012_val_00019544.JPEG -n02071294/ILSVRC2012_val_00006253.JPEG -n03775546/ILSVRC2012_val_00045421.JPEG -n02094433/ILSVRC2012_val_00016973.JPEG -n07747607/ILSVRC2012_val_00006756.JPEG -n03450230/ILSVRC2012_val_00021132.JPEG -n02108089/ILSVRC2012_val_00009553.JPEG -n04579432/ILSVRC2012_val_00021960.JPEG -n03498962/ILSVRC2012_val_00023600.JPEG -n02317335/ILSVRC2012_val_00004153.JPEG -n03141823/ILSVRC2012_val_00008131.JPEG -n02412080/ILSVRC2012_val_00042513.JPEG -n03393912/ILSVRC2012_val_00043311.JPEG -n02814533/ILSVRC2012_val_00041979.JPEG -n03642806/ILSVRC2012_val_00000151.JPEG -n02112350/ILSVRC2012_val_00047515.JPEG -n01694178/ILSVRC2012_val_00015667.JPEG -n04154565/ILSVRC2012_val_00020251.JPEG -n03180011/ILSVRC2012_val_00037573.JPEG -n03630383/ILSVRC2012_val_00034841.JPEG -n02109525/ILSVRC2012_val_00010245.JPEG -n01950731/ILSVRC2012_val_00019684.JPEG -n02268853/ILSVRC2012_val_00028579.JPEG -n03017168/ILSVRC2012_val_00011842.JPEG -n02115913/ILSVRC2012_val_00004746.JPEG -n03250847/ILSVRC2012_val_00048628.JPEG -n07749582/ILSVRC2012_val_00014929.JPEG -n04204347/ILSVRC2012_val_00041108.JPEG -n03255030/ILSVRC2012_val_00011290.JPEG -n02666196/ILSVRC2012_val_00047691.JPEG -n04228054/ILSVRC2012_val_00027692.JPEG -n02028035/ILSVRC2012_val_00031922.JPEG -n01675722/ILSVRC2012_val_00033640.JPEG -n03775071/ILSVRC2012_val_00014685.JPEG -n01773797/ILSVRC2012_val_00003353.JPEG -n09835506/ILSVRC2012_val_00002751.JPEG -n02797295/ILSVRC2012_val_00005347.JPEG -n07697313/ILSVRC2012_val_00002753.JPEG -n04254680/ILSVRC2012_val_00024905.JPEG -n04258138/ILSVRC2012_val_00007822.JPEG -n02100735/ILSVRC2012_val_00016108.JPEG -n15075141/ILSVRC2012_val_00029967.JPEG -n03710721/ILSVRC2012_val_00041966.JPEG -n03124043/ILSVRC2012_val_00004432.JPEG -n03841143/ILSVRC2012_val_00046264.JPEG -n04254777/ILSVRC2012_val_00002806.JPEG -n03642806/ILSVRC2012_val_00031574.JPEG -n02115641/ILSVRC2012_val_00015821.JPEG -n02085782/ILSVRC2012_val_00016603.JPEG -n02916936/ILSVRC2012_val_00047218.JPEG -n02397096/ILSVRC2012_val_00026512.JPEG -n01748264/ILSVRC2012_val_00028813.JPEG -n02206856/ILSVRC2012_val_00012294.JPEG -n03478589/ILSVRC2012_val_00001644.JPEG -n03873416/ILSVRC2012_val_00042777.JPEG -n01985128/ILSVRC2012_val_00010640.JPEG -n02423022/ILSVRC2012_val_00047318.JPEG -n04265275/ILSVRC2012_val_00045434.JPEG -n02090721/ILSVRC2012_val_00017787.JPEG -n03180011/ILSVRC2012_val_00034411.JPEG -n03016953/ILSVRC2012_val_00033266.JPEG -n03983396/ILSVRC2012_val_00039941.JPEG -n02096051/ILSVRC2012_val_00024400.JPEG -n03201208/ILSVRC2012_val_00018913.JPEG -n06785654/ILSVRC2012_val_00011536.JPEG -n01871265/ILSVRC2012_val_00031675.JPEG -n02492660/ILSVRC2012_val_00036365.JPEG -n04239074/ILSVRC2012_val_00041234.JPEG -n03976657/ILSVRC2012_val_00019249.JPEG -n02437616/ILSVRC2012_val_00004793.JPEG -n03347037/ILSVRC2012_val_00028906.JPEG -n03337140/ILSVRC2012_val_00010321.JPEG -n02950826/ILSVRC2012_val_00031280.JPEG -n02708093/ILSVRC2012_val_00028769.JPEG -n07716358/ILSVRC2012_val_00009543.JPEG -n07720875/ILSVRC2012_val_00028969.JPEG -n04458633/ILSVRC2012_val_00006560.JPEG -n02105505/ILSVRC2012_val_00046836.JPEG -n02840245/ILSVRC2012_val_00011302.JPEG -n03347037/ILSVRC2012_val_00002272.JPEG -n04019541/ILSVRC2012_val_00044487.JPEG -n12985857/ILSVRC2012_val_00026794.JPEG -n02607072/ILSVRC2012_val_00024315.JPEG -n03658185/ILSVRC2012_val_00034287.JPEG -n02672831/ILSVRC2012_val_00044448.JPEG -n02930766/ILSVRC2012_val_00036204.JPEG -n02328150/ILSVRC2012_val_00016059.JPEG -n02107574/ILSVRC2012_val_00026426.JPEG -n01592084/ILSVRC2012_val_00010128.JPEG -n02483708/ILSVRC2012_val_00031916.JPEG -n03450230/ILSVRC2012_val_00035428.JPEG -n01537544/ILSVRC2012_val_00008420.JPEG -n02111129/ILSVRC2012_val_00037325.JPEG -n01986214/ILSVRC2012_val_00021819.JPEG -n02676566/ILSVRC2012_val_00037509.JPEG -n04443257/ILSVRC2012_val_00045194.JPEG -n01820546/ILSVRC2012_val_00005925.JPEG -n01944390/ILSVRC2012_val_00002602.JPEG -n02814533/ILSVRC2012_val_00031953.JPEG -n02108422/ILSVRC2012_val_00023294.JPEG -n02105412/ILSVRC2012_val_00010357.JPEG -n02492660/ILSVRC2012_val_00027333.JPEG -n01806143/ILSVRC2012_val_00024040.JPEG -n02980441/ILSVRC2012_val_00023472.JPEG -n04254120/ILSVRC2012_val_00042528.JPEG -n01990800/ILSVRC2012_val_00041213.JPEG -n04596742/ILSVRC2012_val_00027468.JPEG -n04147183/ILSVRC2012_val_00032731.JPEG -n02894605/ILSVRC2012_val_00016396.JPEG -n04542943/ILSVRC2012_val_00047664.JPEG -n03485794/ILSVRC2012_val_00048409.JPEG -n03218198/ILSVRC2012_val_00023915.JPEG -n02871525/ILSVRC2012_val_00005712.JPEG -n03899768/ILSVRC2012_val_00015476.JPEG -n02109047/ILSVRC2012_val_00023076.JPEG -n03498962/ILSVRC2012_val_00034911.JPEG -n04252077/ILSVRC2012_val_00043595.JPEG -n03457902/ILSVRC2012_val_00041313.JPEG -n03933933/ILSVRC2012_val_00001062.JPEG -n03803284/ILSVRC2012_val_00044666.JPEG -n07714990/ILSVRC2012_val_00027503.JPEG -n03447721/ILSVRC2012_val_00024238.JPEG -n02422699/ILSVRC2012_val_00024665.JPEG -n01560419/ILSVRC2012_val_00007263.JPEG -n02814860/ILSVRC2012_val_00005382.JPEG -n02692877/ILSVRC2012_val_00011499.JPEG -n03970156/ILSVRC2012_val_00048130.JPEG -n02097130/ILSVRC2012_val_00029609.JPEG -n02408429/ILSVRC2012_val_00031319.JPEG -n02190166/ILSVRC2012_val_00031033.JPEG -n02268443/ILSVRC2012_val_00035582.JPEG -n04485082/ILSVRC2012_val_00011069.JPEG -n03133878/ILSVRC2012_val_00006347.JPEG -n02992211/ILSVRC2012_val_00042488.JPEG -n03459775/ILSVRC2012_val_00000852.JPEG -n07768694/ILSVRC2012_val_00031058.JPEG -n04141975/ILSVRC2012_val_00016073.JPEG -n01692333/ILSVRC2012_val_00032682.JPEG -n02804610/ILSVRC2012_val_00037157.JPEG -n03868863/ILSVRC2012_val_00021700.JPEG -n02356798/ILSVRC2012_val_00038993.JPEG -n03595614/ILSVRC2012_val_00022047.JPEG -n03271574/ILSVRC2012_val_00045715.JPEG -n03450230/ILSVRC2012_val_00026729.JPEG -n02002556/ILSVRC2012_val_00035528.JPEG -n01496331/ILSVRC2012_val_00042245.JPEG -n07715103/ILSVRC2012_val_00049310.JPEG -n01806143/ILSVRC2012_val_00005599.JPEG -n02782093/ILSVRC2012_val_00004812.JPEG -n03888605/ILSVRC2012_val_00010060.JPEG -n03658185/ILSVRC2012_val_00019407.JPEG -n04209133/ILSVRC2012_val_00016376.JPEG -n01770081/ILSVRC2012_val_00048708.JPEG -n07749582/ILSVRC2012_val_00045149.JPEG -n04099969/ILSVRC2012_val_00016203.JPEG -n01797886/ILSVRC2012_val_00028604.JPEG -n03384352/ILSVRC2012_val_00041656.JPEG -n03662601/ILSVRC2012_val_00031200.JPEG -n03938244/ILSVRC2012_val_00013547.JPEG -n02102480/ILSVRC2012_val_00030059.JPEG -n02096294/ILSVRC2012_val_00016374.JPEG -n02113712/ILSVRC2012_val_00007261.JPEG -n03874293/ILSVRC2012_val_00006741.JPEG -n03967562/ILSVRC2012_val_00023747.JPEG -n04162706/ILSVRC2012_val_00009975.JPEG -n03937543/ILSVRC2012_val_00030685.JPEG -n02837789/ILSVRC2012_val_00013449.JPEG -n02526121/ILSVRC2012_val_00001747.JPEG -n04392985/ILSVRC2012_val_00045645.JPEG -n04591157/ILSVRC2012_val_00020606.JPEG -n01751748/ILSVRC2012_val_00025096.JPEG -n03895866/ILSVRC2012_val_00018523.JPEG -n02093859/ILSVRC2012_val_00041776.JPEG -n02107574/ILSVRC2012_val_00014816.JPEG -n01739381/ILSVRC2012_val_00023108.JPEG -n02280649/ILSVRC2012_val_00011175.JPEG -n04542943/ILSVRC2012_val_00049214.JPEG -n03496892/ILSVRC2012_val_00013970.JPEG -n01873310/ILSVRC2012_val_00016323.JPEG -n01735189/ILSVRC2012_val_00026122.JPEG -n01855672/ILSVRC2012_val_00018602.JPEG -n02114712/ILSVRC2012_val_00032720.JPEG -n04483307/ILSVRC2012_val_00028262.JPEG -n01770393/ILSVRC2012_val_00016030.JPEG -n02091134/ILSVRC2012_val_00004956.JPEG -n02108551/ILSVRC2012_val_00017006.JPEG -n02128925/ILSVRC2012_val_00013107.JPEG -n04380533/ILSVRC2012_val_00031497.JPEG -n03388043/ILSVRC2012_val_00030286.JPEG -n03032252/ILSVRC2012_val_00007133.JPEG -n02105641/ILSVRC2012_val_00012930.JPEG -n01820546/ILSVRC2012_val_00042679.JPEG -n03967562/ILSVRC2012_val_00000840.JPEG -n02116738/ILSVRC2012_val_00013584.JPEG -n04479046/ILSVRC2012_val_00041995.JPEG -n02389026/ILSVRC2012_val_00049605.JPEG -n02417914/ILSVRC2012_val_00034207.JPEG -n02951358/ILSVRC2012_val_00048773.JPEG -n01818515/ILSVRC2012_val_00025872.JPEG -n03598930/ILSVRC2012_val_00004589.JPEG -n01494475/ILSVRC2012_val_00013847.JPEG -n02966687/ILSVRC2012_val_00022860.JPEG -n02797295/ILSVRC2012_val_00007717.JPEG -n03110669/ILSVRC2012_val_00013454.JPEG -n02804414/ILSVRC2012_val_00005935.JPEG -n02356798/ILSVRC2012_val_00016105.JPEG -n02398521/ILSVRC2012_val_00014656.JPEG -n02437312/ILSVRC2012_val_00027819.JPEG -n03759954/ILSVRC2012_val_00008381.JPEG -n03729826/ILSVRC2012_val_00010707.JPEG -n03100240/ILSVRC2012_val_00007348.JPEG -n04355338/ILSVRC2012_val_00002015.JPEG -n04596742/ILSVRC2012_val_00001534.JPEG -n02606052/ILSVRC2012_val_00046237.JPEG -n04133789/ILSVRC2012_val_00029095.JPEG -n02676566/ILSVRC2012_val_00038042.JPEG -n03908618/ILSVRC2012_val_00006607.JPEG -n03532672/ILSVRC2012_val_00024123.JPEG -n02417914/ILSVRC2012_val_00047806.JPEG -n02108422/ILSVRC2012_val_00002317.JPEG -n04118538/ILSVRC2012_val_00038323.JPEG -n02120505/ILSVRC2012_val_00018714.JPEG -n03661043/ILSVRC2012_val_00041823.JPEG -n03633091/ILSVRC2012_val_00046392.JPEG -n01694178/ILSVRC2012_val_00001375.JPEG -n07753275/ILSVRC2012_val_00012451.JPEG -n01855032/ILSVRC2012_val_00021341.JPEG -n09399592/ILSVRC2012_val_00045881.JPEG -n03109150/ILSVRC2012_val_00038897.JPEG -n02105056/ILSVRC2012_val_00036843.JPEG -n02397096/ILSVRC2012_val_00028546.JPEG -n02229544/ILSVRC2012_val_00049638.JPEG -n04118538/ILSVRC2012_val_00041014.JPEG -n02168699/ILSVRC2012_val_00013153.JPEG -n01630670/ILSVRC2012_val_00032171.JPEG -n03877845/ILSVRC2012_val_00045327.JPEG -n04325704/ILSVRC2012_val_00027609.JPEG -n03179701/ILSVRC2012_val_00047051.JPEG -n03776460/ILSVRC2012_val_00035097.JPEG -n07615774/ILSVRC2012_val_00047975.JPEG -n01968897/ILSVRC2012_val_00033183.JPEG -n02823750/ILSVRC2012_val_00006552.JPEG -n03045698/ILSVRC2012_val_00000750.JPEG -n02123045/ILSVRC2012_val_00033420.JPEG -n04328186/ILSVRC2012_val_00045012.JPEG -n01532829/ILSVRC2012_val_00016198.JPEG -n02111500/ILSVRC2012_val_00049200.JPEG -n04404412/ILSVRC2012_val_00021932.JPEG -n02869837/ILSVRC2012_val_00009041.JPEG -n01776313/ILSVRC2012_val_00001760.JPEG -n02797295/ILSVRC2012_val_00034874.JPEG -n02093754/ILSVRC2012_val_00045978.JPEG -n03379051/ILSVRC2012_val_00021745.JPEG -n04273569/ILSVRC2012_val_00008080.JPEG -n02480495/ILSVRC2012_val_00004003.JPEG -n03825788/ILSVRC2012_val_00007804.JPEG -n02389026/ILSVRC2012_val_00000892.JPEG -n02787622/ILSVRC2012_val_00014733.JPEG -n02089867/ILSVRC2012_val_00016255.JPEG -n02101556/ILSVRC2012_val_00000643.JPEG -n03710721/ILSVRC2012_val_00018600.JPEG -n02090622/ILSVRC2012_val_00040878.JPEG -n04591713/ILSVRC2012_val_00043192.JPEG -n02093754/ILSVRC2012_val_00010785.JPEG -n03733281/ILSVRC2012_val_00045736.JPEG -n02279972/ILSVRC2012_val_00047733.JPEG -n07742313/ILSVRC2012_val_00019453.JPEG -n03814639/ILSVRC2012_val_00034327.JPEG -n04525305/ILSVRC2012_val_00049957.JPEG -n04335435/ILSVRC2012_val_00014433.JPEG -n02447366/ILSVRC2012_val_00023870.JPEG -n01582220/ILSVRC2012_val_00044507.JPEG -n01950731/ILSVRC2012_val_00040586.JPEG -n09332890/ILSVRC2012_val_00015764.JPEG -n02494079/ILSVRC2012_val_00014206.JPEG -n03404251/ILSVRC2012_val_00033667.JPEG -n02114855/ILSVRC2012_val_00039555.JPEG -n03089624/ILSVRC2012_val_00041701.JPEG -n04258138/ILSVRC2012_val_00017908.JPEG -n03063689/ILSVRC2012_val_00002022.JPEG -n04553703/ILSVRC2012_val_00013941.JPEG -n01697457/ILSVRC2012_val_00041980.JPEG -n03495258/ILSVRC2012_val_00044541.JPEG -n03967562/ILSVRC2012_val_00019675.JPEG -n04523525/ILSVRC2012_val_00025290.JPEG -n01773797/ILSVRC2012_val_00047551.JPEG -n02500267/ILSVRC2012_val_00040160.JPEG -n02730930/ILSVRC2012_val_00034506.JPEG -n03345487/ILSVRC2012_val_00004238.JPEG -n02999410/ILSVRC2012_val_00025216.JPEG -n03131574/ILSVRC2012_val_00043169.JPEG -n02123597/ILSVRC2012_val_00045347.JPEG -n02676566/ILSVRC2012_val_00003813.JPEG -n02177972/ILSVRC2012_val_00001737.JPEG -n02174001/ILSVRC2012_val_00020026.JPEG -n03379051/ILSVRC2012_val_00035645.JPEG -n01514859/ILSVRC2012_val_00009615.JPEG -n02107683/ILSVRC2012_val_00040427.JPEG -n02939185/ILSVRC2012_val_00034904.JPEG -n02788148/ILSVRC2012_val_00029432.JPEG -n04523525/ILSVRC2012_val_00033029.JPEG -n01582220/ILSVRC2012_val_00041051.JPEG -n01914609/ILSVRC2012_val_00040958.JPEG -n04599235/ILSVRC2012_val_00037061.JPEG -n01784675/ILSVRC2012_val_00028449.JPEG -n04592741/ILSVRC2012_val_00019965.JPEG -n02124075/ILSVRC2012_val_00032637.JPEG -n01773157/ILSVRC2012_val_00022618.JPEG -n02091831/ILSVRC2012_val_00007002.JPEG -n02172182/ILSVRC2012_val_00006883.JPEG -n02643566/ILSVRC2012_val_00006279.JPEG -n03792782/ILSVRC2012_val_00042457.JPEG -n02128925/ILSVRC2012_val_00010173.JPEG -n02102177/ILSVRC2012_val_00018942.JPEG -n01882714/ILSVRC2012_val_00007389.JPEG -n02328150/ILSVRC2012_val_00027898.JPEG -n02219486/ILSVRC2012_val_00003814.JPEG -n02110341/ILSVRC2012_val_00023913.JPEG -n02113978/ILSVRC2012_val_00026094.JPEG -n01817953/ILSVRC2012_val_00028862.JPEG -n02105412/ILSVRC2012_val_00041115.JPEG -n04552348/ILSVRC2012_val_00028193.JPEG -n03617480/ILSVRC2012_val_00006657.JPEG -n02917067/ILSVRC2012_val_00034240.JPEG -n02102040/ILSVRC2012_val_00001968.JPEG -n01601694/ILSVRC2012_val_00040903.JPEG -n03742115/ILSVRC2012_val_00009627.JPEG -n02747177/ILSVRC2012_val_00044878.JPEG -n04418357/ILSVRC2012_val_00028155.JPEG -n03047690/ILSVRC2012_val_00029828.JPEG -n02437312/ILSVRC2012_val_00016367.JPEG -n02174001/ILSVRC2012_val_00034738.JPEG -n04542943/ILSVRC2012_val_00035062.JPEG -n01704323/ILSVRC2012_val_00017962.JPEG -n07717556/ILSVRC2012_val_00029658.JPEG -n04596742/ILSVRC2012_val_00017344.JPEG -n03384352/ILSVRC2012_val_00001579.JPEG -n01924916/ILSVRC2012_val_00033248.JPEG -n02102480/ILSVRC2012_val_00023012.JPEG -n03483316/ILSVRC2012_val_00044558.JPEG -n03982430/ILSVRC2012_val_00029955.JPEG -n01687978/ILSVRC2012_val_00049072.JPEG -n02002724/ILSVRC2012_val_00042532.JPEG -n04004767/ILSVRC2012_val_00042574.JPEG -n03063689/ILSVRC2012_val_00025249.JPEG -n03014705/ILSVRC2012_val_00002535.JPEG -n01537544/ILSVRC2012_val_00022076.JPEG -n02747177/ILSVRC2012_val_00043970.JPEG -n02871525/ILSVRC2012_val_00012973.JPEG -n03617480/ILSVRC2012_val_00000900.JPEG -n01775062/ILSVRC2012_val_00046017.JPEG -n02007558/ILSVRC2012_val_00030095.JPEG -n02363005/ILSVRC2012_val_00017230.JPEG -n07614500/ILSVRC2012_val_00024640.JPEG -n03942813/ILSVRC2012_val_00038827.JPEG -n04417672/ILSVRC2012_val_00004491.JPEG -n01753488/ILSVRC2012_val_00001582.JPEG -n02033041/ILSVRC2012_val_00034186.JPEG -n03854065/ILSVRC2012_val_00048283.JPEG -n04229816/ILSVRC2012_val_00014358.JPEG -n02481823/ILSVRC2012_val_00038769.JPEG -n02488291/ILSVRC2012_val_00039225.JPEG -n04367480/ILSVRC2012_val_00049863.JPEG -n02988304/ILSVRC2012_val_00004114.JPEG -n04239074/ILSVRC2012_val_00017133.JPEG -n03633091/ILSVRC2012_val_00009885.JPEG -n02094258/ILSVRC2012_val_00020681.JPEG -n02808304/ILSVRC2012_val_00014072.JPEG -n01729322/ILSVRC2012_val_00003071.JPEG -n02504013/ILSVRC2012_val_00037615.JPEG -n02116738/ILSVRC2012_val_00044707.JPEG -n02321529/ILSVRC2012_val_00034757.JPEG -n02110627/ILSVRC2012_val_00032948.JPEG -n02109047/ILSVRC2012_val_00041514.JPEG -n04389033/ILSVRC2012_val_00015638.JPEG -n03710193/ILSVRC2012_val_00048316.JPEG -n01877812/ILSVRC2012_val_00042917.JPEG -n01630670/ILSVRC2012_val_00021083.JPEG -n04579145/ILSVRC2012_val_00006747.JPEG -n07717410/ILSVRC2012_val_00025236.JPEG -n07720875/ILSVRC2012_val_00001463.JPEG -n02002724/ILSVRC2012_val_00022140.JPEG -n03223299/ILSVRC2012_val_00040733.JPEG -n04125021/ILSVRC2012_val_00019656.JPEG -n02279972/ILSVRC2012_val_00047039.JPEG -n03498962/ILSVRC2012_val_00044873.JPEG -n03937543/ILSVRC2012_val_00017943.JPEG -n07614500/ILSVRC2012_val_00031184.JPEG -n04584207/ILSVRC2012_val_00005990.JPEG -n04606251/ILSVRC2012_val_00038015.JPEG -n02795169/ILSVRC2012_val_00046794.JPEG -n01843065/ILSVRC2012_val_00024916.JPEG -n03868863/ILSVRC2012_val_00015601.JPEG -n02783161/ILSVRC2012_val_00005048.JPEG -n02906734/ILSVRC2012_val_00002937.JPEG -n02500267/ILSVRC2012_val_00040939.JPEG -n04192698/ILSVRC2012_val_00031758.JPEG -n02104029/ILSVRC2012_val_00024981.JPEG -n03930630/ILSVRC2012_val_00001156.JPEG -n04335435/ILSVRC2012_val_00017135.JPEG -n03930630/ILSVRC2012_val_00000049.JPEG -n02128925/ILSVRC2012_val_00021585.JPEG -n02701002/ILSVRC2012_val_00013686.JPEG -n03485794/ILSVRC2012_val_00047363.JPEG -n02102177/ILSVRC2012_val_00047744.JPEG -n04070727/ILSVRC2012_val_00029720.JPEG -n01978455/ILSVRC2012_val_00024557.JPEG -n04509417/ILSVRC2012_val_00011781.JPEG -n03947888/ILSVRC2012_val_00031484.JPEG -n03444034/ILSVRC2012_val_00042238.JPEG -n07747607/ILSVRC2012_val_00040188.JPEG -n01773549/ILSVRC2012_val_00035063.JPEG -n02877765/ILSVRC2012_val_00030430.JPEG -n02389026/ILSVRC2012_val_00022302.JPEG -n01582220/ILSVRC2012_val_00034437.JPEG -n02190166/ILSVRC2012_val_00034895.JPEG -n02979186/ILSVRC2012_val_00034563.JPEG -n03063599/ILSVRC2012_val_00038548.JPEG -n02114367/ILSVRC2012_val_00029659.JPEG -n02124075/ILSVRC2012_val_00000709.JPEG -n04200800/ILSVRC2012_val_00047526.JPEG -n02791124/ILSVRC2012_val_00006275.JPEG -n01734418/ILSVRC2012_val_00019148.JPEG -n03207743/ILSVRC2012_val_00041412.JPEG -n01737021/ILSVRC2012_val_00027228.JPEG -n02174001/ILSVRC2012_val_00040044.JPEG -n01675722/ILSVRC2012_val_00048134.JPEG -n02279972/ILSVRC2012_val_00033695.JPEG -n04523525/ILSVRC2012_val_00032984.JPEG -n03452741/ILSVRC2012_val_00026127.JPEG -n02229544/ILSVRC2012_val_00009275.JPEG -n02110063/ILSVRC2012_val_00039359.JPEG -n01532829/ILSVRC2012_val_00017577.JPEG -n02012849/ILSVRC2012_val_00009564.JPEG -n02749479/ILSVRC2012_val_00035791.JPEG -n04133789/ILSVRC2012_val_00021228.JPEG -n04074963/ILSVRC2012_val_00013950.JPEG -n04553703/ILSVRC2012_val_00038528.JPEG -n03871628/ILSVRC2012_val_00015005.JPEG -n02027492/ILSVRC2012_val_00002488.JPEG -n04532106/ILSVRC2012_val_00011984.JPEG -n04208210/ILSVRC2012_val_00010415.JPEG -n04597913/ILSVRC2012_val_00032311.JPEG -n04467665/ILSVRC2012_val_00032726.JPEG -n01819313/ILSVRC2012_val_00019123.JPEG -n02097130/ILSVRC2012_val_00038174.JPEG -n03764736/ILSVRC2012_val_00020505.JPEG -n03891332/ILSVRC2012_val_00038260.JPEG -n02097047/ILSVRC2012_val_00035480.JPEG -n07613480/ILSVRC2012_val_00031778.JPEG -n01514859/ILSVRC2012_val_00049833.JPEG -n03000134/ILSVRC2012_val_00008513.JPEG -n04461696/ILSVRC2012_val_00004512.JPEG -n04204238/ILSVRC2012_val_00043309.JPEG -n02892767/ILSVRC2012_val_00033714.JPEG -n03063689/ILSVRC2012_val_00014552.JPEG -n02086079/ILSVRC2012_val_00027838.JPEG -n04336792/ILSVRC2012_val_00009356.JPEG -n03950228/ILSVRC2012_val_00049774.JPEG -n02927161/ILSVRC2012_val_00002526.JPEG -n02102040/ILSVRC2012_val_00012689.JPEG -n03207941/ILSVRC2012_val_00018647.JPEG -n01986214/ILSVRC2012_val_00027404.JPEG -n03160309/ILSVRC2012_val_00017090.JPEG -n03179701/ILSVRC2012_val_00006423.JPEG -n03594734/ILSVRC2012_val_00018771.JPEG -n03016953/ILSVRC2012_val_00037394.JPEG -n03388183/ILSVRC2012_val_00005179.JPEG -n13133613/ILSVRC2012_val_00034855.JPEG -n03792782/ILSVRC2012_val_00042393.JPEG -n02999410/ILSVRC2012_val_00043064.JPEG -n02999410/ILSVRC2012_val_00013634.JPEG -n03676483/ILSVRC2012_val_00027437.JPEG -n04317175/ILSVRC2012_val_00030733.JPEG -n03085013/ILSVRC2012_val_00045039.JPEG -n02807133/ILSVRC2012_val_00039882.JPEG -n02105505/ILSVRC2012_val_00043538.JPEG -n02090721/ILSVRC2012_val_00013507.JPEG -n04465501/ILSVRC2012_val_00035513.JPEG -n04310018/ILSVRC2012_val_00025265.JPEG -n01632458/ILSVRC2012_val_00003350.JPEG -n02980441/ILSVRC2012_val_00021425.JPEG -n02669723/ILSVRC2012_val_00047602.JPEG -n02137549/ILSVRC2012_val_00023825.JPEG -n07715103/ILSVRC2012_val_00028394.JPEG -n02092339/ILSVRC2012_val_00047244.JPEG -n02114367/ILSVRC2012_val_00006666.JPEG -n03220513/ILSVRC2012_val_00002674.JPEG -n03868863/ILSVRC2012_val_00035346.JPEG -n02939185/ILSVRC2012_val_00031283.JPEG -n01806567/ILSVRC2012_val_00018648.JPEG -n02769748/ILSVRC2012_val_00016935.JPEG -n04479046/ILSVRC2012_val_00018547.JPEG -n02167151/ILSVRC2012_val_00023624.JPEG -n02097209/ILSVRC2012_val_00028152.JPEG -n02110806/ILSVRC2012_val_00046623.JPEG -n02787622/ILSVRC2012_val_00000315.JPEG -n03388549/ILSVRC2012_val_00023839.JPEG -n03935335/ILSVRC2012_val_00012052.JPEG -n04579432/ILSVRC2012_val_00001245.JPEG -n03903868/ILSVRC2012_val_00013811.JPEG -n03498962/ILSVRC2012_val_00042039.JPEG -n02640242/ILSVRC2012_val_00036484.JPEG -n07565083/ILSVRC2012_val_00047347.JPEG -n01729322/ILSVRC2012_val_00018453.JPEG -n04487081/ILSVRC2012_val_00014513.JPEG -n04154565/ILSVRC2012_val_00002631.JPEG -n02916936/ILSVRC2012_val_00047056.JPEG -n02342885/ILSVRC2012_val_00039968.JPEG -n03384352/ILSVRC2012_val_00005128.JPEG -n02096294/ILSVRC2012_val_00042133.JPEG -n03208938/ILSVRC2012_val_00018891.JPEG -n02268853/ILSVRC2012_val_00012681.JPEG -n02437616/ILSVRC2012_val_00010441.JPEG -n02965783/ILSVRC2012_val_00012763.JPEG -n04590129/ILSVRC2012_val_00041532.JPEG -n03100240/ILSVRC2012_val_00036091.JPEG -n04023962/ILSVRC2012_val_00017642.JPEG -n03995372/ILSVRC2012_val_00009245.JPEG -n02859443/ILSVRC2012_val_00042176.JPEG -n04009552/ILSVRC2012_val_00017302.JPEG -n04127249/ILSVRC2012_val_00020871.JPEG -n02174001/ILSVRC2012_val_00023013.JPEG -n03393912/ILSVRC2012_val_00003909.JPEG -n02167151/ILSVRC2012_val_00042127.JPEG -n02870880/ILSVRC2012_val_00046060.JPEG -n02966193/ILSVRC2012_val_00044864.JPEG -n01981276/ILSVRC2012_val_00011453.JPEG -n02088238/ILSVRC2012_val_00020468.JPEG -n02102177/ILSVRC2012_val_00007927.JPEG -n02443114/ILSVRC2012_val_00016220.JPEG -n03459775/ILSVRC2012_val_00028470.JPEG -n03443371/ILSVRC2012_val_00034156.JPEG -n07873807/ILSVRC2012_val_00012243.JPEG -n02112350/ILSVRC2012_val_00016303.JPEG -n02823428/ILSVRC2012_val_00040545.JPEG -n03690938/ILSVRC2012_val_00036956.JPEG -n07880968/ILSVRC2012_val_00006293.JPEG -n01530575/ILSVRC2012_val_00023441.JPEG -n04554684/ILSVRC2012_val_00014530.JPEG -n03218198/ILSVRC2012_val_00007393.JPEG -n03461385/ILSVRC2012_val_00019818.JPEG -n03794056/ILSVRC2012_val_00024361.JPEG -n01945685/ILSVRC2012_val_00014762.JPEG -n04372370/ILSVRC2012_val_00035679.JPEG -n04613696/ILSVRC2012_val_00016339.JPEG -n04548362/ILSVRC2012_val_00028532.JPEG -n02808304/ILSVRC2012_val_00001384.JPEG -n02098286/ILSVRC2012_val_00013573.JPEG -n01698640/ILSVRC2012_val_00045338.JPEG -n02098286/ILSVRC2012_val_00041358.JPEG -n03495258/ILSVRC2012_val_00003669.JPEG -n03954731/ILSVRC2012_val_00015496.JPEG -n09193705/ILSVRC2012_val_00003282.JPEG -n02007558/ILSVRC2012_val_00047052.JPEG -n03216828/ILSVRC2012_val_00005968.JPEG -n03141823/ILSVRC2012_val_00014253.JPEG -n04486054/ILSVRC2012_val_00043357.JPEG -n01824575/ILSVRC2012_val_00014903.JPEG -n01737021/ILSVRC2012_val_00004040.JPEG -n01532829/ILSVRC2012_val_00031171.JPEG -n02124075/ILSVRC2012_val_00046964.JPEG -n02100877/ILSVRC2012_val_00004223.JPEG -n03916031/ILSVRC2012_val_00048412.JPEG -n03793489/ILSVRC2012_val_00018677.JPEG -n02113624/ILSVRC2012_val_00037437.JPEG -n03127925/ILSVRC2012_val_00005893.JPEG -n03208938/ILSVRC2012_val_00044142.JPEG -n03127925/ILSVRC2012_val_00045564.JPEG -n02086646/ILSVRC2012_val_00022521.JPEG -n03271574/ILSVRC2012_val_00022306.JPEG -n03877845/ILSVRC2012_val_00046055.JPEG -n01855032/ILSVRC2012_val_00007973.JPEG -n03063599/ILSVRC2012_val_00023112.JPEG -n03998194/ILSVRC2012_val_00022178.JPEG -n02091134/ILSVRC2012_val_00045708.JPEG -n03109150/ILSVRC2012_val_00000678.JPEG -n04204238/ILSVRC2012_val_00001633.JPEG -n03902125/ILSVRC2012_val_00021715.JPEG -n02699494/ILSVRC2012_val_00005723.JPEG -n02123597/ILSVRC2012_val_00015401.JPEG -n04344873/ILSVRC2012_val_00015043.JPEG -n07932039/ILSVRC2012_val_00043644.JPEG -n03742115/ILSVRC2012_val_00026974.JPEG -n02097130/ILSVRC2012_val_00014157.JPEG -n04208210/ILSVRC2012_val_00023586.JPEG -n03041632/ILSVRC2012_val_00002212.JPEG -n02487347/ILSVRC2012_val_00001656.JPEG -n03314780/ILSVRC2012_val_00038233.JPEG -n02110958/ILSVRC2012_val_00024249.JPEG -n03459775/ILSVRC2012_val_00023023.JPEG -n03188531/ILSVRC2012_val_00010735.JPEG -n04447861/ILSVRC2012_val_00018712.JPEG -n04505470/ILSVRC2012_val_00000666.JPEG -n02077923/ILSVRC2012_val_00027866.JPEG -n02808440/ILSVRC2012_val_00048839.JPEG -n03534580/ILSVRC2012_val_00002592.JPEG -n04229816/ILSVRC2012_val_00011305.JPEG -n02326432/ILSVRC2012_val_00022000.JPEG -n03947888/ILSVRC2012_val_00023104.JPEG -n02087046/ILSVRC2012_val_00037669.JPEG -n02129165/ILSVRC2012_val_00040607.JPEG -n03131574/ILSVRC2012_val_00004602.JPEG -n04590129/ILSVRC2012_val_00023987.JPEG -n02009229/ILSVRC2012_val_00016684.JPEG -n02093859/ILSVRC2012_val_00036491.JPEG -n02058221/ILSVRC2012_val_00031023.JPEG -n03637318/ILSVRC2012_val_00012139.JPEG -n02087394/ILSVRC2012_val_00019209.JPEG -n01798484/ILSVRC2012_val_00041832.JPEG -n02119789/ILSVRC2012_val_00002881.JPEG -n02441942/ILSVRC2012_val_00042355.JPEG -n03532672/ILSVRC2012_val_00019398.JPEG -n07579787/ILSVRC2012_val_00032565.JPEG -n03271574/ILSVRC2012_val_00031563.JPEG -n02423022/ILSVRC2012_val_00018436.JPEG -n04009552/ILSVRC2012_val_00020745.JPEG -n02110063/ILSVRC2012_val_00029783.JPEG -n02095889/ILSVRC2012_val_00015325.JPEG -n02489166/ILSVRC2012_val_00029721.JPEG -n02111129/ILSVRC2012_val_00041337.JPEG -n03769881/ILSVRC2012_val_00007633.JPEG -n04532670/ILSVRC2012_val_00024004.JPEG -n07768694/ILSVRC2012_val_00001514.JPEG -n01914609/ILSVRC2012_val_00048292.JPEG -n02978881/ILSVRC2012_val_00019144.JPEG -n02094433/ILSVRC2012_val_00019702.JPEG -n07768694/ILSVRC2012_val_00018186.JPEG -n02927161/ILSVRC2012_val_00039437.JPEG -n04074963/ILSVRC2012_val_00038370.JPEG -n01843383/ILSVRC2012_val_00020909.JPEG -n01677366/ILSVRC2012_val_00046346.JPEG -n03983396/ILSVRC2012_val_00001970.JPEG -n01882714/ILSVRC2012_val_00040233.JPEG -n01704323/ILSVRC2012_val_00040206.JPEG -n02114855/ILSVRC2012_val_00044732.JPEG -n02730930/ILSVRC2012_val_00016687.JPEG -n01580077/ILSVRC2012_val_00003386.JPEG -n02910353/ILSVRC2012_val_00041070.JPEG -n04458633/ILSVRC2012_val_00024934.JPEG -n03793489/ILSVRC2012_val_00021458.JPEG -n02667093/ILSVRC2012_val_00030369.JPEG -n01669191/ILSVRC2012_val_00048480.JPEG -n04404412/ILSVRC2012_val_00042660.JPEG -n02134084/ILSVRC2012_val_00030136.JPEG -n04131690/ILSVRC2012_val_00032630.JPEG -n02510455/ILSVRC2012_val_00026307.JPEG -n03930630/ILSVRC2012_val_00036504.JPEG -n03476991/ILSVRC2012_val_00037362.JPEG -n03697007/ILSVRC2012_val_00047600.JPEG -n03649909/ILSVRC2012_val_00038906.JPEG -n02883205/ILSVRC2012_val_00006456.JPEG -n03063689/ILSVRC2012_val_00033518.JPEG -n13044778/ILSVRC2012_val_00034526.JPEG -n02790996/ILSVRC2012_val_00010468.JPEG -n09468604/ILSVRC2012_val_00045923.JPEG -n01955084/ILSVRC2012_val_00042771.JPEG -n04116512/ILSVRC2012_val_00035956.JPEG -n04507155/ILSVRC2012_val_00022988.JPEG -n02123394/ILSVRC2012_val_00015372.JPEG -n04548362/ILSVRC2012_val_00006169.JPEG -n02106030/ILSVRC2012_val_00024292.JPEG -n02109961/ILSVRC2012_val_00049654.JPEG -n02916936/ILSVRC2012_val_00000366.JPEG -n01817953/ILSVRC2012_val_00015324.JPEG -n03000134/ILSVRC2012_val_00046648.JPEG -n01688243/ILSVRC2012_val_00043288.JPEG -n01930112/ILSVRC2012_val_00027709.JPEG -n04447861/ILSVRC2012_val_00025192.JPEG -n03344393/ILSVRC2012_val_00041736.JPEG -n03782006/ILSVRC2012_val_00036107.JPEG -n03623198/ILSVRC2012_val_00029975.JPEG -n02104029/ILSVRC2012_val_00028605.JPEG -n02892767/ILSVRC2012_val_00013681.JPEG -n03637318/ILSVRC2012_val_00002980.JPEG -n04200800/ILSVRC2012_val_00004257.JPEG -n03250847/ILSVRC2012_val_00026731.JPEG -n01734418/ILSVRC2012_val_00015762.JPEG -n03692522/ILSVRC2012_val_00003231.JPEG -n04604644/ILSVRC2012_val_00015677.JPEG -n07590611/ILSVRC2012_val_00031682.JPEG -n02088094/ILSVRC2012_val_00043993.JPEG -n02906734/ILSVRC2012_val_00016839.JPEG -n03617480/ILSVRC2012_val_00021792.JPEG -n02977058/ILSVRC2012_val_00037604.JPEG -n03825788/ILSVRC2012_val_00021292.JPEG -n03761084/ILSVRC2012_val_00005324.JPEG -n01491361/ILSVRC2012_val_00002922.JPEG -n04074963/ILSVRC2012_val_00010727.JPEG -n02128925/ILSVRC2012_val_00018859.JPEG -n03347037/ILSVRC2012_val_00028252.JPEG -n09399592/ILSVRC2012_val_00034546.JPEG -n02493793/ILSVRC2012_val_00032964.JPEG -n03935335/ILSVRC2012_val_00025716.JPEG -n01665541/ILSVRC2012_val_00000930.JPEG -n03991062/ILSVRC2012_val_00037312.JPEG -n02113624/ILSVRC2012_val_00020474.JPEG -n03459775/ILSVRC2012_val_00035643.JPEG -n02092339/ILSVRC2012_val_00020010.JPEG -n02102973/ILSVRC2012_val_00018530.JPEG -n02480855/ILSVRC2012_val_00005565.JPEG -n03773504/ILSVRC2012_val_00016588.JPEG -n03929855/ILSVRC2012_val_00018444.JPEG -n02099429/ILSVRC2012_val_00025714.JPEG -n04476259/ILSVRC2012_val_00040453.JPEG -n03938244/ILSVRC2012_val_00046170.JPEG -n02484975/ILSVRC2012_val_00000695.JPEG -n02490219/ILSVRC2012_val_00029804.JPEG -n03709823/ILSVRC2012_val_00025557.JPEG -n03617480/ILSVRC2012_val_00002198.JPEG -n01667114/ILSVRC2012_val_00032700.JPEG -n02655020/ILSVRC2012_val_00034545.JPEG -n01558993/ILSVRC2012_val_00019208.JPEG -n03290653/ILSVRC2012_val_00038152.JPEG -n02111277/ILSVRC2012_val_00034681.JPEG -n07749582/ILSVRC2012_val_00038212.JPEG -n02089867/ILSVRC2012_val_00002373.JPEG -n07614500/ILSVRC2012_val_00014743.JPEG -n02086646/ILSVRC2012_val_00030642.JPEG -n02102480/ILSVRC2012_val_00033198.JPEG -n03000134/ILSVRC2012_val_00047124.JPEG -n02123597/ILSVRC2012_val_00029839.JPEG -n02169497/ILSVRC2012_val_00019171.JPEG -n02480495/ILSVRC2012_val_00028784.JPEG -n04350905/ILSVRC2012_val_00033166.JPEG -n01877812/ILSVRC2012_val_00024264.JPEG -n03272010/ILSVRC2012_val_00048443.JPEG -n01665541/ILSVRC2012_val_00005919.JPEG -n02277742/ILSVRC2012_val_00000810.JPEG -n04604644/ILSVRC2012_val_00042739.JPEG -n03063689/ILSVRC2012_val_00043146.JPEG -n01775062/ILSVRC2012_val_00037348.JPEG -n02108422/ILSVRC2012_val_00020989.JPEG -n01664065/ILSVRC2012_val_00024221.JPEG -n03584829/ILSVRC2012_val_00026533.JPEG -n03450230/ILSVRC2012_val_00026368.JPEG -n02123159/ILSVRC2012_val_00047925.JPEG -n07871810/ILSVRC2012_val_00024893.JPEG -n04265275/ILSVRC2012_val_00047522.JPEG -n01984695/ILSVRC2012_val_00008182.JPEG -n01734418/ILSVRC2012_val_00028503.JPEG -n01818515/ILSVRC2012_val_00017029.JPEG -n04456115/ILSVRC2012_val_00049142.JPEG -n02437312/ILSVRC2012_val_00039249.JPEG -n03016953/ILSVRC2012_val_00043073.JPEG -n04286575/ILSVRC2012_val_00020426.JPEG -n01704323/ILSVRC2012_val_00024993.JPEG -n02165456/ILSVRC2012_val_00030697.JPEG -n01629819/ILSVRC2012_val_00011661.JPEG -n03706229/ILSVRC2012_val_00048067.JPEG -n02092002/ILSVRC2012_val_00000405.JPEG -n07711569/ILSVRC2012_val_00012622.JPEG -n03063689/ILSVRC2012_val_00012589.JPEG -n04258138/ILSVRC2012_val_00036418.JPEG -n02133161/ILSVRC2012_val_00039819.JPEG -n11879895/ILSVRC2012_val_00021912.JPEG -n02676566/ILSVRC2012_val_00037301.JPEG -n03417042/ILSVRC2012_val_00009345.JPEG -n02974003/ILSVRC2012_val_00048672.JPEG -n09472597/ILSVRC2012_val_00048040.JPEG -n01843383/ILSVRC2012_val_00040051.JPEG -n04251144/ILSVRC2012_val_00005230.JPEG -n02804610/ILSVRC2012_val_00018419.JPEG -n03594945/ILSVRC2012_val_00036304.JPEG -n03769881/ILSVRC2012_val_00010881.JPEG -n03786901/ILSVRC2012_val_00006394.JPEG -n03888257/ILSVRC2012_val_00024340.JPEG -n03026506/ILSVRC2012_val_00044713.JPEG -n03325584/ILSVRC2012_val_00030089.JPEG -n01667778/ILSVRC2012_val_00021982.JPEG -n03207743/ILSVRC2012_val_00034844.JPEG -n03899768/ILSVRC2012_val_00021364.JPEG -n02091244/ILSVRC2012_val_00020049.JPEG -n02871525/ILSVRC2012_val_00013599.JPEG -n01582220/ILSVRC2012_val_00030017.JPEG -n01882714/ILSVRC2012_val_00049217.JPEG -n04562935/ILSVRC2012_val_00016930.JPEG -n03961711/ILSVRC2012_val_00002850.JPEG -n04557648/ILSVRC2012_val_00036165.JPEG -n01735189/ILSVRC2012_val_00035429.JPEG -n02028035/ILSVRC2012_val_00006580.JPEG -n01631663/ILSVRC2012_val_00006737.JPEG -n01616318/ILSVRC2012_val_00035953.JPEG -n03249569/ILSVRC2012_val_00041425.JPEG -n04116512/ILSVRC2012_val_00001905.JPEG -n03461385/ILSVRC2012_val_00009965.JPEG -n03733281/ILSVRC2012_val_00038862.JPEG -n03908618/ILSVRC2012_val_00007771.JPEG -n03131574/ILSVRC2012_val_00016407.JPEG -n03982430/ILSVRC2012_val_00017419.JPEG -n01697457/ILSVRC2012_val_00034085.JPEG -n02101388/ILSVRC2012_val_00013927.JPEG -n02099849/ILSVRC2012_val_00044036.JPEG -n01669191/ILSVRC2012_val_00028162.JPEG -n02106550/ILSVRC2012_val_00026214.JPEG -n02098286/ILSVRC2012_val_00033033.JPEG -n02108422/ILSVRC2012_val_00008003.JPEG -n11879895/ILSVRC2012_val_00010754.JPEG -n04344873/ILSVRC2012_val_00027749.JPEG -n02107574/ILSVRC2012_val_00031343.JPEG -n03110669/ILSVRC2012_val_00038682.JPEG -n04346328/ILSVRC2012_val_00016110.JPEG -n02412080/ILSVRC2012_val_00023019.JPEG -n02992211/ILSVRC2012_val_00000736.JPEG -n03443371/ILSVRC2012_val_00003629.JPEG -n02138441/ILSVRC2012_val_00046136.JPEG -n02699494/ILSVRC2012_val_00016758.JPEG -n02190166/ILSVRC2012_val_00019460.JPEG -n02444819/ILSVRC2012_val_00017559.JPEG -n02415577/ILSVRC2012_val_00017917.JPEG -n02134084/ILSVRC2012_val_00042273.JPEG -n07695742/ILSVRC2012_val_00025057.JPEG -n02977058/ILSVRC2012_val_00005655.JPEG -n03467068/ILSVRC2012_val_00000169.JPEG -n03042490/ILSVRC2012_val_00047100.JPEG -n04548362/ILSVRC2012_val_00000866.JPEG -n01644900/ILSVRC2012_val_00004427.JPEG -n02133161/ILSVRC2012_val_00026962.JPEG -n04328186/ILSVRC2012_val_00044825.JPEG -n04517823/ILSVRC2012_val_00025993.JPEG -n11939491/ILSVRC2012_val_00034010.JPEG -n02110627/ILSVRC2012_val_00044949.JPEG -n02096585/ILSVRC2012_val_00015204.JPEG -n02321529/ILSVRC2012_val_00042639.JPEG -n03929660/ILSVRC2012_val_00018730.JPEG -n04049303/ILSVRC2012_val_00004440.JPEG -n03857828/ILSVRC2012_val_00022267.JPEG -n02123159/ILSVRC2012_val_00009964.JPEG -n01695060/ILSVRC2012_val_00039578.JPEG -n03776460/ILSVRC2012_val_00009264.JPEG -n01980166/ILSVRC2012_val_00000818.JPEG -n04239074/ILSVRC2012_val_00026618.JPEG -n03249569/ILSVRC2012_val_00016762.JPEG -n04141975/ILSVRC2012_val_00039660.JPEG -n02487347/ILSVRC2012_val_00029789.JPEG -n02110806/ILSVRC2012_val_00018009.JPEG -n03742115/ILSVRC2012_val_00038646.JPEG -n01756291/ILSVRC2012_val_00028598.JPEG -n03782006/ILSVRC2012_val_00032019.JPEG -n07590611/ILSVRC2012_val_00022369.JPEG -n02281787/ILSVRC2012_val_00028202.JPEG -n02134084/ILSVRC2012_val_00040753.JPEG -n03259280/ILSVRC2012_val_00006376.JPEG -n03424325/ILSVRC2012_val_00005566.JPEG -n04239074/ILSVRC2012_val_00021286.JPEG -n07753275/ILSVRC2012_val_00031427.JPEG -n02099429/ILSVRC2012_val_00027322.JPEG -n03047690/ILSVRC2012_val_00035313.JPEG -n03344393/ILSVRC2012_val_00018727.JPEG -n04462240/ILSVRC2012_val_00014334.JPEG -n02256656/ILSVRC2012_val_00003876.JPEG -n03042490/ILSVRC2012_val_00043697.JPEG -n01704323/ILSVRC2012_val_00003603.JPEG -n02480495/ILSVRC2012_val_00033841.JPEG -n03721384/ILSVRC2012_val_00022555.JPEG -n03445924/ILSVRC2012_val_00012668.JPEG -n04285008/ILSVRC2012_val_00022246.JPEG -n02437312/ILSVRC2012_val_00027955.JPEG -n01740131/ILSVRC2012_val_00021093.JPEG -n04357314/ILSVRC2012_val_00010438.JPEG -n02817516/ILSVRC2012_val_00015849.JPEG -n07892512/ILSVRC2012_val_00004421.JPEG -n04136333/ILSVRC2012_val_00000442.JPEG -n02480495/ILSVRC2012_val_00042045.JPEG -n04409515/ILSVRC2012_val_00010812.JPEG -n04266014/ILSVRC2012_val_00014262.JPEG -n04009552/ILSVRC2012_val_00045112.JPEG -n01537544/ILSVRC2012_val_00018676.JPEG -n01518878/ILSVRC2012_val_00010594.JPEG -n02098105/ILSVRC2012_val_00042628.JPEG -n02109961/ILSVRC2012_val_00040410.JPEG -n02268443/ILSVRC2012_val_00034192.JPEG -n03379051/ILSVRC2012_val_00012164.JPEG -n03840681/ILSVRC2012_val_00002324.JPEG -n02097047/ILSVRC2012_val_00022713.JPEG -n07615774/ILSVRC2012_val_00020614.JPEG -n02484975/ILSVRC2012_val_00022174.JPEG -n03649909/ILSVRC2012_val_00012348.JPEG -n03018349/ILSVRC2012_val_00018538.JPEG -n03954731/ILSVRC2012_val_00021761.JPEG -n03187595/ILSVRC2012_val_00021110.JPEG -n04069434/ILSVRC2012_val_00016109.JPEG -n03018349/ILSVRC2012_val_00028952.JPEG -n04209133/ILSVRC2012_val_00041604.JPEG -n04335435/ILSVRC2012_val_00012076.JPEG -n04392985/ILSVRC2012_val_00040920.JPEG -n04209133/ILSVRC2012_val_00046639.JPEG -n02279972/ILSVRC2012_val_00033925.JPEG -n02086240/ILSVRC2012_val_00014174.JPEG -n07802026/ILSVRC2012_val_00018320.JPEG -n03134739/ILSVRC2012_val_00024198.JPEG -n02325366/ILSVRC2012_val_00001670.JPEG -n07714571/ILSVRC2012_val_00040469.JPEG -n04252225/ILSVRC2012_val_00017609.JPEG -n01728572/ILSVRC2012_val_00032556.JPEG -n01833805/ILSVRC2012_val_00026090.JPEG -n02017213/ILSVRC2012_val_00014599.JPEG -n03876231/ILSVRC2012_val_00010790.JPEG -n04243546/ILSVRC2012_val_00046861.JPEG -n02794156/ILSVRC2012_val_00023345.JPEG -n03961711/ILSVRC2012_val_00010631.JPEG -n02487347/ILSVRC2012_val_00025312.JPEG -n01608432/ILSVRC2012_val_00025636.JPEG -n03041632/ILSVRC2012_val_00015679.JPEG -n07711569/ILSVRC2012_val_00044645.JPEG -n03223299/ILSVRC2012_val_00030296.JPEG -n07836838/ILSVRC2012_val_00008271.JPEG -n10565667/ILSVRC2012_val_00046317.JPEG -n02782093/ILSVRC2012_val_00047373.JPEG -n02687172/ILSVRC2012_val_00047290.JPEG -n01608432/ILSVRC2012_val_00000328.JPEG -n02640242/ILSVRC2012_val_00046943.JPEG -n12998815/ILSVRC2012_val_00000731.JPEG -n04311004/ILSVRC2012_val_00044125.JPEG -n02403003/ILSVRC2012_val_00001513.JPEG -n03662601/ILSVRC2012_val_00031941.JPEG -n03937543/ILSVRC2012_val_00017685.JPEG -n04344873/ILSVRC2012_val_00038296.JPEG -n02454379/ILSVRC2012_val_00024257.JPEG -n01629819/ILSVRC2012_val_00009616.JPEG -n03394916/ILSVRC2012_val_00005548.JPEG -n02056570/ILSVRC2012_val_00002352.JPEG -n02835271/ILSVRC2012_val_00037658.JPEG -n03866082/ILSVRC2012_val_00031324.JPEG -n01729322/ILSVRC2012_val_00012188.JPEG -n04033995/ILSVRC2012_val_00030906.JPEG -n04153751/ILSVRC2012_val_00001878.JPEG -n03141823/ILSVRC2012_val_00034736.JPEG -n04153751/ILSVRC2012_val_00031988.JPEG -n02487347/ILSVRC2012_val_00000095.JPEG -n09246464/ILSVRC2012_val_00031523.JPEG -n02102040/ILSVRC2012_val_00019414.JPEG -n02487347/ILSVRC2012_val_00022040.JPEG -n02106550/ILSVRC2012_val_00018972.JPEG -n01667114/ILSVRC2012_val_00046053.JPEG -n03804744/ILSVRC2012_val_00039068.JPEG -n03877845/ILSVRC2012_val_00034639.JPEG -n01558993/ILSVRC2012_val_00001598.JPEG -n04501370/ILSVRC2012_val_00032392.JPEG -n07747607/ILSVRC2012_val_00045093.JPEG -n02109961/ILSVRC2012_val_00008320.JPEG -n02109047/ILSVRC2012_val_00004731.JPEG -n03633091/ILSVRC2012_val_00037904.JPEG -n02917067/ILSVRC2012_val_00022610.JPEG -n01740131/ILSVRC2012_val_00030229.JPEG -n03272562/ILSVRC2012_val_00030381.JPEG -n02793495/ILSVRC2012_val_00009958.JPEG -n04074963/ILSVRC2012_val_00000275.JPEG -n03445924/ILSVRC2012_val_00026881.JPEG -n03690938/ILSVRC2012_val_00020840.JPEG -n02963159/ILSVRC2012_val_00046157.JPEG -n03478589/ILSVRC2012_val_00035615.JPEG -n02108000/ILSVRC2012_val_00008114.JPEG -n02988304/ILSVRC2012_val_00013693.JPEG -n02110341/ILSVRC2012_val_00030476.JPEG -n04350905/ILSVRC2012_val_00040799.JPEG -n03394916/ILSVRC2012_val_00034826.JPEG -n02786058/ILSVRC2012_val_00013543.JPEG -n02102973/ILSVRC2012_val_00044387.JPEG -n02120079/ILSVRC2012_val_00001335.JPEG -n02536864/ILSVRC2012_val_00019489.JPEG -n04270147/ILSVRC2012_val_00045450.JPEG -n02107683/ILSVRC2012_val_00011322.JPEG -n04200800/ILSVRC2012_val_00036014.JPEG -n03388043/ILSVRC2012_val_00019659.JPEG -n04005630/ILSVRC2012_val_00040234.JPEG -n02939185/ILSVRC2012_val_00011050.JPEG -n03724870/ILSVRC2012_val_00008913.JPEG -n01692333/ILSVRC2012_val_00037417.JPEG -n03710637/ILSVRC2012_val_00007816.JPEG -n03393912/ILSVRC2012_val_00020706.JPEG -n02799071/ILSVRC2012_val_00040705.JPEG -n03961711/ILSVRC2012_val_00041237.JPEG -n03873416/ILSVRC2012_val_00012609.JPEG -n03494278/ILSVRC2012_val_00022564.JPEG -n03649909/ILSVRC2012_val_00029405.JPEG -n02087046/ILSVRC2012_val_00042289.JPEG -n02791124/ILSVRC2012_val_00044551.JPEG -n07734744/ILSVRC2012_val_00046024.JPEG -n03016953/ILSVRC2012_val_00010764.JPEG -n07718747/ILSVRC2012_val_00019457.JPEG -n02802426/ILSVRC2012_val_00022998.JPEG -n03196217/ILSVRC2012_val_00023369.JPEG -n01665541/ILSVRC2012_val_00009639.JPEG -n09428293/ILSVRC2012_val_00028242.JPEG -n06874185/ILSVRC2012_val_00025516.JPEG -n04507155/ILSVRC2012_val_00046429.JPEG -n01806143/ILSVRC2012_val_00040811.JPEG -n01817953/ILSVRC2012_val_00024592.JPEG -n02110958/ILSVRC2012_val_00029246.JPEG -n01735189/ILSVRC2012_val_00045256.JPEG -n02749479/ILSVRC2012_val_00002719.JPEG -n04049303/ILSVRC2012_val_00046327.JPEG -n01980166/ILSVRC2012_val_00005836.JPEG -n04548280/ILSVRC2012_val_00041547.JPEG -n02951585/ILSVRC2012_val_00044537.JPEG -n07718472/ILSVRC2012_val_00001920.JPEG -n04131690/ILSVRC2012_val_00048078.JPEG -n03976467/ILSVRC2012_val_00017894.JPEG -n03825788/ILSVRC2012_val_00038428.JPEG -n03874293/ILSVRC2012_val_00008933.JPEG -n04592741/ILSVRC2012_val_00028274.JPEG -n02667093/ILSVRC2012_val_00008504.JPEG -n02088632/ILSVRC2012_val_00031347.JPEG -n02412080/ILSVRC2012_val_00022880.JPEG -n02117135/ILSVRC2012_val_00023004.JPEG -n02219486/ILSVRC2012_val_00032504.JPEG -n06785654/ILSVRC2012_val_00041680.JPEG -n03109150/ILSVRC2012_val_00019143.JPEG -n01614925/ILSVRC2012_val_00042380.JPEG -n02037110/ILSVRC2012_val_00014991.JPEG -n04325704/ILSVRC2012_val_00047302.JPEG -n03666591/ILSVRC2012_val_00047097.JPEG -n02110958/ILSVRC2012_val_00030877.JPEG -n01440764/ILSVRC2012_val_00046252.JPEG -n01534433/ILSVRC2012_val_00014139.JPEG -n03445924/ILSVRC2012_val_00041371.JPEG -n02965783/ILSVRC2012_val_00000215.JPEG -n03538406/ILSVRC2012_val_00044450.JPEG -n02009229/ILSVRC2012_val_00048814.JPEG -n02939185/ILSVRC2012_val_00006325.JPEG -n04270147/ILSVRC2012_val_00049955.JPEG -n02797295/ILSVRC2012_val_00039627.JPEG -n02108551/ILSVRC2012_val_00039687.JPEG -n01632458/ILSVRC2012_val_00009779.JPEG -n02992211/ILSVRC2012_val_00014603.JPEG -n03042490/ILSVRC2012_val_00018709.JPEG -n02097298/ILSVRC2012_val_00025649.JPEG -n03970156/ILSVRC2012_val_00041302.JPEG -n02099429/ILSVRC2012_val_00044629.JPEG -n04251144/ILSVRC2012_val_00023981.JPEG -n01631663/ILSVRC2012_val_00019116.JPEG -n03871628/ILSVRC2012_val_00008492.JPEG -n01669191/ILSVRC2012_val_00002355.JPEG -n04509417/ILSVRC2012_val_00011412.JPEG -n01440764/ILSVRC2012_val_00009396.JPEG -n04326547/ILSVRC2012_val_00038127.JPEG -n01871265/ILSVRC2012_val_00038632.JPEG -n02422699/ILSVRC2012_val_00015081.JPEG -n02172182/ILSVRC2012_val_00037889.JPEG -n01735189/ILSVRC2012_val_00034054.JPEG -n03724870/ILSVRC2012_val_00035216.JPEG -n07716358/ILSVRC2012_val_00018255.JPEG -n07714571/ILSVRC2012_val_00029321.JPEG -n03042490/ILSVRC2012_val_00021502.JPEG -n01740131/ILSVRC2012_val_00033547.JPEG -n01847000/ILSVRC2012_val_00047009.JPEG -n03793489/ILSVRC2012_val_00032713.JPEG -n07753113/ILSVRC2012_val_00002124.JPEG -n01532829/ILSVRC2012_val_00013456.JPEG -n02317335/ILSVRC2012_val_00029527.JPEG -n04081281/ILSVRC2012_val_00020263.JPEG -n03089624/ILSVRC2012_val_00027919.JPEG -n02096177/ILSVRC2012_val_00044615.JPEG -n02277742/ILSVRC2012_val_00047996.JPEG -n02089973/ILSVRC2012_val_00020403.JPEG -n03467068/ILSVRC2012_val_00042555.JPEG -n02085620/ILSVRC2012_val_00045358.JPEG -n03884397/ILSVRC2012_val_00041523.JPEG -n02927161/ILSVRC2012_val_00021162.JPEG -n03443371/ILSVRC2012_val_00018786.JPEG -n06794110/ILSVRC2012_val_00019897.JPEG -n03384352/ILSVRC2012_val_00021815.JPEG -n02488291/ILSVRC2012_val_00002477.JPEG -n01824575/ILSVRC2012_val_00000929.JPEG -n04330267/ILSVRC2012_val_00033191.JPEG -n03642806/ILSVRC2012_val_00017736.JPEG -n03877472/ILSVRC2012_val_00012917.JPEG -n04356056/ILSVRC2012_val_00023754.JPEG -n02094114/ILSVRC2012_val_00042473.JPEG -n07836838/ILSVRC2012_val_00038954.JPEG -n02457408/ILSVRC2012_val_00027033.JPEG -n03180011/ILSVRC2012_val_00001757.JPEG -n03710721/ILSVRC2012_val_00010762.JPEG -n04081281/ILSVRC2012_val_00043267.JPEG -n02113978/ILSVRC2012_val_00021475.JPEG -n04023962/ILSVRC2012_val_00040578.JPEG -n03089624/ILSVRC2012_val_00008801.JPEG -n03908618/ILSVRC2012_val_00037720.JPEG -n03840681/ILSVRC2012_val_00029902.JPEG -n03124043/ILSVRC2012_val_00007876.JPEG -n04376876/ILSVRC2012_val_00002160.JPEG -n02793495/ILSVRC2012_val_00032510.JPEG -n03272562/ILSVRC2012_val_00040246.JPEG -n04479046/ILSVRC2012_val_00026891.JPEG -n04376876/ILSVRC2012_val_00046671.JPEG -n02788148/ILSVRC2012_val_00048426.JPEG -n04239074/ILSVRC2012_val_00006471.JPEG -n07614500/ILSVRC2012_val_00044555.JPEG -n04146614/ILSVRC2012_val_00031870.JPEG -n01737021/ILSVRC2012_val_00004143.JPEG -n06785654/ILSVRC2012_val_00042236.JPEG -n04335435/ILSVRC2012_val_00046946.JPEG -n01601694/ILSVRC2012_val_00033770.JPEG -n03761084/ILSVRC2012_val_00008779.JPEG -n03930313/ILSVRC2012_val_00019384.JPEG -n07714571/ILSVRC2012_val_00039258.JPEG -n04270147/ILSVRC2012_val_00031162.JPEG -n03724870/ILSVRC2012_val_00040925.JPEG -n02097047/ILSVRC2012_val_00045674.JPEG -n02481823/ILSVRC2012_val_00027941.JPEG -n02444819/ILSVRC2012_val_00032447.JPEG -n02108915/ILSVRC2012_val_00049895.JPEG -n02326432/ILSVRC2012_val_00049897.JPEG -n07873807/ILSVRC2012_val_00035995.JPEG -n01917289/ILSVRC2012_val_00001057.JPEG -n03496892/ILSVRC2012_val_00032094.JPEG -n04548280/ILSVRC2012_val_00004662.JPEG -n02363005/ILSVRC2012_val_00026915.JPEG -n04317175/ILSVRC2012_val_00041030.JPEG -n01883070/ILSVRC2012_val_00042485.JPEG -n04417672/ILSVRC2012_val_00037701.JPEG -n02977058/ILSVRC2012_val_00034150.JPEG -n03788195/ILSVRC2012_val_00029390.JPEG -n04033995/ILSVRC2012_val_00031404.JPEG -n02906734/ILSVRC2012_val_00038800.JPEG -n01817953/ILSVRC2012_val_00038169.JPEG -n02105855/ILSVRC2012_val_00019155.JPEG -n02109525/ILSVRC2012_val_00042657.JPEG -n03967562/ILSVRC2012_val_00030925.JPEG -n04254680/ILSVRC2012_val_00005713.JPEG -n04026417/ILSVRC2012_val_00031129.JPEG -n07684084/ILSVRC2012_val_00003329.JPEG -n03662601/ILSVRC2012_val_00015311.JPEG -n07745940/ILSVRC2012_val_00013499.JPEG -n04127249/ILSVRC2012_val_00040574.JPEG -n03950228/ILSVRC2012_val_00047381.JPEG -n02093647/ILSVRC2012_val_00035940.JPEG -n04179913/ILSVRC2012_val_00037519.JPEG -n15075141/ILSVRC2012_val_00006953.JPEG -n04275548/ILSVRC2012_val_00012305.JPEG -n01945685/ILSVRC2012_val_00031116.JPEG -n02988304/ILSVRC2012_val_00036782.JPEG -n02091635/ILSVRC2012_val_00014357.JPEG -n07745940/ILSVRC2012_val_00012645.JPEG -n02514041/ILSVRC2012_val_00020803.JPEG -n02102480/ILSVRC2012_val_00041335.JPEG -n03443371/ILSVRC2012_val_00022560.JPEG -n07768694/ILSVRC2012_val_00010111.JPEG -n03485794/ILSVRC2012_val_00033870.JPEG -n01698640/ILSVRC2012_val_00043473.JPEG -n02865351/ILSVRC2012_val_00000763.JPEG -n03452741/ILSVRC2012_val_00039717.JPEG -n02133161/ILSVRC2012_val_00033328.JPEG -n04355933/ILSVRC2012_val_00047580.JPEG -n04239074/ILSVRC2012_val_00008251.JPEG -n03599486/ILSVRC2012_val_00013642.JPEG -n15075141/ILSVRC2012_val_00021201.JPEG -n04141327/ILSVRC2012_val_00013147.JPEG -n02480855/ILSVRC2012_val_00017200.JPEG -n07873807/ILSVRC2012_val_00043781.JPEG -n04285008/ILSVRC2012_val_00025465.JPEG -n04005630/ILSVRC2012_val_00004865.JPEG -n02939185/ILSVRC2012_val_00031452.JPEG -n02101556/ILSVRC2012_val_00045011.JPEG -n03950228/ILSVRC2012_val_00032633.JPEG -n03773504/ILSVRC2012_val_00045982.JPEG -n01978287/ILSVRC2012_val_00040223.JPEG -n03877472/ILSVRC2012_val_00010560.JPEG -n03874293/ILSVRC2012_val_00020720.JPEG -n04252225/ILSVRC2012_val_00025743.JPEG -n02488702/ILSVRC2012_val_00048491.JPEG -n02877765/ILSVRC2012_val_00030650.JPEG -n01494475/ILSVRC2012_val_00005339.JPEG -n04152593/ILSVRC2012_val_00034850.JPEG -n02799071/ILSVRC2012_val_00026506.JPEG -n13044778/ILSVRC2012_val_00041738.JPEG -n02129165/ILSVRC2012_val_00012353.JPEG -n03908618/ILSVRC2012_val_00020480.JPEG -n01518878/ILSVRC2012_val_00023778.JPEG -n03065424/ILSVRC2012_val_00025594.JPEG -n03018349/ILSVRC2012_val_00028820.JPEG -n01756291/ILSVRC2012_val_00042384.JPEG -n02497673/ILSVRC2012_val_00027093.JPEG -n04523525/ILSVRC2012_val_00029686.JPEG -n03146219/ILSVRC2012_val_00023457.JPEG -n03467068/ILSVRC2012_val_00016636.JPEG -n02097658/ILSVRC2012_val_00005174.JPEG -n01753488/ILSVRC2012_val_00036910.JPEG -n02437312/ILSVRC2012_val_00011354.JPEG -n04591713/ILSVRC2012_val_00031837.JPEG -n01537544/ILSVRC2012_val_00029310.JPEG -n01824575/ILSVRC2012_val_00027555.JPEG -n02102973/ILSVRC2012_val_00036140.JPEG -n01728572/ILSVRC2012_val_00049017.JPEG -n03532672/ILSVRC2012_val_00017687.JPEG -n02104029/ILSVRC2012_val_00033303.JPEG -n01753488/ILSVRC2012_val_00016066.JPEG -n02110063/ILSVRC2012_val_00008270.JPEG -n02655020/ILSVRC2012_val_00019369.JPEG -n04409515/ILSVRC2012_val_00010370.JPEG -n09468604/ILSVRC2012_val_00007658.JPEG -n03770679/ILSVRC2012_val_00015295.JPEG -n02486261/ILSVRC2012_val_00020727.JPEG -n02132136/ILSVRC2012_val_00006703.JPEG -n02799071/ILSVRC2012_val_00037792.JPEG -n03496892/ILSVRC2012_val_00022171.JPEG -n03871628/ILSVRC2012_val_00027103.JPEG -n04404412/ILSVRC2012_val_00049406.JPEG -n03291819/ILSVRC2012_val_00018067.JPEG -n07753113/ILSVRC2012_val_00002179.JPEG -n01697457/ILSVRC2012_val_00006286.JPEG -n07749582/ILSVRC2012_val_00048264.JPEG -n02028035/ILSVRC2012_val_00024808.JPEG -n06794110/ILSVRC2012_val_00000995.JPEG -n03791053/ILSVRC2012_val_00004619.JPEG -n03670208/ILSVRC2012_val_00044032.JPEG -n03291819/ILSVRC2012_val_00017382.JPEG -n02410509/ILSVRC2012_val_00040511.JPEG -n04067472/ILSVRC2012_val_00043864.JPEG -n04009552/ILSVRC2012_val_00038006.JPEG -n02169497/ILSVRC2012_val_00024558.JPEG -n04243546/ILSVRC2012_val_00014313.JPEG -n04004767/ILSVRC2012_val_00032509.JPEG -n04606251/ILSVRC2012_val_00028404.JPEG -n03796401/ILSVRC2012_val_00022413.JPEG -n03124170/ILSVRC2012_val_00024379.JPEG -n02091244/ILSVRC2012_val_00009065.JPEG -n07684084/ILSVRC2012_val_00000820.JPEG -n03337140/ILSVRC2012_val_00048016.JPEG -n01682714/ILSVRC2012_val_00020154.JPEG -n01697457/ILSVRC2012_val_00001573.JPEG -n03710637/ILSVRC2012_val_00013356.JPEG -n07730033/ILSVRC2012_val_00022010.JPEG -n01773549/ILSVRC2012_val_00002688.JPEG -n02106662/ILSVRC2012_val_00045684.JPEG -n03584254/ILSVRC2012_val_00027569.JPEG -n03786901/ILSVRC2012_val_00048332.JPEG -n02676566/ILSVRC2012_val_00029538.JPEG -n03782006/ILSVRC2012_val_00041449.JPEG -n03777754/ILSVRC2012_val_00048137.JPEG -n01484850/ILSVRC2012_val_00037135.JPEG -n02917067/ILSVRC2012_val_00009056.JPEG -n01688243/ILSVRC2012_val_00047224.JPEG -n04525305/ILSVRC2012_val_00043189.JPEG -n04133789/ILSVRC2012_val_00030250.JPEG -n04252077/ILSVRC2012_val_00009906.JPEG -n04465501/ILSVRC2012_val_00035906.JPEG -n03692522/ILSVRC2012_val_00035877.JPEG -n01873310/ILSVRC2012_val_00000940.JPEG -n01910747/ILSVRC2012_val_00039314.JPEG -n02484975/ILSVRC2012_val_00008539.JPEG -n02094114/ILSVRC2012_val_00049926.JPEG -n03709823/ILSVRC2012_val_00034532.JPEG -n02916936/ILSVRC2012_val_00006943.JPEG -n02091032/ILSVRC2012_val_00022684.JPEG -n03929660/ILSVRC2012_val_00046594.JPEG -n02231487/ILSVRC2012_val_00047704.JPEG -n04493381/ILSVRC2012_val_00038337.JPEG -n01537544/ILSVRC2012_val_00037454.JPEG -n04328186/ILSVRC2012_val_00045064.JPEG -n02422699/ILSVRC2012_val_00007395.JPEG -n02074367/ILSVRC2012_val_00028337.JPEG -n03627232/ILSVRC2012_val_00039484.JPEG -n07753275/ILSVRC2012_val_00045126.JPEG -n13054560/ILSVRC2012_val_00040478.JPEG -n02097130/ILSVRC2012_val_00045760.JPEG -n04152593/ILSVRC2012_val_00031893.JPEG -n03544143/ILSVRC2012_val_00035185.JPEG -n04254680/ILSVRC2012_val_00014154.JPEG -n04356056/ILSVRC2012_val_00042996.JPEG -n02804610/ILSVRC2012_val_00014404.JPEG -n03690938/ILSVRC2012_val_00032514.JPEG -n06794110/ILSVRC2012_val_00034107.JPEG -n02093754/ILSVRC2012_val_00004053.JPEG -n03041632/ILSVRC2012_val_00022700.JPEG -n01689811/ILSVRC2012_val_00008561.JPEG -n03775546/ILSVRC2012_val_00011309.JPEG -n01630670/ILSVRC2012_val_00003702.JPEG -n03983396/ILSVRC2012_val_00030143.JPEG -n03787032/ILSVRC2012_val_00026799.JPEG -n02769748/ILSVRC2012_val_00009722.JPEG -n02280649/ILSVRC2012_val_00000031.JPEG -n02093859/ILSVRC2012_val_00031752.JPEG -n02096585/ILSVRC2012_val_00043564.JPEG -n03775071/ILSVRC2012_val_00036862.JPEG -n03888605/ILSVRC2012_val_00028863.JPEG -n04552348/ILSVRC2012_val_00047921.JPEG -n09229709/ILSVRC2012_val_00018097.JPEG -n02104029/ILSVRC2012_val_00025299.JPEG -n02100735/ILSVRC2012_val_00043577.JPEG -n03877472/ILSVRC2012_val_00010822.JPEG -n02951358/ILSVRC2012_val_00021156.JPEG -n03920288/ILSVRC2012_val_00012663.JPEG -n02497673/ILSVRC2012_val_00002652.JPEG -n03201208/ILSVRC2012_val_00029073.JPEG -n01667114/ILSVRC2012_val_00000229.JPEG -n02112137/ILSVRC2012_val_00028936.JPEG -n03697007/ILSVRC2012_val_00001874.JPEG -n02102973/ILSVRC2012_val_00013752.JPEG -n03874293/ILSVRC2012_val_00002995.JPEG -n03814639/ILSVRC2012_val_00015284.JPEG -n02095570/ILSVRC2012_val_00023143.JPEG -n02124075/ILSVRC2012_val_00040600.JPEG -n04204238/ILSVRC2012_val_00048590.JPEG -n02110958/ILSVRC2012_val_00047583.JPEG -n04443257/ILSVRC2012_val_00001510.JPEG -n03028079/ILSVRC2012_val_00019331.JPEG -n01692333/ILSVRC2012_val_00041887.JPEG -n03345487/ILSVRC2012_val_00019954.JPEG -n02113712/ILSVRC2012_val_00002460.JPEG -n03535780/ILSVRC2012_val_00012133.JPEG -n02106662/ILSVRC2012_val_00032995.JPEG -n01682714/ILSVRC2012_val_00001942.JPEG -n07695742/ILSVRC2012_val_00013493.JPEG -n01644373/ILSVRC2012_val_00032917.JPEG -n03063689/ILSVRC2012_val_00044838.JPEG -n02088364/ILSVRC2012_val_00008675.JPEG -n03483316/ILSVRC2012_val_00000876.JPEG -n06874185/ILSVRC2012_val_00004646.JPEG -n02782093/ILSVRC2012_val_00012050.JPEG -n02277742/ILSVRC2012_val_00022979.JPEG -n02104029/ILSVRC2012_val_00036264.JPEG -n04515003/ILSVRC2012_val_00032863.JPEG -n01855032/ILSVRC2012_val_00024273.JPEG -n01532829/ILSVRC2012_val_00042370.JPEG -n02992529/ILSVRC2012_val_00000089.JPEG -n03976657/ILSVRC2012_val_00018564.JPEG -n03832673/ILSVRC2012_val_00031166.JPEG -n02823428/ILSVRC2012_val_00008121.JPEG -n04040759/ILSVRC2012_val_00040259.JPEG -n03763968/ILSVRC2012_val_00013572.JPEG -n03837869/ILSVRC2012_val_00044841.JPEG -n03325584/ILSVRC2012_val_00027255.JPEG -n01689811/ILSVRC2012_val_00009980.JPEG -n01798484/ILSVRC2012_val_00031938.JPEG -n12768682/ILSVRC2012_val_00027020.JPEG -n03662601/ILSVRC2012_val_00006294.JPEG -n02342885/ILSVRC2012_val_00020285.JPEG -n02441942/ILSVRC2012_val_00019059.JPEG -n01693334/ILSVRC2012_val_00026626.JPEG -n09421951/ILSVRC2012_val_00006564.JPEG -n01968897/ILSVRC2012_val_00040877.JPEG -n02825657/ILSVRC2012_val_00015948.JPEG -n03840681/ILSVRC2012_val_00046678.JPEG -n01644373/ILSVRC2012_val_00043860.JPEG -n02672831/ILSVRC2012_val_00020900.JPEG -n02190166/ILSVRC2012_val_00011393.JPEG -n03982430/ILSVRC2012_val_00046837.JPEG -n01608432/ILSVRC2012_val_00028139.JPEG -n03179701/ILSVRC2012_val_00003559.JPEG -n02361337/ILSVRC2012_val_00047875.JPEG -n02104029/ILSVRC2012_val_00019060.JPEG -n04553703/ILSVRC2012_val_00034191.JPEG -n07760859/ILSVRC2012_val_00011505.JPEG -n03014705/ILSVRC2012_val_00037817.JPEG -n02096051/ILSVRC2012_val_00022763.JPEG -n03388043/ILSVRC2012_val_00004673.JPEG -n01796340/ILSVRC2012_val_00013641.JPEG -n04131690/ILSVRC2012_val_00019434.JPEG -n02447366/ILSVRC2012_val_00041647.JPEG -n03710193/ILSVRC2012_val_00019006.JPEG -n01641577/ILSVRC2012_val_00003748.JPEG -n04525038/ILSVRC2012_val_00006115.JPEG -n02086240/ILSVRC2012_val_00042523.JPEG -n03666591/ILSVRC2012_val_00014322.JPEG -n02094114/ILSVRC2012_val_00026313.JPEG -n04033995/ILSVRC2012_val_00026389.JPEG -n01685808/ILSVRC2012_val_00024684.JPEG -n01729977/ILSVRC2012_val_00029550.JPEG -n02978881/ILSVRC2012_val_00017819.JPEG -n02916936/ILSVRC2012_val_00018897.JPEG -n02910353/ILSVRC2012_val_00036043.JPEG -n02606052/ILSVRC2012_val_00005062.JPEG -n02687172/ILSVRC2012_val_00011510.JPEG -n04311174/ILSVRC2012_val_00048484.JPEG -n01689811/ILSVRC2012_val_00017174.JPEG -n02109525/ILSVRC2012_val_00003390.JPEG -n02096437/ILSVRC2012_val_00009036.JPEG -n02777292/ILSVRC2012_val_00007181.JPEG -n04065272/ILSVRC2012_val_00030525.JPEG -n03733281/ILSVRC2012_val_00034428.JPEG -n02096437/ILSVRC2012_val_00026267.JPEG -n02091635/ILSVRC2012_val_00022982.JPEG -n04254120/ILSVRC2012_val_00040688.JPEG -n02415577/ILSVRC2012_val_00022966.JPEG -n03594734/ILSVRC2012_val_00008023.JPEG -n02859443/ILSVRC2012_val_00011660.JPEG -n04037443/ILSVRC2012_val_00020181.JPEG -n03933933/ILSVRC2012_val_00020648.JPEG -n01518878/ILSVRC2012_val_00001398.JPEG -n01843383/ILSVRC2012_val_00024423.JPEG -n02094258/ILSVRC2012_val_00019094.JPEG -n02106030/ILSVRC2012_val_00011698.JPEG -n03721384/ILSVRC2012_val_00019690.JPEG -n03710721/ILSVRC2012_val_00047553.JPEG -n03372029/ILSVRC2012_val_00014407.JPEG -n01704323/ILSVRC2012_val_00010061.JPEG -n03530642/ILSVRC2012_val_00020609.JPEG -n04486054/ILSVRC2012_val_00044806.JPEG -n01770081/ILSVRC2012_val_00039298.JPEG -n02099601/ILSVRC2012_val_00035252.JPEG -n02101556/ILSVRC2012_val_00030540.JPEG -n03902125/ILSVRC2012_val_00022006.JPEG -n03255030/ILSVRC2012_val_00027650.JPEG -n03887697/ILSVRC2012_val_00021774.JPEG -n02028035/ILSVRC2012_val_00030102.JPEG -n02169497/ILSVRC2012_val_00021794.JPEG -n02098413/ILSVRC2012_val_00011063.JPEG -n03376595/ILSVRC2012_val_00012771.JPEG -n03788365/ILSVRC2012_val_00008171.JPEG -n01986214/ILSVRC2012_val_00005125.JPEG -n01498041/ILSVRC2012_val_00046497.JPEG -n03476684/ILSVRC2012_val_00044415.JPEG -n02102177/ILSVRC2012_val_00048513.JPEG -n03796401/ILSVRC2012_val_00025827.JPEG -n01883070/ILSVRC2012_val_00043018.JPEG -n02105162/ILSVRC2012_val_00030061.JPEG -n02457408/ILSVRC2012_val_00015126.JPEG -n01734418/ILSVRC2012_val_00017967.JPEG -n04099969/ILSVRC2012_val_00001953.JPEG -n01981276/ILSVRC2012_val_00021080.JPEG -n03877845/ILSVRC2012_val_00003804.JPEG -n01601694/ILSVRC2012_val_00021656.JPEG -n02095570/ILSVRC2012_val_00002714.JPEG -n01818515/ILSVRC2012_val_00030397.JPEG -n04525305/ILSVRC2012_val_00046926.JPEG -n03794056/ILSVRC2012_val_00003270.JPEG -n07871810/ILSVRC2012_val_00042577.JPEG -n02454379/ILSVRC2012_val_00025235.JPEG -n12998815/ILSVRC2012_val_00015658.JPEG -n07590611/ILSVRC2012_val_00010005.JPEG -n02815834/ILSVRC2012_val_00019648.JPEG -n03417042/ILSVRC2012_val_00043909.JPEG -n04554684/ILSVRC2012_val_00006551.JPEG -n02113023/ILSVRC2012_val_00045068.JPEG -n03775546/ILSVRC2012_val_00005835.JPEG -n02403003/ILSVRC2012_val_00023387.JPEG -n03873416/ILSVRC2012_val_00032858.JPEG -n02823428/ILSVRC2012_val_00031840.JPEG -n03857828/ILSVRC2012_val_00027075.JPEG -n02526121/ILSVRC2012_val_00025800.JPEG -n02129604/ILSVRC2012_val_00027576.JPEG -n02108551/ILSVRC2012_val_00039969.JPEG -n02892201/ILSVRC2012_val_00017464.JPEG -n02098105/ILSVRC2012_val_00032049.JPEG -n02231487/ILSVRC2012_val_00020649.JPEG -n02096177/ILSVRC2012_val_00009789.JPEG -n04118776/ILSVRC2012_val_00035583.JPEG -n02687172/ILSVRC2012_val_00032182.JPEG -n03843555/ILSVRC2012_val_00007698.JPEG -n02840245/ILSVRC2012_val_00037762.JPEG -n04239074/ILSVRC2012_val_00041869.JPEG -n02488702/ILSVRC2012_val_00045991.JPEG -n06596364/ILSVRC2012_val_00004468.JPEG -n03417042/ILSVRC2012_val_00004119.JPEG -n02113023/ILSVRC2012_val_00021908.JPEG -n02091244/ILSVRC2012_val_00029555.JPEG -n04548362/ILSVRC2012_val_00021957.JPEG -n02794156/ILSVRC2012_val_00009861.JPEG -n02113799/ILSVRC2012_val_00038393.JPEG -n04192698/ILSVRC2012_val_00024634.JPEG -n04476259/ILSVRC2012_val_00037691.JPEG -n02963159/ILSVRC2012_val_00016246.JPEG -n03461385/ILSVRC2012_val_00043522.JPEG -n04548280/ILSVRC2012_val_00015199.JPEG -n01773549/ILSVRC2012_val_00028677.JPEG -n07873807/ILSVRC2012_val_00014607.JPEG -n01843383/ILSVRC2012_val_00018780.JPEG -n01687978/ILSVRC2012_val_00042029.JPEG -n04192698/ILSVRC2012_val_00026513.JPEG -n02116738/ILSVRC2012_val_00016666.JPEG -n01608432/ILSVRC2012_val_00001813.JPEG -n02965783/ILSVRC2012_val_00003090.JPEG -n02492035/ILSVRC2012_val_00043766.JPEG -n01751748/ILSVRC2012_val_00007885.JPEG -n03769881/ILSVRC2012_val_00030789.JPEG -n02497673/ILSVRC2012_val_00044774.JPEG -n02124075/ILSVRC2012_val_00026403.JPEG -n04550184/ILSVRC2012_val_00024717.JPEG -n02114712/ILSVRC2012_val_00018735.JPEG -n04120489/ILSVRC2012_val_00035596.JPEG -n04033901/ILSVRC2012_val_00036076.JPEG -n07718747/ILSVRC2012_val_00011881.JPEG -n03188531/ILSVRC2012_val_00033272.JPEG -n02018207/ILSVRC2012_val_00048163.JPEG -n03018349/ILSVRC2012_val_00010121.JPEG -n04522168/ILSVRC2012_val_00035219.JPEG -n04462240/ILSVRC2012_val_00017863.JPEG -n04536866/ILSVRC2012_val_00027587.JPEG -n09288635/ILSVRC2012_val_00011567.JPEG -n02793495/ILSVRC2012_val_00016366.JPEG -n02096437/ILSVRC2012_val_00047757.JPEG -n02093647/ILSVRC2012_val_00013323.JPEG -n02124075/ILSVRC2012_val_00014773.JPEG -n03016953/ILSVRC2012_val_00004641.JPEG -n02168699/ILSVRC2012_val_00006867.JPEG -n02086646/ILSVRC2012_val_00025911.JPEG -n03297495/ILSVRC2012_val_00010821.JPEG -n03676483/ILSVRC2012_val_00048584.JPEG -n12985857/ILSVRC2012_val_00047107.JPEG -n02098105/ILSVRC2012_val_00008926.JPEG -n09229709/ILSVRC2012_val_00027662.JPEG -n04517823/ILSVRC2012_val_00031756.JPEG -n02100877/ILSVRC2012_val_00021079.JPEG -n03729826/ILSVRC2012_val_00042218.JPEG -n01872401/ILSVRC2012_val_00025946.JPEG -n03544143/ILSVRC2012_val_00048860.JPEG -n04251144/ILSVRC2012_val_00043728.JPEG -n01910747/ILSVRC2012_val_00028644.JPEG -n07734744/ILSVRC2012_val_00028371.JPEG -n02892767/ILSVRC2012_val_00040902.JPEG -n03776460/ILSVRC2012_val_00001631.JPEG -n12267677/ILSVRC2012_val_00031998.JPEG -n07871810/ILSVRC2012_val_00018608.JPEG -n04179913/ILSVRC2012_val_00042808.JPEG -n04606251/ILSVRC2012_val_00040924.JPEG -n01608432/ILSVRC2012_val_00046733.JPEG -n02492660/ILSVRC2012_val_00041501.JPEG -n04252077/ILSVRC2012_val_00044879.JPEG -n03584254/ILSVRC2012_val_00014368.JPEG -n03249569/ILSVRC2012_val_00010381.JPEG -n03016953/ILSVRC2012_val_00004544.JPEG -n04285008/ILSVRC2012_val_00009607.JPEG -n02259212/ILSVRC2012_val_00046801.JPEG -n01833805/ILSVRC2012_val_00016746.JPEG -n02123045/ILSVRC2012_val_00020136.JPEG -n02111129/ILSVRC2012_val_00021370.JPEG -n03903868/ILSVRC2012_val_00004595.JPEG -n01806143/ILSVRC2012_val_00005751.JPEG -n01631663/ILSVRC2012_val_00033866.JPEG -n01829413/ILSVRC2012_val_00029283.JPEG -n02687172/ILSVRC2012_val_00026474.JPEG -n04285008/ILSVRC2012_val_00029021.JPEG -n02666196/ILSVRC2012_val_00005970.JPEG -n02097047/ILSVRC2012_val_00037277.JPEG -n02093859/ILSVRC2012_val_00010356.JPEG -n01968897/ILSVRC2012_val_00037882.JPEG -n04589890/ILSVRC2012_val_00006743.JPEG -n01693334/ILSVRC2012_val_00025809.JPEG -n02526121/ILSVRC2012_val_00020757.JPEG -n02107312/ILSVRC2012_val_00004386.JPEG -n07880968/ILSVRC2012_val_00024099.JPEG -n03627232/ILSVRC2012_val_00049916.JPEG -n02834397/ILSVRC2012_val_00036586.JPEG -n02172182/ILSVRC2012_val_00049259.JPEG -n04423845/ILSVRC2012_val_00041828.JPEG -n03355925/ILSVRC2012_val_00049608.JPEG -n03297495/ILSVRC2012_val_00046108.JPEG -n03840681/ILSVRC2012_val_00022877.JPEG -n03873416/ILSVRC2012_val_00045082.JPEG -n03857828/ILSVRC2012_val_00022455.JPEG -n02704792/ILSVRC2012_val_00049628.JPEG -n02356798/ILSVRC2012_val_00042187.JPEG -n02397096/ILSVRC2012_val_00044182.JPEG -n04118538/ILSVRC2012_val_00019086.JPEG -n04019541/ILSVRC2012_val_00038669.JPEG -n02951358/ILSVRC2012_val_00037707.JPEG -n02493509/ILSVRC2012_val_00024398.JPEG -n03393912/ILSVRC2012_val_00009717.JPEG -n04423845/ILSVRC2012_val_00043115.JPEG -n03676483/ILSVRC2012_val_00018920.JPEG -n03804744/ILSVRC2012_val_00043239.JPEG -n02177972/ILSVRC2012_val_00031097.JPEG -n04252225/ILSVRC2012_val_00019444.JPEG -n09399592/ILSVRC2012_val_00013304.JPEG -n03967562/ILSVRC2012_val_00010642.JPEG -n01910747/ILSVRC2012_val_00027727.JPEG -n04192698/ILSVRC2012_val_00041324.JPEG -n09835506/ILSVRC2012_val_00032275.JPEG -n02110627/ILSVRC2012_val_00040979.JPEG -n03047690/ILSVRC2012_val_00030064.JPEG -n04465501/ILSVRC2012_val_00024074.JPEG -n03908618/ILSVRC2012_val_00007562.JPEG -n02086240/ILSVRC2012_val_00015738.JPEG -n01828970/ILSVRC2012_val_00000051.JPEG -n02101006/ILSVRC2012_val_00016085.JPEG -n04467665/ILSVRC2012_val_00030748.JPEG -n02099712/ILSVRC2012_val_00023471.JPEG -n01829413/ILSVRC2012_val_00014256.JPEG -n03623198/ILSVRC2012_val_00019441.JPEG -n01950731/ILSVRC2012_val_00029111.JPEG -n02098413/ILSVRC2012_val_00008487.JPEG -n02101388/ILSVRC2012_val_00024686.JPEG -n03691459/ILSVRC2012_val_00004050.JPEG -n02389026/ILSVRC2012_val_00045409.JPEG -n02481823/ILSVRC2012_val_00048741.JPEG -n03791053/ILSVRC2012_val_00018448.JPEG -n02690373/ILSVRC2012_val_00018616.JPEG -n03388043/ILSVRC2012_val_00034662.JPEG -n02110627/ILSVRC2012_val_00038448.JPEG -n02799071/ILSVRC2012_val_00022766.JPEG -n01537544/ILSVRC2012_val_00002071.JPEG -n04209133/ILSVRC2012_val_00037601.JPEG -n07697537/ILSVRC2012_val_00034152.JPEG -n01728572/ILSVRC2012_val_00036166.JPEG -n07920052/ILSVRC2012_val_00005624.JPEG -n01644373/ILSVRC2012_val_00016177.JPEG -n04458633/ILSVRC2012_val_00040845.JPEG -n01644900/ILSVRC2012_val_00012231.JPEG -n02487347/ILSVRC2012_val_00036612.JPEG -n03977966/ILSVRC2012_val_00001143.JPEG -n04317175/ILSVRC2012_val_00017086.JPEG -n02389026/ILSVRC2012_val_00014304.JPEG -n01910747/ILSVRC2012_val_00016200.JPEG -n03494278/ILSVRC2012_val_00034610.JPEG -n03240683/ILSVRC2012_val_00035038.JPEG -n04208210/ILSVRC2012_val_00031032.JPEG -n03223299/ILSVRC2012_val_00032622.JPEG -n04398044/ILSVRC2012_val_00005162.JPEG -n04525305/ILSVRC2012_val_00009844.JPEG -n04019541/ILSVRC2012_val_00028690.JPEG -n02769748/ILSVRC2012_val_00042327.JPEG -n03291819/ILSVRC2012_val_00042559.JPEG -n02454379/ILSVRC2012_val_00018994.JPEG -n03417042/ILSVRC2012_val_00021253.JPEG -n04367480/ILSVRC2012_val_00015088.JPEG -n02107683/ILSVRC2012_val_00030297.JPEG -n02114548/ILSVRC2012_val_00012800.JPEG -n02939185/ILSVRC2012_val_00024512.JPEG -n03376595/ILSVRC2012_val_00001685.JPEG -n02107574/ILSVRC2012_val_00007071.JPEG -n02415577/ILSVRC2012_val_00033844.JPEG -n04517823/ILSVRC2012_val_00000712.JPEG -n12768682/ILSVRC2012_val_00014129.JPEG -n06596364/ILSVRC2012_val_00014214.JPEG -n03877472/ILSVRC2012_val_00020630.JPEG -n02871525/ILSVRC2012_val_00003028.JPEG -n02120079/ILSVRC2012_val_00015412.JPEG -n02814533/ILSVRC2012_val_00047473.JPEG -n03825788/ILSVRC2012_val_00000540.JPEG -n07697537/ILSVRC2012_val_00003930.JPEG -n04335435/ILSVRC2012_val_00024071.JPEG -n03676483/ILSVRC2012_val_00049924.JPEG -n02236044/ILSVRC2012_val_00001948.JPEG -n02086910/ILSVRC2012_val_00019603.JPEG -n03777754/ILSVRC2012_val_00029230.JPEG -n07871810/ILSVRC2012_val_00014713.JPEG -n01530575/ILSVRC2012_val_00033092.JPEG -n07760859/ILSVRC2012_val_00031970.JPEG -n07613480/ILSVRC2012_val_00019023.JPEG -n02088632/ILSVRC2012_val_00030757.JPEG -n04554684/ILSVRC2012_val_00038965.JPEG -n07730033/ILSVRC2012_val_00046230.JPEG -n01667114/ILSVRC2012_val_00046803.JPEG -n02454379/ILSVRC2012_val_00009806.JPEG -n02841315/ILSVRC2012_val_00003215.JPEG -n04041544/ILSVRC2012_val_00007349.JPEG -n01768244/ILSVRC2012_val_00019564.JPEG -n02105251/ILSVRC2012_val_00049272.JPEG -n02802426/ILSVRC2012_val_00038836.JPEG -n02091032/ILSVRC2012_val_00002024.JPEG -n02127052/ILSVRC2012_val_00035366.JPEG -n07718747/ILSVRC2012_val_00004031.JPEG -n02025239/ILSVRC2012_val_00038431.JPEG -n12985857/ILSVRC2012_val_00002047.JPEG -n02641379/ILSVRC2012_val_00033541.JPEG -n02013706/ILSVRC2012_val_00005203.JPEG -n02794156/ILSVRC2012_val_00045655.JPEG -n03794056/ILSVRC2012_val_00020103.JPEG -n02106382/ILSVRC2012_val_00020216.JPEG -n07613480/ILSVRC2012_val_00011413.JPEG -n12057211/ILSVRC2012_val_00036925.JPEG -n02134084/ILSVRC2012_val_00001498.JPEG -n02086240/ILSVRC2012_val_00038882.JPEG -n03026506/ILSVRC2012_val_00029270.JPEG -n03933933/ILSVRC2012_val_00045013.JPEG -n02169497/ILSVRC2012_val_00020159.JPEG -n03950228/ILSVRC2012_val_00034717.JPEG -n02892767/ILSVRC2012_val_00004599.JPEG -n04254680/ILSVRC2012_val_00017782.JPEG -n07831146/ILSVRC2012_val_00016446.JPEG -n03709823/ILSVRC2012_val_00033950.JPEG -n02011460/ILSVRC2012_val_00004572.JPEG -n02356798/ILSVRC2012_val_00006392.JPEG -n02115913/ILSVRC2012_val_00041976.JPEG -n02342885/ILSVRC2012_val_00027868.JPEG -n02018207/ILSVRC2012_val_00009270.JPEG -n03649909/ILSVRC2012_val_00038677.JPEG -n03495258/ILSVRC2012_val_00030189.JPEG -n02117135/ILSVRC2012_val_00043079.JPEG -n03337140/ILSVRC2012_val_00009094.JPEG -n03201208/ILSVRC2012_val_00002772.JPEG -n03085013/ILSVRC2012_val_00035954.JPEG -n03770679/ILSVRC2012_val_00048610.JPEG -n04204347/ILSVRC2012_val_00008219.JPEG -n02077923/ILSVRC2012_val_00007193.JPEG -n02791124/ILSVRC2012_val_00007789.JPEG -n04065272/ILSVRC2012_val_00028467.JPEG -n04146614/ILSVRC2012_val_00038209.JPEG -n02980441/ILSVRC2012_val_00011145.JPEG -n02089078/ILSVRC2012_val_00018840.JPEG -n04070727/ILSVRC2012_val_00023711.JPEG -n03196217/ILSVRC2012_val_00041483.JPEG -n02971356/ILSVRC2012_val_00030546.JPEG -n02102973/ILSVRC2012_val_00032521.JPEG -n03961711/ILSVRC2012_val_00006124.JPEG -n04355338/ILSVRC2012_val_00046496.JPEG -n02006656/ILSVRC2012_val_00005186.JPEG -n03376595/ILSVRC2012_val_00036783.JPEG -n04458633/ILSVRC2012_val_00016593.JPEG -n07583066/ILSVRC2012_val_00041753.JPEG -n02165105/ILSVRC2012_val_00048477.JPEG -n02445715/ILSVRC2012_val_00026215.JPEG -n02113978/ILSVRC2012_val_00044187.JPEG -n02319095/ILSVRC2012_val_00008674.JPEG -n02006656/ILSVRC2012_val_00014266.JPEG -n07753592/ILSVRC2012_val_00023220.JPEG -n07717556/ILSVRC2012_val_00029151.JPEG -n03759954/ILSVRC2012_val_00025450.JPEG -n04509417/ILSVRC2012_val_00031602.JPEG -n03188531/ILSVRC2012_val_00002075.JPEG -n07730033/ILSVRC2012_val_00000881.JPEG -n02410509/ILSVRC2012_val_00044556.JPEG -n02165105/ILSVRC2012_val_00012894.JPEG -n04252077/ILSVRC2012_val_00011313.JPEG -n02321529/ILSVRC2012_val_00011857.JPEG -n04125021/ILSVRC2012_val_00037377.JPEG -n01667114/ILSVRC2012_val_00023686.JPEG -n02111129/ILSVRC2012_val_00038704.JPEG -n02109961/ILSVRC2012_val_00006059.JPEG -n04428191/ILSVRC2012_val_00003800.JPEG -n02116738/ILSVRC2012_val_00037354.JPEG -n03379051/ILSVRC2012_val_00007649.JPEG -n02110627/ILSVRC2012_val_00027947.JPEG -n03884397/ILSVRC2012_val_00030107.JPEG -n04251144/ILSVRC2012_val_00044813.JPEG -n02808304/ILSVRC2012_val_00005585.JPEG -n04204238/ILSVRC2012_val_00012046.JPEG -n04009552/ILSVRC2012_val_00029794.JPEG -n04404412/ILSVRC2012_val_00024928.JPEG -n01882714/ILSVRC2012_val_00045070.JPEG -n02963159/ILSVRC2012_val_00038207.JPEG -n03062245/ILSVRC2012_val_00000344.JPEG -n06596364/ILSVRC2012_val_00000985.JPEG -n03476991/ILSVRC2012_val_00004493.JPEG -n02119789/ILSVRC2012_val_00046145.JPEG -n02115641/ILSVRC2012_val_00033743.JPEG -n01847000/ILSVRC2012_val_00016631.JPEG -n02480495/ILSVRC2012_val_00010576.JPEG -n02088238/ILSVRC2012_val_00027114.JPEG -n02108915/ILSVRC2012_val_00007318.JPEG -n04592741/ILSVRC2012_val_00001901.JPEG -n03220513/ILSVRC2012_val_00003991.JPEG -n02480855/ILSVRC2012_val_00044145.JPEG -n04005630/ILSVRC2012_val_00004526.JPEG -n03388549/ILSVRC2012_val_00048243.JPEG -n04328186/ILSVRC2012_val_00020153.JPEG -n04275548/ILSVRC2012_val_00039054.JPEG -n04252225/ILSVRC2012_val_00034323.JPEG -n07715103/ILSVRC2012_val_00046030.JPEG -n04525038/ILSVRC2012_val_00025160.JPEG -n01694178/ILSVRC2012_val_00021092.JPEG -n07718747/ILSVRC2012_val_00037649.JPEG -n04557648/ILSVRC2012_val_00008077.JPEG -n07565083/ILSVRC2012_val_00010286.JPEG -n04086273/ILSVRC2012_val_00012865.JPEG -n04442312/ILSVRC2012_val_00023688.JPEG -n02823750/ILSVRC2012_val_00045499.JPEG -n03124170/ILSVRC2012_val_00008522.JPEG -n01978455/ILSVRC2012_val_00020970.JPEG -n02110185/ILSVRC2012_val_00036248.JPEG -n02825657/ILSVRC2012_val_00018459.JPEG -n02410509/ILSVRC2012_val_00020346.JPEG -n04133789/ILSVRC2012_val_00032308.JPEG -n02028035/ILSVRC2012_val_00013808.JPEG -n01773157/ILSVRC2012_val_00032657.JPEG -n02840245/ILSVRC2012_val_00008578.JPEG -n02177972/ILSVRC2012_val_00047065.JPEG -n13052670/ILSVRC2012_val_00020929.JPEG -n03223299/ILSVRC2012_val_00004775.JPEG -n03532672/ILSVRC2012_val_00007783.JPEG -n01755581/ILSVRC2012_val_00029615.JPEG -n03018349/ILSVRC2012_val_00015123.JPEG -n04355933/ILSVRC2012_val_00005414.JPEG -n01828970/ILSVRC2012_val_00048824.JPEG -n03063599/ILSVRC2012_val_00028575.JPEG -n02115641/ILSVRC2012_val_00042731.JPEG -n03770679/ILSVRC2012_val_00007374.JPEG -n04612504/ILSVRC2012_val_00013403.JPEG -n03447447/ILSVRC2012_val_00016814.JPEG -n02128385/ILSVRC2012_val_00046032.JPEG -n03599486/ILSVRC2012_val_00008961.JPEG -n03146219/ILSVRC2012_val_00034509.JPEG -n02804610/ILSVRC2012_val_00030862.JPEG -n02977058/ILSVRC2012_val_00033182.JPEG -n02398521/ILSVRC2012_val_00009331.JPEG -n03866082/ILSVRC2012_val_00041091.JPEG -n02415577/ILSVRC2012_val_00024683.JPEG -n04389033/ILSVRC2012_val_00021989.JPEG -n04509417/ILSVRC2012_val_00045666.JPEG -n01773157/ILSVRC2012_val_00001618.JPEG -n02113186/ILSVRC2012_val_00040018.JPEG -n02487347/ILSVRC2012_val_00032067.JPEG -n03599486/ILSVRC2012_val_00022242.JPEG -n01985128/ILSVRC2012_val_00028073.JPEG -n04254120/ILSVRC2012_val_00009872.JPEG -n02277742/ILSVRC2012_val_00004850.JPEG -n02843684/ILSVRC2012_val_00041742.JPEG -n07754684/ILSVRC2012_val_00007036.JPEG -n04074963/ILSVRC2012_val_00008267.JPEG -n03594945/ILSVRC2012_val_00019410.JPEG -n03424325/ILSVRC2012_val_00011700.JPEG -n01693334/ILSVRC2012_val_00041069.JPEG -n02206856/ILSVRC2012_val_00016575.JPEG -n04147183/ILSVRC2012_val_00021861.JPEG -n03160309/ILSVRC2012_val_00031658.JPEG -n03344393/ILSVRC2012_val_00020486.JPEG -n02804610/ILSVRC2012_val_00001369.JPEG -n02011460/ILSVRC2012_val_00028920.JPEG -n01592084/ILSVRC2012_val_00036534.JPEG -n02058221/ILSVRC2012_val_00017197.JPEG -n03838899/ILSVRC2012_val_00021771.JPEG -n02123045/ILSVRC2012_val_00033837.JPEG -n03384352/ILSVRC2012_val_00038817.JPEG -n01773549/ILSVRC2012_val_00004271.JPEG -n02172182/ILSVRC2012_val_00045513.JPEG -n03958227/ILSVRC2012_val_00008350.JPEG -n04517823/ILSVRC2012_val_00021506.JPEG -n03496892/ILSVRC2012_val_00048862.JPEG -n02977058/ILSVRC2012_val_00034597.JPEG -n03792782/ILSVRC2012_val_00041265.JPEG -n03109150/ILSVRC2012_val_00020055.JPEG -n04332243/ILSVRC2012_val_00009360.JPEG -n02100877/ILSVRC2012_val_00031882.JPEG -n03759954/ILSVRC2012_val_00049128.JPEG -n04136333/ILSVRC2012_val_00001348.JPEG -n02843684/ILSVRC2012_val_00014364.JPEG -n03032252/ILSVRC2012_val_00040566.JPEG -n04005630/ILSVRC2012_val_00033648.JPEG -n02509815/ILSVRC2012_val_00018974.JPEG -n07714571/ILSVRC2012_val_00003020.JPEG -n01494475/ILSVRC2012_val_00016395.JPEG -n03776460/ILSVRC2012_val_00012900.JPEG -n03017168/ILSVRC2012_val_00018301.JPEG -n01558993/ILSVRC2012_val_00030475.JPEG -n02791270/ILSVRC2012_val_00010017.JPEG -n03930313/ILSVRC2012_val_00045178.JPEG -n03733131/ILSVRC2012_val_00038830.JPEG -n03496892/ILSVRC2012_val_00027389.JPEG -n02028035/ILSVRC2012_val_00006499.JPEG -n02971356/ILSVRC2012_val_00013098.JPEG -n03425413/ILSVRC2012_val_00042375.JPEG -n02977058/ILSVRC2012_val_00021001.JPEG -n03534580/ILSVRC2012_val_00040896.JPEG -n01828970/ILSVRC2012_val_00047229.JPEG -n07734744/ILSVRC2012_val_00041837.JPEG -n02894605/ILSVRC2012_val_00016237.JPEG -n03417042/ILSVRC2012_val_00019147.JPEG -n01873310/ILSVRC2012_val_00038330.JPEG -n03792782/ILSVRC2012_val_00027449.JPEG -n02814533/ILSVRC2012_val_00026029.JPEG -n01872401/ILSVRC2012_val_00000319.JPEG -n03937543/ILSVRC2012_val_00005519.JPEG -n02489166/ILSVRC2012_val_00018017.JPEG -n03089624/ILSVRC2012_val_00001190.JPEG -n03775546/ILSVRC2012_val_00042695.JPEG -n02992529/ILSVRC2012_val_00031438.JPEG -n04154565/ILSVRC2012_val_00034399.JPEG -n01806567/ILSVRC2012_val_00028529.JPEG -n03670208/ILSVRC2012_val_00039264.JPEG -n03187595/ILSVRC2012_val_00031617.JPEG -n02441942/ILSVRC2012_val_00037395.JPEG -n03803284/ILSVRC2012_val_00014884.JPEG -n02410509/ILSVRC2012_val_00039117.JPEG -n03495258/ILSVRC2012_val_00019556.JPEG -n04483307/ILSVRC2012_val_00033339.JPEG -n02892201/ILSVRC2012_val_00023195.JPEG -n02025239/ILSVRC2012_val_00048735.JPEG -n03188531/ILSVRC2012_val_00027528.JPEG -n03976467/ILSVRC2012_val_00028460.JPEG -n02096051/ILSVRC2012_val_00014738.JPEG -n01530575/ILSVRC2012_val_00000747.JPEG -n02113186/ILSVRC2012_val_00001494.JPEG -n02112137/ILSVRC2012_val_00028420.JPEG -n03124170/ILSVRC2012_val_00005346.JPEG -n03899768/ILSVRC2012_val_00045144.JPEG -n02074367/ILSVRC2012_val_00017048.JPEG -n03125729/ILSVRC2012_val_00036063.JPEG -n02815834/ILSVRC2012_val_00027061.JPEG -n03201208/ILSVRC2012_val_00034560.JPEG -n02326432/ILSVRC2012_val_00028827.JPEG -n01843383/ILSVRC2012_val_00046755.JPEG -n03877472/ILSVRC2012_val_00001870.JPEG -n03271574/ILSVRC2012_val_00022054.JPEG -n03770679/ILSVRC2012_val_00047910.JPEG -n02484975/ILSVRC2012_val_00038869.JPEG -n03461385/ILSVRC2012_val_00020954.JPEG -n02992211/ILSVRC2012_val_00006782.JPEG -n01532829/ILSVRC2012_val_00007237.JPEG -n04552348/ILSVRC2012_val_00023701.JPEG -n03832673/ILSVRC2012_val_00038350.JPEG -n02114712/ILSVRC2012_val_00017363.JPEG -n03188531/ILSVRC2012_val_00039191.JPEG -n03201208/ILSVRC2012_val_00021136.JPEG -n02100236/ILSVRC2012_val_00039507.JPEG -n01631663/ILSVRC2012_val_00037037.JPEG -n02747177/ILSVRC2012_val_00048583.JPEG -n01807496/ILSVRC2012_val_00034512.JPEG -n03709823/ILSVRC2012_val_00023792.JPEG -n04311174/ILSVRC2012_val_00013300.JPEG -n07716358/ILSVRC2012_val_00013114.JPEG -n02086240/ILSVRC2012_val_00036888.JPEG -n03100240/ILSVRC2012_val_00008981.JPEG -n03733281/ILSVRC2012_val_00024860.JPEG -n02319095/ILSVRC2012_val_00039456.JPEG -n03249569/ILSVRC2012_val_00041539.JPEG -n04553703/ILSVRC2012_val_00026584.JPEG -n03803284/ILSVRC2012_val_00012683.JPEG -n03840681/ILSVRC2012_val_00014053.JPEG -n03781244/ILSVRC2012_val_00028195.JPEG -n04487394/ILSVRC2012_val_00020259.JPEG -n02823428/ILSVRC2012_val_00031867.JPEG -n02025239/ILSVRC2012_val_00046677.JPEG -n04127249/ILSVRC2012_val_00016436.JPEG -n03089624/ILSVRC2012_val_00036006.JPEG -n03891251/ILSVRC2012_val_00036218.JPEG -n03787032/ILSVRC2012_val_00041446.JPEG -n13040303/ILSVRC2012_val_00021986.JPEG -n04350905/ILSVRC2012_val_00000380.JPEG -n01667778/ILSVRC2012_val_00013301.JPEG -n04540053/ILSVRC2012_val_00048430.JPEG -n03063599/ILSVRC2012_val_00017456.JPEG -n03220513/ILSVRC2012_val_00032479.JPEG -n02825657/ILSVRC2012_val_00018151.JPEG -n01742172/ILSVRC2012_val_00043349.JPEG -n03529860/ILSVRC2012_val_00025117.JPEG -n02056570/ILSVRC2012_val_00028670.JPEG -n01795545/ILSVRC2012_val_00002991.JPEG -n03297495/ILSVRC2012_val_00006536.JPEG -n03538406/ILSVRC2012_val_00049729.JPEG -n02123159/ILSVRC2012_val_00019303.JPEG -n02110341/ILSVRC2012_val_00036389.JPEG -n02825657/ILSVRC2012_val_00027229.JPEG -n04120489/ILSVRC2012_val_00004532.JPEG -n04026417/ILSVRC2012_val_00037263.JPEG -n02443484/ILSVRC2012_val_00043098.JPEG -n03372029/ILSVRC2012_val_00031149.JPEG -n02111277/ILSVRC2012_val_00005626.JPEG -n03345487/ILSVRC2012_val_00034340.JPEG -n01819313/ILSVRC2012_val_00013822.JPEG -n03095699/ILSVRC2012_val_00003200.JPEG -n02437616/ILSVRC2012_val_00005960.JPEG -n04428191/ILSVRC2012_val_00036974.JPEG -n02494079/ILSVRC2012_val_00014065.JPEG -n02672831/ILSVRC2012_val_00042605.JPEG -n07760859/ILSVRC2012_val_00039541.JPEG -n04204238/ILSVRC2012_val_00048927.JPEG -n01688243/ILSVRC2012_val_00008011.JPEG -n02091032/ILSVRC2012_val_00002325.JPEG -n04418357/ILSVRC2012_val_00016570.JPEG -n04325704/ILSVRC2012_val_00026365.JPEG -n02098286/ILSVRC2012_val_00013050.JPEG -n01530575/ILSVRC2012_val_00006763.JPEG -n02802426/ILSVRC2012_val_00026413.JPEG -n02690373/ILSVRC2012_val_00030411.JPEG -n03325584/ILSVRC2012_val_00007663.JPEG -n03000684/ILSVRC2012_val_00026061.JPEG -n01833805/ILSVRC2012_val_00016325.JPEG -n07716906/ILSVRC2012_val_00021629.JPEG -n04542943/ILSVRC2012_val_00000797.JPEG -n03032252/ILSVRC2012_val_00046675.JPEG -n04204238/ILSVRC2012_val_00011252.JPEG -n03459775/ILSVRC2012_val_00046453.JPEG -n01944390/ILSVRC2012_val_00010996.JPEG -n02483362/ILSVRC2012_val_00009925.JPEG -n09472597/ILSVRC2012_val_00021559.JPEG -n03272010/ILSVRC2012_val_00008655.JPEG -n02417914/ILSVRC2012_val_00029315.JPEG -n03873416/ILSVRC2012_val_00008700.JPEG -n03494278/ILSVRC2012_val_00001367.JPEG -n02105412/ILSVRC2012_val_00037290.JPEG -n04553703/ILSVRC2012_val_00007994.JPEG -n01560419/ILSVRC2012_val_00018680.JPEG -n03786901/ILSVRC2012_val_00043703.JPEG -n03908714/ILSVRC2012_val_00021673.JPEG -n02268853/ILSVRC2012_val_00004215.JPEG -n01689811/ILSVRC2012_val_00007482.JPEG -n03347037/ILSVRC2012_val_00008269.JPEG -n03888257/ILSVRC2012_val_00015689.JPEG -n13054560/ILSVRC2012_val_00007572.JPEG -n02666196/ILSVRC2012_val_00037785.JPEG -n03314780/ILSVRC2012_val_00017163.JPEG -n02793495/ILSVRC2012_val_00024047.JPEG -n02325366/ILSVRC2012_val_00020917.JPEG -n04273569/ILSVRC2012_val_00042203.JPEG -n01742172/ILSVRC2012_val_00028810.JPEG -n04325704/ILSVRC2012_val_00044116.JPEG -n02276258/ILSVRC2012_val_00037056.JPEG -n03188531/ILSVRC2012_val_00023348.JPEG -n02088364/ILSVRC2012_val_00047309.JPEG -n04476259/ILSVRC2012_val_00002432.JPEG -n04239074/ILSVRC2012_val_00033585.JPEG -n04008634/ILSVRC2012_val_00020190.JPEG -n09256479/ILSVRC2012_val_00007613.JPEG -n04275548/ILSVRC2012_val_00045949.JPEG -n02817516/ILSVRC2012_val_00041077.JPEG -n03775071/ILSVRC2012_val_00023240.JPEG -n04525038/ILSVRC2012_val_00010262.JPEG -n01632777/ILSVRC2012_val_00025348.JPEG -n02101388/ILSVRC2012_val_00041460.JPEG -n02120079/ILSVRC2012_val_00034932.JPEG -n04336792/ILSVRC2012_val_00023176.JPEG -n01677366/ILSVRC2012_val_00028764.JPEG -n03538406/ILSVRC2012_val_00037435.JPEG -n03478589/ILSVRC2012_val_00017907.JPEG -n02107312/ILSVRC2012_val_00004733.JPEG -n03944341/ILSVRC2012_val_00012260.JPEG -n02097209/ILSVRC2012_val_00010718.JPEG -n09288635/ILSVRC2012_val_00043251.JPEG -n03929855/ILSVRC2012_val_00043840.JPEG -n04389033/ILSVRC2012_val_00047296.JPEG -n03937543/ILSVRC2012_val_00005967.JPEG -n04591713/ILSVRC2012_val_00012594.JPEG -n03584254/ILSVRC2012_val_00044047.JPEG -n07880968/ILSVRC2012_val_00013959.JPEG -n03160309/ILSVRC2012_val_00018927.JPEG -n04208210/ILSVRC2012_val_00012030.JPEG -n03662601/ILSVRC2012_val_00028180.JPEG -n02190166/ILSVRC2012_val_00043104.JPEG -n04423845/ILSVRC2012_val_00046188.JPEG -n03630383/ILSVRC2012_val_00016123.JPEG -n02090721/ILSVRC2012_val_00006382.JPEG -n01824575/ILSVRC2012_val_00036702.JPEG -n02090721/ILSVRC2012_val_00014293.JPEG -n09246464/ILSVRC2012_val_00046022.JPEG -n01990800/ILSVRC2012_val_00036289.JPEG -n03594734/ILSVRC2012_val_00045877.JPEG -n03930630/ILSVRC2012_val_00027997.JPEG -n02443484/ILSVRC2012_val_00011477.JPEG -n13044778/ILSVRC2012_val_00040976.JPEG -n02727426/ILSVRC2012_val_00039440.JPEG -n02106030/ILSVRC2012_val_00018046.JPEG -n10148035/ILSVRC2012_val_00001410.JPEG -n03743016/ILSVRC2012_val_00012483.JPEG -n02108551/ILSVRC2012_val_00013964.JPEG -n03016953/ILSVRC2012_val_00039301.JPEG -n03710193/ILSVRC2012_val_00013096.JPEG -n02105505/ILSVRC2012_val_00007534.JPEG -n02099849/ILSVRC2012_val_00017377.JPEG -n02002724/ILSVRC2012_val_00029692.JPEG -n03014705/ILSVRC2012_val_00008418.JPEG -n04392985/ILSVRC2012_val_00001249.JPEG -n04532106/ILSVRC2012_val_00048503.JPEG -n04423845/ILSVRC2012_val_00026002.JPEG -n02102480/ILSVRC2012_val_00041060.JPEG -n02096177/ILSVRC2012_val_00048476.JPEG -n01534433/ILSVRC2012_val_00030657.JPEG -n03876231/ILSVRC2012_val_00016070.JPEG -n02799071/ILSVRC2012_val_00021134.JPEG -n04429376/ILSVRC2012_val_00031730.JPEG -n03483316/ILSVRC2012_val_00016875.JPEG -n04560804/ILSVRC2012_val_00012572.JPEG -n02708093/ILSVRC2012_val_00017378.JPEG -n02120505/ILSVRC2012_val_00044957.JPEG -n03630383/ILSVRC2012_val_00004189.JPEG -n01698640/ILSVRC2012_val_00039475.JPEG -n09256479/ILSVRC2012_val_00004126.JPEG -n03314780/ILSVRC2012_val_00043430.JPEG -n03908714/ILSVRC2012_val_00034235.JPEG -n03998194/ILSVRC2012_val_00035541.JPEG -n01985128/ILSVRC2012_val_00049686.JPEG -n02110627/ILSVRC2012_val_00029382.JPEG -n03895866/ILSVRC2012_val_00038339.JPEG -n04584207/ILSVRC2012_val_00012244.JPEG -n04584207/ILSVRC2012_val_00027984.JPEG -n04162706/ILSVRC2012_val_00002091.JPEG -n03291819/ILSVRC2012_val_00024925.JPEG -n02130308/ILSVRC2012_val_00014974.JPEG -n07716358/ILSVRC2012_val_00023848.JPEG -n04493381/ILSVRC2012_val_00012077.JPEG -n01694178/ILSVRC2012_val_00015831.JPEG -n02094258/ILSVRC2012_val_00025947.JPEG -n02927161/ILSVRC2012_val_00012448.JPEG -n02128757/ILSVRC2012_val_00036622.JPEG -n02488702/ILSVRC2012_val_00036767.JPEG -n13054560/ILSVRC2012_val_00048790.JPEG -n04355338/ILSVRC2012_val_00030338.JPEG -n02107908/ILSVRC2012_val_00000758.JPEG -n07730033/ILSVRC2012_val_00041488.JPEG -n02802426/ILSVRC2012_val_00031833.JPEG -n02128757/ILSVRC2012_val_00022170.JPEG -n02281787/ILSVRC2012_val_00021806.JPEG -n03590841/ILSVRC2012_val_00032642.JPEG -n02106662/ILSVRC2012_val_00007922.JPEG -n04536866/ILSVRC2012_val_00039680.JPEG -n04552348/ILSVRC2012_val_00015306.JPEG -n02791124/ILSVRC2012_val_00009064.JPEG -n04370456/ILSVRC2012_val_00002955.JPEG -n02825657/ILSVRC2012_val_00046779.JPEG -n09332890/ILSVRC2012_val_00022291.JPEG -n04517823/ILSVRC2012_val_00012535.JPEG -n02457408/ILSVRC2012_val_00033283.JPEG -n07880968/ILSVRC2012_val_00000606.JPEG -n01641577/ILSVRC2012_val_00018339.JPEG -n03146219/ILSVRC2012_val_00036276.JPEG -n03887697/ILSVRC2012_val_00029545.JPEG -n03126707/ILSVRC2012_val_00037953.JPEG -n02410509/ILSVRC2012_val_00034061.JPEG -n04398044/ILSVRC2012_val_00048377.JPEG -n02841315/ILSVRC2012_val_00025790.JPEG -n02087394/ILSVRC2012_val_00017792.JPEG -n07930864/ILSVRC2012_val_00045302.JPEG -n03530642/ILSVRC2012_val_00028432.JPEG -n03874599/ILSVRC2012_val_00002115.JPEG -n04008634/ILSVRC2012_val_00018494.JPEG -n02356798/ILSVRC2012_val_00036257.JPEG -n02090622/ILSVRC2012_val_00001626.JPEG -n03764736/ILSVRC2012_val_00021965.JPEG -n02504013/ILSVRC2012_val_00010713.JPEG -n02676566/ILSVRC2012_val_00041930.JPEG -n02999410/ILSVRC2012_val_00009591.JPEG -n03014705/ILSVRC2012_val_00029640.JPEG -n03344393/ILSVRC2012_val_00011769.JPEG -n02093256/ILSVRC2012_val_00031334.JPEG -n04462240/ILSVRC2012_val_00042489.JPEG -n04209133/ILSVRC2012_val_00002465.JPEG -n02823428/ILSVRC2012_val_00032921.JPEG -n03018349/ILSVRC2012_val_00034866.JPEG -n04265275/ILSVRC2012_val_00028998.JPEG -n02106030/ILSVRC2012_val_00014086.JPEG -n02090622/ILSVRC2012_val_00006495.JPEG -n02085620/ILSVRC2012_val_00028943.JPEG -n03891332/ILSVRC2012_val_00007481.JPEG -n07584110/ILSVRC2012_val_00031813.JPEG -n12985857/ILSVRC2012_val_00033845.JPEG -n07614500/ILSVRC2012_val_00003592.JPEG -n04136333/ILSVRC2012_val_00003658.JPEG -n02090622/ILSVRC2012_val_00005718.JPEG -n02089078/ILSVRC2012_val_00023203.JPEG -n03535780/ILSVRC2012_val_00014669.JPEG -n03770439/ILSVRC2012_val_00016482.JPEG -n04399382/ILSVRC2012_val_00044173.JPEG -n01818515/ILSVRC2012_val_00041556.JPEG -n02963159/ILSVRC2012_val_00014297.JPEG -n01860187/ILSVRC2012_val_00009998.JPEG -n02096051/ILSVRC2012_val_00023011.JPEG -n01773797/ILSVRC2012_val_00015751.JPEG -n02110185/ILSVRC2012_val_00024669.JPEG -n02974003/ILSVRC2012_val_00033710.JPEG -n03089624/ILSVRC2012_val_00010089.JPEG -n02128925/ILSVRC2012_val_00037004.JPEG -n07749582/ILSVRC2012_val_00047221.JPEG -n03916031/ILSVRC2012_val_00026846.JPEG -n04204238/ILSVRC2012_val_00009223.JPEG -n07716358/ILSVRC2012_val_00006290.JPEG -n02108915/ILSVRC2012_val_00041623.JPEG -n04325704/ILSVRC2012_val_00016515.JPEG -n03208938/ILSVRC2012_val_00004668.JPEG -n07753113/ILSVRC2012_val_00042121.JPEG -n01558993/ILSVRC2012_val_00005594.JPEG -n03908618/ILSVRC2012_val_00014429.JPEG -n03417042/ILSVRC2012_val_00033842.JPEG -n01924916/ILSVRC2012_val_00041450.JPEG -n02108551/ILSVRC2012_val_00039115.JPEG -n02797295/ILSVRC2012_val_00044612.JPEG -n04259630/ILSVRC2012_val_00020420.JPEG -n02085782/ILSVRC2012_val_00015730.JPEG -n02091635/ILSVRC2012_val_00042053.JPEG -n04418357/ILSVRC2012_val_00036685.JPEG -n03884397/ILSVRC2012_val_00039417.JPEG -n02006656/ILSVRC2012_val_00005107.JPEG -n02281787/ILSVRC2012_val_00017393.JPEG -n04428191/ILSVRC2012_val_00025547.JPEG -n04592741/ILSVRC2012_val_00022734.JPEG -n02007558/ILSVRC2012_val_00022414.JPEG -n02268853/ILSVRC2012_val_00049961.JPEG -n02808440/ILSVRC2012_val_00043669.JPEG -n02109525/ILSVRC2012_val_00025620.JPEG -n01930112/ILSVRC2012_val_00004923.JPEG -n04399382/ILSVRC2012_val_00004523.JPEG -n04597913/ILSVRC2012_val_00006044.JPEG -n07716358/ILSVRC2012_val_00010580.JPEG -n04296562/ILSVRC2012_val_00039881.JPEG -n03424325/ILSVRC2012_val_00018874.JPEG -n04081281/ILSVRC2012_val_00003807.JPEG -n04228054/ILSVRC2012_val_00029671.JPEG -n03657121/ILSVRC2012_val_00046352.JPEG -n02692877/ILSVRC2012_val_00020020.JPEG -n03125729/ILSVRC2012_val_00000210.JPEG -n04251144/ILSVRC2012_val_00039532.JPEG -n03481172/ILSVRC2012_val_00044928.JPEG -n02917067/ILSVRC2012_val_00005622.JPEG -n02105855/ILSVRC2012_val_00049871.JPEG -n02093754/ILSVRC2012_val_00031172.JPEG -n02087046/ILSVRC2012_val_00019566.JPEG -n03089624/ILSVRC2012_val_00037663.JPEG -n01697457/ILSVRC2012_val_00043428.JPEG -n11879895/ILSVRC2012_val_00000216.JPEG -n02980441/ILSVRC2012_val_00006522.JPEG -n03291819/ILSVRC2012_val_00025489.JPEG -n04591713/ILSVRC2012_val_00034842.JPEG -n04579145/ILSVRC2012_val_00047046.JPEG -n06596364/ILSVRC2012_val_00007624.JPEG -n02843684/ILSVRC2012_val_00013736.JPEG -n03425413/ILSVRC2012_val_00004860.JPEG -n03201208/ILSVRC2012_val_00048762.JPEG -n03657121/ILSVRC2012_val_00006803.JPEG -n02091134/ILSVRC2012_val_00012888.JPEG -n02100735/ILSVRC2012_val_00031785.JPEG -n03920288/ILSVRC2012_val_00034145.JPEG -n03259280/ILSVRC2012_val_00027418.JPEG -n03372029/ILSVRC2012_val_00016025.JPEG -n01560419/ILSVRC2012_val_00020788.JPEG -n02408429/ILSVRC2012_val_00005454.JPEG -n09246464/ILSVRC2012_val_00017728.JPEG -n02672831/ILSVRC2012_val_00047423.JPEG -n01698640/ILSVRC2012_val_00037268.JPEG -n02788148/ILSVRC2012_val_00000584.JPEG -n07613480/ILSVRC2012_val_00038412.JPEG -n02667093/ILSVRC2012_val_00001774.JPEG -n03733805/ILSVRC2012_val_00009255.JPEG -n03976467/ILSVRC2012_val_00000765.JPEG -n03887697/ILSVRC2012_val_00046711.JPEG -n11939491/ILSVRC2012_val_00010143.JPEG -n04263257/ILSVRC2012_val_00037205.JPEG -n07892512/ILSVRC2012_val_00049928.JPEG -n02879718/ILSVRC2012_val_00031070.JPEG -n02442845/ILSVRC2012_val_00014437.JPEG -n02093256/ILSVRC2012_val_00019931.JPEG -n03961711/ILSVRC2012_val_00039193.JPEG -n03494278/ILSVRC2012_val_00019269.JPEG -n02823750/ILSVRC2012_val_00036113.JPEG -n01774384/ILSVRC2012_val_00016936.JPEG -n02112706/ILSVRC2012_val_00046390.JPEG -n04131690/ILSVRC2012_val_00042814.JPEG -n02676566/ILSVRC2012_val_00036762.JPEG -n01873310/ILSVRC2012_val_00007800.JPEG -n01667778/ILSVRC2012_val_00024736.JPEG -n03832673/ILSVRC2012_val_00026011.JPEG -n02088238/ILSVRC2012_val_00024881.JPEG -n02107908/ILSVRC2012_val_00045080.JPEG -n04235860/ILSVRC2012_val_00017165.JPEG -n04554684/ILSVRC2012_val_00048391.JPEG -n03124170/ILSVRC2012_val_00001875.JPEG -n02087394/ILSVRC2012_val_00042252.JPEG -n03337140/ILSVRC2012_val_00018172.JPEG -n07873807/ILSVRC2012_val_00008506.JPEG -n04350905/ILSVRC2012_val_00002541.JPEG -n02727426/ILSVRC2012_val_00012219.JPEG -n04540053/ILSVRC2012_val_00022449.JPEG -n02865351/ILSVRC2012_val_00012866.JPEG -n02108422/ILSVRC2012_val_00003022.JPEG -n02672831/ILSVRC2012_val_00003432.JPEG -n02791270/ILSVRC2012_val_00035205.JPEG -n03637318/ILSVRC2012_val_00027525.JPEG -n02109047/ILSVRC2012_val_00017333.JPEG -n03207941/ILSVRC2012_val_00006788.JPEG -n02749479/ILSVRC2012_val_00003684.JPEG -n02892201/ILSVRC2012_val_00027425.JPEG -n03062245/ILSVRC2012_val_00040099.JPEG -n03617480/ILSVRC2012_val_00027188.JPEG -n02504013/ILSVRC2012_val_00020120.JPEG -n03250847/ILSVRC2012_val_00045452.JPEG -n01667778/ILSVRC2012_val_00013738.JPEG -n03534580/ILSVRC2012_val_00042217.JPEG -n03417042/ILSVRC2012_val_00026865.JPEG -n01688243/ILSVRC2012_val_00014251.JPEG -n03125729/ILSVRC2012_val_00028808.JPEG -n07693725/ILSVRC2012_val_00019949.JPEG -n01669191/ILSVRC2012_val_00018362.JPEG -n02457408/ILSVRC2012_val_00029890.JPEG -n03534580/ILSVRC2012_val_00033004.JPEG -n01774384/ILSVRC2012_val_00006437.JPEG -n03187595/ILSVRC2012_val_00009824.JPEG -n02112137/ILSVRC2012_val_00028855.JPEG -n04409515/ILSVRC2012_val_00020170.JPEG -n04243546/ILSVRC2012_val_00017216.JPEG -n04355338/ILSVRC2012_val_00020611.JPEG -n04429376/ILSVRC2012_val_00049487.JPEG -n01665541/ILSVRC2012_val_00025441.JPEG -n02927161/ILSVRC2012_val_00031010.JPEG -n11939491/ILSVRC2012_val_00049436.JPEG -n04429376/ILSVRC2012_val_00001160.JPEG -n01582220/ILSVRC2012_val_00033150.JPEG -n13040303/ILSVRC2012_val_00008821.JPEG -n01978287/ILSVRC2012_val_00013891.JPEG -n01855032/ILSVRC2012_val_00031847.JPEG -n07892512/ILSVRC2012_val_00029480.JPEG -n02089078/ILSVRC2012_val_00009405.JPEG -n04479046/ILSVRC2012_val_00035477.JPEG -n03980874/ILSVRC2012_val_00039869.JPEG -n03866082/ILSVRC2012_val_00046877.JPEG -n02093754/ILSVRC2012_val_00044977.JPEG -n02860847/ILSVRC2012_val_00025196.JPEG -n02769748/ILSVRC2012_val_00002183.JPEG -n02727426/ILSVRC2012_val_00041842.JPEG -n03014705/ILSVRC2012_val_00044754.JPEG -n02408429/ILSVRC2012_val_00029776.JPEG -n04081281/ILSVRC2012_val_00018924.JPEG -n11879895/ILSVRC2012_val_00043005.JPEG -n07753113/ILSVRC2012_val_00038857.JPEG -n02787622/ILSVRC2012_val_00010207.JPEG -n02317335/ILSVRC2012_val_00045028.JPEG -n02110063/ILSVRC2012_val_00021051.JPEG -n06874185/ILSVRC2012_val_00041744.JPEG -n02088094/ILSVRC2012_val_00029140.JPEG -n03788365/ILSVRC2012_val_00014303.JPEG -n02105162/ILSVRC2012_val_00038991.JPEG -n03017168/ILSVRC2012_val_00031125.JPEG -n01883070/ILSVRC2012_val_00036590.JPEG -n02112350/ILSVRC2012_val_00040313.JPEG -n02091244/ILSVRC2012_val_00009334.JPEG -n02105162/ILSVRC2012_val_00004754.JPEG -n01742172/ILSVRC2012_val_00009271.JPEG -n04120489/ILSVRC2012_val_00027118.JPEG -n03109150/ILSVRC2012_val_00009323.JPEG -n03770439/ILSVRC2012_val_00016619.JPEG -n02128757/ILSVRC2012_val_00035192.JPEG -n04162706/ILSVRC2012_val_00029687.JPEG -n04507155/ILSVRC2012_val_00004816.JPEG -n03216828/ILSVRC2012_val_00012195.JPEG -n04275548/ILSVRC2012_val_00046830.JPEG -n03967562/ILSVRC2012_val_00024846.JPEG -n01534433/ILSVRC2012_val_00032025.JPEG -n04418357/ILSVRC2012_val_00041170.JPEG -n04127249/ILSVRC2012_val_00027502.JPEG -n03481172/ILSVRC2012_val_00032972.JPEG -n04118538/ILSVRC2012_val_00017229.JPEG -n01693334/ILSVRC2012_val_00017730.JPEG -n02488291/ILSVRC2012_val_00028982.JPEG -n02106166/ILSVRC2012_val_00001900.JPEG -n02132136/ILSVRC2012_val_00018369.JPEG -n04346328/ILSVRC2012_val_00011106.JPEG -n01980166/ILSVRC2012_val_00025960.JPEG -n01751748/ILSVRC2012_val_00000324.JPEG -n03658185/ILSVRC2012_val_00014001.JPEG -n03534580/ILSVRC2012_val_00022084.JPEG -n02092339/ILSVRC2012_val_00025680.JPEG -n02492660/ILSVRC2012_val_00015033.JPEG -n02117135/ILSVRC2012_val_00029816.JPEG -n04070727/ILSVRC2012_val_00004133.JPEG -n02815834/ILSVRC2012_val_00018885.JPEG -n04479046/ILSVRC2012_val_00006196.JPEG -n02281406/ILSVRC2012_val_00039971.JPEG -n02108551/ILSVRC2012_val_00020152.JPEG -n02233338/ILSVRC2012_val_00042811.JPEG -n02504013/ILSVRC2012_val_00021237.JPEG -n02114548/ILSVRC2012_val_00030270.JPEG -n02009229/ILSVRC2012_val_00034814.JPEG -n13044778/ILSVRC2012_val_00027611.JPEG -n03814639/ILSVRC2012_val_00034119.JPEG -n07749582/ILSVRC2012_val_00000711.JPEG -n02113978/ILSVRC2012_val_00001917.JPEG -n03938244/ILSVRC2012_val_00048945.JPEG -n04465501/ILSVRC2012_val_00027978.JPEG -n04162706/ILSVRC2012_val_00021842.JPEG -n03930630/ILSVRC2012_val_00017360.JPEG -n03717622/ILSVRC2012_val_00023787.JPEG -n04228054/ILSVRC2012_val_00000568.JPEG -n02011460/ILSVRC2012_val_00049711.JPEG -n03496892/ILSVRC2012_val_00012088.JPEG -n01580077/ILSVRC2012_val_00026136.JPEG -n04136333/ILSVRC2012_val_00022316.JPEG -n02006656/ILSVRC2012_val_00022418.JPEG -n03290653/ILSVRC2012_val_00010260.JPEG -n02974003/ILSVRC2012_val_00047912.JPEG -n07749582/ILSVRC2012_val_00002098.JPEG -n03788195/ILSVRC2012_val_00031002.JPEG -n02445715/ILSVRC2012_val_00015239.JPEG -n02797295/ILSVRC2012_val_00017834.JPEG -n04532106/ILSVRC2012_val_00034337.JPEG -n04507155/ILSVRC2012_val_00036058.JPEG -n04162706/ILSVRC2012_val_00032515.JPEG -n02363005/ILSVRC2012_val_00015977.JPEG -n01828970/ILSVRC2012_val_00025758.JPEG -n03075370/ILSVRC2012_val_00046514.JPEG -n07880968/ILSVRC2012_val_00047263.JPEG -n04418357/ILSVRC2012_val_00046075.JPEG -n02927161/ILSVRC2012_val_00045329.JPEG -n03447447/ILSVRC2012_val_00045000.JPEG -n09288635/ILSVRC2012_val_00014161.JPEG -n03095699/ILSVRC2012_val_00007161.JPEG -n02815834/ILSVRC2012_val_00028875.JPEG -n09193705/ILSVRC2012_val_00028907.JPEG -n02120079/ILSVRC2012_val_00020481.JPEG -n04370456/ILSVRC2012_val_00038408.JPEG -n02120505/ILSVRC2012_val_00020859.JPEG -n02105162/ILSVRC2012_val_00027807.JPEG -n03179701/ILSVRC2012_val_00021078.JPEG -n01728572/ILSVRC2012_val_00042100.JPEG -n02097130/ILSVRC2012_val_00044820.JPEG -n02105412/ILSVRC2012_val_00008397.JPEG -n02504013/ILSVRC2012_val_00048547.JPEG -n06359193/ILSVRC2012_val_00036311.JPEG -n04179913/ILSVRC2012_val_00006735.JPEG -n04070727/ILSVRC2012_val_00036831.JPEG -n02701002/ILSVRC2012_val_00018957.JPEG -n04417672/ILSVRC2012_val_00025280.JPEG -n02093859/ILSVRC2012_val_00008502.JPEG -n02086646/ILSVRC2012_val_00037252.JPEG -n02494079/ILSVRC2012_val_00017776.JPEG -n03347037/ILSVRC2012_val_00026726.JPEG -n02281787/ILSVRC2012_val_00010102.JPEG -n02799071/ILSVRC2012_val_00022312.JPEG -n02481823/ILSVRC2012_val_00000974.JPEG -n07720875/ILSVRC2012_val_00041116.JPEG -n04517823/ILSVRC2012_val_00004240.JPEG -n03637318/ILSVRC2012_val_00026798.JPEG -n04376876/ILSVRC2012_val_00041555.JPEG -n02963159/ILSVRC2012_val_00019491.JPEG -n01737021/ILSVRC2012_val_00018334.JPEG -n07753275/ILSVRC2012_val_00001479.JPEG -n02089973/ILSVRC2012_val_00011586.JPEG -n02108422/ILSVRC2012_val_00041144.JPEG -n02328150/ILSVRC2012_val_00027686.JPEG -n03208938/ILSVRC2012_val_00015384.JPEG -n09421951/ILSVRC2012_val_00005296.JPEG -n13052670/ILSVRC2012_val_00048466.JPEG -n03706229/ILSVRC2012_val_00049101.JPEG -n03529860/ILSVRC2012_val_00024939.JPEG -n04487394/ILSVRC2012_val_00027975.JPEG -n09332890/ILSVRC2012_val_00038916.JPEG -n03494278/ILSVRC2012_val_00007924.JPEG -n03891332/ILSVRC2012_val_00029440.JPEG -n04266014/ILSVRC2012_val_00045801.JPEG -n04599235/ILSVRC2012_val_00035088.JPEG -n03125729/ILSVRC2012_val_00037113.JPEG -n04310018/ILSVRC2012_val_00045560.JPEG -n01735189/ILSVRC2012_val_00029712.JPEG -n02133161/ILSVRC2012_val_00016621.JPEG -n02690373/ILSVRC2012_val_00024747.JPEG -n03920288/ILSVRC2012_val_00029067.JPEG -n03733805/ILSVRC2012_val_00027209.JPEG -n02112018/ILSVRC2012_val_00018688.JPEG -n04550184/ILSVRC2012_val_00048746.JPEG -n02490219/ILSVRC2012_val_00001504.JPEG -n01945685/ILSVRC2012_val_00029558.JPEG -n02096585/ILSVRC2012_val_00014729.JPEG -n02095889/ILSVRC2012_val_00009347.JPEG -n02100877/ILSVRC2012_val_00041739.JPEG -n01917289/ILSVRC2012_val_00045307.JPEG -n04252225/ILSVRC2012_val_00045557.JPEG -n02906734/ILSVRC2012_val_00014004.JPEG -n04418357/ILSVRC2012_val_00022941.JPEG -n02092339/ILSVRC2012_val_00001485.JPEG -n12768682/ILSVRC2012_val_00008329.JPEG -n03291819/ILSVRC2012_val_00018094.JPEG -n04370456/ILSVRC2012_val_00020241.JPEG -n02281787/ILSVRC2012_val_00027787.JPEG -n04065272/ILSVRC2012_val_00022419.JPEG -n03690938/ILSVRC2012_val_00011599.JPEG -n04041544/ILSVRC2012_val_00033549.JPEG -n04346328/ILSVRC2012_val_00041257.JPEG -n03272010/ILSVRC2012_val_00014896.JPEG -n04562935/ILSVRC2012_val_00018833.JPEG -n03673027/ILSVRC2012_val_00049165.JPEG -n03982430/ILSVRC2012_val_00042092.JPEG -n02090379/ILSVRC2012_val_00042442.JPEG -n04277352/ILSVRC2012_val_00032999.JPEG -n03207941/ILSVRC2012_val_00048287.JPEG -n02687172/ILSVRC2012_val_00009104.JPEG -n01978455/ILSVRC2012_val_00049440.JPEG -n02281787/ILSVRC2012_val_00002787.JPEG -n03297495/ILSVRC2012_val_00037578.JPEG -n04149813/ILSVRC2012_val_00000563.JPEG -n02105251/ILSVRC2012_val_00035781.JPEG -n01833805/ILSVRC2012_val_00003259.JPEG -n04487394/ILSVRC2012_val_00045716.JPEG -n02797295/ILSVRC2012_val_00021614.JPEG -n03452741/ILSVRC2012_val_00010946.JPEG -n02097298/ILSVRC2012_val_00049757.JPEG -n03014705/ILSVRC2012_val_00012144.JPEG -n02747177/ILSVRC2012_val_00042198.JPEG -n02490219/ILSVRC2012_val_00047085.JPEG -n01632458/ILSVRC2012_val_00029732.JPEG -n03998194/ILSVRC2012_val_00042119.JPEG -n04009552/ILSVRC2012_val_00001253.JPEG -n03891251/ILSVRC2012_val_00025864.JPEG -n02123597/ILSVRC2012_val_00011738.JPEG -n02281787/ILSVRC2012_val_00043218.JPEG -n04266014/ILSVRC2012_val_00046484.JPEG -n03781244/ILSVRC2012_val_00047206.JPEG -n12985857/ILSVRC2012_val_00040193.JPEG -n02097474/ILSVRC2012_val_00038580.JPEG -n02101556/ILSVRC2012_val_00021360.JPEG -n04335435/ILSVRC2012_val_00045852.JPEG -n03100240/ILSVRC2012_val_00025647.JPEG -n02692877/ILSVRC2012_val_00016891.JPEG -n04599235/ILSVRC2012_val_00049409.JPEG -n03944341/ILSVRC2012_val_00028761.JPEG -n03325584/ILSVRC2012_val_00046949.JPEG -n03000134/ILSVRC2012_val_00014205.JPEG -n04209239/ILSVRC2012_val_00034535.JPEG -n04041544/ILSVRC2012_val_00015604.JPEG -n02013706/ILSVRC2012_val_00012475.JPEG -n03775546/ILSVRC2012_val_00013468.JPEG -n01739381/ILSVRC2012_val_00033552.JPEG -n07745940/ILSVRC2012_val_00012497.JPEG -n09246464/ILSVRC2012_val_00042182.JPEG -n01697457/ILSVRC2012_val_00038287.JPEG -n01756291/ILSVRC2012_val_00019270.JPEG -n04584207/ILSVRC2012_val_00026020.JPEG -n02086910/ILSVRC2012_val_00035935.JPEG -n03376595/ILSVRC2012_val_00044181.JPEG -n01829413/ILSVRC2012_val_00020284.JPEG -n03938244/ILSVRC2012_val_00011231.JPEG -n01843383/ILSVRC2012_val_00034194.JPEG -n02965783/ILSVRC2012_val_00018623.JPEG -n03457902/ILSVRC2012_val_00005071.JPEG -n03000247/ILSVRC2012_val_00002834.JPEG -n01883070/ILSVRC2012_val_00013845.JPEG -n01847000/ILSVRC2012_val_00036040.JPEG -n02093256/ILSVRC2012_val_00028332.JPEG -n02074367/ILSVRC2012_val_00022669.JPEG -n01910747/ILSVRC2012_val_00026530.JPEG -n03769881/ILSVRC2012_val_00017651.JPEG -n03529860/ILSVRC2012_val_00004596.JPEG -n02105056/ILSVRC2012_val_00016092.JPEG -n03017168/ILSVRC2012_val_00007510.JPEG -n04008634/ILSVRC2012_val_00033210.JPEG -n02879718/ILSVRC2012_val_00002777.JPEG -n03891332/ILSVRC2012_val_00018258.JPEG -n02410509/ILSVRC2012_val_00008629.JPEG -n02094258/ILSVRC2012_val_00042642.JPEG -n04008634/ILSVRC2012_val_00008246.JPEG -n06596364/ILSVRC2012_val_00040030.JPEG -n03461385/ILSVRC2012_val_00025959.JPEG -n01829413/ILSVRC2012_val_00004697.JPEG -n07693725/ILSVRC2012_val_00035111.JPEG -n04548362/ILSVRC2012_val_00021967.JPEG -n12144580/ILSVRC2012_val_00020295.JPEG -n01914609/ILSVRC2012_val_00042456.JPEG -n03344393/ILSVRC2012_val_00007736.JPEG -n04049303/ILSVRC2012_val_00040866.JPEG -n12998815/ILSVRC2012_val_00002153.JPEG -n01978287/ILSVRC2012_val_00018052.JPEG -n04613696/ILSVRC2012_val_00045840.JPEG -n02114712/ILSVRC2012_val_00037617.JPEG -n03485794/ILSVRC2012_val_00049825.JPEG -n02110806/ILSVRC2012_val_00035890.JPEG -n09288635/ILSVRC2012_val_00016478.JPEG -n01644373/ILSVRC2012_val_00030352.JPEG -n02095570/ILSVRC2012_val_00026286.JPEG -n03908618/ILSVRC2012_val_00012016.JPEG -n02129165/ILSVRC2012_val_00014967.JPEG -n02493509/ILSVRC2012_val_00037781.JPEG -n07684084/ILSVRC2012_val_00006466.JPEG -n03259280/ILSVRC2012_val_00000182.JPEG -n01514668/ILSVRC2012_val_00005505.JPEG -n03444034/ILSVRC2012_val_00030549.JPEG -n01630670/ILSVRC2012_val_00000498.JPEG -n04429376/ILSVRC2012_val_00003519.JPEG -n03127925/ILSVRC2012_val_00015057.JPEG -n02483362/ILSVRC2012_val_00004753.JPEG -n02978881/ILSVRC2012_val_00027299.JPEG -n02108000/ILSVRC2012_val_00002277.JPEG -n02108551/ILSVRC2012_val_00034181.JPEG -n03874599/ILSVRC2012_val_00047645.JPEG -n03888257/ILSVRC2012_val_00010336.JPEG -n02058221/ILSVRC2012_val_00038725.JPEG -n01592084/ILSVRC2012_val_00045568.JPEG -n01677366/ILSVRC2012_val_00033961.JPEG -n04505470/ILSVRC2012_val_00008530.JPEG -n02090379/ILSVRC2012_val_00021575.JPEG -n01980166/ILSVRC2012_val_00012779.JPEG -n07565083/ILSVRC2012_val_00042087.JPEG -n02319095/ILSVRC2012_val_00035430.JPEG -n03983396/ILSVRC2012_val_00012540.JPEG -n04005630/ILSVRC2012_val_00024281.JPEG -n03530642/ILSVRC2012_val_00018635.JPEG -n02113978/ILSVRC2012_val_00033581.JPEG -n01748264/ILSVRC2012_val_00013245.JPEG -n03085013/ILSVRC2012_val_00021913.JPEG -n03733131/ILSVRC2012_val_00024970.JPEG -n03733805/ILSVRC2012_val_00033697.JPEG -n04479046/ILSVRC2012_val_00038352.JPEG -n04317175/ILSVRC2012_val_00048424.JPEG -n02172182/ILSVRC2012_val_00031062.JPEG -n01828970/ILSVRC2012_val_00009536.JPEG -n02096437/ILSVRC2012_val_00035260.JPEG -n02037110/ILSVRC2012_val_00010080.JPEG -n03218198/ILSVRC2012_val_00043332.JPEG -n07716358/ILSVRC2012_val_00039647.JPEG -n02090721/ILSVRC2012_val_00027629.JPEG -n02102318/ILSVRC2012_val_00004995.JPEG -n02500267/ILSVRC2012_val_00036531.JPEG -n02107312/ILSVRC2012_val_00010372.JPEG -n03857828/ILSVRC2012_val_00015720.JPEG -n03141823/ILSVRC2012_val_00044432.JPEG -n02326432/ILSVRC2012_val_00033403.JPEG -n02114855/ILSVRC2012_val_00019680.JPEG -n04090263/ILSVRC2012_val_00030031.JPEG -n04371430/ILSVRC2012_val_00023575.JPEG -n03982430/ILSVRC2012_val_00023993.JPEG -n04487394/ILSVRC2012_val_00036346.JPEG -n09835506/ILSVRC2012_val_00039644.JPEG -n02492660/ILSVRC2012_val_00034985.JPEG -n01978455/ILSVRC2012_val_00023601.JPEG -n07697537/ILSVRC2012_val_00024032.JPEG -n04486054/ILSVRC2012_val_00010914.JPEG -n03179701/ILSVRC2012_val_00046652.JPEG -n03127747/ILSVRC2012_val_00022689.JPEG -n02860847/ILSVRC2012_val_00036614.JPEG -n04548362/ILSVRC2012_val_00046827.JPEG -n01883070/ILSVRC2012_val_00014545.JPEG -n02264363/ILSVRC2012_val_00022155.JPEG -n01986214/ILSVRC2012_val_00036320.JPEG -n02979186/ILSVRC2012_val_00018559.JPEG -n02113023/ILSVRC2012_val_00049215.JPEG -n02108915/ILSVRC2012_val_00026976.JPEG -n03476991/ILSVRC2012_val_00012370.JPEG -n02277742/ILSVRC2012_val_00033639.JPEG -n07613480/ILSVRC2012_val_00000928.JPEG -n04442312/ILSVRC2012_val_00004478.JPEG -n02134084/ILSVRC2012_val_00021883.JPEG -n04118776/ILSVRC2012_val_00027784.JPEG -n02097298/ILSVRC2012_val_00031084.JPEG -n04285008/ILSVRC2012_val_00028336.JPEG -n04065272/ILSVRC2012_val_00043339.JPEG -n03045698/ILSVRC2012_val_00023447.JPEG -n01537544/ILSVRC2012_val_00035565.JPEG -n02111500/ILSVRC2012_val_00003794.JPEG -n07583066/ILSVRC2012_val_00000728.JPEG -n01601694/ILSVRC2012_val_00030011.JPEG -n02980441/ILSVRC2012_val_00019377.JPEG -n04399382/ILSVRC2012_val_00001186.JPEG -n03874599/ILSVRC2012_val_00048559.JPEG -n02129165/ILSVRC2012_val_00011018.JPEG -n04371430/ILSVRC2012_val_00019658.JPEG -n07720875/ILSVRC2012_val_00005981.JPEG -n02500267/ILSVRC2012_val_00011603.JPEG -n04154565/ILSVRC2012_val_00020366.JPEG -n06596364/ILSVRC2012_val_00017365.JPEG -n03877472/ILSVRC2012_val_00016590.JPEG -n03868863/ILSVRC2012_val_00007585.JPEG -n07930864/ILSVRC2012_val_00005759.JPEG -n02097209/ILSVRC2012_val_00006178.JPEG -n01688243/ILSVRC2012_val_00012820.JPEG -n02090379/ILSVRC2012_val_00033094.JPEG -n02229544/ILSVRC2012_val_00042010.JPEG -n04487081/ILSVRC2012_val_00034724.JPEG -n04456115/ILSVRC2012_val_00036237.JPEG -n02493793/ILSVRC2012_val_00036994.JPEG -n02018795/ILSVRC2012_val_00034725.JPEG -n07831146/ILSVRC2012_val_00024518.JPEG -n02492660/ILSVRC2012_val_00013754.JPEG -n03047690/ILSVRC2012_val_00014595.JPEG -n01819313/ILSVRC2012_val_00018156.JPEG -n01774384/ILSVRC2012_val_00014659.JPEG -n03838899/ILSVRC2012_val_00032257.JPEG -n04310018/ILSVRC2012_val_00037088.JPEG -n02489166/ILSVRC2012_val_00031562.JPEG -n01737021/ILSVRC2012_val_00000084.JPEG -n01797886/ILSVRC2012_val_00005315.JPEG -n01534433/ILSVRC2012_val_00026687.JPEG -n02123394/ILSVRC2012_val_00049996.JPEG -n03018349/ILSVRC2012_val_00021844.JPEG -n03720891/ILSVRC2012_val_00017528.JPEG -n04147183/ILSVRC2012_val_00037184.JPEG -n03223299/ILSVRC2012_val_00005057.JPEG -n01860187/ILSVRC2012_val_00030887.JPEG -n01871265/ILSVRC2012_val_00002625.JPEG -n04599235/ILSVRC2012_val_00015111.JPEG -n04041544/ILSVRC2012_val_00038785.JPEG -n02484975/ILSVRC2012_val_00002767.JPEG -n04592741/ILSVRC2012_val_00027706.JPEG -n03933933/ILSVRC2012_val_00046001.JPEG -n04067472/ILSVRC2012_val_00032026.JPEG -n04606251/ILSVRC2012_val_00009289.JPEG -n02687172/ILSVRC2012_val_00023116.JPEG -n02093256/ILSVRC2012_val_00000248.JPEG -n03876231/ILSVRC2012_val_00031812.JPEG -n02950826/ILSVRC2012_val_00034326.JPEG -n01776313/ILSVRC2012_val_00001283.JPEG -n09399592/ILSVRC2012_val_00033587.JPEG -n03691459/ILSVRC2012_val_00041210.JPEG -n02013706/ILSVRC2012_val_00039389.JPEG -n04208210/ILSVRC2012_val_00049240.JPEG -n01740131/ILSVRC2012_val_00043694.JPEG -n03794056/ILSVRC2012_val_00002087.JPEG -n03956157/ILSVRC2012_val_00019543.JPEG -n02091244/ILSVRC2012_val_00012149.JPEG -n02028035/ILSVRC2012_val_00038002.JPEG -n01685808/ILSVRC2012_val_00042202.JPEG -n02422106/ILSVRC2012_val_00010317.JPEG -n02090721/ILSVRC2012_val_00022071.JPEG -n02988304/ILSVRC2012_val_00013108.JPEG -n03769881/ILSVRC2012_val_00042007.JPEG -n04372370/ILSVRC2012_val_00036463.JPEG -n13133613/ILSVRC2012_val_00015477.JPEG -n04486054/ILSVRC2012_val_00035081.JPEG -n01491361/ILSVRC2012_val_00041635.JPEG -n02123045/ILSVRC2012_val_00002823.JPEG -n02086910/ILSVRC2012_val_00001389.JPEG -n03447447/ILSVRC2012_val_00010200.JPEG -n02403003/ILSVRC2012_val_00041495.JPEG -n04311174/ILSVRC2012_val_00000842.JPEG -n04228054/ILSVRC2012_val_00036197.JPEG -n04209239/ILSVRC2012_val_00035393.JPEG -n02091467/ILSVRC2012_val_00033843.JPEG -n01695060/ILSVRC2012_val_00003865.JPEG -n02113186/ILSVRC2012_val_00020270.JPEG -n02497673/ILSVRC2012_val_00014914.JPEG -n09193705/ILSVRC2012_val_00029172.JPEG -n02687172/ILSVRC2012_val_00013281.JPEG -n03633091/ILSVRC2012_val_00025920.JPEG -n07711569/ILSVRC2012_val_00006569.JPEG -n02410509/ILSVRC2012_val_00037054.JPEG -n03942813/ILSVRC2012_val_00025976.JPEG -n02006656/ILSVRC2012_val_00005379.JPEG -n02100877/ILSVRC2012_val_00041364.JPEG -n04376876/ILSVRC2012_val_00027991.JPEG -n02783161/ILSVRC2012_val_00015458.JPEG -n03954731/ILSVRC2012_val_00000645.JPEG -n03888605/ILSVRC2012_val_00031613.JPEG -n09246464/ILSVRC2012_val_00024359.JPEG -n02099849/ILSVRC2012_val_00006078.JPEG -n03201208/ILSVRC2012_val_00030447.JPEG -n07720875/ILSVRC2012_val_00009973.JPEG -n02206856/ILSVRC2012_val_00035503.JPEG -n04409515/ILSVRC2012_val_00000397.JPEG -n12057211/ILSVRC2012_val_00015582.JPEG -n02056570/ILSVRC2012_val_00027559.JPEG -n01872401/ILSVRC2012_val_00044584.JPEG -n02480495/ILSVRC2012_val_00035901.JPEG -n03788365/ILSVRC2012_val_00024288.JPEG -n01871265/ILSVRC2012_val_00033331.JPEG -n04179913/ILSVRC2012_val_00037030.JPEG -n02099601/ILSVRC2012_val_00029751.JPEG -n02793495/ILSVRC2012_val_00044751.JPEG -n03207941/ILSVRC2012_val_00022852.JPEG -n02168699/ILSVRC2012_val_00006595.JPEG -n02786058/ILSVRC2012_val_00034958.JPEG -n02094258/ILSVRC2012_val_00040263.JPEG -n02397096/ILSVRC2012_val_00006975.JPEG -n07697537/ILSVRC2012_val_00043773.JPEG -n04118538/ILSVRC2012_val_00032103.JPEG -n03623198/ILSVRC2012_val_00020292.JPEG -n02111500/ILSVRC2012_val_00000174.JPEG -n07615774/ILSVRC2012_val_00030790.JPEG -n04251144/ILSVRC2012_val_00010908.JPEG -n03627232/ILSVRC2012_val_00023148.JPEG -n03967562/ILSVRC2012_val_00024414.JPEG -n03496892/ILSVRC2012_val_00037531.JPEG -n01945685/ILSVRC2012_val_00034015.JPEG -n04389033/ILSVRC2012_val_00030415.JPEG -n02423022/ILSVRC2012_val_00044771.JPEG -n02093991/ILSVRC2012_val_00025690.JPEG -n04153751/ILSVRC2012_val_00004966.JPEG -n09399592/ILSVRC2012_val_00003321.JPEG -n02093754/ILSVRC2012_val_00014730.JPEG -n03388183/ILSVRC2012_val_00047917.JPEG -n03791053/ILSVRC2012_val_00004465.JPEG -n04461696/ILSVRC2012_val_00025748.JPEG -n02006656/ILSVRC2012_val_00043081.JPEG -n03443371/ILSVRC2012_val_00044868.JPEG -n02398521/ILSVRC2012_val_00026103.JPEG -n01985128/ILSVRC2012_val_00025521.JPEG -n04141975/ILSVRC2012_val_00047207.JPEG -n03769881/ILSVRC2012_val_00012837.JPEG -n02783161/ILSVRC2012_val_00006972.JPEG -n03759954/ILSVRC2012_val_00036985.JPEG -n04039381/ILSVRC2012_val_00044918.JPEG -n04344873/ILSVRC2012_val_00049662.JPEG -n03100240/ILSVRC2012_val_00038876.JPEG -n02009912/ILSVRC2012_val_00026861.JPEG -n03095699/ILSVRC2012_val_00012534.JPEG -n04099969/ILSVRC2012_val_00047789.JPEG -n04265275/ILSVRC2012_val_00008244.JPEG -n01774750/ILSVRC2012_val_00005326.JPEG -n02086910/ILSVRC2012_val_00030141.JPEG -n02095314/ILSVRC2012_val_00010099.JPEG -n09288635/ILSVRC2012_val_00025861.JPEG -n04008634/ILSVRC2012_val_00018586.JPEG -n02782093/ILSVRC2012_val_00038687.JPEG -n04589890/ILSVRC2012_val_00017272.JPEG -n02086910/ILSVRC2012_val_00024887.JPEG -n03187595/ILSVRC2012_val_00037784.JPEG -n04162706/ILSVRC2012_val_00001792.JPEG -n03240683/ILSVRC2012_val_00019875.JPEG -n02093647/ILSVRC2012_val_00009033.JPEG -n04429376/ILSVRC2012_val_00048901.JPEG -n03255030/ILSVRC2012_val_00046720.JPEG -n01843065/ILSVRC2012_val_00033469.JPEG -n02098105/ILSVRC2012_val_00025970.JPEG -n03599486/ILSVRC2012_val_00029537.JPEG -n03958227/ILSVRC2012_val_00042740.JPEG -n02108089/ILSVRC2012_val_00025897.JPEG -n02113799/ILSVRC2012_val_00047597.JPEG -n02169497/ILSVRC2012_val_00017264.JPEG -n03770439/ILSVRC2012_val_00045468.JPEG -n02894605/ILSVRC2012_val_00043379.JPEG -n01687978/ILSVRC2012_val_00011448.JPEG -n02910353/ILSVRC2012_val_00049838.JPEG -n02895154/ILSVRC2012_val_00011775.JPEG -n04613696/ILSVRC2012_val_00009584.JPEG -n02165456/ILSVRC2012_val_00030921.JPEG -n02749479/ILSVRC2012_val_00039737.JPEG -n02107683/ILSVRC2012_val_00011491.JPEG -n02497673/ILSVRC2012_val_00036690.JPEG -n03785016/ILSVRC2012_val_00006596.JPEG -n04208210/ILSVRC2012_val_00040253.JPEG -n03775546/ILSVRC2012_val_00046554.JPEG -n02342885/ILSVRC2012_val_00015181.JPEG -n02074367/ILSVRC2012_val_00011012.JPEG -n01734418/ILSVRC2012_val_00012578.JPEG -n02086079/ILSVRC2012_val_00009403.JPEG -n03272010/ILSVRC2012_val_00021556.JPEG -n02666196/ILSVRC2012_val_00024965.JPEG -n02091467/ILSVRC2012_val_00046530.JPEG -n12620546/ILSVRC2012_val_00008895.JPEG -n02486261/ILSVRC2012_val_00035493.JPEG -n07579787/ILSVRC2012_val_00028525.JPEG -n03929855/ILSVRC2012_val_00010891.JPEG -n03220513/ILSVRC2012_val_00011990.JPEG -n02279972/ILSVRC2012_val_00024165.JPEG -n03661043/ILSVRC2012_val_00028061.JPEG -n03530642/ILSVRC2012_val_00042804.JPEG -n02917067/ILSVRC2012_val_00017843.JPEG -n02134084/ILSVRC2012_val_00012893.JPEG -n02097047/ILSVRC2012_val_00015136.JPEG -n02397096/ILSVRC2012_val_00020202.JPEG -n02097209/ILSVRC2012_val_00023893.JPEG -n03793489/ILSVRC2012_val_00014424.JPEG -n01514668/ILSVRC2012_val_00024957.JPEG -n03584254/ILSVRC2012_val_00028974.JPEG -n02111889/ILSVRC2012_val_00039709.JPEG -n02486261/ILSVRC2012_val_00001236.JPEG -n02129165/ILSVRC2012_val_00047193.JPEG -n03871628/ILSVRC2012_val_00022943.JPEG -n03759954/ILSVRC2012_val_00035587.JPEG -n02807133/ILSVRC2012_val_00037533.JPEG -n01532829/ILSVRC2012_val_00038091.JPEG -n01496331/ILSVRC2012_val_00047080.JPEG -n02526121/ILSVRC2012_val_00030260.JPEG -n04548362/ILSVRC2012_val_00047367.JPEG -n04238763/ILSVRC2012_val_00043419.JPEG -n02870880/ILSVRC2012_val_00015895.JPEG -n02795169/ILSVRC2012_val_00037322.JPEG -n04201297/ILSVRC2012_val_00039751.JPEG -n04505470/ILSVRC2012_val_00013404.JPEG -n02749479/ILSVRC2012_val_00016457.JPEG -n12620546/ILSVRC2012_val_00011901.JPEG -n02417914/ILSVRC2012_val_00034916.JPEG -n03125729/ILSVRC2012_val_00015525.JPEG -n02113186/ILSVRC2012_val_00003368.JPEG -n02483708/ILSVRC2012_val_00022740.JPEG -n02930766/ILSVRC2012_val_00040571.JPEG -n02071294/ILSVRC2012_val_00042590.JPEG -n01871265/ILSVRC2012_val_00007884.JPEG -n02493793/ILSVRC2012_val_00047641.JPEG -n02107142/ILSVRC2012_val_00040464.JPEG -n03680355/ILSVRC2012_val_00036064.JPEG -n02165105/ILSVRC2012_val_00005482.JPEG -n02100735/ILSVRC2012_val_00021191.JPEG -n03930313/ILSVRC2012_val_00015192.JPEG -n02097298/ILSVRC2012_val_00032291.JPEG -n04560804/ILSVRC2012_val_00029830.JPEG -n02105641/ILSVRC2012_val_00028477.JPEG -n02111500/ILSVRC2012_val_00043940.JPEG -n04487081/ILSVRC2012_val_00011148.JPEG -n03424325/ILSVRC2012_val_00009315.JPEG -n02500267/ILSVRC2012_val_00010932.JPEG -n04263257/ILSVRC2012_val_00024365.JPEG -n03492542/ILSVRC2012_val_00025010.JPEG -n02834397/ILSVRC2012_val_00011752.JPEG -n01981276/ILSVRC2012_val_00006315.JPEG -n04467665/ILSVRC2012_val_00008391.JPEG -n02088632/ILSVRC2012_val_00029334.JPEG -n03126707/ILSVRC2012_val_00030723.JPEG -n03954731/ILSVRC2012_val_00034134.JPEG -n01534433/ILSVRC2012_val_00003878.JPEG -n01944390/ILSVRC2012_val_00001959.JPEG -n03379051/ILSVRC2012_val_00044073.JPEG -n02268443/ILSVRC2012_val_00018415.JPEG -n03908618/ILSVRC2012_val_00016007.JPEG -n04550184/ILSVRC2012_val_00018341.JPEG -n03947888/ILSVRC2012_val_00036816.JPEG -n02074367/ILSVRC2012_val_00001608.JPEG -n07753113/ILSVRC2012_val_00037431.JPEG -n02012849/ILSVRC2012_val_00034198.JPEG -n02488291/ILSVRC2012_val_00003539.JPEG -n03240683/ILSVRC2012_val_00026560.JPEG -n03476991/ILSVRC2012_val_00003174.JPEG -n02966687/ILSVRC2012_val_00003360.JPEG -n01847000/ILSVRC2012_val_00045692.JPEG -n02099849/ILSVRC2012_val_00027174.JPEG -n04370456/ILSVRC2012_val_00011887.JPEG -n03188531/ILSVRC2012_val_00024563.JPEG -n02093991/ILSVRC2012_val_00016668.JPEG -n02280649/ILSVRC2012_val_00039030.JPEG -n01531178/ILSVRC2012_val_00029581.JPEG -n03733131/ILSVRC2012_val_00027769.JPEG -n01833805/ILSVRC2012_val_00023796.JPEG -n02177972/ILSVRC2012_val_00044574.JPEG -n03980874/ILSVRC2012_val_00028456.JPEG -n02090721/ILSVRC2012_val_00001808.JPEG -n01484850/ILSVRC2012_val_00002752.JPEG -n03832673/ILSVRC2012_val_00016121.JPEG -n02445715/ILSVRC2012_val_00022864.JPEG -n02101388/ILSVRC2012_val_00027846.JPEG -n02879718/ILSVRC2012_val_00041962.JPEG -n02977058/ILSVRC2012_val_00041758.JPEG -n04273569/ILSVRC2012_val_00036660.JPEG -n03776460/ILSVRC2012_val_00028000.JPEG -n02981792/ILSVRC2012_val_00006558.JPEG -n02114548/ILSVRC2012_val_00045961.JPEG -n02002724/ILSVRC2012_val_00031399.JPEG -n02791270/ILSVRC2012_val_00045504.JPEG -n02088364/ILSVRC2012_val_00019187.JPEG -n03188531/ILSVRC2012_val_00009299.JPEG -n02860847/ILSVRC2012_val_00018212.JPEG -n02727426/ILSVRC2012_val_00007765.JPEG -n04532106/ILSVRC2012_val_00043620.JPEG -n02797295/ILSVRC2012_val_00019109.JPEG -n02526121/ILSVRC2012_val_00037407.JPEG -n02860847/ILSVRC2012_val_00013695.JPEG -n09193705/ILSVRC2012_val_00025916.JPEG -n04243546/ILSVRC2012_val_00019474.JPEG -n01829413/ILSVRC2012_val_00044317.JPEG -n03976467/ILSVRC2012_val_00042635.JPEG -n04328186/ILSVRC2012_val_00010517.JPEG -n04133789/ILSVRC2012_val_00015569.JPEG -n03026506/ILSVRC2012_val_00032846.JPEG -n02110958/ILSVRC2012_val_00013653.JPEG -n02672831/ILSVRC2012_val_00028627.JPEG -n02869837/ILSVRC2012_val_00015589.JPEG -n03240683/ILSVRC2012_val_00009606.JPEG -n03045698/ILSVRC2012_val_00040125.JPEG -n02090721/ILSVRC2012_val_00014913.JPEG -n02107908/ILSVRC2012_val_00044380.JPEG -n02814533/ILSVRC2012_val_00027081.JPEG -n04310018/ILSVRC2012_val_00043296.JPEG -n04204347/ILSVRC2012_val_00040297.JPEG -n03617480/ILSVRC2012_val_00026587.JPEG -n02089973/ILSVRC2012_val_00038944.JPEG -n09193705/ILSVRC2012_val_00011422.JPEG -n01855672/ILSVRC2012_val_00028438.JPEG -n03000247/ILSVRC2012_val_00027729.JPEG -n01514668/ILSVRC2012_val_00011403.JPEG -n04179913/ILSVRC2012_val_00042253.JPEG -n03657121/ILSVRC2012_val_00043055.JPEG -n03874599/ILSVRC2012_val_00023222.JPEG -n02939185/ILSVRC2012_val_00035031.JPEG -n02099429/ILSVRC2012_val_00018862.JPEG -n02177972/ILSVRC2012_val_00034203.JPEG -n04536866/ILSVRC2012_val_00026957.JPEG -n02138441/ILSVRC2012_val_00001742.JPEG -n03485794/ILSVRC2012_val_00044989.JPEG -n11879895/ILSVRC2012_val_00003367.JPEG -n03697007/ILSVRC2012_val_00032905.JPEG -n03483316/ILSVRC2012_val_00031410.JPEG -n02168699/ILSVRC2012_val_00028427.JPEG -n02125311/ILSVRC2012_val_00015558.JPEG -n02667093/ILSVRC2012_val_00035834.JPEG -n02965783/ILSVRC2012_val_00048270.JPEG -n07579787/ILSVRC2012_val_00039992.JPEG -n02110958/ILSVRC2012_val_00013670.JPEG -n02128757/ILSVRC2012_val_00010472.JPEG -n07747607/ILSVRC2012_val_00043565.JPEG -n02074367/ILSVRC2012_val_00039158.JPEG -n03259280/ILSVRC2012_val_00007721.JPEG -n03494278/ILSVRC2012_val_00024537.JPEG -n04579145/ILSVRC2012_val_00021588.JPEG -n02226429/ILSVRC2012_val_00033360.JPEG -n04259630/ILSVRC2012_val_00044965.JPEG -n02669723/ILSVRC2012_val_00016186.JPEG -n07753592/ILSVRC2012_val_00038819.JPEG -n03924679/ILSVRC2012_val_00026874.JPEG -n03777754/ILSVRC2012_val_00025706.JPEG -n04548280/ILSVRC2012_val_00018976.JPEG -n02085782/ILSVRC2012_val_00046629.JPEG -n01641577/ILSVRC2012_val_00011664.JPEG -n04548362/ILSVRC2012_val_00046586.JPEG -n02115641/ILSVRC2012_val_00012401.JPEG -n03240683/ILSVRC2012_val_00042101.JPEG -n02102973/ILSVRC2012_val_00038848.JPEG -n13044778/ILSVRC2012_val_00011025.JPEG -n01608432/ILSVRC2012_val_00015746.JPEG -n02098286/ILSVRC2012_val_00024637.JPEG -n03777568/ILSVRC2012_val_00003977.JPEG -n03617480/ILSVRC2012_val_00019061.JPEG -n03047690/ILSVRC2012_val_00040449.JPEG -n01824575/ILSVRC2012_val_00046710.JPEG -n01984695/ILSVRC2012_val_00002243.JPEG -n01728920/ILSVRC2012_val_00013215.JPEG -n07753275/ILSVRC2012_val_00013450.JPEG -n01704323/ILSVRC2012_val_00027700.JPEG -n09288635/ILSVRC2012_val_00035380.JPEG -n01632777/ILSVRC2012_val_00039922.JPEG -n02110063/ILSVRC2012_val_00024218.JPEG -n02172182/ILSVRC2012_val_00012986.JPEG -n02497673/ILSVRC2012_val_00005026.JPEG -n02100877/ILSVRC2012_val_00003516.JPEG -n13037406/ILSVRC2012_val_00006266.JPEG -n07802026/ILSVRC2012_val_00029143.JPEG -n02326432/ILSVRC2012_val_00003697.JPEG -n01734418/ILSVRC2012_val_00026589.JPEG -n02056570/ILSVRC2012_val_00020888.JPEG -n01677366/ILSVRC2012_val_00012156.JPEG -n04120489/ILSVRC2012_val_00026868.JPEG -n03290653/ILSVRC2012_val_00021387.JPEG -n02013706/ILSVRC2012_val_00025929.JPEG -n03062245/ILSVRC2012_val_00023646.JPEG -n03485407/ILSVRC2012_val_00028176.JPEG -n01682714/ILSVRC2012_val_00035598.JPEG -n03467068/ILSVRC2012_val_00014231.JPEG -n03891251/ILSVRC2012_val_00029949.JPEG -n02834397/ILSVRC2012_val_00027813.JPEG -n09288635/ILSVRC2012_val_00005608.JPEG -n02165456/ILSVRC2012_val_00029086.JPEG -n01806143/ILSVRC2012_val_00035287.JPEG -n01491361/ILSVRC2012_val_00023935.JPEG -n02108551/ILSVRC2012_val_00044714.JPEG -n02085936/ILSVRC2012_val_00040150.JPEG -n04613696/ILSVRC2012_val_00013677.JPEG -n02817516/ILSVRC2012_val_00027214.JPEG -n09399592/ILSVRC2012_val_00016654.JPEG -n03372029/ILSVRC2012_val_00014577.JPEG -n01484850/ILSVRC2012_val_00037998.JPEG -n02113799/ILSVRC2012_val_00026858.JPEG -n09399592/ILSVRC2012_val_00025481.JPEG -n07892512/ILSVRC2012_val_00024477.JPEG -n01498041/ILSVRC2012_val_00042547.JPEG -n03131574/ILSVRC2012_val_00016481.JPEG -n01687978/ILSVRC2012_val_00033596.JPEG -n02167151/ILSVRC2012_val_00022273.JPEG -n04238763/ILSVRC2012_val_00007304.JPEG -n03868863/ILSVRC2012_val_00029486.JPEG -n10148035/ILSVRC2012_val_00000341.JPEG -n07715103/ILSVRC2012_val_00042805.JPEG -n03724870/ILSVRC2012_val_00048196.JPEG -n03388183/ILSVRC2012_val_00005686.JPEG -n02870880/ILSVRC2012_val_00020066.JPEG -n04273569/ILSVRC2012_val_00038450.JPEG -n04525305/ILSVRC2012_val_00014061.JPEG -n01798484/ILSVRC2012_val_00004256.JPEG -n02793495/ILSVRC2012_val_00020925.JPEG -n01981276/ILSVRC2012_val_00016333.JPEG -n01729977/ILSVRC2012_val_00005357.JPEG -n03127747/ILSVRC2012_val_00047186.JPEG -n02102973/ILSVRC2012_val_00030527.JPEG -n03100240/ILSVRC2012_val_00022130.JPEG -n03961711/ILSVRC2012_val_00016064.JPEG -n03657121/ILSVRC2012_val_00027626.JPEG -n04557648/ILSVRC2012_val_00046459.JPEG -n02113023/ILSVRC2012_val_00027856.JPEG -n04133789/ILSVRC2012_val_00045999.JPEG -n04435653/ILSVRC2012_val_00020316.JPEG -n02687172/ILSVRC2012_val_00004089.JPEG -n02834397/ILSVRC2012_val_00027477.JPEG -n06596364/ILSVRC2012_val_00001725.JPEG -n03075370/ILSVRC2012_val_00020842.JPEG -n03775546/ILSVRC2012_val_00028647.JPEG -n01698640/ILSVRC2012_val_00020290.JPEG -n10565667/ILSVRC2012_val_00013619.JPEG -n04141975/ILSVRC2012_val_00048812.JPEG -n02106550/ILSVRC2012_val_00043222.JPEG -n02096294/ILSVRC2012_val_00026427.JPEG -n02486261/ILSVRC2012_val_00024107.JPEG -n02091635/ILSVRC2012_val_00022137.JPEG -n03930630/ILSVRC2012_val_00023096.JPEG -n04428191/ILSVRC2012_val_00015883.JPEG -n02454379/ILSVRC2012_val_00045646.JPEG -n04141076/ILSVRC2012_val_00036869.JPEG -n03773504/ILSVRC2012_val_00031503.JPEG -n04285008/ILSVRC2012_val_00003896.JPEG -n04277352/ILSVRC2012_val_00001240.JPEG -n03792782/ILSVRC2012_val_00018304.JPEG -n04548280/ILSVRC2012_val_00007256.JPEG -n01739381/ILSVRC2012_val_00046490.JPEG -n04350905/ILSVRC2012_val_00025482.JPEG -n03218198/ILSVRC2012_val_00002266.JPEG -n02536864/ILSVRC2012_val_00006292.JPEG -n04310018/ILSVRC2012_val_00038885.JPEG -n02123045/ILSVRC2012_val_00004422.JPEG -n04579145/ILSVRC2012_val_00021950.JPEG -n07720875/ILSVRC2012_val_00048089.JPEG -n02788148/ILSVRC2012_val_00037788.JPEG -n04552348/ILSVRC2012_val_00012932.JPEG -n01728920/ILSVRC2012_val_00018041.JPEG -n01667778/ILSVRC2012_val_00031793.JPEG -n06596364/ILSVRC2012_val_00012581.JPEG -n02363005/ILSVRC2012_val_00029016.JPEG -n04591157/ILSVRC2012_val_00006154.JPEG -n04041544/ILSVRC2012_val_00026300.JPEG -n03733281/ILSVRC2012_val_00012842.JPEG -n03627232/ILSVRC2012_val_00037616.JPEG -n07717556/ILSVRC2012_val_00020363.JPEG -n02422699/ILSVRC2012_val_00032385.JPEG -n02791124/ILSVRC2012_val_00004679.JPEG -n01824575/ILSVRC2012_val_00033888.JPEG -n02807133/ILSVRC2012_val_00048300.JPEG -n02510455/ILSVRC2012_val_00008673.JPEG -n12620546/ILSVRC2012_val_00024830.JPEG -n03372029/ILSVRC2012_val_00003736.JPEG -n03207743/ILSVRC2012_val_00030446.JPEG -n04461696/ILSVRC2012_val_00039723.JPEG -n15075141/ILSVRC2012_val_00041217.JPEG -n03691459/ILSVRC2012_val_00002577.JPEG -n07747607/ILSVRC2012_val_00049490.JPEG -n03759954/ILSVRC2012_val_00021431.JPEG -n02281787/ILSVRC2012_val_00043381.JPEG -n03400231/ILSVRC2012_val_00014537.JPEG -n02939185/ILSVRC2012_val_00014420.JPEG -n13133613/ILSVRC2012_val_00025432.JPEG \ No newline at end of file diff --git a/robustbench/leaderboard/__init__.py b/robustbench/leaderboard/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/robustbench/leaderboard/leaderboard.html.j2 b/robustbench/leaderboard/leaderboard.html.j2 deleted file mode 100644 index 817897ce..00000000 --- a/robustbench/leaderboard/leaderboard.html.j2 +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - {% if threat_model != "corruptions" %} - - - - {% endif %} - {% if threat_model == "corruptions" %} - - {% endif %} - - - - - - - {% for model in models %} - - - - - - {% if threat_model != "corruptions" %} - - - {% endif %} - - - - - {% endfor %} - -
RankMethod - Standard
- accuracy -
- AutoAttack
- robust
- accuracy -
- Best known
- robust
- accuracy -
- AA eval.
- potentially
- unreliable -
- Robust
- accuracy -
Extra
data
ArchitectureVenue
{{ loop.index }} - {{ model.name }} - {% if model.footnote is defined and model.footnote != None %} -
- - {{ model.footnote }} - - {% endif %} -
{{ model.clean_acc }}%{{ model[acc_field] }}%{{ model.external if model.external is defined and model.external else model[acc_field]}}%{{ "Unknown" if model.unreliable is not defined else ("
" if model.unreliable else "
×
") }}
{{ "☑" if model.additional_data else "×" }}{{ model.architecture }}{{ model.venue }}
- \ No newline at end of file diff --git a/robustbench/leaderboard/template.py b/robustbench/leaderboard/template.py deleted file mode 100644 index ba72642d..00000000 --- a/robustbench/leaderboard/template.py +++ /dev/null @@ -1,103 +0,0 @@ -import json -from argparse import ArgumentParser -from pathlib import Path -from typing import Union - -from jinja2 import Environment, PackageLoader, select_autoescape - -from robustbench.model_zoo.enums import BenchmarkDataset, ThreatModel -from robustbench.utils import ACC_FIELDS - - -def generate_leaderboard(dataset: Union[str, BenchmarkDataset], - threat_model: Union[str, ThreatModel], - models_folder: str = "model_info") -> str: - """Prints the HTML leaderboard starting from the .json results. - - The result is a that can be put directly into the RobustBench index.html page, - and looks the same as the tables that are already existing. - - The .json results must have the same structure as the following: - `` - { - "link": "https://arxiv.org/abs/2003.09461", - "name": "Adversarial Robustness on In- and Out-Distribution Improves Explainability", - "authors": "Maximilian Augustin, Alexander Meinke, Matthias Hein", - "additional_data": true, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ECCV 2020", - "architecture": "ResNet-50", - "eps": "0.5", - "clean_acc": "91.08", - "reported": "73.27", - "autoattack_acc": "72.91" - } - `` - - If the model is robust to common corruptions, then the "autoattack_acc" field should be - "corruptions_acc". - - :param dataset: The dataset of the wanted leaderboard. - :param threat_model: The threat model of the wanted leaderboard. - :param models_folder: The base folder of the model jsons (e.g. our "model_info" folder). - - :return: The resulting HTML table. - """ - dataset_: BenchmarkDataset = BenchmarkDataset(dataset) - threat_model_: ThreatModel = ThreatModel(threat_model) - - folder = Path(models_folder) / dataset_.value / threat_model_.value - - acc_field = ACC_FIELDS[threat_model_] - - models = [] - for model_path in folder.glob("*.json"): - with open(model_path) as fp: - model = json.load(fp) - - models.append(model) - - #models.sort(key=lambda x: x[acc_field], reverse=True) - def get_key(x): - if isinstance(acc_field, str): - return float(x[acc_field]) - else: - for k in acc_field: - if k in x.keys(): - return float(x[k]) - models.sort(key=get_key, reverse=True) - - env = Environment(loader=PackageLoader('robustbench', 'leaderboard'), - autoescape=select_autoescape(['html', 'xml'])) - - template = env.get_template('leaderboard.html.j2') - - result = template.render(threat_model=threat_model, dataset=dataset, - models=models, acc_field=acc_field if isinstance(acc_field, str) else acc_field[-1]) - print(result) - return result - - -if __name__ == "__main__": - parser = ArgumentParser() - parser.add_argument( - "--dataset", - type=str, - default="cifar10", - help="The dataset of the desired leaderboard." - ) - parser.add_argument( - "--threat_model", - type=str, - help="The threat model of the desired leaderboard." - ) - parser.add_argument( - "--models_folder", - type=str, - default="model_info", - help="The base folder of the model jsons (e.g. our 'model_info' folder)" - ) - args = parser.parse_args() - - generate_leaderboard(args.dataset, args.threat_model, args.models_folder) diff --git a/robustbench/loaders.py b/robustbench/loaders.py deleted file mode 100644 index e050b14d..00000000 --- a/robustbench/loaders.py +++ /dev/null @@ -1,215 +0,0 @@ -""" -This file is based on the code from https://github.com/pytorch/vision/blob/master/torchvision/datasets/folder.py. -""" -import pkg_resources - -from torchvision.datasets.vision import VisionDataset - -import torch -import torch.utils.data as data -import torchvision.transforms as transforms - -from PIL import Image - -import os -import os.path -import sys - - -def make_custom_dataset(root, path_imgs, class_to_idx): - with open(pkg_resources.resource_filename(__name__, path_imgs), 'r') as f: - fnames = f.readlines() - images = [(os.path.join(root, - c.split('\n')[0]), class_to_idx[c.split('/')[0]]) - for c in fnames] - - return images - - -class CustomDatasetFolder(VisionDataset): - """A generic data loader where the samples are arranged in this way: :: - root/class_x/xxx.ext - root/class_x/xxy.ext - root/class_x/xxz.ext - root/class_y/123.ext - root/class_y/nsdf3.ext - root/class_y/asd932_.ext - Args: - root (string): Root directory path. - loader (callable): A function to load a sample given its path. - extensions (tuple[string]): A list of allowed extensions. - both extensions and is_valid_file should not be passed. - transform (callable, optional): A function/transform that takes in - a sample and returns a transformed version. - E.g, ``transforms.RandomCrop`` for images. - target_transform (callable, optional): A function/transform that takes - in the target and transforms it. - is_valid_file (callable, optional): A function that takes path of an Image file - and check if the file is a valid_file (used to check of corrupt files) - both extensions and is_valid_file should not be passed. - Attributes: - classes (list): List of the class names. - class_to_idx (dict): Dict with items (class_name, class_index). - samples (list): List of (sample path, class_index) tuples - targets (list): The class_index value for each image in the dataset - """ - - def __init__(self, - root, - loader, - extensions=None, - transform=None, - target_transform=None, - is_valid_file=None): - super(CustomDatasetFolder, self).__init__(root) - self.transform = transform - self.target_transform = target_transform - classes, class_to_idx = self._find_classes(self.root) - samples = make_custom_dataset( - self.root, 'helper_files/imagenet_test_image_ids.txt', - class_to_idx) - if len(samples) == 0: - raise (RuntimeError("Found 0 files in subfolders of: " + - self.root + "\n" - "Supported extensions are: " + - ",".join(extensions))) - - self.loader = loader - self.extensions = extensions - - self.classes = classes - self.class_to_idx = class_to_idx - self.samples = samples - self.targets = [s[1] for s in samples] - - def _find_classes(self, dir): - """ - Finds the class folders in a dataset. - Args: - dir (string): Root directory path. - Returns: - tuple: (classes, class_to_idx) where classes are relative to (dir), and class_to_idx is a dictionary. - Ensures: - No class is a subdirectory of another. - """ - if sys.version_info >= (3, 5): - # Faster and available in Python 3.5 and above - classes = [d.name for d in os.scandir(dir) if d.is_dir()] - else: - classes = [ - d for d in os.listdir(dir) - if os.path.isdir(os.path.join(dir, d)) - ] - classes.sort() - class_to_idx = {classes[i]: i for i in range(len(classes))} - return classes, class_to_idx - - def __getitem__(self, index): - """ - Args: - index (int): Index - Returns: - tuple: (sample, target) where target is class_index of the target class. - """ - path, target = self.samples[index] - sample = self.loader(path) - if self.transform is not None: - sample = self.transform(sample) - if self.target_transform is not None: - target = self.target_transform(target) - return sample, target, path - - def __len__(self): - return len(self.samples) - - -IMG_EXTENSIONS = ('.jpg', '.jpeg', '.png', '.ppm', '.bmp', '.pgm', '.tif', - '.tiff', '.webp') - - -def pil_loader(path): - # open path as file to avoid ResourceWarning (https://github.com/python-pillow/Pillow/issues/835) - with open(path, 'rb') as f: - img = Image.open(f) - return img.convert('RGB') - - -def accimage_loader(path): - import accimage - try: - return accimage.Image(path) - except IOError: - # Potentially a decoding problem, fall back to PIL.Image - return pil_loader(path) - - -def default_loader(path): - from torchvision import get_image_backend - if get_image_backend() == 'accimage': - return accimage_loader(path) - else: - return pil_loader(path) - - -class CustomImageFolder(CustomDatasetFolder): - """A generic data loader where the images are arranged in this way: :: - root/dog/xxx.png - root/dog/xxy.png - root/dog/xxz.png - root/cat/123.png - root/cat/nsdf3.png - root/cat/asd932_.png - Args: - root (string): Root directory path. - transform (callable, optional): A function/transform that takes in an PIL image - and returns a transformed version. E.g, ``transforms.RandomCrop`` - target_transform (callable, optional): A function/transform that takes in the - target and transforms it. - loader (callable, optional): A function to load an image given its path. - is_valid_file (callable, optional): A function that takes path of an Image file - and check if the file is a valid_file (used to check of corrupt files) - Attributes: - classes (list): List of the class names. - class_to_idx (dict): Dict with items (class_name, class_index). - imgs (list): List of (image path, class_index) tuples - """ - - def __init__(self, - root, - transform=None, - target_transform=None, - loader=default_loader, - is_valid_file=None): - super(CustomImageFolder, - self).__init__(root, - loader, - IMG_EXTENSIONS if is_valid_file is None else None, - transform=transform, - target_transform=target_transform, - is_valid_file=is_valid_file) - - self.imgs = self.samples - - -if __name__ == '__main__': - data_dir = '~/imagenet/val' - imagenet = CustomImageFolder( - data_dir, - transforms.Compose([ - transforms.Resize(256), - transforms.CenterCrop(224), - transforms.ToTensor() - ])) - - torch.manual_seed(0) - - test_loader = data.DataLoader(imagenet, - batch_size=5000, - shuffle=True, - num_workers=30) - - x, y, path = next(iter(test_loader)) - - with open('path_imgs_2.txt', 'w') as f: - f.write('\n'.join(path)) - f.flush() diff --git a/robustbench/model_info/cifar10/L2/Augustin2020Adversarial.json b/robustbench/model_info/cifar10/L2/Augustin2020Adversarial.json deleted file mode 100644 index fb4d8553..00000000 --- a/robustbench/model_info/cifar10/L2/Augustin2020Adversarial.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2003.09461", - "name": "Adversarial Robustness on In- and Out-Distribution Improves Explainability", - "authors": "Maximilian Augustin, Alexander Meinke, Matthias Hein", - "additional_data": true, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ECCV 2020", - "architecture": "ResNet-50", - "eps": "0.5", - "clean_acc": "91.08", - "reported": "73.27", - "autoattack_acc": "72.91", - "footnote": "Extra data used only as OOD dataset." -} diff --git a/robustbench/model_info/cifar10/L2/Augustin2020Adversarial_34_10.json b/robustbench/model_info/cifar10/L2/Augustin2020Adversarial_34_10.json deleted file mode 100644 index 03eca715..00000000 --- a/robustbench/model_info/cifar10/L2/Augustin2020Adversarial_34_10.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2003.09461", - "name": "Adversarial Robustness on In- and Out-Distribution Improves Explainability", - "authors": "Maximilian Augustin, Alexander Meinke, Matthias Hein", - "additional_data": true, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ECCV 2020", - "architecture": "WideResNet-34-10", - "eps": "0.5", - "clean_acc": "92.23", - "reported": "76.25", - "autoattack_acc": "76.25", - "footnote": "Extra data used only as OOD dataset.", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/L2/Augustin2020Adversarial_34_10_extra.json b/robustbench/model_info/cifar10/L2/Augustin2020Adversarial_34_10_extra.json deleted file mode 100644 index 265e8ec7..00000000 --- a/robustbench/model_info/cifar10/L2/Augustin2020Adversarial_34_10_extra.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2003.09461", - "name": "Adversarial Robustness on In- and Out-Distribution Improves Explainability", - "authors": "Maximilian Augustin, Alexander Meinke, Matthias Hein", - "additional_data": true, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ECCV 2020", - "architecture": "WideResNet-34-10", - "eps": "0.5", - "clean_acc": "93.96", - "reported": "78.79", - "autoattack_acc": "78.79", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/L2/Ding2020MMA.json b/robustbench/model_info/cifar10/L2/Ding2020MMA.json deleted file mode 100644 index c0fe401c..00000000 --- a/robustbench/model_info/cifar10/L2/Ding2020MMA.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://openreview.net/forum?id=HkeryxBtPB", - "name": "MMA Training: Direct Input Space Margin Maximization through Adversarial Training", - "authors": "Gavin Weiguang Ding, Yash Sharma, Kry Yik Chau Lui, Ruitong Huang", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ICLR 2020", - "architecture": "WideResNet-28-4", - "eps": "0.5", - "clean_acc": "88.02", - "reported": "66.18", - "autoattack_acc": "66.09", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/L2/Engstrom2019Robustness.json b/robustbench/model_info/cifar10/L2/Engstrom2019Robustness.json deleted file mode 100644 index 899a598d..00000000 --- a/robustbench/model_info/cifar10/L2/Engstrom2019Robustness.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://github.com/MadryLab/robustness", - "name": "Robustness library", - "authors": "Logan Engstrom, Andrew Ilyas, Hadi Salman, Shibani Santurkar, Dimitris Tsipras", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "GitHub,
Sep 2019", - "architecture": "ResNet-50", - "eps": "0.5", - "clean_acc": "90.83", - "reported": "70.11", - "autoattack_acc": "69.24", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/L2/Gowal2020Uncovering.json b/robustbench/model_info/cifar10/L2/Gowal2020Uncovering.json deleted file mode 100644 index 755b77d1..00000000 --- a/robustbench/model_info/cifar10/L2/Gowal2020Uncovering.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2010.03593", - "name": "Uncovering the Limits of Adversarial Training against Norm-Bounded Adversarial Examples", - "authors": "Sven Gowal, Chongli Qin, Jonathan Uesato, Timothy Mann, Pushmeet Kohli", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Oct 2020", - "architecture": "WideResNet-70-16", - "eps": "0.5", - "clean_acc": "90.90", - "reported": "74.50", - "autoattack_acc": "74.50", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/L2/Gowal2020Uncovering_extra.json b/robustbench/model_info/cifar10/L2/Gowal2020Uncovering_extra.json deleted file mode 100644 index b517f83d..00000000 --- a/robustbench/model_info/cifar10/L2/Gowal2020Uncovering_extra.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2010.03593", - "name": "Uncovering the Limits of Adversarial Training against Norm-Bounded Adversarial Examples", - "authors": "Sven Gowal, Chongli Qin, Jonathan Uesato, Timothy Mann, Pushmeet Kohli", - "additional_data": true, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Oct 2020", - "architecture": "WideResNet-70-16", - "eps": "0.5", - "clean_acc": "94.74", - "reported": "80.53", - "autoattack_acc": "80.53", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/L2/Rade2021Helper_R18_ddpm.json b/robustbench/model_info/cifar10/L2/Rade2021Helper_R18_ddpm.json deleted file mode 100644 index 6cb0db77..00000000 --- a/robustbench/model_info/cifar10/L2/Rade2021Helper_R18_ddpm.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://openreview.net/forum?id=BuD2LmNaU3a", - "name": "Helper-based Adversarial Training: Reducing Excessive Margin to Achieve a Better Accuracy vs. Robustness Trade-off", - "authors": "Rahul Rade and Seyed-Mohsen Moosavi-Dezfooli", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "OpenReview, Jun 2021", - "architecture": "PreActResNet-18", - "eps": "0.5", - "clean_acc": "90.57", - "reported": "76.15", - "footnote": "It uses additional 1M synthetic images in training.", - "autoattack_acc": "76.15", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/L2/Rebuffi2021Fixing_28_10_cutmix_ddpm.json b/robustbench/model_info/cifar10/L2/Rebuffi2021Fixing_28_10_cutmix_ddpm.json deleted file mode 100644 index 1dce6285..00000000 --- a/robustbench/model_info/cifar10/L2/Rebuffi2021Fixing_28_10_cutmix_ddpm.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2103.01946", - "name": "Fixing Data Augmentation to Improve Adversarial Robustness", - "authors": "Sylvestre-Alvise Rebuffi, Sven Gowal, Dan A. Calian, Florian Stimberg, Olivia Wiles, Timothy Mann", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Mar 2021", - "architecture": "WideResNet-28-10", - "eps": "0.5", - "clean_acc": "91.79", - "reported": "78.80", - "footnote": "It uses additional 1M synthetic images in training.", - "autoattack_acc": "78.80", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/L2/Rebuffi2021Fixing_70_16_cutmix_ddpm.json b/robustbench/model_info/cifar10/L2/Rebuffi2021Fixing_70_16_cutmix_ddpm.json deleted file mode 100644 index a42dcbf7..00000000 --- a/robustbench/model_info/cifar10/L2/Rebuffi2021Fixing_70_16_cutmix_ddpm.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2103.01946", - "name": "Fixing Data Augmentation to Improve Adversarial Robustness", - "authors": "Sylvestre-Alvise Rebuffi, Sven Gowal, Dan A. Calian, Florian Stimberg, Olivia Wiles, Timothy Mann", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Mar 2021", - "architecture": "WideResNet-70-16", - "eps": "0.5", - "clean_acc": "92.41", - "reported": "80.42", - "footnote": "It uses additional 1M synthetic images in training.", - "autoattack_acc": "80.42", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/L2/Rebuffi2021Fixing_70_16_cutmix_extra.json b/robustbench/model_info/cifar10/L2/Rebuffi2021Fixing_70_16_cutmix_extra.json deleted file mode 100644 index 92dcb985..00000000 --- a/robustbench/model_info/cifar10/L2/Rebuffi2021Fixing_70_16_cutmix_extra.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2103.01946", - "name": "Fixing Data Augmentation to Improve Adversarial Robustness", - "authors": "Sylvestre-Alvise Rebuffi, Sven Gowal, Dan A. Calian, Florian Stimberg, Olivia Wiles, Timothy Mann", - "additional_data": true, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Mar 2021", - "architecture": "WideResNet-70-16", - "eps": "0.5", - "clean_acc": "95.74", - "reported": "82.32", - "footnote": "", - "autoattack_acc": "82.32", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/L2/Rebuffi2021Fixing_R18_cutmix_ddpm.json b/robustbench/model_info/cifar10/L2/Rebuffi2021Fixing_R18_cutmix_ddpm.json deleted file mode 100644 index 5e461cc8..00000000 --- a/robustbench/model_info/cifar10/L2/Rebuffi2021Fixing_R18_cutmix_ddpm.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2103.01946", - "name": "Fixing Data Augmentation to Improve Adversarial Robustness", - "authors": "Sylvestre-Alvise Rebuffi, Sven Gowal, Dan A. Calian, Florian Stimberg, Olivia Wiles, Timothy Mann", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Mar 2021", - "architecture": "PreActResNet-18", - "eps": "0.5", - "clean_acc": "90.33", - "reported": "75.86", - "footnote": "It uses additional 1M synthetic images in training.", - "autoattack_acc": "75.86", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/L2/Rice2020Overfitting.json b/robustbench/model_info/cifar10/L2/Rice2020Overfitting.json deleted file mode 100644 index 93b41489..00000000 --- a/robustbench/model_info/cifar10/L2/Rice2020Overfitting.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2002.11569", - "name": "Overfitting in adversarially robust deep learning", - "authors": "Leslie Rice, Eric Wong, J. Zico Kolter", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ICML 2020", - "architecture": "PreActResNet-18", - "eps": "0.5", - "clean_acc": "88.67", - "reported": "71.6", - "autoattack_acc": "67.68", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/L2/Rony2019Decoupling.json b/robustbench/model_info/cifar10/L2/Rony2019Decoupling.json deleted file mode 100644 index 03a7f12d..00000000 --- a/robustbench/model_info/cifar10/L2/Rony2019Decoupling.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "link": "https://arxiv.org/abs/1811.09600", - "name": "Decoupling Direction and Norm for Efficient Gradient-Based L2 Adversarial Attacks and Defenses", - "authors": "J\u00e9r\u00f4me Rony, Luiz G. Hafemann, Luiz S. Oliveira, Ismail Ben Ayed, Robert Sabourin, Eric Granger", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "CVPR 2019", - "architecture": "WideResNet-28-10", - "eps": "0.5", - "clean_acc": "89.05", - "reported": "67.6", - "autoattack_acc": "66.44" -} diff --git a/robustbench/model_info/cifar10/L2/Sehwag2021Proxy.json b/robustbench/model_info/cifar10/L2/Sehwag2021Proxy.json deleted file mode 100644 index 9a888fc6..00000000 --- a/robustbench/model_info/cifar10/L2/Sehwag2021Proxy.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2104.09425", - "name": "Robust Learning Meets Generative Models: Can Proxy Distributions Improve Adversarial Robustness?", - "authors": "Vikash Sehwag, Saeed Mahloujifar, Tinashe Handina, Sihui Dai, Chong Xiang, Mung Chiang, Prateek Mittal", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ICLR 2022", - "architecture": "WideResNet-34-10", - "eps": "0.5", - "clean_acc": "90.93", - "reported": "77.24", - "autoattack_acc": "77.24", - "footnote": "It uses additional 10M synthetic images in training.", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/L2/Sehwag2021Proxy_R18.json b/robustbench/model_info/cifar10/L2/Sehwag2021Proxy_R18.json deleted file mode 100644 index fae40335..00000000 --- a/robustbench/model_info/cifar10/L2/Sehwag2021Proxy_R18.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2104.09425", - "name": "Robust Learning Meets Generative Models: Can Proxy Distributions Improve Adversarial Robustness?", - "authors": "Vikash Sehwag, Saeed Mahloujifar, Tinashe Handina, Sihui Dai, Chong Xiang, Mung Chiang, Prateek Mittal", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ICLR 2022", - "architecture": "ResNet-18", - "eps": "0.5", - "clean_acc": "89.76", - "reported": "74.41", - "autoattack_acc": "74.41", - "footnote": "It uses additional 10M synthetic images in training.", - "unreliable": false -} \ No newline at end of file diff --git a/robustbench/model_info/cifar10/L2/Standard.json b/robustbench/model_info/cifar10/L2/Standard.json deleted file mode 100644 index 0fd1bd12..00000000 --- a/robustbench/model_info/cifar10/L2/Standard.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "link": "https://github.com/RobustBench/robustbench/", - "name": "Standardly trained model", - "authors": "", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "N/A", - "architecture": "WideResNet-28-10", - "eps": "0.5", - "clean_acc": "94.78", - "reported": "0.0", - "autoattack_acc": "0.0" -} diff --git a/robustbench/model_info/cifar10/L2/Wu2020Adversarial.json b/robustbench/model_info/cifar10/L2/Wu2020Adversarial.json deleted file mode 100644 index c3a6f9ae..00000000 --- a/robustbench/model_info/cifar10/L2/Wu2020Adversarial.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2004.05884", - "name": "Adversarial Weight Perturbation Helps Robust Generalization", - "authors": "Dongxian Wu, Shu-tao Xia, Yisen Wang", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "NeurIPS 2020", - "architecture": "WideResNet-34-10", - "eps": "0.5", - "clean_acc": "88.51", - "reported": "73.66", - "autoattack_acc": "73.66", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Addepalli2021Towards_RN18.json b/robustbench/model_info/cifar10/Linf/Addepalli2021Towards_RN18.json deleted file mode 100644 index 732ecdb2..00000000 --- a/robustbench/model_info/cifar10/Linf/Addepalli2021Towards_RN18.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://openreview.net/forum?id=SHB_znlW5G7", - "name": "Towards Achieving Adversarial Robustness Beyond Perceptual Limits", - "authors": "Sravanti Addepalli, Samyak Jain, Gaurang Sriramanan, Shivangi Khare, Venkatesh Babu Radhakrishnan", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "OpenReview, Jun 2021", - "architecture": "ResNet-18", - "eps": "8/255", - "clean_acc": "80.24", - "reported": "51.06", - "autoattack_acc": "51.06", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Addepalli2021Towards_WRN34.json b/robustbench/model_info/cifar10/Linf/Addepalli2021Towards_WRN34.json deleted file mode 100644 index 522c50f3..00000000 --- a/robustbench/model_info/cifar10/Linf/Addepalli2021Towards_WRN34.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://openreview.net/forum?id=SHB_znlW5G7", - "name": "Towards Achieving Adversarial Robustness Beyond Perceptual Limits", - "authors": "Sravanti Addepalli, Samyak Jain, Gaurang Sriramanan, Shivangi Khare, Venkatesh Babu Radhakrishnan", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "OpenReview, Jun 2021", - "architecture": "WideResNet-34-10", - "eps": "8/255", - "clean_acc": "85.32", - "reported": "58.04", - "autoattack_acc": "58.04", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Addepalli2022Efficient_RN18.json b/robustbench/model_info/cifar10/Linf/Addepalli2022Efficient_RN18.json deleted file mode 100644 index 88156856..00000000 --- a/robustbench/model_info/cifar10/Linf/Addepalli2022Efficient_RN18.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://artofrobust.github.io/short_paper/31.pdf", - "name": "Efficient and Effective Augmentation Strategy for Adversarial Training", - "authors": "Sravanti Addepalli, Samyak Jain, Venkatesh Babu Radhakrishnan", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "CVPRW 2022", - "architecture": "ResNet-18", - "eps": "8/255", - "clean_acc": "85.71", - "reported": "52.50", - "autoattack_acc": "52.48", - "unreliable": false -} \ No newline at end of file diff --git a/robustbench/model_info/cifar10/Linf/Addepalli2022Efficient_WRN_34_10.json b/robustbench/model_info/cifar10/Linf/Addepalli2022Efficient_WRN_34_10.json deleted file mode 100644 index 32b3df61..00000000 --- a/robustbench/model_info/cifar10/Linf/Addepalli2022Efficient_WRN_34_10.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://artofrobust.github.io/short_paper/31.pdf", - "name": "Efficient and Effective Augmentation Strategy for Adversarial Training", - "authors": "Sravanti Addepalli, Samyak Jain, Venkatesh Babu Radhakrishnan", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "CVPRW 2022", - "architecture": "WideResNet-34-10", - "eps": "8/255", - "clean_acc": "88.71", - "reported": "57.81", - "autoattack_acc": "57.81", - "unreliable": false -} \ No newline at end of file diff --git a/robustbench/model_info/cifar10/Linf/Alayrac2019Labels.json b/robustbench/model_info/cifar10/Linf/Alayrac2019Labels.json deleted file mode 100644 index d2d63534..00000000 --- a/robustbench/model_info/cifar10/Linf/Alayrac2019Labels.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "link": "https://arxiv.org/abs/1905.13725", - "name": "Are Labels Required for Improving Adversarial Robustness?", - "authors": "Jonathan Uesato, Jean-Baptiste Alayrac, Po-Sen Huang, Robert Stanforth, Alhussein Fawzi, Pushmeet Kohli", - "additional_data": true, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "NeurIPS 2019", - "architecture": "WideResNet-28-10", - "eps": "8/255", - "clean_acc": "86.46", - "reported": "56.30", - "autoattack_acc": "56.03" -} diff --git a/robustbench/model_info/cifar10/Linf/Alfarra2020ClusTR.json b/robustbench/model_info/cifar10/Linf/Alfarra2020ClusTR.json deleted file mode 100644 index 97a7f070..00000000 --- a/robustbench/model_info/cifar10/Linf/Alfarra2020ClusTR.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2006.07682", - "name": "ClusTR: Clustering Training for Robustness\n", - "authors": "Motasem Alfarra, Juan C. Perez, Adel Bibi, Ali Thabet, Pablo Arbelaez, Bernard Ghanem", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Jun 2020", - "architecture": "WideResNet-28-10", - "eps": "8/255", - "clean_acc": "91.03", - "reported": "74.04", - "autoattack_acc": "0.00" -} diff --git a/robustbench/model_info/cifar10/Linf/Andriushchenko2020Understanding.json b/robustbench/model_info/cifar10/Linf/Andriushchenko2020Understanding.json deleted file mode 100644 index 352c0340..00000000 --- a/robustbench/model_info/cifar10/Linf/Andriushchenko2020Understanding.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2007.02617", - "name": "Understanding and Improving Fast Adversarial Training", - "authors": "Maksym Andriushchenko, Nicolas Flammarion", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "NeurIPS 2020", - "architecture": "PreActResNet-18", - "eps": "8/255", - "clean_acc": "79.84", - "reported": "44.54", - "footnote": "Focuses on fast adversarial training.", - "autoattack_acc": "43.93" -} diff --git a/robustbench/model_info/cifar10/Linf/Atzmon2019Controlling.json b/robustbench/model_info/cifar10/Linf/Atzmon2019Controlling.json deleted file mode 100644 index 312a8374..00000000 --- a/robustbench/model_info/cifar10/Linf/Atzmon2019Controlling.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/1905.11911", - "name": "Controlling Neural Level Sets", - "authors": "Matan Atzmon, Niv Haim, Lior Yariv, Ofer Israelov, Haggai Maron, Yaron Lipman", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "NeurIPS 2019", - "architecture": "ResNet-18", - "eps": "0.031", - "clean_acc": "81.30", - "reported": "43.17", - "footnote": "Uses \\(\\ell_{\\infty} \\) = 0.031 \u2248 7.9/255 instead of 8/255.", - "autoattack_acc": "40.22" -} diff --git a/robustbench/model_info/cifar10/Linf/Carmon2019Unlabeled.json b/robustbench/model_info/cifar10/Linf/Carmon2019Unlabeled.json deleted file mode 100644 index 253adaff..00000000 --- a/robustbench/model_info/cifar10/Linf/Carmon2019Unlabeled.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/1905.13736", - "name": "Unlabeled Data Improves Adversarial Robustness", - "authors": "Yair Carmon, Aditi Raghunathan, Ludwig Schmidt, Percy Liang, John C. Duchi", - "additional_data": true, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "NeurIPS 2019", - "architecture": "WideResNet-28-10", - "eps": "8/255", - "clean_acc": "89.69", - "reported": "62.5", - "autoattack_acc": "59.53", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Chan2020Jacobian.json b/robustbench/model_info/cifar10/Linf/Chan2020Jacobian.json deleted file mode 100644 index 02c9a2a9..00000000 --- a/robustbench/model_info/cifar10/Linf/Chan2020Jacobian.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "link": "https://arxiv.org/abs/1912.10185", - "name": "Jacobian Adversarially Regularized Networks for Robustness", - "authors": "Alvin Chan, Yi Tay, Yew Soon Ong, Jie Fu", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ICLR 2020", - "architecture": "WideResNet-34-10", - "eps": "8/255", - "clean_acc": "93.79", - "reported": "15.5", - "autoattack_acc": "0.26" -} diff --git a/robustbench/model_info/cifar10/Linf/Chen2020Adversarial.json b/robustbench/model_info/cifar10/Linf/Chen2020Adversarial.json deleted file mode 100644 index 87b59f2b..00000000 --- a/robustbench/model_info/cifar10/Linf/Chen2020Adversarial.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2003.12862", - "name": "Adversarial Robustness: From Self-Supervised Pre-Training to Fine-Tuning", - "authors": "Tianlong Chen, Sijia Liu, Shiyu Chang, Yu Cheng, Lisa Amini, Zhangyang Wang", - "additional_data": false, - "number_forward_passes": 3, - "dataset": "cifar10", - "venue": "CVPR 2020", - "architecture": "ResNet-50", - "eps": "8/255", - "clean_acc": "86.04", - "reported": "54.64", - "footnote": "Uses ensembles of 3 models.", - "autoattack_acc": "51.56" -} diff --git a/robustbench/model_info/cifar10/Linf/Chen2020Efficient.json b/robustbench/model_info/cifar10/Linf/Chen2020Efficient.json deleted file mode 100644 index 0e34af09..00000000 --- a/robustbench/model_info/cifar10/Linf/Chen2020Efficient.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2010.01278", - "name": "Efficient Robust Training via Backward Smoothing", - "authors": "Jinghui Chen and Yu Cheng and Zhe Gan and Quanquan Gu and Jingjing Liu", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Oct 2020", - "architecture": "WideResNet-34-10", - "eps": "8/255", - "clean_acc": "85.32", - "reported": "51.13", - "footnote": "", - "autoattack_acc": "51.12" -} diff --git a/robustbench/model_info/cifar10/Linf/Chen2021LTD_WRN34_10.json b/robustbench/model_info/cifar10/Linf/Chen2021LTD_WRN34_10.json deleted file mode 100644 index 23acb167..00000000 --- a/robustbench/model_info/cifar10/Linf/Chen2021LTD_WRN34_10.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2111.02331", - "name": "LTD: Low Temperature Distillation for Robust Adversarial Training", - "authors": "Erh-Chung Chen, Che-Rung Lee", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Nov 2021", - "architecture": "WideResNet-34-10", - "eps": "8/255", - "clean_acc": "85.21", - "reported": "56.94", - "footnote": "", - "autoattack_acc": "56.94", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Chen2021LTD_WRN34_20.json b/robustbench/model_info/cifar10/Linf/Chen2021LTD_WRN34_20.json deleted file mode 100644 index 3ef99562..00000000 --- a/robustbench/model_info/cifar10/Linf/Chen2021LTD_WRN34_20.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2111.02331", - "name": "LTD: Low Temperature Distillation for Robust Adversarial Training", - "authors": "Erh-Chung Chen, Che-Rung Lee", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Nov 2021", - "architecture": "WideResNet-34-20", - "eps": "8/255", - "clean_acc": "86.03", - "reported": "57.71", - "footnote": "", - "autoattack_acc": "57.71", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Cui2020Learnable_34_10.json b/robustbench/model_info/cifar10/Linf/Cui2020Learnable_34_10.json deleted file mode 100644 index ecedc570..00000000 --- a/robustbench/model_info/cifar10/Linf/Cui2020Learnable_34_10.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2011.11164", - "name": "Learnable Boundary Guided Adversarial Training", - "authors": "Jiequan Cui and Shu Liu and Liwei Wang and Jiaya Jia", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ICCV 2021", - "architecture": "WideResNet-34-10", - "eps": "0.031", - "clean_acc": "88.22", - "reported": "52.86", - "footnote": "Uses \\(\\ell_{\\infty} \\) = 0.031 \u2248 7.9/255 instead of 8/255", - "autoattack_acc": "52.86", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Cui2020Learnable_34_20.json b/robustbench/model_info/cifar10/Linf/Cui2020Learnable_34_20.json deleted file mode 100644 index c77bb28e..00000000 --- a/robustbench/model_info/cifar10/Linf/Cui2020Learnable_34_20.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2011.11164", - "name": "Learnable Boundary Guided Adversarial Training", - "authors": "Jiequan Cui and Shu Liu and Liwei Wang and Jiaya Jia", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ICCV 2021", - "architecture": "WideResNet-34-20", - "eps": "0.031", - "clean_acc": "88.70", - "reported": "53.57", - "footnote": "Uses \\(\\ell_{\\infty} \\) = 0.031 \u2248 7.9/255 instead of 8/255", - "autoattack_acc": "53.57", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Dai2021Parameterizing.json b/robustbench/model_info/cifar10/Linf/Dai2021Parameterizing.json deleted file mode 100644 index 158cc772..00000000 --- a/robustbench/model_info/cifar10/Linf/Dai2021Parameterizing.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2110.05626", - "name": "Parameterizing Activation Functions for Adversarial Robustness", - "authors": "Sihui Dai, Saeed Mahloujifar, Prateek Mittal", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Oct 2021", - "architecture": "WideResNet-28-10-PSSiLU", - "eps": "8/255", - "clean_acc": "87.02", - "reported": "61.55", - "autoattack_acc": "61.55", - "footnote": "It uses additional ~6M synthetic images in training.", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Debenedetti2022Light_XCiT-L12.json b/robustbench/model_info/cifar10/Linf/Debenedetti2022Light_XCiT-L12.json deleted file mode 100644 index 43aa00e6..00000000 --- a/robustbench/model_info/cifar10/Linf/Debenedetti2022Light_XCiT-L12.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2209.07399", - "name": "A Light Recipe to Train Robust Vision Transformers", - "authors": "Edoardo Debenedetti, Vikash Sehwag, Prateek Mittal", - "additional_data": true, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Sep 2022", - "architecture": "XCiT-L12", - "eps": "8/255", - "clean_acc": "91.73", - "reported": "57.58", - "autoattack_acc": "57.58", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Debenedetti2022Light_XCiT-M12.json b/robustbench/model_info/cifar10/Linf/Debenedetti2022Light_XCiT-M12.json deleted file mode 100644 index 79d193a8..00000000 --- a/robustbench/model_info/cifar10/Linf/Debenedetti2022Light_XCiT-M12.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2209.07399", - "name": "A Light Recipe to Train Robust Vision Transformers", - "authors": "Edoardo Debenedetti, Vikash Sehwag, Prateek Mittal", - "additional_data": true, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Sep 2022", - "architecture": "XCiT-M12", - "eps": "8/255", - "clean_acc": "91.30", - "reported": "57.27", - "autoattack_acc": "57.27", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Debenedetti2022Light_XCiT-S12.json b/robustbench/model_info/cifar10/Linf/Debenedetti2022Light_XCiT-S12.json deleted file mode 100644 index e955c230..00000000 --- a/robustbench/model_info/cifar10/Linf/Debenedetti2022Light_XCiT-S12.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2209.07399", - "name": "A Light Recipe to Train Robust Vision Transformers", - "authors": "Edoardo Debenedetti, Vikash Sehwag, Prateek Mittal", - "additional_data": true, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Sep 2022", - "architecture": "XCiT-S12", - "eps": "8/255", - "clean_acc": "90.06", - "reported": "56.14", - "autoattack_acc": "56.14", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Ding2020MMA.json b/robustbench/model_info/cifar10/Linf/Ding2020MMA.json deleted file mode 100644 index eb67c083..00000000 --- a/robustbench/model_info/cifar10/Linf/Ding2020MMA.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "link": "https://openreview.net/forum?id=HkeryxBtPB", - "name": "MMA Training: Direct Input Space Margin Maximization through Adversarial Training", - "authors": "Gavin Weiguang Ding, Yash Sharma, Kry Yik Chau Lui, Ruitong Huang", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ICLR 2020", - "architecture": "WideResNet-28-4", - "eps": "8/255", - "clean_acc": "84.36", - "reported": "47.18", - "autoattack_acc": "41.44" -} diff --git a/robustbench/model_info/cifar10/Linf/Engstrom2019Robustness.json b/robustbench/model_info/cifar10/Linf/Engstrom2019Robustness.json deleted file mode 100644 index aed35ddd..00000000 --- a/robustbench/model_info/cifar10/Linf/Engstrom2019Robustness.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "link": "https://github.com/MadryLab/robustness", - "name": "Robustness library", - "authors": "Logan Engstrom, Andrew Ilyas, Hadi Salman, Shibani Santurkar, Dimitris Tsipras", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "GitHub,
Oct 2019", - "architecture": "ResNet-50", - "eps": "8/255", - "clean_acc": "87.03", - "reported": "53.29", - "autoattack_acc": "49.25" -} diff --git a/robustbench/model_info/cifar10/Linf/Gowal2020Uncovering_28_10_extra.json b/robustbench/model_info/cifar10/Linf/Gowal2020Uncovering_28_10_extra.json deleted file mode 100644 index f99d5279..00000000 --- a/robustbench/model_info/cifar10/Linf/Gowal2020Uncovering_28_10_extra.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2010.03593", - "name": "Uncovering the Limits of Adversarial Training against Norm-Bounded Adversarial Examples", - "authors": "Sven Gowal, Chongli Qin, Jonathan Uesato, Timothy Mann, Pushmeet Kohli", - "additional_data": true, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Oct 2020", - "architecture": "WideResNet-28-10", - "eps": "8/255", - "clean_acc": "89.48", - "reported": "62.76", - "autoattack_acc": "62.80", - "external": "62.76", - "footnote": "62.76% robust accuracy is due to the original evaluation (AutoAttack + MultiTargeted)", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Gowal2020Uncovering_34_20.json b/robustbench/model_info/cifar10/Linf/Gowal2020Uncovering_34_20.json deleted file mode 100644 index 285669ab..00000000 --- a/robustbench/model_info/cifar10/Linf/Gowal2020Uncovering_34_20.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2010.03593", - "name": "Uncovering the Limits of Adversarial Training against Norm-Bounded Adversarial Examples", - "authors": "Sven Gowal, Chongli Qin, Jonathan Uesato, Timothy Mann, Pushmeet Kohli", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Oct 2020", - "architecture": "WideResNet-34-20", - "eps": "8/255", - "clean_acc": "85.64", - "reported": "56.82", - "autoattack_acc": "56.86", - "external": "56.82", - "footnote": "56.82% robust accuracy is due to the original evaluation (AutoAttack + MultiTargeted)", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Gowal2020Uncovering_70_16.json b/robustbench/model_info/cifar10/Linf/Gowal2020Uncovering_70_16.json deleted file mode 100644 index fbc686e5..00000000 --- a/robustbench/model_info/cifar10/Linf/Gowal2020Uncovering_70_16.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2010.03593", - "name": "Uncovering the Limits of Adversarial Training against Norm-Bounded Adversarial Examples", - "authors": "Sven Gowal, Chongli Qin, Jonathan Uesato, Timothy Mann, Pushmeet Kohli", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Oct 2020", - "architecture": "WideResNet-70-16", - "eps": "8/255", - "clean_acc": "85.29", - "reported": "57.14", - "autoattack_acc": "57.20", - "external": "57.14", - "footnote": "57.14% robust accuracy is due to the original evaluation (AutoAttack + MultiTargeted)", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Gowal2020Uncovering_70_16_extra.json b/robustbench/model_info/cifar10/Linf/Gowal2020Uncovering_70_16_extra.json deleted file mode 100644 index c300a31f..00000000 --- a/robustbench/model_info/cifar10/Linf/Gowal2020Uncovering_70_16_extra.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2010.03593", - "name": "Uncovering the Limits of Adversarial Training against Norm-Bounded Adversarial Examples", - "authors": "Sven Gowal, Chongli Qin, Jonathan Uesato, Timothy Mann, Pushmeet Kohli", - "additional_data": true, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Oct 2020", - "architecture": "WideResNet-70-16", - "eps": "8/255", - "clean_acc": "91.10", - "reported": "65.87", - "autoattack_acc": "65.88", - "external": "65.87", - "footnote": "65.87% robust accuracy is due to the original evaluation (AutoAttack + MultiTargeted)", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Gowal2021Improving_28_10_ddpm_100m.json b/robustbench/model_info/cifar10/Linf/Gowal2021Improving_28_10_ddpm_100m.json deleted file mode 100644 index 0ff112bb..00000000 --- a/robustbench/model_info/cifar10/Linf/Gowal2021Improving_28_10_ddpm_100m.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2110.09468", - "name": "Improving Robustness using Generated Data", - "authors": "Sven Gowal, Sylvestre-Alvise Rebuffi, Olivia Wiles, Florian Stimberg, Dan Andrei Calian, Timothy Mann", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "NeurIPS 2021", - "architecture": "WideResNet-28-10", - "eps": "8/255", - "clean_acc": "87.50", - "reported": "63.38", - "autoattack_acc": "63.44", - "external": "63.38", - "footnote": "It uses additional 100M synthetic images in training. 63.38% robust accuracy is due to the original evaluation (AutoAttack + MultiTargeted)", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Gowal2021Improving_70_16_ddpm_100m.json b/robustbench/model_info/cifar10/Linf/Gowal2021Improving_70_16_ddpm_100m.json deleted file mode 100644 index 04971785..00000000 --- a/robustbench/model_info/cifar10/Linf/Gowal2021Improving_70_16_ddpm_100m.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2110.09468", - "name": "Improving Robustness using Generated Data", - "authors": "Sven Gowal, Sylvestre-Alvise Rebuffi, Olivia Wiles, Florian Stimberg, Dan Andrei Calian, Timothy Mann", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "NeurIPS 2021", - "architecture": "WideResNet-70-16", - "eps": "8/255", - "clean_acc": "88.74", - "reported": "66.10", - "autoattack_acc": "66.11", - "external": "66.10", - "footnote": "It uses additional 100M synthetic images in training. 66.10% robust accuracy is due to the original evaluation (AutoAttack + MultiTargeted)", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Gowal2021Improving_R18_ddpm_100m.json b/robustbench/model_info/cifar10/Linf/Gowal2021Improving_R18_ddpm_100m.json deleted file mode 100644 index 2d37d4cf..00000000 --- a/robustbench/model_info/cifar10/Linf/Gowal2021Improving_R18_ddpm_100m.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2110.09468", - "name": "Improving Robustness using Generated Data", - "authors": "Sven Gowal, Sylvestre-Alvise Rebuffi, Olivia Wiles, Florian Stimberg, Dan Andrei Calian, Timothy Mann", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "NeurIPS 2021", - "architecture": "PreActResNet-18", - "eps": "8/255", - "clean_acc": "87.35", - "reported": "58.50", - "autoattack_acc": "58.63", - "external": "58.50", - "footnote": "It uses additional 100M synthetic images in training. 58.50% robust accuracy is due to the original evaluation (AutoAttack + MultiTargeted)", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Hendrycks2019Using.json b/robustbench/model_info/cifar10/Linf/Hendrycks2019Using.json deleted file mode 100644 index 376fbd14..00000000 --- a/robustbench/model_info/cifar10/Linf/Hendrycks2019Using.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/1901.09960", - "name": "Using Pre-Training Can Improve Model Robustness and Uncertainty", - "authors": "Dan Hendrycks, Kimin Lee, Mantas Mazeika", - "additional_data": true, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ICML 2019", - "architecture": "WideResNet-28-10", - "eps": "8/255", - "clean_acc": "87.11", - "reported": "57.4", - "autoattack_acc": "54.92", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Huang2020Self.json b/robustbench/model_info/cifar10/Linf/Huang2020Self.json deleted file mode 100644 index 17a0bd11..00000000 --- a/robustbench/model_info/cifar10/Linf/Huang2020Self.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2002.10319", - "name": "Self-Adaptive Training: beyond Empirical Risk Minimization", - "authors": "Lang Huang, Chao Zhang, Hongyang Zhang", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "NeurIPS 2020", - "architecture": "WideResNet-34-10", - "eps": "0.031", - "clean_acc": "83.48", - "reported": "58.03", - "footnote": "Uses \\(\\ell_{\\infty} \\) = 0.031 \u2248 7.9/255 instead of 8/255.", - "autoattack_acc": "53.34" -} diff --git a/robustbench/model_info/cifar10/Linf/Huang2021Exploring.json b/robustbench/model_info/cifar10/Linf/Huang2021Exploring.json deleted file mode 100644 index 8b90df10..00000000 --- a/robustbench/model_info/cifar10/Linf/Huang2021Exploring.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2110.03825", - "name": "Exploring Architectural Ingredients of Adversarially Robust Deep Neural Networks", - "authors": "Hanxun Huang, Yisen Wang, Sarah Monazam Erfani, Quanquan Gu, James Bailey, Xingjun Ma", - "additional_data": true, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "NeurIPS 2021", - "architecture": "WideResNet-34-R", - "eps": "8/255", - "clean_acc": "90.56", - "reported": "61.56", - "autoattack_acc": "61.56", - "unreliable": false - -} diff --git a/robustbench/model_info/cifar10/Linf/Huang2021Exploring_ema.json b/robustbench/model_info/cifar10/Linf/Huang2021Exploring_ema.json deleted file mode 100644 index 8e9064fa..00000000 --- a/robustbench/model_info/cifar10/Linf/Huang2021Exploring_ema.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2110.03825", - "name": "Exploring Architectural Ingredients of Adversarially Robust Deep Neural Networks", - "authors": "Hanxun Huang, Yisen Wang, Sarah Monazam Erfani, Quanquan Gu, James Bailey, Xingjun Ma", - "additional_data": true, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "NeurIPS 2021", - "architecture": "WideResNet-34-R", - "eps": "8/255", - "clean_acc": "91.23", - "reported": "62.54", - "autoattack_acc": "62.54", - "footnote": "Uses exponential moving average (EMA)", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Jang2019Adversarial.json b/robustbench/model_info/cifar10/Linf/Jang2019Adversarial.json deleted file mode 100644 index 4805fe62..00000000 --- a/robustbench/model_info/cifar10/Linf/Jang2019Adversarial.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "link": "http://openaccess.thecvf.com/content_ICCV_2019/html/Jang_Adversarial_Defense_via_Learning_to_Generate_Diverse_Attacks_ICCV_2019_paper.html", - "name": "Adversarial Defense via Learning to Generate Diverse Attacks", - "authors": "Yunseok Jang, Tianchen Zhao, Seunghoon Hong, Honglak Lee", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ICCV 2019", - "architecture": "ResNet-20", - "eps": "8/255", - "clean_acc": "78.91", - "reported": "37.40", - "autoattack_acc": "34.95" -} diff --git a/robustbench/model_info/cifar10/Linf/Jia2022LAS-AT_34_10.json b/robustbench/model_info/cifar10/Linf/Jia2022LAS-AT_34_10.json deleted file mode 100644 index fc3a6f1b..00000000 --- a/robustbench/model_info/cifar10/Linf/Jia2022LAS-AT_34_10.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2203.06616", - "name": "LAS-AT: Adversarial Training with Learnable Attack Strategy", - "authors": "Xiaojun Jia, Yong Zhang, Baoyuan Wu, Ke Ma, Jue Wang, Xiaochun Cao", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Mar 2022", - "architecture": "WideResNet-34-10", - "eps": "8/255", - "clean_acc": "84.98", - "reported": "56.26", - "autoattack_acc": "56.26", - "footnote": "", - "unreliable": false -} \ No newline at end of file diff --git a/robustbench/model_info/cifar10/Linf/Jia2022LAS-AT_70_16.json b/robustbench/model_info/cifar10/Linf/Jia2022LAS-AT_70_16.json deleted file mode 100644 index baaf1db2..00000000 --- a/robustbench/model_info/cifar10/Linf/Jia2022LAS-AT_70_16.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2203.06616", - "name": "LAS-AT: Adversarial Training with Learnable Attack Strategy", - "authors": "Xiaojun Jia, Yong Zhang, Baoyuan Wu, Ke Ma, Jue Wang, Xiaochun Cao", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Mar 2022", - "architecture": "WideResNet-70-16", - "eps": "8/255", - "clean_acc": "85.66", - "reported": "57.61", - "autoattack_acc": "57.61", - "footnote": "", - "unreliable": false -} \ No newline at end of file diff --git a/robustbench/model_info/cifar10/Linf/JinRinard2020Manifold.json b/robustbench/model_info/cifar10/Linf/JinRinard2020Manifold.json deleted file mode 100644 index 9340e1e7..00000000 --- a/robustbench/model_info/cifar10/Linf/JinRinard2020Manifold.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2003.04286", - "name": "Manifold Regularization for Adversarial Robustness", - "authors": "Charles Jin, Martin Rinard", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Mar 2020", - "architecture": "ResNet-18", - "eps": "8/255", - "clean_acc": "90.84", - "reported": "71.22", - "autoattack_acc": "1.35" -} diff --git a/robustbench/model_info/cifar10/Linf/Kang2021Stable.json b/robustbench/model_info/cifar10/Linf/Kang2021Stable.json deleted file mode 100644 index 651df459..00000000 --- a/robustbench/model_info/cifar10/Linf/Kang2021Stable.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2110.12976", - "name": "Stable Neural ODE with Lyapunov-Stable Equilibrium Points for Defending Against Adversarial Attacks", - "authors": "Qiyu Kang, Yang Song, Qinxu Ding, Wee Peng Tay", - "additional_data": true, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "NeurIPS 2021", - "architecture": "WideResNet-70-16, Neural ODE block", - "eps": "8/255", - "clean_acc": "93.73", - "reported": "71.28", - "autoattack_acc": "71.28", - "external": "64.20", - "footnote": "Based on the model Rebuffi2021Fixing_70_16_cutmix_extra. 64.20% robust accuracy is due to AutoAttack + transfer APGD from Rebuffi2021Fixing_70_16_cutmix_extra", - "unreliable": true -} diff --git a/robustbench/model_info/cifar10/Linf/KimWang2020Sensible.json b/robustbench/model_info/cifar10/Linf/KimWang2020Sensible.json deleted file mode 100644 index 4f3e9d6c..00000000 --- a/robustbench/model_info/cifar10/Linf/KimWang2020Sensible.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "link": "https://openreview.net/forum?id=rJlf_RVKwr", - "name": "Sensible adversarial learning", - "authors": "Jungeum Kim, Xiao Wang", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "OpenReview, Sep 2019", - "architecture": "WideResNet-34-10", - "eps": "8/255", - "clean_acc": "91.51", - "reported": "57.23", - "autoattack_acc": "34.22" -} diff --git a/robustbench/model_info/cifar10/Linf/Kumari2019Harnessing.json b/robustbench/model_info/cifar10/Linf/Kumari2019Harnessing.json deleted file mode 100644 index 9efa5da4..00000000 --- a/robustbench/model_info/cifar10/Linf/Kumari2019Harnessing.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "link": "https://arxiv.org/abs/1905.05186", - "name": "Harnessing the Vulnerability of Latent Layers in Adversarially Trained Models", - "authors": "Mayank Singh, Abhishek Sinha, Nupur Kumari, Harshitha Machiraju, Balaji Krishnamurthy, Vineeth N Balasubramanian", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "IJCAI 2019", - "architecture": "WideResNet-34-10", - "eps": "8/255", - "clean_acc": "87.80", - "reported": "53.04", - "autoattack_acc": "49.12" -} diff --git a/robustbench/model_info/cifar10/Linf/Kundu2020Tunable.json b/robustbench/model_info/cifar10/Linf/Kundu2020Tunable.json deleted file mode 100644 index 76fc4b9c..00000000 --- a/robustbench/model_info/cifar10/Linf/Kundu2020Tunable.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2011.03083", - "name": "A Tunable Robust Pruning Framework Through Dynamic Network Rewiring of DNNs", - "authors": "Kundu, Souvik and Nazemi, Mahdi and Beerel, Peter A and Pedram, Massoud", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ASP-DAC 2021", - "architecture": "ResNet-18", - "eps": "8/255", - "clean_acc": "87.32", - "reported": "47.35", - "footnote": "Compressed model", - "autoattack_acc": "40.41", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Madry2018Towards.json b/robustbench/model_info/cifar10/Linf/Madry2018Towards.json deleted file mode 100644 index 58ab2924..00000000 --- a/robustbench/model_info/cifar10/Linf/Madry2018Towards.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "link": "https://arxiv.org/abs/1706.06083", - "name": "Towards Deep Learning Models Resistant to Adversarial Attacks", - "authors": "Aleksander Madry, Aleksandar Makelov, Ludwig Schmidt, Dimitris Tsipras, Adrian Vladu", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ICLR 2018", - "architecture": "WideResNet-34-10", - "eps": "8/255", - "clean_acc": "87.14", - "reported": "47.04", - "autoattack_acc": "44.04" -} diff --git a/robustbench/model_info/cifar10/Linf/Mao2019Metric.json b/robustbench/model_info/cifar10/Linf/Mao2019Metric.json deleted file mode 100644 index da86ec48..00000000 --- a/robustbench/model_info/cifar10/Linf/Mao2019Metric.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "link": "http://papers.nips.cc/paper/8339-metric-learning-for-adversarial-robustness", - "name": "Metric Learning for Adversarial Robustness", - "authors": "Chengzhi Mao, Ziyuan Zhong, Junfeng Yang, Carl Vondrick, Baishakhi Ray", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "NeurIPS 2019", - "architecture": "WideResNet-34-10", - "eps": "8/255", - "clean_acc": "86.21", - "reported": "50.03", - "autoattack_acc": "47.41" -} diff --git a/robustbench/model_info/cifar10/Linf/Moosavi-Dezfooli2019Robustness.json b/robustbench/model_info/cifar10/Linf/Moosavi-Dezfooli2019Robustness.json deleted file mode 100644 index 04a5c286..00000000 --- a/robustbench/model_info/cifar10/Linf/Moosavi-Dezfooli2019Robustness.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "link": "http://openaccess.thecvf.com/content_CVPR_2019/html/Moosavi-Dezfooli_Robustness_via_Curvature_Regularization_and_Vice_Versa_CVPR_2019_paper", - "name": "Robustness via Curvature Regularization, and Vice Versa", - "authors": "Seyed-Mohsen Moosavi-Dezfooli, Alhussein Fawzi, Jonathan Uesato, Pascal Frossard", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "CVPR 2019", - "architecture": "ResNet-18", - "eps": "8/255", - "clean_acc": "83.11", - "reported": "41.4", - "autoattack_acc": "38.50" -} diff --git a/robustbench/model_info/cifar10/Linf/Mustafa2019Adversarial.json b/robustbench/model_info/cifar10/Linf/Mustafa2019Adversarial.json deleted file mode 100644 index afd850c7..00000000 --- a/robustbench/model_info/cifar10/Linf/Mustafa2019Adversarial.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "link": "https://arxiv.org/abs/1904.00887", - "name": "Adversarial Defense by Restricting the Hidden Space of Deep Neural Networks", - "authors": "Aamir Mustafa, Salman Khan, Munawar Hayat, Roland Goecke, Jianbing Shen, Ling Shao", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ICCV 2019", - "architecture": "ResNet-110", - "eps": "8/255", - "clean_acc": "89.16", - "reported": "32.32", - "autoattack_acc": "0.28" -} diff --git a/robustbench/model_info/cifar10/Linf/Pang2020Bag.json b/robustbench/model_info/cifar10/Linf/Pang2020Bag.json deleted file mode 100644 index 39164729..00000000 --- a/robustbench/model_info/cifar10/Linf/Pang2020Bag.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2010.00467", - "name": "Bag of Tricks for Adversarial Training", - "authors": "Tianyu Pang and Xiao Yang and Yinpeng Dong and Hang Su and Jun Zhu", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ICLR 2021", - "architecture": "WideResNet-34-20", - "eps": "8/255", - "clean_acc": "86.43", - "reported": "54.39", - "footnote": "", - "autoattack_acc": "54.39" -} diff --git a/robustbench/model_info/cifar10/Linf/Pang2020Boosting.json b/robustbench/model_info/cifar10/Linf/Pang2020Boosting.json deleted file mode 100644 index b60df9ab..00000000 --- a/robustbench/model_info/cifar10/Linf/Pang2020Boosting.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2002.08619", - "name": "Boosting Adversarial Training with Hypersphere Embedding", - "authors": "Tianyu Pang, Xiao Yang, Yinpeng Dong, Kun Xu, Hang Su, Jun Zhu", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "NeurIPS 2020", - "architecture": "WideResNet-34-20", - "eps": "8/255", - "clean_acc": "85.14", - "reported": "53.74", - "autoattack_acc": "53.74", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Pang2020Rethinking.json b/robustbench/model_info/cifar10/Linf/Pang2020Rethinking.json deleted file mode 100644 index 54ac5ac8..00000000 --- a/robustbench/model_info/cifar10/Linf/Pang2020Rethinking.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "link": "https://arxiv.org/abs/1905.10626", - "name": "Rethinking Softmax Cross-Entropy Loss for Adversarial Robustness", - "authors": "Tianyu Pang, Kun Xu, Yinpeng Dong, Chao Du, Ning Chen, Jun Zhu", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ICLR 2020", - "architecture": "ResNet-32", - "eps": "8/255", - "clean_acc": "80.89", - "reported": "55.00", - "autoattack_acc": "43.48" -} diff --git a/robustbench/model_info/cifar10/Linf/Pang2022Robustness_WRN28_10.json b/robustbench/model_info/cifar10/Linf/Pang2022Robustness_WRN28_10.json deleted file mode 100644 index 3cf28eaf..00000000 --- a/robustbench/model_info/cifar10/Linf/Pang2022Robustness_WRN28_10.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/pdf/2202.10103.pdf", - "name": " Robustness and Accuracy Could Be Reconcilable by (Proper) Definition", - "authors": "Tianyu Pang, Min Lin, Xiao Yang, Jun Zhu, Shuicheng Yan", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ICML 2022", - "architecture": "WideResNet-28-10", - "eps": "8/255", - "clean_acc": "88.61", - "reported": "61.04", - "autoattack_acc": "61.04", - "footnote": "It uses additional 1M synthetic images in training.", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Pang2022Robustness_WRN70_16.json b/robustbench/model_info/cifar10/Linf/Pang2022Robustness_WRN70_16.json deleted file mode 100644 index 56071f7e..00000000 --- a/robustbench/model_info/cifar10/Linf/Pang2022Robustness_WRN70_16.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/pdf/2202.10103.pdf", - "name": " Robustness and Accuracy Could Be Reconcilable by (Proper) Definition", - "authors": "Tianyu Pang, Min Lin, Xiao Yang, Jun Zhu, Shuicheng Yan", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ICML 2022", - "architecture": "WideResNet-70-16", - "eps": "8/255", - "clean_acc": "89.01", - "reported": "63.35", - "autoattack_acc": "63.35", - "footnote": "It uses additional 1M synthetic images in training.", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Qin2019Adversarial.json b/robustbench/model_info/cifar10/Linf/Qin2019Adversarial.json deleted file mode 100644 index 1d4a0c02..00000000 --- a/robustbench/model_info/cifar10/Linf/Qin2019Adversarial.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/1907.02610v2", - "name": "Adversarial Robustness through Local Linearization", - "authors": "Chongli Qin, James Martens, Sven Gowal, Dilip Krishnan, Krishnamurthy Dvijotham, Alhussein Fawzi, Soham De, Robert Stanforth, Pushmeet Kohli", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "NeurIPS 2019", - "architecture": "WideResNet-40-8", - "eps": "8/255", - "clean_acc": "86.28", - "reported": "52.81", - "autoattack_acc": "52.84", - "external": "52.84" -} diff --git a/robustbench/model_info/cifar10/Linf/Rade2021Helper_R18_ddpm.json b/robustbench/model_info/cifar10/Linf/Rade2021Helper_R18_ddpm.json deleted file mode 100644 index 5c3ae278..00000000 --- a/robustbench/model_info/cifar10/Linf/Rade2021Helper_R18_ddpm.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://openreview.net/forum?id=BuD2LmNaU3a", - "name": "Helper-based Adversarial Training: Reducing Excessive Margin to Achieve a Better Accuracy vs. Robustness Trade-off", - "authors": "Rahul Rade and Seyed-Mohsen Moosavi-Dezfooli", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "OpenReview, Jun 2021", - "architecture": "PreActResNet-18", - "eps": "8/255", - "clean_acc": "86.86", - "reported": "57.09", - "footnote": "It uses additional 1M synthetic images in training.", - "autoattack_acc": "57.09", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Rade2021Helper_R18_extra.json b/robustbench/model_info/cifar10/Linf/Rade2021Helper_R18_extra.json deleted file mode 100644 index 8fe79605..00000000 --- a/robustbench/model_info/cifar10/Linf/Rade2021Helper_R18_extra.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://openreview.net/forum?id=BuD2LmNaU3a", - "name": "Helper-based Adversarial Training: Reducing Excessive Margin to Achieve a Better Accuracy vs. Robustness Trade-off", - "authors": "Rahul Rade and Seyed-Mohsen Moosavi-Dezfooli", - "additional_data": true, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "OpenReview, Jun 2021", - "architecture": "PreActResNet-18", - "eps": "8/255", - "clean_acc": "89.02", - "reported": "57.67", - "autoattack_acc": "57.67", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Rade2021Helper_ddpm.json b/robustbench/model_info/cifar10/Linf/Rade2021Helper_ddpm.json deleted file mode 100644 index 4ea707bc..00000000 --- a/robustbench/model_info/cifar10/Linf/Rade2021Helper_ddpm.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://openreview.net/forum?id=BuD2LmNaU3a", - "name": "Helper-based Adversarial Training: Reducing Excessive Margin to Achieve a Better Accuracy vs. Robustness Trade-off", - "authors": "Rahul Rade and Seyed-Mohsen Moosavi-Dezfooli", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "OpenReview, Jun 2021", - "architecture": "WideResNet-28-10", - "eps": "8/255", - "clean_acc": "88.16", - "reported": "60.97", - "footnote": "It uses additional 1M synthetic images in training.", - "autoattack_acc": "60.97", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Rade2021Helper_extra.json b/robustbench/model_info/cifar10/Linf/Rade2021Helper_extra.json deleted file mode 100644 index 4dc9901c..00000000 --- a/robustbench/model_info/cifar10/Linf/Rade2021Helper_extra.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://openreview.net/forum?id=BuD2LmNaU3a", - "name": "Helper-based Adversarial Training: Reducing Excessive Margin to Achieve a Better Accuracy vs. Robustness Trade-off", - "authors": "Rahul Rade and Seyed-Mohsen Moosavi-Dezfooli", - "additional_data": true, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "OpenReview, Jun 2021", - "architecture": "WideResNet-34-10", - "eps": "8/255", - "clean_acc": "91.47", - "reported": "62.83", - "autoattack_acc": "62.83", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Rebuffi2021Fixing_106_16_cutmix_ddpm.json b/robustbench/model_info/cifar10/Linf/Rebuffi2021Fixing_106_16_cutmix_ddpm.json deleted file mode 100644 index f12ebc12..00000000 --- a/robustbench/model_info/cifar10/Linf/Rebuffi2021Fixing_106_16_cutmix_ddpm.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2103.01946", - "name": "Fixing Data Augmentation to Improve Adversarial Robustness", - "authors": "Sylvestre-Alvise Rebuffi, Sven Gowal, Dan A. Calian, Florian Stimberg, Olivia Wiles, Timothy Mann", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Mar 2021", - "architecture": "WideResNet-106-16", - "eps": "8/255", - "clean_acc": "88.50", - "reported": "64.58", - "autoattack_acc": "64.64", - "external": "64.58", - "footnote": "It uses additional 1M synthetic images in training. 64.58% robust accuracy is due to the original evaluation (AutoAttack + MultiTargeted)", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Rebuffi2021Fixing_28_10_cutmix_ddpm.json b/robustbench/model_info/cifar10/Linf/Rebuffi2021Fixing_28_10_cutmix_ddpm.json deleted file mode 100644 index d5ad7ba7..00000000 --- a/robustbench/model_info/cifar10/Linf/Rebuffi2021Fixing_28_10_cutmix_ddpm.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2103.01946", - "name": "Fixing Data Augmentation to Improve Adversarial Robustness", - "authors": "Sylvestre-Alvise Rebuffi, Sven Gowal, Dan A. Calian, Florian Stimberg, Olivia Wiles, Timothy Mann", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Mar 2021", - "architecture": "WideResNet-28-10", - "eps": "8/255", - "clean_acc": "87.33", - "reported": "60.73", - "autoattack_acc": "60.75", - "external": "60.73", - "footnote": "It uses additional 1M synthetic images in training. 60.73% robust accuracy is due to the original evaluation (AutoAttack + MultiTargeted)", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Rebuffi2021Fixing_70_16_cutmix_ddpm.json b/robustbench/model_info/cifar10/Linf/Rebuffi2021Fixing_70_16_cutmix_ddpm.json deleted file mode 100644 index 11490482..00000000 --- a/robustbench/model_info/cifar10/Linf/Rebuffi2021Fixing_70_16_cutmix_ddpm.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2103.01946", - "name": "Fixing Data Augmentation to Improve Adversarial Robustness", - "authors": "Sylvestre-Alvise Rebuffi, Sven Gowal, Dan A. Calian, Florian Stimberg, Olivia Wiles, Timothy Mann", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Mar 2021", - "architecture": "WideResNet-70-16", - "eps": "8/255", - "clean_acc": "88.54", - "reported": "64.20", - "autoattack_acc": "64.25", - "external": "64.20", - "footnote": "It uses additional 1M synthetic images in training. 64.20% robust accuracy is due to the original evaluation (AutoAttack + MultiTargeted)", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Rebuffi2021Fixing_70_16_cutmix_extra.json b/robustbench/model_info/cifar10/Linf/Rebuffi2021Fixing_70_16_cutmix_extra.json deleted file mode 100644 index 0d88a5be..00000000 --- a/robustbench/model_info/cifar10/Linf/Rebuffi2021Fixing_70_16_cutmix_extra.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2103.01946", - "name": "Fixing Data Augmentation to Improve Adversarial Robustness", - "authors": "Sylvestre-Alvise Rebuffi, Sven Gowal, Dan A. Calian, Florian Stimberg, Olivia Wiles, Timothy Mann", - "additional_data": true, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Mar 2021", - "architecture": "WideResNet-70-16", - "eps": "8/255", - "clean_acc": "92.23", - "reported": "66.56", - "autoattack_acc": "66.58", - "external": "66.56", - "footnote": "66.56% robust accuracy is due to the original evaluation (AutoAttack + MultiTargeted)", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Rebuffi2021Fixing_R18_ddpm.json b/robustbench/model_info/cifar10/Linf/Rebuffi2021Fixing_R18_ddpm.json deleted file mode 100644 index d714526a..00000000 --- a/robustbench/model_info/cifar10/Linf/Rebuffi2021Fixing_R18_ddpm.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2103.01946", - "name": "Fixing Data Augmentation to Improve Adversarial Robustness", - "authors": "Sylvestre-Alvise Rebuffi, Sven Gowal, Dan A. Calian, Florian Stimberg, Olivia Wiles, Timothy Mann", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Mar 2021", - "architecture": "PreActResNet-18", - "eps": "8/255", - "clean_acc": "83.53", - "reported": "56.66", - "footnote": "It uses additional 1M synthetic images in training.", - "autoattack_acc": "56.66", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Rice2020Overfitting.json b/robustbench/model_info/cifar10/Linf/Rice2020Overfitting.json deleted file mode 100644 index 1a02239d..00000000 --- a/robustbench/model_info/cifar10/Linf/Rice2020Overfitting.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2002.11569", - "name": "Overfitting in adversarially robust deep learning", - "authors": "Leslie Rice, Eric Wong, J. Zico Kolter", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ICML 2020", - "architecture": "WideResNet-34-20", - "eps": "8/255", - "clean_acc": "85.34", - "reported": "58", - "autoattack_acc": "53.42", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Sehwag2020Hydra.json b/robustbench/model_info/cifar10/Linf/Sehwag2020Hydra.json deleted file mode 100644 index 99802b04..00000000 --- a/robustbench/model_info/cifar10/Linf/Sehwag2020Hydra.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2002.10509", - "name": "HYDRA: Pruning Adversarially Robust Neural Networks", - "authors": "Vikash Sehwag, Shiqi Wang, Prateek Mittal, Suman Jana", - "additional_data": true, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "NeurIPS 2020", - "architecture": "WideResNet-28-10", - "eps": "8/255", - "clean_acc": "88.98", - "reported": "62.24", - "footnote": "Compressed model", - "autoattack_acc": "57.14", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Sehwag2021Proxy.json b/robustbench/model_info/cifar10/Linf/Sehwag2021Proxy.json deleted file mode 100644 index 3a440b58..00000000 --- a/robustbench/model_info/cifar10/Linf/Sehwag2021Proxy.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2104.09425", - "name": "Robust Learning Meets Generative Models: Can Proxy Distributions Improve Adversarial Robustness?", - "authors": "Vikash Sehwag, Saeed Mahloujifar, Tinashe Handina, Sihui Dai, Chong Xiang, Mung Chiang, Prateek Mittal", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ICLR 2022", - "architecture": "WideResNet-34-10", - "eps": "8/255", - "clean_acc": "86.68", - "reported": "60.30", - "autoattack_acc": "60.27", - "footnote": "It uses additional 10M synthetic images in training.", - "unreliable": false -} \ No newline at end of file diff --git a/robustbench/model_info/cifar10/Linf/Sehwag2021Proxy_R18.json b/robustbench/model_info/cifar10/Linf/Sehwag2021Proxy_R18.json deleted file mode 100644 index da0a15de..00000000 --- a/robustbench/model_info/cifar10/Linf/Sehwag2021Proxy_R18.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2104.09425", - "name": "Robust Learning Meets Generative Models: Can Proxy Distributions Improve Adversarial Robustness?", - "authors": "Vikash Sehwag, Saeed Mahloujifar, Tinashe Handina, Sihui Dai, Chong Xiang, Mung Chiang, Prateek Mittal", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ICLR 2022", - "architecture": "ResNet-18", - "eps": "8/255", - "clean_acc": "84.59", - "reported": "55.54", - "autoattack_acc": "55.54", - "footnote": "It uses additional 10M synthetic images in training.", - "unreliable": false -} \ No newline at end of file diff --git a/robustbench/model_info/cifar10/Linf/Sehwag2021Proxy_ResNest152.json b/robustbench/model_info/cifar10/Linf/Sehwag2021Proxy_ResNest152.json deleted file mode 100644 index a0e3cff1..00000000 --- a/robustbench/model_info/cifar10/Linf/Sehwag2021Proxy_ResNest152.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2104.09425", - "name": "Robust Learning Meets Generative Models: Can Proxy Distributions Improve Adversarial Robustness?", - "authors": "Vikash Sehwag, Saeed Mahloujifar, Tinashe Handina, Sihui Dai, Chong Xiang, Mung Chiang, Prateek Mittal", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ICLR 2022", - "architecture": "ResNest152", - "eps": "8/255", - "clean_acc": "87.30", - "reported": "62.79", - "autoattack_acc": "62.79", - "footnote": "It uses additional 10M synthetic images in training.", - "unreliable": false -} \ No newline at end of file diff --git a/robustbench/model_info/cifar10/Linf/Shafahi2019Adversarial.json b/robustbench/model_info/cifar10/Linf/Shafahi2019Adversarial.json deleted file mode 100644 index 15becba5..00000000 --- a/robustbench/model_info/cifar10/Linf/Shafahi2019Adversarial.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "link": "https://arxiv.org/abs/1904.12843", - "name": "Adversarial Training for Free!", - "authors": "Ali Shafahi, Mahyar Najibi, Amin Ghiasi, Zheng Xu, John Dickerson, Christoph Studer, Larry S. Davis, Gavin Taylor, Tom Goldstein", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "NeurIPS 2019", - "architecture": "WideResNet-34-10", - "eps": "8/255", - "clean_acc": "86.11", - "reported": "46.19", - "autoattack_acc": "41.47" -} diff --git a/robustbench/model_info/cifar10/Linf/Sitawarin2020Improving.json b/robustbench/model_info/cifar10/Linf/Sitawarin2020Improving.json deleted file mode 100644 index bfcf8711..00000000 --- a/robustbench/model_info/cifar10/Linf/Sitawarin2020Improving.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2003.09347", - "name": "Improving Adversarial Robustness Through Progressive Hardening", - "authors": "Chawin Sitawarin and Supriyo Chakraborty and David Wagner", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Mar 2020", - "architecture": "WideResNet-34-10", - "eps": "8/255", - "clean_acc": "86.84", - "reported": "50.72", - "footnote": "", - "autoattack_acc": "50.72" -} diff --git a/robustbench/model_info/cifar10/Linf/Sridhar2021Robust.json b/robustbench/model_info/cifar10/Linf/Sridhar2021Robust.json deleted file mode 100644 index e6675737..00000000 --- a/robustbench/model_info/cifar10/Linf/Sridhar2021Robust.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2106.02078", - "name": "Improving Neural Network Robustness via Persistency of Excitation", - "authors": "Kaustubh Sridhar and Oleg Sokolsky and Insup Lee and James Weimer", - "additional_data": true, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ACC 2022", - "architecture": "WideResNet-28-10", - "eps": "8/255", - "clean_acc": "89.46", - "reported": "59.66", - "autoattack_acc": "59.66", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Sridhar2021Robust_34_15.json b/robustbench/model_info/cifar10/Linf/Sridhar2021Robust_34_15.json deleted file mode 100644 index d7b5dffa..00000000 --- a/robustbench/model_info/cifar10/Linf/Sridhar2021Robust_34_15.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2106.02078", - "name": "Improving Neural Network Robustness via Persistency of Excitation", - "authors": "Kaustubh Sridhar and Oleg Sokolsky and Insup Lee and James Weimer", - "additional_data": true, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ACC 2022", - "architecture": "WideResNet-34-15", - "eps": "8/255", - "clean_acc": "86.53", - "reported": "60.41", - "autoattack_acc": "60.41", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Standard.json b/robustbench/model_info/cifar10/Linf/Standard.json deleted file mode 100644 index c28ef588..00000000 --- a/robustbench/model_info/cifar10/Linf/Standard.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "link": "https://github.com/RobustBench/robustbench/", - "name": "Standardly trained model", - "authors": "", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "N/A", - "architecture": "WideResNet-28-10", - "eps": "8/255", - "clean_acc": "94.78", - "reported": "0.0", - "autoattack_acc": "0.0" -} diff --git a/robustbench/model_info/cifar10/Linf/Wang2020Improving.json b/robustbench/model_info/cifar10/Linf/Wang2020Improving.json deleted file mode 100644 index d348145a..00000000 --- a/robustbench/model_info/cifar10/Linf/Wang2020Improving.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://openreview.net/forum?id=rklOg6EFwS", - "name": "Improving Adversarial Robustness Requires Revisiting Misclassified Examples", - "authors": "Yisen Wang, Difan Zou, Jinfeng Yi, James Bailey, Xingjun Ma, Quanquan Gu", - "additional_data": true, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ICLR 2020", - "architecture": "WideResNet-28-10", - "eps": "8/255", - "clean_acc": "87.50", - "reported": "65.04", - "autoattack_acc": "56.29", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/WangZhang2019Bilateral.json b/robustbench/model_info/cifar10/Linf/WangZhang2019Bilateral.json deleted file mode 100644 index 2a8c4ef9..00000000 --- a/robustbench/model_info/cifar10/Linf/WangZhang2019Bilateral.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "link": "http://openaccess.thecvf.com/content_ICCV_2019/html/Wang_Bilateral_Adversarial_Training_Towards_Fast_Training_of_More_Robust_Models_ICCV_2019_paper.html", - "name": "Bilateral Adversarial Training: Towards Fast Training of More Robust Models Against Adversarial Attacks", - "authors": "Jianyu Wang, Haichao Zhang", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ICCV 2019", - "architecture": "WideResNet-28-10", - "eps": "8/255", - "clean_acc": "92.80", - "reported": "58.6", - "autoattack_acc": "29.35" -} diff --git a/robustbench/model_info/cifar10/Linf/Wong2020Fast.json b/robustbench/model_info/cifar10/Linf/Wong2020Fast.json deleted file mode 100644 index bef8f04a..00000000 --- a/robustbench/model_info/cifar10/Linf/Wong2020Fast.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2001.03994", - "name": "Fast is better than free: Revisiting adversarial training", - "authors": "Eric Wong, Leslie Rice, J. Zico Kolter", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ICLR 2020", - "architecture": "PreActResNet-18", - "eps": "8/255", - "clean_acc": "83.34", - "reported": "46.06", - "footnote": "Focuses on fast adversarial training.", - "autoattack_acc": "43.21" -} diff --git a/robustbench/model_info/cifar10/Linf/Wu2020Adversarial.json b/robustbench/model_info/cifar10/Linf/Wu2020Adversarial.json deleted file mode 100644 index 50a481b0..00000000 --- a/robustbench/model_info/cifar10/Linf/Wu2020Adversarial.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2004.05884", - "name": "Adversarial Weight Perturbation Helps Robust Generalization", - "authors": "Dongxian Wu, Shu-tao Xia, Yisen Wang", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "NeurIPS 2020", - "architecture": "WideResNet-34-10", - "eps": "8/255", - "clean_acc": "85.36", - "reported": "56.17", - "autoattack_acc": "56.17", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Wu2020Adversarial_extra.json b/robustbench/model_info/cifar10/Linf/Wu2020Adversarial_extra.json deleted file mode 100644 index 4686e3f9..00000000 --- a/robustbench/model_info/cifar10/Linf/Wu2020Adversarial_extra.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2004.05884", - "name": "Adversarial Weight Perturbation Helps Robust Generalization", - "authors": "Dongxian Wu, Shu-tao Xia, Yisen Wang", - "additional_data": true, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "NeurIPS 2020", - "architecture": "WideResNet-28-10", - "eps": "8/255", - "clean_acc": "88.25", - "reported": "60.04", - "autoattack_acc": "60.04", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Wu2020Do.json b/robustbench/model_info/cifar10/Linf/Wu2020Do.json deleted file mode 100644 index 36796fc0..00000000 --- a/robustbench/model_info/cifar10/Linf/Wu2020Do.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2010.01279", - "name": "Do Wider Neural Networks Really Help Adversarial Robustness?", - "authors": "Boxi Wu and Jinghui Chen and Deng Cai and Xiaofei He and Quanquan Gu", - "additional_data": true, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Oct 2020", - "architecture": "WideResNet-34-15", - "eps": "8/255", - "clean_acc": "87.67", - "reported": "60.65", - "footnote": "", - "autoattack_acc": "60.65" -} diff --git a/robustbench/model_info/cifar10/Linf/Xiao2020Enhancing.json b/robustbench/model_info/cifar10/Linf/Xiao2020Enhancing.json deleted file mode 100644 index d5500bb2..00000000 --- a/robustbench/model_info/cifar10/Linf/Xiao2020Enhancing.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "link": "https://arxiv.org/abs/1905.10510", - "name": "Enhancing Adversarial Defense by k-Winners-Take-All", - "authors": "Chang Xiao, Peilin Zhong, Changxi Zheng", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ICLR 2020", - "architecture": "DenseNet-121", - "eps": "0.031", - "clean_acc": "79.28", - "reported": "52.4", - "footnote": "Uses \\(\\ell_{\\infty} \\) = 0.031 \u2248 7.9/255 instead of 8/255.
7.40% robust accuracy is due to 1 restart of APGD-CE and 30 restarts of Square Attack
Note: this adaptive evaluation (Section 5) reports 0.16% robust accuracy on a different model (adversarially trained ResNet-18).", - "autoattack_acc": "18.50", - "external": "7.40", - "unreliable": true -} diff --git a/robustbench/model_info/cifar10/Linf/Zhang2019Theoretically.json b/robustbench/model_info/cifar10/Linf/Zhang2019Theoretically.json deleted file mode 100644 index 37bb6fb6..00000000 --- a/robustbench/model_info/cifar10/Linf/Zhang2019Theoretically.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/1901.08573", - "name": "Theoretically Principled Trade-off between Robustness and Accuracy", - "authors": "Hongyang Zhang, Yaodong Yu, Jiantao Jiao, Eric P. Xing, Laurent El Ghaoui, Michael I. Jordan", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ICML 2019", - "architecture": "WideResNet-34-10", - "eps": "0.031", - "clean_acc": "84.92", - "reported": "56.43", - "footnote": "Uses \\(\\ell_{\\infty} \\) = 0.031 \u2248 7.9/255 instead of 8/255.", - "autoattack_acc": "53.08" -} diff --git a/robustbench/model_info/cifar10/Linf/Zhang2019You.json b/robustbench/model_info/cifar10/Linf/Zhang2019You.json deleted file mode 100644 index 488203c7..00000000 --- a/robustbench/model_info/cifar10/Linf/Zhang2019You.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/1905.00877", - "name": "You Only Propagate Once: Accelerating Adversarial Training via Maximal Principle", - "authors": "Dinghuai Zhang, Tianyuan Zhang, Yiping Lu, Zhanxing Zhu, Bin Dong", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "NeurIPS 2019", - "architecture": "WideResNet-34-10", - "eps": "8/255", - "clean_acc": "87.20", - "reported": "47.98", - "footnote": "Focuses on fast adversarial training.", - "autoattack_acc": "44.83" -} diff --git a/robustbench/model_info/cifar10/Linf/Zhang2020Attacks.json b/robustbench/model_info/cifar10/Linf/Zhang2020Attacks.json deleted file mode 100644 index bdfab976..00000000 --- a/robustbench/model_info/cifar10/Linf/Zhang2020Attacks.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2002.11242", - "name": "Attacks Which Do Not Kill Training Make Adversarial Learning Stronger", - "authors": "Jingfeng Zhang, Xilie Xu, Bo Han, Gang Niu, Lizhen Cui, Masashi Sugiyama, Mohan Kankanhalli", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ICML 2020", - "architecture": "WideResNet-34-10", - "eps": "8/255", - "clean_acc": "84.52", - "reported": "54.36", - "autoattack_acc": "53.51", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Zhang2020Geometry.json b/robustbench/model_info/cifar10/Linf/Zhang2020Geometry.json deleted file mode 100644 index e27fe426..00000000 --- a/robustbench/model_info/cifar10/Linf/Zhang2020Geometry.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2010.01736", - "name": "Geometry-aware Instance-reweighted Adversarial Training", - "authors": "Jingfeng Zhang, Jianing Zhu, Gang Niu, Bo Han, Masashi Sugiyama, Mohan Kankanhalli", - "additional_data": true, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ICLR 2021", - "architecture": "WideResNet-28-10", - "eps": "8/255", - "clean_acc": "89.36", - "reported": "59.64", - "footnote": "Uses \\(\\ell_{\\infty} \\) = 0.031 \u2248 7.9/255 instead of 8/255.", - "autoattack_acc": "59.64", - "unreliable": false -} diff --git a/robustbench/model_info/cifar10/Linf/Zhang2020Towards.json b/robustbench/model_info/cifar10/Linf/Zhang2020Towards.json deleted file mode 100644 index f2992f7b..00000000 --- a/robustbench/model_info/cifar10/Linf/Zhang2020Towards.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/1906.06316", - "name": "Towards Stable and Efficient Training of Verifiably Robust Neural Networks", - "authors": "Huan Zhang, Hongge Chen, Chaowei Xiao, Sven Gowal, Robert Stanforth, Bo Li, Duane Boning, Cho-Jui Hsieh", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ICLR 2020", - "architecture": "5-layer-CNN", - "eps": "8/255", - "clean_acc": "44.73", - "reported": "34.29", - "autoattack_acc": "32.64", - "footnote": "Verifiably robust model with 32.24% provable robust accuracy" -} diff --git a/robustbench/model_info/cifar10/Linf/ZhangWang2019Defense.json b/robustbench/model_info/cifar10/Linf/ZhangWang2019Defense.json deleted file mode 100644 index a144a271..00000000 --- a/robustbench/model_info/cifar10/Linf/ZhangWang2019Defense.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "link": "http://papers.nips.cc/paper/8459-defense-against-adversarial-attacks-using-feature-scattering-based-adversarial-training", - "name": "Defense Against Adversarial Attacks Using Feature Scattering-based Adversarial Training", - "authors": "Haichao Zhang, Jianyu Wang", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "NeurIPS 2019", - "architecture": "WideResNet-28-10", - "eps": "8/255", - "clean_acc": "89.98", - "reported": "60.6", - "autoattack_acc": "36.64" -} diff --git a/robustbench/model_info/cifar10/Linf/ZhangXu2020Adversarial.json b/robustbench/model_info/cifar10/Linf/ZhangXu2020Adversarial.json deleted file mode 100644 index d3725967..00000000 --- a/robustbench/model_info/cifar10/Linf/ZhangXu2020Adversarial.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "link": "https://openreview.net/forum?id=Syejj0NYvr¬eId=Syejj0NYvr", - "name": "Adversarial Interpolation Training: A Simple Approach for Improving Model Robustness", - "authors": "Haichao Zhang, Wei Xu", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "OpenReview, Sep 2019", - "architecture": "WideResNet-28-10", - "eps": "8/255", - "clean_acc": "90.25", - "reported": "68.7", - "autoattack_acc": "36.45" -} diff --git a/robustbench/model_info/cifar10/corruptions/Addepalli2021Towards_WRN34.json b/robustbench/model_info/cifar10/corruptions/Addepalli2021Towards_WRN34.json deleted file mode 100644 index 76777796..00000000 --- a/robustbench/model_info/cifar10/corruptions/Addepalli2021Towards_WRN34.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "link": "https://openreview.net/forum?id=SHB_znlW5G7", - "name": "Towards Achieving Adversarial Robustness Beyond Perceptual Limits", - "authors": "Sravanti Addepalli, Samyak Jain, Gaurang Sriramanan, Shivangi Khare, Venkatesh Babu Radhakrishnan", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Apr 2021", - "architecture": "WideResNet-34-10", - "eps": null, - "clean_acc": "85.32", - "reported": "76.78", - "corruptions_acc": "76.78" - } \ No newline at end of file diff --git a/robustbench/model_info/cifar10/corruptions/Addepalli2022Efficient_WRN_34_10.json b/robustbench/model_info/cifar10/corruptions/Addepalli2022Efficient_WRN_34_10.json deleted file mode 100644 index 174d2e7f..00000000 --- a/robustbench/model_info/cifar10/corruptions/Addepalli2022Efficient_WRN_34_10.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "link": "https://artofrobust.github.io/short_paper/31.pdf", - "name": "Efficient and Effective Augmentation Strategy for Adversarial Training", - "authors": "Sravanti Addepalli, Samyak Jain, Venkatesh Babu Radhakrishnan", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "CVPRW 2022", - "architecture": "WideResNet-34-10", - "eps": null, - "clean_acc": "88.71", - "reported": "80.12", - "corruptions_acc": "80.12" -} \ No newline at end of file diff --git a/robustbench/model_info/cifar10/corruptions/Calian2021Defending.json b/robustbench/model_info/cifar10/corruptions/Calian2021Defending.json deleted file mode 100644 index 0396eeb4..00000000 --- a/robustbench/model_info/cifar10/corruptions/Calian2021Defending.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2104.01086", - "name": "Defending Against Image Corruptions Through Adversarial Augmentations", - "authors": "Dan A. Calian, Florian Stimberg, Olivia Wiles, Sylvestre-Alvise Rebuffi, Andras Gyorgy, Timothy Mann, Sven Gowal", - "additional_data": true, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Apr 2021", - "architecture": "ResNet-50", - "eps": null, - "clean_acc": "94.93", - "reported": "92.17", - "corruptions_acc": "92.17", - "footnote": "Uses extra data indirectly via a super resolution and autoencoder networks that were pre-trained on other datasets." -} \ No newline at end of file diff --git a/robustbench/model_info/cifar10/corruptions/Diffenderfer2021Winning_Binary.json b/robustbench/model_info/cifar10/corruptions/Diffenderfer2021Winning_Binary.json deleted file mode 100644 index 124fac62..00000000 --- a/robustbench/model_info/cifar10/corruptions/Diffenderfer2021Winning_Binary.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2106.09129", - "name": "A Winning Hand: Compressing Deep Networks Can Improve Out-Of-Distribution Robustness", - "authors": "James Diffenderfer, Brian R. Bartoldson, Shreya Chaganti, Jize Zhang, Bhavya Kailkhura", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "NeurIPS 2021", - "architecture": "WideResNet-18-2", - "eps": null, - "clean_acc": "94.87", - "reported": "88.32", - "corruptions_acc": "88.32", - "footnote": "Binary weight network trained with AugMix and pruned to 95% sparsity" -} \ No newline at end of file diff --git a/robustbench/model_info/cifar10/corruptions/Diffenderfer2021Winning_Binary_CARD_Deck.json b/robustbench/model_info/cifar10/corruptions/Diffenderfer2021Winning_Binary_CARD_Deck.json deleted file mode 100644 index dfb61ce6..00000000 --- a/robustbench/model_info/cifar10/corruptions/Diffenderfer2021Winning_Binary_CARD_Deck.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2106.09129", - "name": "A Winning Hand: Compressing Deep Networks Can Improve Out-Of-Distribution Robustness", - "authors": "James Diffenderfer, Brian R. Bartoldson, Shreya Chaganti, Jize Zhang, Bhavya Kailkhura", - "additional_data": false, - "number_forward_passes": 6, - "dataset": "cifar10", - "venue": "NeurIPS 2021", - "architecture": "WideResNet-18-2", - "eps": null, - "clean_acc": "95.09", - "reported": "90.15", - "corruptions_acc": "90.15", - "footnote": "Ensemble of binary weight networks each of which are pruned to 95% sparsity" -} \ No newline at end of file diff --git a/robustbench/model_info/cifar10/corruptions/Diffenderfer2021Winning_LRR.json b/robustbench/model_info/cifar10/corruptions/Diffenderfer2021Winning_LRR.json deleted file mode 100644 index fce9e50a..00000000 --- a/robustbench/model_info/cifar10/corruptions/Diffenderfer2021Winning_LRR.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2106.09129", - "name": "A Winning Hand: Compressing Deep Networks Can Improve Out-Of-Distribution Robustness", - "authors": "James Diffenderfer, Brian R. Bartoldson, Shreya Chaganti, Jize Zhang, Bhavya Kailkhura", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "NeurIPS 2021", - "architecture": "WideResNet-18-2", - "eps": null, - "clean_acc": "96.66", - "reported": "90.94", - "corruptions_acc": "90.94", - "footnote": "Trained with AugMix and pruned to 95% sparsity" -} \ No newline at end of file diff --git a/robustbench/model_info/cifar10/corruptions/Diffenderfer2021Winning_LRR_CARD_Deck.json b/robustbench/model_info/cifar10/corruptions/Diffenderfer2021Winning_LRR_CARD_Deck.json deleted file mode 100644 index a68986f7..00000000 --- a/robustbench/model_info/cifar10/corruptions/Diffenderfer2021Winning_LRR_CARD_Deck.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2106.09129", - "name": "A Winning Hand: Compressing Deep Networks Can Improve Out-Of-Distribution Robustness", - "authors": "James Diffenderfer, Brian R. Bartoldson, Shreya Chaganti, Jize Zhang, Bhavya Kailkhura", - "additional_data": false, - "number_forward_passes": 6, - "dataset": "cifar10", - "venue": "NeurIPS 2021", - "architecture": "WideResNet-18-2", - "eps": null, - "clean_acc": "96.56", - "reported": "null", - "corruptions_acc": "92.78", - "corruptions_acc": "92.78", - "footnote": "Ensemble of networks each of which are pruned to 95% sparsity" -} \ No newline at end of file diff --git a/robustbench/model_info/cifar10/corruptions/Erichson2022NoisyMix.json b/robustbench/model_info/cifar10/corruptions/Erichson2022NoisyMix.json deleted file mode 100644 index 474bdcf8..00000000 --- a/robustbench/model_info/cifar10/corruptions/Erichson2022NoisyMix.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "link": "https://arxiv.org/pdf/2202.01263.pdf", - "name": "NoisyMix: Boosting Robustness by Combining Data Augmentations, Stability Training, and Noise Injections", - "authors": "N. Benjamin Erichson, Soon Hoe Lim, Francisco Utrera, Winnie Xu, Ziang Cao, and Michael W. Mahoney", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Feb 2022", - "architecture": "WideResNet-28-4", - "eps": null, - "clean_acc": "96.73", - "reported": "92.78", - "corruptions_acc": "92.78" -} \ No newline at end of file diff --git a/robustbench/model_info/cifar10/corruptions/Gowal2020Uncovering_70_16_L2.json b/robustbench/model_info/cifar10/corruptions/Gowal2020Uncovering_70_16_L2.json deleted file mode 100644 index 907ccb5e..00000000 --- a/robustbench/model_info/cifar10/corruptions/Gowal2020Uncovering_70_16_L2.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2010.03593", - "name": "Uncovering the Limits of Adversarial Training against Norm-Bounded Adversarial Examples", - "authors": "Sven Gowal, Chongli Qin, Jonathan Uesato, Timothy Mann, Pushmeet Kohli", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Oct 2020", - "architecture": "WideResNet-70-16", - "eps": "8/255", - "clean_acc": "90.90", - "reported": "", - "corruptions_acc": "84.90", - "footnote": "Trained for \\(\\ell_2 \\) robustness with \\(\\varepsilon = 0.5\\)." -} diff --git a/robustbench/model_info/cifar10/corruptions/Gowal2020Uncovering_70_16_Linf.json b/robustbench/model_info/cifar10/corruptions/Gowal2020Uncovering_70_16_Linf.json deleted file mode 100644 index 00b9784c..00000000 --- a/robustbench/model_info/cifar10/corruptions/Gowal2020Uncovering_70_16_Linf.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2010.03593", - "name": "Uncovering the Limits of Adversarial Training against Norm-Bounded Adversarial Examples", - "authors": "Sven Gowal, Chongli Qin, Jonathan Uesato, Timothy Mann, Pushmeet Kohli", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Oct 2020", - "architecture": "WideResNet-70-16", - "eps": "8/255", - "clean_acc": "85.29", - "reported": "", - "corruptions_acc": "76.37", - "footnote": "Trained for \\(\\ell_{\\infty} \\) robustness with \\(\\varepsilon = 8/255\\)." -} diff --git a/robustbench/model_info/cifar10/corruptions/Gowal2020Uncovering_70_16_extra_L2.json b/robustbench/model_info/cifar10/corruptions/Gowal2020Uncovering_70_16_extra_L2.json deleted file mode 100644 index 08970ebe..00000000 --- a/robustbench/model_info/cifar10/corruptions/Gowal2020Uncovering_70_16_extra_L2.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2010.03593", - "name": "Uncovering the Limits of Adversarial Training against Norm-Bounded Adversarial Examples", - "authors": "Sven Gowal, Chongli Qin, Jonathan Uesato, Timothy Mann, Pushmeet Kohli", - "additional_data": true, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Oct 2020", - "architecture": "WideResNet-70-16", - "eps": "8/255", - "clean_acc": "94.74", - "reported": "", - "corruptions_acc": "87.68", - "footnote": "Trained for \\(\\ell_2 \\) robustness with \\(\\varepsilon = 0.5\\)." -} diff --git a/robustbench/model_info/cifar10/corruptions/Gowal2020Uncovering_70_16_extra_Linf.json b/robustbench/model_info/cifar10/corruptions/Gowal2020Uncovering_70_16_extra_Linf.json deleted file mode 100644 index efdc6071..00000000 --- a/robustbench/model_info/cifar10/corruptions/Gowal2020Uncovering_70_16_extra_Linf.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2010.03593", - "name": "Uncovering the Limits of Adversarial Training against Norm-Bounded Adversarial Examples", - "authors": "Sven Gowal, Chongli Qin, Jonathan Uesato, Timothy Mann, Pushmeet Kohli", - "additional_data": true, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Oct 2020", - "architecture": "WideResNet-70-16", - "eps": "8/255", - "clean_acc": "91.10", - "reported": "", - "corruptions_acc": "81.84", - "footnote": "Trained for \\(\\ell_{\\infty} \\) robustness with \\(\\varepsilon = 8/255\\)." -} diff --git a/robustbench/model_info/cifar10/corruptions/Hendrycks2020AugMix_ResNeXt.json b/robustbench/model_info/cifar10/corruptions/Hendrycks2020AugMix_ResNeXt.json deleted file mode 100644 index da66460e..00000000 --- a/robustbench/model_info/cifar10/corruptions/Hendrycks2020AugMix_ResNeXt.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "link": "https://arxiv.org/abs/1912.02781", - "name": "AugMix: A Simple Data Processing Method to Improve Robustness and Uncertainty", - "authors": "Dan Hendrycks, Norman Mu, Ekin D. Cubuk, Barret Zoph, Justin Gilmer, Balaji Lakshminarayanan", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ICLR 2020", - "architecture": "ResNeXt29_32x4d", - "eps": null, - "clean_acc": "95.83", - "reported": "89.1", - "corruptions_acc": "89.09" -} diff --git a/robustbench/model_info/cifar10/corruptions/Hendrycks2020AugMix_WRN.json b/robustbench/model_info/cifar10/corruptions/Hendrycks2020AugMix_WRN.json deleted file mode 100644 index af249968..00000000 --- a/robustbench/model_info/cifar10/corruptions/Hendrycks2020AugMix_WRN.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "link": "https://arxiv.org/abs/1912.02781", - "name": "AugMix: A Simple Data Processing Method to Improve Robustness and Uncertainty", - "authors": "Dan Hendrycks, Norman Mu, Ekin D. Cubuk, Barret Zoph, Justin Gilmer, Balaji Lakshminarayanan", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ICLR 2020", - "architecture": "WideResNet-40-2", - "eps": null, - "clean_acc": "95.08", - "reported": "88.8", - "corruptions_acc": "88.82" -} diff --git a/robustbench/model_info/cifar10/corruptions/Kireev2021Effectiveness_AugMixNoJSD.json b/robustbench/model_info/cifar10/corruptions/Kireev2021Effectiveness_AugMixNoJSD.json deleted file mode 100644 index b51b7939..00000000 --- a/robustbench/model_info/cifar10/corruptions/Kireev2021Effectiveness_AugMixNoJSD.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2103.02325", - "name": "On the effectiveness of adversarial training against common corruptions", - "authors": "Klim Kireev, Maksym Andriushchenko, Nicolas Flammarion", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Mar 2021", - "architecture": "PreActResNet-18", - "eps": null, - "clean_acc": "94.97", - "reported": "86.6", - "corruptions_acc": "86.60", - "footnote": "Training with AugMix without the JSD term." -} diff --git a/robustbench/model_info/cifar10/corruptions/Kireev2021Effectiveness_Gauss50percent.json b/robustbench/model_info/cifar10/corruptions/Kireev2021Effectiveness_Gauss50percent.json deleted file mode 100644 index cee64388..00000000 --- a/robustbench/model_info/cifar10/corruptions/Kireev2021Effectiveness_Gauss50percent.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2103.02325", - "name": "On the effectiveness of adversarial training against common corruptions", - "authors": "Klim Kireev, Maksym Andriushchenko, Nicolas Flammarion", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Mar 2021", - "architecture": "PreActResNet-18", - "eps": null, - "clean_acc": "93.24", - "reported": "85.0", - "corruptions_acc": "85.04", - "footnote": "Trained with 50% Gaussian noise per batch. Note: Gaussian noise is contained in CIFAR-10-C." -} diff --git a/robustbench/model_info/cifar10/corruptions/Kireev2021Effectiveness_RLAT.json b/robustbench/model_info/cifar10/corruptions/Kireev2021Effectiveness_RLAT.json deleted file mode 100644 index 9207f2c4..00000000 --- a/robustbench/model_info/cifar10/corruptions/Kireev2021Effectiveness_RLAT.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2103.02325", - "name": "On the effectiveness of adversarial training against common corruptions", - "authors": "Klim Kireev, Maksym Andriushchenko, Nicolas Flammarion", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Mar 2021", - "architecture": "PreActResNet-18", - "eps": null, - "clean_acc": "93.10", - "reported": "84.1", - "corruptions_acc": "84.10", - "footnote": "Trained with RLAT." -} diff --git a/robustbench/model_info/cifar10/corruptions/Kireev2021Effectiveness_RLATAugMix.json b/robustbench/model_info/cifar10/corruptions/Kireev2021Effectiveness_RLATAugMix.json deleted file mode 100644 index 2c60abff..00000000 --- a/robustbench/model_info/cifar10/corruptions/Kireev2021Effectiveness_RLATAugMix.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2103.02325", - "name": "On the effectiveness of adversarial training against common corruptions", - "authors": "Klim Kireev, Maksym Andriushchenko, Nicolas Flammarion", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Mar 2021", - "architecture": "ResNet-18", - "eps": null, - "clean_acc": "94.75", - "reported": "88.5", - "corruptions_acc": "89.60", - "footnote": "Trained with RLAT and AugMix." -} diff --git a/robustbench/model_info/cifar10/corruptions/Kireev2021Effectiveness_RLATAugMixNoJSD.json b/robustbench/model_info/cifar10/corruptions/Kireev2021Effectiveness_RLATAugMixNoJSD.json deleted file mode 100644 index 237a0d66..00000000 --- a/robustbench/model_info/cifar10/corruptions/Kireev2021Effectiveness_RLATAugMixNoJSD.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2103.02325", - "name": "On the effectiveness of adversarial training against common corruptions", - "authors": "Klim Kireev, Maksym Andriushchenko, Nicolas Flammarion", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Mar 2021", - "architecture": "PreActResNet-18", - "eps": null, - "clean_acc": "94.77", - "reported": "88.5", - "corruptions_acc": "88.53", - "footnote": "Trained with RLAT and AugMix without the JSD term." -} diff --git a/robustbench/model_info/cifar10/corruptions/Modas2021PRIMEResNet18.json b/robustbench/model_info/cifar10/corruptions/Modas2021PRIMEResNet18.json deleted file mode 100644 index 03ddb2be..00000000 --- a/robustbench/model_info/cifar10/corruptions/Modas2021PRIMEResNet18.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2112.13547", - "name": "PRIME: A Few Primitives Can Boost Robustness to Common Corruptions", - "authors": "Apostolos Modas, Rahul Rade, Guillermo Ortiz-Jiménez, Seyed-Mohsen Moosavi-Dezfooli, Pascal Frossard", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Dec 2021", - "architecture": "ResNet-18", - "eps": null, - "clean_acc": "93.06", - "reported": "89.05", - "corruptions_acc": "89.05" -} \ No newline at end of file diff --git a/robustbench/model_info/cifar10/corruptions/Rebuffi2021Fixing_70_16_cutmix_extra_L2.json b/robustbench/model_info/cifar10/corruptions/Rebuffi2021Fixing_70_16_cutmix_extra_L2.json deleted file mode 100644 index 44a1fb5e..00000000 --- a/robustbench/model_info/cifar10/corruptions/Rebuffi2021Fixing_70_16_cutmix_extra_L2.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2103.01946", - "name": "Fixing Data Augmentation to Improve Adversarial Robustness", - "authors": "Sylvestre-Alvise Rebuffi, Sven Gowal, Dan A. Calian, Florian Stimberg, Olivia Wiles, Timothy Mann", - "additional_data": true, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Mar 2021", - "architecture": "WideResNet-70-16", - "eps": "8/255", - "clean_acc": "95.74", - "reported": "", - "corruptions_acc": "88.23", - "footnote": "Trained for \\(\\ell_2 \\) robustness with \\(\\varepsilon = 0.5\\)." -} diff --git a/robustbench/model_info/cifar10/corruptions/Rebuffi2021Fixing_70_16_cutmix_extra_Linf.json b/robustbench/model_info/cifar10/corruptions/Rebuffi2021Fixing_70_16_cutmix_extra_Linf.json deleted file mode 100644 index dee4ba24..00000000 --- a/robustbench/model_info/cifar10/corruptions/Rebuffi2021Fixing_70_16_cutmix_extra_Linf.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2103.01946", - "name": "Fixing Data Augmentation to Improve Adversarial Robustness", - "authors": "Sylvestre-Alvise Rebuffi, Sven Gowal, Dan A. Calian, Florian Stimberg, Olivia Wiles, Timothy Mann", - "additional_data": true, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Mar 2021", - "architecture": "WideResNet-70-16", - "eps": "8/255", - "clean_acc": "92.23", - "reported": "", - "corruptions_acc": "82.82", - "footnote": "Trained for \\(\\ell_{\\infty} \\) robustness with \\(\\varepsilon = 8/255\\)." -} diff --git a/robustbench/model_info/cifar10/corruptions/Standard.json b/robustbench/model_info/cifar10/corruptions/Standard.json deleted file mode 100644 index 681958d9..00000000 --- a/robustbench/model_info/cifar10/corruptions/Standard.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "link": "https://github.com/RobustBench/robustbench/", - "name": "Standardly trained model", - "authors": "", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "N/A", - "architecture": "WideResNet-28-10", - "eps": "0.5", - "clean_acc": "94.78", - "reported": "73.46", - "corruptions_acc": "73.46" -} diff --git a/robustbench/model_info/cifar10/corruptions/unaggregated_results.csv b/robustbench/model_info/cifar10/corruptions/unaggregated_results.csv deleted file mode 100644 index 672546a9..00000000 --- a/robustbench/model_info/cifar10/corruptions/unaggregated_results.csv +++ /dev/null @@ -1,25 +0,0 @@ -,shot_noise,shot_noise,shot_noise,shot_noise,shot_noise,motion_blur,motion_blur,motion_blur,motion_blur,motion_blur,snow,snow,snow,snow,snow,pixelate,pixelate,pixelate,pixelate,pixelate,gaussian_noise,gaussian_noise,gaussian_noise,gaussian_noise,gaussian_noise,defocus_blur,defocus_blur,defocus_blur,defocus_blur,defocus_blur,brightness,brightness,brightness,brightness,brightness,fog,fog,fog,fog,fog,zoom_blur,zoom_blur,zoom_blur,zoom_blur,zoom_blur,frost,frost,frost,frost,frost,glass_blur,glass_blur,glass_blur,glass_blur,glass_blur,impulse_noise,impulse_noise,impulse_noise,impulse_noise,impulse_noise,contrast,contrast,contrast,contrast,contrast,jpeg_compression,jpeg_compression,jpeg_compression,jpeg_compression,jpeg_compression,elastic_transform,elastic_transform,elastic_transform,elastic_transform,elastic_transform -,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5 -Calian2021Defending,0.9421,0.9383,0.9217,0.9137,0.8959,0.9443,0.9356,0.9232,0.9234,0.9081,0.9390000000000001,0.9279999999999999,0.9129999999999999,0.8917,0.9036,0.9443,0.9418,0.9386,0.9258,0.8682,0.9359999999999999,0.9276,0.9064,0.9001,0.8899,0.9490000000000001,0.9470000000000001,0.9439,0.9385,0.9253,0.9493,0.9493,0.9489,0.9485,0.9440000000000001,0.9498,0.9413,0.9302,0.9113,0.8344,0.9395,0.9395,0.9366,0.9344,0.9254,0.9447,0.9392,0.9309,0.9288,0.9209,0.9099,0.9097,0.9118,0.8655,0.8685,0.9318,0.9151,0.8998,0.8646,0.828,0.9497,0.9457,0.9432,0.9385,0.9143,0.9365,0.9281,0.9222,0.9166,0.9052,0.9286,0.9324,0.9265,0.9068,0.8781 -Gowal2020Uncovering_70_16_Linf,0.8478,0.8416,0.8211,0.8085,0.7803,0.8238,0.7982,0.7611,0.7636,0.7255,0.8454,0.8296,0.8086,0.7558,0.7211,0.8473,0.8389,0.8365,0.825,0.8066,0.8426,0.8325,0.8089,0.7933,0.7794,0.8471,0.8334,0.8161,0.7977,0.7483,0.8546,0.8524,0.8396,0.8163,0.7345,0.8306,0.7678,0.6732,0.5437,0.3283,0.8139,0.8119,0.8004,0.7888,0.7718,0.8289,0.7747,0.7157,0.7267,0.6976,0.8088,0.8061,0.8015,0.7536,0.7558,0.8222,0.7909,0.7647,0.7102,0.6647,0.8138,0.6183,0.4366,0.266,0.1895,0.8406,0.8325,0.8282,0.826,0.8216,0.8036,0.8058,0.8004,0.7843,0.778 -Gowal2020Uncovering_70_16_extra_Linf,0.9043,0.8952,0.8595,0.8368,0.7922,0.8866,0.8593,0.8206,0.8243,0.7788,0.9014,0.8906,0.8714,0.8423,0.8243,0.9042,0.8991,0.8944,0.8817,0.8613,0.8972,0.8752,0.8361,0.8099,0.7836,0.9064,0.8937,0.8759,0.8579,0.805,0.9142,0.9131,0.907,0.8949,0.8479,0.892,0.8212,0.7232,0.5942,0.3582,0.8747,0.8714,0.8605,0.8508,0.8326,0.8993,0.8732,0.8320000000000001,0.8327,0.8003,0.8529,0.8549,0.8529,0.7883,0.7965,0.8689,0.8299,0.794,0.725,0.6584,0.8709,0.6793,0.4836,0.2764,0.1812,0.8959999999999999,0.8871,0.8852,0.8804,0.8768,0.8672,0.8687,0.8607,0.8476,0.8311 -Gowal2020Uncovering_70_16_L2,0.919,0.917,0.889,0.8809999999999999,0.861,0.8959999999999999,0.878,0.851,0.847,0.818,0.916,0.9,0.88,0.851,0.858,0.915,0.909,0.906,0.897,0.877,0.913,0.902,0.875,0.868,0.8590000000000001,0.914,0.902,0.8859999999999999,0.871,0.835,0.921,0.915,0.913,0.91,0.889,0.902,0.865,0.785,0.652,0.386,0.8859999999999999,0.882,0.873,0.8690000000000001,0.843,0.917,0.907,0.884,0.8809999999999999,0.8490000000000001,0.87,0.871,0.8640000000000001,0.818,0.8290000000000001,0.913,0.889,0.868,0.828,0.754,0.897,0.7879999999999999,0.632,0.416,0.208,0.909,0.902,0.903,0.901,0.894,0.875,0.866,0.866,0.856,0.841 -Gowal2020Uncovering_70_16_extra_L2,0.9390000000000001,0.9329999999999999,0.898,0.887,0.851,0.9309999999999999,0.915,0.885,0.883,0.838,0.935,0.912,0.9109999999999999,0.8859999999999999,0.88,0.9420000000000001,0.9420000000000001,0.941,0.9309999999999999,0.91,0.9329999999999999,0.912,0.889,0.866,0.8420000000000001,0.941,0.935,0.9259999999999999,0.915,0.866,0.9470000000000001,0.946,0.941,0.941,0.919,0.94,0.9009999999999999,0.8320000000000001,0.711,0.442,0.93,0.922,0.912,0.9109999999999999,0.889,0.948,0.9309999999999999,0.902,0.9,0.8640000000000001,0.887,0.8959999999999999,0.904,0.8240000000000001,0.85,0.935,0.915,0.884,0.805,0.684,0.93,0.8370000000000001,0.722,0.486,0.19399999999999998,0.934,0.93,0.93,0.93,0.929,0.9279999999999999,0.919,0.9109999999999999,0.907,0.884 -Hendrycks2020AugMixWRN,0.9352,0.9119,0.8536,0.8289,0.7704,0.9448,0.9349,0.9143,0.9156,0.8943,0.9356,0.908,0.9014,0.8779,0.8585,0.9419,0.9216,0.9041,0.8057,0.5870000000000001,0.9135,0.8655,0.7955,0.7587,0.7122,0.9506,0.9487,0.9458,0.9337,0.9053,0.9495,0.9469,0.9447,0.9385,0.9238,0.951,0.947,0.9367,0.9173,0.8251,0.9406,0.9418,0.9349,0.9264,0.9074,0.9347,0.915,0.8859999999999999,0.8846,0.8474,0.8588,0.8582,0.8707,0.7652,0.7939,0.9378,0.9204,0.903,0.8363,0.738,0.9501,0.939,0.9282,0.9082,0.7906,0.9134,0.8908,0.8787,0.8687,0.8533,0.9306,0.935,0.9262,0.8938,0.8526 -Hendrycks2020AugMixResNeXt,0.9344,0.9091,0.8281,0.7928,0.7116,0.9505,0.9387,0.9238,0.9237,0.8977,0.9448,0.9126,0.9079,0.8822,0.8674,0.9492,0.9322,0.9151,0.8345,0.6499,0.909,0.8426,0.7577,0.7045,0.6518,0.9575,0.9546,0.9508,0.9438,0.9177,0.9561,0.9547,0.9502,0.9466,0.9273,0.9561,0.9503,0.9359,0.917,0.8170000000000001,0.9468,0.946,0.9398,0.9339,0.9147,0.9403,0.9218,0.8923,0.8901,0.8551,0.8442,0.8567,0.8712,0.7485,0.7832,0.9497,0.9371,0.9226,0.8711,0.7878,0.9553,0.9435,0.9322,0.9109,0.8059,0.9211,0.9009,0.8875,0.8763,0.8572,0.9372,0.9401,0.934,0.8976,0.8579 -Standard,0.8504,0.7573,0.5349,0.4535,0.3429,0.9029,0.8385,0.7440000000000001,0.7483,0.6525,0.8991,0.8043,0.8365,0.8051,0.7493,0.9195,0.8604,0.8002,0.6035,0.4155,0.7778,0.5788,0.3919,0.3261,0.2767,0.9458,0.9338,0.8898,0.7744,0.5306,0.9475,0.9438,0.9378,0.9281,0.907,0.9451,0.9356,0.9229,0.8959,0.7399,0.8771,0.8455,0.7748,0.7029,0.5798,0.8955,0.835,0.7261,0.7086,0.5870000000000001,0.5343,0.5575,0.5695,0.4319,0.4568,0.8289,0.6905,0.5737,0.4011,0.2708,0.9427,0.9216,0.8972,0.8359,0.5331,0.8636,0.7965,0.7796,0.7415,0.6970000000000001,0.9047,0.9022,0.8586,0.7894,0.7341 -Kireev2021Effectiveness_Gauss50percent,0.9232,0.9172,0.9113,0.9079,0.9008,0.903,0.86,0.8045,0.8047,0.7414,0.9129,0.8805,0.8561,0.8205,0.8233,0.923,0.9098,0.9045,0.8689,0.7818,0.9197,0.9093,0.9064,0.904,0.902,0.9288,0.9162,0.8902,0.8504,0.7374,0.9309,0.9247,0.9173,0.908,0.8799,0.9232,0.8947,0.8402,0.7558,0.5231,0.8887,0.8796,0.8575,0.8370000000000001,0.7963,0.913,0.8911,0.8631,0.8629,0.8282,0.8315,0.8311,0.8417,0.7181,0.7415,0.921,0.9102,0.8947,0.8519,0.7869,0.917,0.8447,0.7559999999999999,0.5717,0.2279,0.9166,0.9044,0.8975,0.8897,0.88,0.893,0.8941,0.8717,0.8412,0.8139 -Kireev2021Effectiveness_AugMixNoJSD,0.9249,0.9051,0.8295,0.7844,0.7,0.9395,0.9239,0.8996,0.8971,0.8711,0.9249,0.8829,0.8785,0.8549,0.8412,0.9405,0.9269,0.9117,0.8437,0.7066,0.9064,0.8417,0.7522,0.6976,0.6424,0.9504,0.9482,0.9444,0.9317,0.8973,0.9487,0.9462,0.9424,0.9359999999999999,0.9236,0.9474,0.9412,0.9306,0.9128,0.8191,0.9332,0.9328,0.9215,0.9077,0.8794,0.9317,0.9069,0.8628,0.8658,0.8152,0.7681,0.7686,0.787,0.6464,0.6777,0.9317,0.9077,0.8746,0.7645,0.5991,0.9473,0.934,0.922,0.8935,0.6832,0.9051,0.8699,0.863,0.8461,0.8151,0.9262,0.9279999999999999,0.9202,0.8625,0.8012 -Kireev2021Effectiveness_RLATAugMixNoJSD,0.9398,0.9312,0.8907,0.8658,0.8109999999999999,0.9366,0.9223,0.9044,0.9024,0.8759999999999999,0.9304,0.8948,0.8866,0.858,0.8543,0.9409,0.9309999999999999,0.9259999999999999,0.8897,0.7975,0.9317,0.9013,0.8505,0.8123,0.7782,0.9473,0.9454,0.9388,0.9302,0.8986,0.9481,0.9462,0.9415,0.9347,0.9178,0.9478,0.938,0.9209,0.892,0.7755,0.9341,0.9344,0.9267,0.9193,0.9025,0.9382,0.9159,0.8892,0.8879,0.8551,0.8345,0.8365,0.852,0.7298,0.7595,0.9346,0.9132,0.8872,0.8005,0.6669,0.9443,0.9188,0.8984,0.8378,0.4563,0.9276,0.9096,0.9047,0.8934,0.882,0.9255,0.9283,0.9214,0.8915,0.8548 -Kireev2021Effectiveness_RLAT,0.927,0.9206,0.8808,0.8626,0.8074,0.9045,0.863,0.8024,0.8042,0.7422,0.9125,0.8825,0.8648,0.8245,0.8251,0.9266,0.919,0.9148,0.8986,0.851,0.9242,0.8965,0.8571,0.8293,0.7926,0.9272,0.9172,0.8962,0.8625,0.7557,0.9312,0.9285,0.9215,0.9124,0.8804,0.9214,0.8851,0.828,0.7242,0.4763,0.8944,0.8876,0.8676,0.8464,0.8086,0.9186,0.8944,0.8583,0.8607,0.8185,0.8370000000000001,0.8445,0.8531,0.7299,0.7561,0.9136,0.8835,0.8461,0.736,0.5995,0.9134,0.8251,0.7116,0.4903,0.1918,0.9195,0.9087,0.9048,0.9009999999999999,0.8923,0.8959999999999999,0.8981,0.8796,0.8553,0.8314 -Kireev2021Effectiveness_RLATAugMix,0.9394,0.9322,0.8923,0.8717,0.8249,0.94,0.9295,0.9138,0.9147,0.8953,0.9321,0.9061,0.8967,0.8702,0.8645,0.9418,0.9345,0.9281,0.9009,0.8293,0.9315,0.9068,0.8631,0.8343,0.7979,0.9469,0.9440000000000001,0.94,0.932,0.9121,0.9487,0.9481,0.9447,0.9398,0.9277,0.9464,0.9397,0.9232,0.8959,0.784,0.9377,0.9382,0.9325,0.9253,0.9133,0.9389,0.9224,0.8977,0.8976,0.8646,0.8521,0.8573,0.8694,0.7558,0.7829999999999999,0.937,0.9182,0.8883,0.8187,0.7070000000000001,0.9455,0.9296,0.9159,0.8873,0.6509999999999999,0.9259,0.9102,0.9031,0.8977,0.8817,0.9262,0.9304,0.9211,0.8957,0.8574 -Rebuffi2021Fixing_70_16_cutmix_extra_L2,0.9511,0.9405,0.8915,0.8595,0.7835,0.9435,0.9224,0.8979,0.8969,0.8589,0.9451,0.9278,0.9156,0.8879,0.8832,0.9524,0.9491,0.946,0.9357,0.9151,0.9444,0.9121,0.8573,0.8175,0.7667,0.9557,0.9484,0.9378,0.9249,0.8788,0.9583,0.9579,0.955,0.9488,0.9276,0.9467,0.911,0.8527,0.7519,0.5136,0.9385,0.9361,0.9291,0.9189,0.9016,0.9499,0.9353,0.9099,0.9076,0.8754,0.8942,0.8984,0.9086,0.8143,0.8462,0.9425,0.9188,0.8887,0.7737,0.6045,0.9394,0.8571,0.7524,0.5383,0.215,0.9494,0.9439,0.9414,0.9362,0.9332,0.9326,0.9339,0.9257,0.9136,0.9011 -Rebuffi2021Fixing_70_16_cutmix_extra_Linf,0.9136,0.9025,0.8590000000000001,0.8321,0.7813,0.8981,0.8736,0.8356,0.8369,0.7918,0.9113,0.9022,0.8859,0.8571,0.8484,0.9155,0.9098,0.9053,0.8934,0.8719,0.9056,0.877,0.8302,0.8006,0.7694,0.9176,0.9057,0.8898,0.8717,0.82,0.9262,0.9247,0.9207,0.9119,0.8732,0.9023,0.8364,0.7361,0.6069,0.3637,0.8904,0.8864,0.8757,0.8672,0.8472,0.9133,0.8899,0.8523,0.8509,0.8169,0.8617,0.8624,0.8643,0.7943,0.8064,0.8831,0.84,0.7935,0.7048,0.6112,0.8861,0.6968,0.4959,0.2794,0.1886,0.9082,0.8988,0.8976,0.8941,0.8871,0.8845,0.8841,0.8752,0.8622,0.8472 -Diffenderfer2021Winning_LRR,0.9494,0.9312,0.8661,0.8259,0.7391,0.9594,0.9513,0.9403,0.942,0.9303,0.9525,0.933,0.9265,0.909,0.9025,0.9606,0.9493,0.9424,0.8973,0.7847,0.9319,0.8805,0.7967,0.7424,0.6869,0.9658,0.9645,0.9601,0.9535,0.9375,0.9661,0.9633,0.961,0.9579,0.9481,0.9647,0.9608,0.9548,0.9425,0.8815,0.9559,0.9576,0.9525,0.9489,0.9327,0.9541,0.9372,0.916,0.9128,0.8805,0.8578,0.8666,0.8744,0.7571,0.7844,0.9569,0.944,0.9271,0.8642,0.7626,0.9647,0.9588,0.9539,0.939,0.8474,0.9258,0.9062,0.897,0.8796,0.8557,0.947,0.9524,0.9478,0.9121,0.8641 -Diffenderfer2021Winning_Binary,0.934,0.9226,0.8737,0.8495,0.8019,0.9390000000000001,0.9277,0.9066,0.909,0.8899,0.9299,0.8919,0.8843,0.8625,0.8429,0.9399,0.9277,0.9179999999999999,0.8745,0.7773,0.9208,0.8841,0.8244,0.7925,0.7514,0.948,0.9457,0.9406,0.9341,0.9079,0.9466,0.9432,0.9374,0.9333,0.9196,0.9441,0.9406,0.9285,0.9067,0.8105,0.9353,0.9347,0.9279,0.9194,0.8994,0.9327,0.9086,0.8744,0.8742,0.828,0.8128,0.8181,0.8282,0.7103,0.7316,0.9281,0.9054,0.873,0.7781,0.652,0.9444,0.9308,0.9165,0.8888,0.6984,0.9161,0.8957,0.8891,0.8753,0.8531,0.9266,0.9279999999999999,0.9224,0.8853,0.8340000000000001 -Diffenderfer2021Winning_LRR_CARD_Deck,0.9572,0.9515,0.9304,0.9229,0.9042,0.9585,0.9456,0.9304,0.9351,0.9147,0.956,0.9417,0.9305,0.9092,0.9055,0.961,0.9553,0.9506,0.9251,0.8495,0.9504,0.9348,0.9172,0.9054,0.8914,0.9653,0.9634,0.9601,0.9506,0.9224,0.9646,0.9636,0.9615,0.9574,0.9457,0.9642,0.9609,0.9453,0.9281,0.8340000000000001,0.9551,0.9542,0.9475,0.9389,0.9219,0.9569,0.9444,0.9269,0.9273,0.9006,0.8925,0.8958,0.8996,0.8039,0.8228,0.9604,0.9528,0.9462,0.912,0.8640000000000001,0.9647,0.952,0.9375,0.9132,0.7956,0.9445,0.9334,0.929,0.9235,0.9088,0.9512,0.9511,0.9464,0.9154,0.8783 -Diffenderfer2021Winning_Binary_CARD_Deck,0.945,0.9388,0.9229,0.9149,0.9036,0.9376,0.9214,0.8957,0.8954,0.8701,0.9385,0.9134,0.8982,0.8668,0.8621,0.9441,0.9362,0.9307,0.9015,0.8225,0.9388,0.9276,0.9112,0.9004,0.8925,0.9499,0.9447,0.9369,0.9243,0.8857,0.9503,0.9474,0.9418,0.9356,0.9172,0.9481,0.9366,0.9171,0.884,0.746,0.9339,0.9309,0.9229999999999999,0.9134,0.8909999999999999,0.9381,0.9195,0.8985,0.8986,0.8692,0.8724,0.8713,0.8741,0.778,0.7933,0.9431,0.9291,0.9186,0.8843,0.8426,0.9444,0.9192,0.8918,0.8402,0.6042,0.9329999999999999,0.9203,0.9161,0.9096,0.8966,0.9295,0.9321,0.9211,0.8895,0.851 -Addepalli2021Towards_WRN34,0.8466,0.8389,0.7994,0.7758,0.7151,0.8236,0.7945,0.7601,0.7581,0.724,0.8451,0.8379,0.8177,0.8048,0.7985,0.8448,0.8405,0.8333,0.8212,0.8016,0.8394,0.8172,0.7719,0.7423,0.7037,0.8459,0.8326,0.815,0.7972,0.7467,0.8587,0.8588,0.8568,0.8526,0.8317,0.8303,0.7687,0.684,0.5667,0.3517,0.816,0.8127,0.8043,0.7947,0.7759,0.8483,0.8285,0.7935,0.7843,0.7467,0.7998,0.8012,0.7935,0.7425,0.7465,0.8248,0.7948,0.7542,0.6549,0.551,0.8118,0.6633,0.5305,0.3584,0.1953,0.8379,0.8307,0.8279,0.8231,0.8195,0.8062,0.8101,0.7952,0.781,0.7728 -Modas2021PRIMEResNet18,0.9203,0.9157,0.8993,0.8975,0.8848,0.92,0.906,0.8883,0.8885,0.8677,0.918,0.899,0.8857,0.856,0.856,0.9222,0.9118,0.9073,0.8814,0.8356,0.9145,0.901,0.8902,0.8767,0.8686,0.928,0.9236,0.9165,0.907,0.8845,0.929,0.9275,0.925,0.9238,0.9148,0.9288,0.9173,0.898,0.8575,0.7277,0.9156,0.9163,0.9112,0.9063,0.8931,0.9211,0.9097,0.8953,0.894,0.8807,0.8737,0.8744,0.8802,0.8246,0.8343,0.9148,0.8877,0.8668,0.8048,0.743,0.9291,0.9172,0.9096,0.8936,0.8389,0.914,0.8997,0.8954,0.8903,0.8804,0.9055,0.908,0.8996,0.8799,0.8594 -Erichson2022NoisyMix,0.9611,0.9529,0.9339,0.9198,0.8991,0.9588,0.9463,0.9318,0.9327,0.9118,0.9581,0.9396,0.935,0.9166,0.9065,0.9594,0.95,0.9427,0.8862,0.7533,0.9548,0.9395,0.912,0.9003,0.8818,0.9668,0.9637,0.959,0.9513,0.9269,0.9682,0.9659,0.9636,0.9601,0.9493,0.9666,0.961,0.9509,0.9338,0.8563,0.9545,0.9536,0.9469,0.9417,0.9276,0.9621,0.9497,0.9329,0.9292,0.9076,0.8973,0.8964,0.9038,0.8305,0.8412,0.9662,0.9658,0.9647,0.9614,0.9618,0.9666,0.957,0.946,0.9136,0.6425,0.9429,0.9272,0.9201,0.9098,0.8909,0.9512,0.9506,0.945,0.9175,0.8805 -Addepalli2022Efficient_WRN_34_10,0.8819,0.8752,0.8474,0.8345,0.8038,0.8565,0.8319,0.7952,0.7941,0.7508,0.8752,0.8623,0.8473,0.8132,0.797,0.8798,0.8738,0.8701,0.8565,0.838,0.8769,0.8596,0.8286,0.8123,0.7974,0.8811,0.8657,0.8483,0.8315,0.7803,0.888,0.8859,0.8799,0.8693,0.8309,0.8674,0.7994,0.7051,0.5727,0.3483,0.8485,0.8429,0.8306,0.8208,0.8012,0.87,0.8425,0.8033,0.805,0.7798,0.8378,0.8365,0.8345,0.7796,0.7841,0.8618,0.8301,0.8075,0.7472,0.703,0.8498,0.6766,0.5126,0.3187,0.1941,0.873,0.866,0.8609,0.8576,0.8571,0.8401,0.84,0.8353,0.8175,0.8074 diff --git a/robustbench/model_info/cifar100/Linf/Addepalli2021Towards_PARN18.json b/robustbench/model_info/cifar100/Linf/Addepalli2021Towards_PARN18.json deleted file mode 100644 index e0cbe9e1..00000000 --- a/robustbench/model_info/cifar100/Linf/Addepalli2021Towards_PARN18.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://openreview.net/forum?id=SHB_znlW5G7", - "name": "Towards Achieving Adversarial Robustness Beyond Perceptual Limits", - "authors": "Sravanti Addepalli, Samyak Jain, Gaurang Sriramanan, Shivangi Khare, Venkatesh Babu Radhakrishnan", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar100", - "venue": "OpenReview, Jun 2021", - "architecture": "PreActResNet-18", - "eps": "8/255", - "clean_acc": "62.02", - "reported": "27.14", - "autoattack_acc": "27.14", - "unreliable": false -} \ No newline at end of file diff --git a/robustbench/model_info/cifar100/Linf/Addepalli2021Towards_WRN34.json b/robustbench/model_info/cifar100/Linf/Addepalli2021Towards_WRN34.json deleted file mode 100644 index 2f82a135..00000000 --- a/robustbench/model_info/cifar100/Linf/Addepalli2021Towards_WRN34.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://openreview.net/forum?id=SHB_znlW5G7", - "name": "Towards Achieving Adversarial Robustness Beyond Perceptual Limits", - "authors": "Sravanti Addepalli, Samyak Jain, Gaurang Sriramanan, Shivangi Khare, Venkatesh Babu Radhakrishnan", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar100", - "venue": "OpenReview, Jun 2021", - "architecture": "WideResNet-34-10", - "eps": "8/255", - "clean_acc": "65.73", - "reported": "30.35", - "autoattack_acc": "30.35", - "unreliable": false -} \ No newline at end of file diff --git a/robustbench/model_info/cifar100/Linf/Addepalli2022Efficient_RN18.json b/robustbench/model_info/cifar100/Linf/Addepalli2022Efficient_RN18.json deleted file mode 100644 index 0aae4cf4..00000000 --- a/robustbench/model_info/cifar100/Linf/Addepalli2022Efficient_RN18.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://artofrobust.github.io/short_paper/31.pdf", - "name": "Efficient and Effective Augmentation Strategy for Adversarial Training", - "authors": "Sravanti Addepalli, Samyak Jain, Venkatesh Babu Radhakrishnan", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar100", - "venue": "CVPRW 2022", - "architecture": "ResNet-18", - "eps": "8/255", - "clean_acc": "65.45", - "reported": "27.69", - "autoattack_acc": "27.67", - "unreliable": false -} \ No newline at end of file diff --git a/robustbench/model_info/cifar100/Linf/Addepalli2022Efficient_WRN_34_10.json b/robustbench/model_info/cifar100/Linf/Addepalli2022Efficient_WRN_34_10.json deleted file mode 100644 index 85984d36..00000000 --- a/robustbench/model_info/cifar100/Linf/Addepalli2022Efficient_WRN_34_10.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://artofrobust.github.io/short_paper/31.pdf", - "name": "Efficient and Effective Augmentation Strategy for Adversarial Training", - "authors": "Sravanti Addepalli, Samyak Jain, Venkatesh Babu Radhakrishnan", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar100", - "venue": "CVPRW 2022", - "architecture": "WideResNet-34-10", - "eps": "8/255", - "clean_acc": "68.75", - "reported": "31.85", - "autoattack_acc": "31.85", - "unreliable": false -} \ No newline at end of file diff --git a/robustbench/model_info/cifar100/Linf/Chen2020Efficient.json b/robustbench/model_info/cifar100/Linf/Chen2020Efficient.json deleted file mode 100644 index e35c0a1f..00000000 --- a/robustbench/model_info/cifar100/Linf/Chen2020Efficient.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2010.01278", - "name": "Efficient Robust Training via Backward Smoothing", - "authors": "Jinghui Chen, Yu Cheng, Zhe Gan, Quanquan Gu, Jingjing Liu", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar100", - "venue": "arXiv, Oct 2020", - "architecture": "WideResNet-34-10", - "eps": "8/255", - "clean_acc": "62.15", - "reported": "26.94", - "autoattack_acc": "26.94", - "footnote": null -} diff --git a/robustbench/model_info/cifar100/Linf/Chen2021LTD_WRN34_10.json b/robustbench/model_info/cifar100/Linf/Chen2021LTD_WRN34_10.json deleted file mode 100644 index 940befcc..00000000 --- a/robustbench/model_info/cifar100/Linf/Chen2021LTD_WRN34_10.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2111.02331", - "name": "LTD: Low Temperature Distillation for Robust Adversarial Training", - "authors": "Erh-Chung Chen, Che-Rung Lee", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar100", - "venue": "arXiv, Nov 2021", - "architecture": "WideResNet-34-10", - "eps": "8/255", - "clean_acc": "64.07", - "reported": "30.59", - "footnote": "", - "autoattack_acc": "30.59", - "unreliable": false -} diff --git a/robustbench/model_info/cifar100/Linf/Cui2020Learnable_34_10_LBGAT0.json b/robustbench/model_info/cifar100/Linf/Cui2020Learnable_34_10_LBGAT0.json deleted file mode 100644 index 0c9a1fef..00000000 --- a/robustbench/model_info/cifar100/Linf/Cui2020Learnable_34_10_LBGAT0.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2011.11164", - "name": "Learnable Boundary Guided Adversarial Training", - "authors": "Jiequan Cui, Shu Liu, Liwei Wang, Jiaya Jia", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar100", - "venue": "ICCV 2021", - "architecture": "WideResNet-34-10", - "eps": "8/255", - "clean_acc": "70.25", - "reported": "27.16", - "autoattack_acc": "27.16", - "footnote": "Uses \\(\\ell_{\\infty} \\) = 0.031 \u2248 7.9/255 instead of 8/255", - "unreliable": false -} \ No newline at end of file diff --git a/robustbench/model_info/cifar100/Linf/Cui2020Learnable_34_10_LBGAT6.json b/robustbench/model_info/cifar100/Linf/Cui2020Learnable_34_10_LBGAT6.json deleted file mode 100644 index aa3f5e97..00000000 --- a/robustbench/model_info/cifar100/Linf/Cui2020Learnable_34_10_LBGAT6.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2011.11164", - "name": "Learnable Boundary Guided Adversarial Training", - "authors": "Jiequan Cui, Shu Liu, Liwei Wang, Jiaya Jia", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar100", - "venue": "ICCV 2021", - "architecture": "WideResNet-34-10", - "eps": "8/255", - "clean_acc": "60.64", - "reported": "29.33", - "autoattack_acc": "29.33", - "footnote": "Uses \\(\\ell_{\\infty} \\) = 0.031 \u2248 7.9/255 instead of 8/255" -} \ No newline at end of file diff --git a/robustbench/model_info/cifar100/Linf/Cui2020Learnable_34_20_LBGAT6.json b/robustbench/model_info/cifar100/Linf/Cui2020Learnable_34_20_LBGAT6.json deleted file mode 100644 index bd7e65aa..00000000 --- a/robustbench/model_info/cifar100/Linf/Cui2020Learnable_34_20_LBGAT6.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2011.11164", - "name": "Learnable Boundary Guided Adversarial Training", - "authors": "Jiequan Cui, Shu Liu, Liwei Wang, Jiaya Jia", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar100", - "venue": "ICCV 2021", - "architecture": "WideResNet-34-20", - "eps": "8/255", - "clean_acc": "62.55", - "reported": "30.20", - "autoattack_acc": "30.20", - "footnote": "Uses \\(\\ell_{\\infty} \\) = 0.031 \u2248 7.9/255 instead of 8/255" -} \ No newline at end of file diff --git a/robustbench/model_info/cifar100/Linf/Debenedetti2022Light_XCiT-L12.json b/robustbench/model_info/cifar100/Linf/Debenedetti2022Light_XCiT-L12.json deleted file mode 100644 index 7fe1dd3a..00000000 --- a/robustbench/model_info/cifar100/Linf/Debenedetti2022Light_XCiT-L12.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2209.07399", - "name": "A Light Recipe to Train Robust Vision Transformers", - "authors": "Edoardo Debenedetti, Vikash Sehwag, Prateek Mittal", - "additional_data": true, - "number_forward_passes": 1, - "dataset": "cifar100", - "venue": "arXiv, Sep 2022", - "architecture": "XCiT-L12", - "eps": "8/255", - "clean_acc": "70.76", - "reported": "35.08", - "autoattack_acc": "35.08", - "unreliable": false -} diff --git a/robustbench/model_info/cifar100/Linf/Debenedetti2022Light_XCiT-M12.json b/robustbench/model_info/cifar100/Linf/Debenedetti2022Light_XCiT-M12.json deleted file mode 100644 index 7eeaea60..00000000 --- a/robustbench/model_info/cifar100/Linf/Debenedetti2022Light_XCiT-M12.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2209.07399", - "name": "A Light Recipe to Train Robust Vision Transformers", - "authors": "Edoardo Debenedetti, Vikash Sehwag, Prateek Mittal", - "additional_data": true, - "number_forward_passes": 1, - "dataset": "cifar100", - "venue": "arXiv, Sep 2022", - "architecture": "XCiT-M12", - "eps": "8/255", - "clean_acc": "69.21", - "reported": "34.21", - "autoattack_acc": "34.21", - "unreliable": false -} diff --git a/robustbench/model_info/cifar100/Linf/Debenedetti2022Light_XCiT-S12.json b/robustbench/model_info/cifar100/Linf/Debenedetti2022Light_XCiT-S12.json deleted file mode 100644 index dfb9f7f5..00000000 --- a/robustbench/model_info/cifar100/Linf/Debenedetti2022Light_XCiT-S12.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2209.07399", - "name": "A Light Recipe to Train Robust Vision Transformers", - "authors": "Edoardo Debenedetti, Vikash Sehwag, Prateek Mittal", - "additional_data": true, - "number_forward_passes": 1, - "dataset": "cifar100", - "venue": "arXiv, Sep 2022", - "architecture": "XCiT-S12", - "eps": "8/255", - "clean_acc": "67.34", - "reported": "32.19", - "autoattack_acc": "32.19", - "unreliable": false -} diff --git a/robustbench/model_info/cifar100/Linf/Gowal2020Uncovering.json b/robustbench/model_info/cifar100/Linf/Gowal2020Uncovering.json deleted file mode 100644 index e981980d..00000000 --- a/robustbench/model_info/cifar100/Linf/Gowal2020Uncovering.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2010.03593", - "name": "Uncovering the Limits of Adversarial Training against Norm-Bounded Adversarial Examples", - "authors": "Sven Gowal, Chongli Qin, Jonathan Uesato, Timothy Mann, Pushmeet Kohli", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar100", - "venue": "arXiv, Oct 2020", - "architecture": "WideResNet-70-16", - "eps": "8/255", - "clean_acc": "60.86", - "reported": "30.67", - "autoattack_acc": "30.03", - "footnote": null, - "unreliable": false -} diff --git a/robustbench/model_info/cifar100/Linf/Gowal2020Uncovering_extra.json b/robustbench/model_info/cifar100/Linf/Gowal2020Uncovering_extra.json deleted file mode 100644 index ac3e7590..00000000 --- a/robustbench/model_info/cifar100/Linf/Gowal2020Uncovering_extra.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2010.03593", - "name": "Uncovering the Limits of Adversarial Training against Norm-Bounded Adversarial Examples", - "authors": "Sven Gowal, Chongli Qin, Jonathan Uesato, Timothy Mann, Pushmeet Kohli", - "additional_data": true, - "number_forward_passes": 1, - "dataset": "cifar100", - "venue": "arXiv, Oct 2020", - "architecture": "WideResNet-70-16", - "eps": "8/255", - "clean_acc": "69.15", - "reported": "37.70", - "autoattack_acc": "36.88", - "footnote": null, - "unreliable": false -} diff --git a/robustbench/model_info/cifar100/Linf/Hendrycks2019Using.json b/robustbench/model_info/cifar100/Linf/Hendrycks2019Using.json deleted file mode 100644 index d9418e96..00000000 --- a/robustbench/model_info/cifar100/Linf/Hendrycks2019Using.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "link": "https://arxiv.org/abs/1901.09960", - "name": "Using Pre-Training Can Improve Model Robustness and Uncertainty", - "authors": "Dan Hendrycks, Kimin Lee, Mantas Mazeika", - "additional_data": true, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ICML 2019", - "architecture": "WideResNet-28-10", - "eps": "8/255", - "clean_acc": "59.23", - "reported": "33.5", - "autoattack_acc": "28.42" -} diff --git a/robustbench/model_info/cifar100/Linf/Jia2022LAS-AT_34_10.json b/robustbench/model_info/cifar100/Linf/Jia2022LAS-AT_34_10.json deleted file mode 100644 index ada80a53..00000000 --- a/robustbench/model_info/cifar100/Linf/Jia2022LAS-AT_34_10.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2203.06616", - "name": "LAS-AT: Adversarial Training with Learnable Attack Strategy", - "authors": "Xiaojun Jia, Yong Zhang, Baoyuan Wu, Ke Ma, Jue Wang, Xiaochun Cao", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar100", - "venue": "arXiv, Mar 2022", - "architecture": "WideResNet-34-10", - "eps": "8/255", - "clean_acc": "64.89", - "reported": "30.77", - "autoattack_acc": "30.77", - "footnote": "", - "unreliable": false -} \ No newline at end of file diff --git a/robustbench/model_info/cifar100/Linf/Jia2022LAS-AT_34_20.json b/robustbench/model_info/cifar100/Linf/Jia2022LAS-AT_34_20.json deleted file mode 100644 index 74385c2e..00000000 --- a/robustbench/model_info/cifar100/Linf/Jia2022LAS-AT_34_20.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2203.06616", - "name": "LAS-AT: Adversarial Training with Learnable Attack Strategy", - "authors": "Xiaojun Jia, Yong Zhang, Baoyuan Wu, Ke Ma, Jue Wang, Xiaochun Cao", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar100", - "venue": "arXiv, Mar 2022", - "architecture": "WideResNet-34-20", - "eps": "8/255", - "clean_acc": "67.31", - "reported": "31.91", - "autoattack_acc": "31.91", - "footnote": "", - "unreliable": false -} \ No newline at end of file diff --git a/robustbench/model_info/cifar100/Linf/Pang2022Robustness_WRN28_10.json b/robustbench/model_info/cifar100/Linf/Pang2022Robustness_WRN28_10.json deleted file mode 100644 index 6f8b62ff..00000000 --- a/robustbench/model_info/cifar100/Linf/Pang2022Robustness_WRN28_10.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/pdf/2202.10103.pdf", - "name": " Robustness and Accuracy Could Be Reconcilable by (Proper) Definition", - "authors": "Tianyu Pang, Min Lin, Xiao Yang, Jun Zhu, Shuicheng Yan", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar100", - "venue": "ICML 2022", - "architecture": "WideResNet-28-10", - "eps": "8/255", - "clean_acc": "63.66", - "reported": "31.08", - "autoattack_acc": "31.08", - "footnote": "It uses additional 1M synthetic images in training.", - "unreliable": false -} diff --git a/robustbench/model_info/cifar100/Linf/Pang2022Robustness_WRN70_16.json b/robustbench/model_info/cifar100/Linf/Pang2022Robustness_WRN70_16.json deleted file mode 100644 index 564dc06b..00000000 --- a/robustbench/model_info/cifar100/Linf/Pang2022Robustness_WRN70_16.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/pdf/2202.10103.pdf", - "name": " Robustness and Accuracy Could Be Reconcilable by (Proper) Definition", - "authors": "Tianyu Pang, Min Lin, Xiao Yang, Jun Zhu, Shuicheng Yan", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar100", - "venue": "ICML 2022", - "architecture": "WideResNet-70-16", - "eps": "8/255", - "clean_acc": "65.56", - "reported": "33.05", - "autoattack_acc": "33.05", - "footnote": "It uses additional 1M synthetic images in training.", - "unreliable": false -} diff --git a/robustbench/model_info/cifar100/Linf/Rade2021Helper_R18_ddpm.json b/robustbench/model_info/cifar100/Linf/Rade2021Helper_R18_ddpm.json deleted file mode 100644 index 03451595..00000000 --- a/robustbench/model_info/cifar100/Linf/Rade2021Helper_R18_ddpm.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://openreview.net/forum?id=BuD2LmNaU3a", - "name": "Helper-based Adversarial Training: Reducing Excessive Margin to Achieve a Better Accuracy vs. Robustness Trade-off", - "authors": "Rahul Rade and Seyed-Mohsen Moosavi-Dezfooli", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar100", - "venue": "OpenReview, Jun 2021", - "architecture": "PreActResNet-18", - "eps": "8/255", - "clean_acc": "61.50", - "reported": "28.88", - "footnote": "It uses additional 1M synthetic images in training.", - "autoattack_acc": "28.88", - "unreliable": false -} diff --git a/robustbench/model_info/cifar100/Linf/Rebuffi2021Fixing_28_10_cutmix_ddpm.json b/robustbench/model_info/cifar100/Linf/Rebuffi2021Fixing_28_10_cutmix_ddpm.json deleted file mode 100644 index 2cf25e89..00000000 --- a/robustbench/model_info/cifar100/Linf/Rebuffi2021Fixing_28_10_cutmix_ddpm.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2103.01946", - "name": "Fixing Data Augmentation to Improve Adversarial Robustness", - "authors": "Sylvestre-Alvise Rebuffi, Sven Gowal, Dan A. Calian, Florian Stimberg, Olivia Wiles, Timothy Mann", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar100", - "venue": "arXiv, Mar 2021", - "architecture": "WideResNet-28-10", - "eps": "8/255", - "clean_acc": "62.41", - "reported": "32.06", - "footnote": "It uses additional 1M synthetic images in training.", - "autoattack_acc": "32.06", - "unreliable": false -} diff --git a/robustbench/model_info/cifar100/Linf/Rebuffi2021Fixing_70_16_cutmix_ddpm.json b/robustbench/model_info/cifar100/Linf/Rebuffi2021Fixing_70_16_cutmix_ddpm.json deleted file mode 100644 index 224792ab..00000000 --- a/robustbench/model_info/cifar100/Linf/Rebuffi2021Fixing_70_16_cutmix_ddpm.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2103.01946", - "name": "Fixing Data Augmentation to Improve Adversarial Robustness", - "authors": "Sylvestre-Alvise Rebuffi, Sven Gowal, Dan A. Calian, Florian Stimberg, Olivia Wiles, Timothy Mann", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar100", - "venue": "arXiv, Mar 2021", - "architecture": "WideResNet-70-16", - "eps": "8/255", - "clean_acc": "63.56", - "reported": "34.64", - "footnote": "It uses additional 1M synthetic images in training.", - "autoattack_acc": "34.64", - "unreliable": false -} diff --git a/robustbench/model_info/cifar100/Linf/Rebuffi2021Fixing_R18_ddpm.json b/robustbench/model_info/cifar100/Linf/Rebuffi2021Fixing_R18_ddpm.json deleted file mode 100644 index 51f4233f..00000000 --- a/robustbench/model_info/cifar100/Linf/Rebuffi2021Fixing_R18_ddpm.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2103.01946", - "name": "Fixing Data Augmentation to Improve Adversarial Robustness", - "authors": "Sylvestre-Alvise Rebuffi, Sven Gowal, Dan A. Calian, Florian Stimberg, Olivia Wiles, Timothy Mann", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar100", - "venue": "arXiv, Mar 2021", - "architecture": "PreActResNet-18", - "eps": "8/255", - "clean_acc": "56.87", - "reported": "28.50", - "footnote": "It uses additional 1M synthetic images in training.", - "autoattack_acc": "28.50", - "unreliable": false -} diff --git a/robustbench/model_info/cifar100/Linf/Rice2020Overfitting.json b/robustbench/model_info/cifar100/Linf/Rice2020Overfitting.json deleted file mode 100644 index 2ed76f9b..00000000 --- a/robustbench/model_info/cifar100/Linf/Rice2020Overfitting.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2002.11569", - "name": "Overfitting in adversarially robust deep learning", - "authors": "Leslie Rice, Eric Wong, J. Zico Kolter", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar100", - "venue": "ICML 2020", - "architecture": "PreActResNet-18", - "eps": "8/255", - "clean_acc": "53.83", - "reported": "28.1", - "autoattack_acc": "18.95", - "footnote": null -} \ No newline at end of file diff --git a/robustbench/model_info/cifar100/Linf/Sehwag2021Proxy.json b/robustbench/model_info/cifar100/Linf/Sehwag2021Proxy.json deleted file mode 100644 index 799b40b8..00000000 --- a/robustbench/model_info/cifar100/Linf/Sehwag2021Proxy.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2104.09425", - "name": "Robust Learning Meets Generative Models: Can Proxy Distributions Improve Adversarial Robustness?", - "authors": "Vikash Sehwag, Saeed Mahloujifar, Tinashe Handina, Sihui Dai, Chong Xiang, Mung Chiang, Prateek Mittal", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar100", - "venue": "ICLR 2022", - "architecture": "WideResNet-34-10", - "eps": "8/255", - "clean_acc": "65.93", - "reported": "31.15", - "autoattack_acc": "31.15", - "footnote": "It uses additional 1M synthetic images in training.", - "unreliable": false -} \ No newline at end of file diff --git a/robustbench/model_info/cifar100/Linf/Sitawarin2020Improving.json b/robustbench/model_info/cifar100/Linf/Sitawarin2020Improving.json deleted file mode 100644 index 2f56a056..00000000 --- a/robustbench/model_info/cifar100/Linf/Sitawarin2020Improving.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2003.09347", - "name": "Improving Adversarial Robustness Through Progressive Hardening", - "authors": "Chawin Sitawarin, Supriyo Chakraborty, David Wagner", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar100", - "venue": "arXiv, Mar 2020", - "architecture": "WideResNet-34-10", - "eps": "8/255", - "clean_acc": "62.82", - "reported": "24.57", - "autoattack_acc": "24.57", - "footnote": null -} \ No newline at end of file diff --git a/robustbench/model_info/cifar100/Linf/Wu2020Adversarial.json b/robustbench/model_info/cifar100/Linf/Wu2020Adversarial.json deleted file mode 100644 index 675044a2..00000000 --- a/robustbench/model_info/cifar100/Linf/Wu2020Adversarial.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2004.05884", - "name": "Adversarial Weight Perturbation Helps Robust Generalization", - "authors": "Dongxian Wu, Shu-tao Xia, Yisen Wang", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar100", - "venue": "NeurIPS 2020", - "architecture": "WideResNet-34-10", - "eps": "8/255", - "clean_acc": "60.38", - "reported": "28.86", - "autoattack_acc": "28.86", - "footnote": null, - "unreliable": false -} diff --git a/robustbench/model_info/cifar100/corruptions/Addepalli2021Towards_PARN18.json b/robustbench/model_info/cifar100/corruptions/Addepalli2021Towards_PARN18.json deleted file mode 100644 index 7bb2960d..00000000 --- a/robustbench/model_info/cifar100/corruptions/Addepalli2021Towards_PARN18.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "link": "https://openreview.net/forum?id=SHB_znlW5G7", - "name": "Towards Achieving Adversarial Robustness Beyond Perceptual Limits", - "authors": "Sravanti Addepalli, Samyak Jain, Gaurang Sriramanan, Shivangi Khare, Venkatesh Babu Radhakrishnan", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar100", - "venue": "OpenReview, Jun 2021", - "architecture": "PreActResNet-18", - "eps": null, - "clean_acc": "62.02", - "reported": "51.77", - "corruptions_acc": "51.77" -} \ No newline at end of file diff --git a/robustbench/model_info/cifar100/corruptions/Addepalli2021Towards_WRN34.json b/robustbench/model_info/cifar100/corruptions/Addepalli2021Towards_WRN34.json deleted file mode 100644 index 9d56c162..00000000 --- a/robustbench/model_info/cifar100/corruptions/Addepalli2021Towards_WRN34.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "link": "https://openreview.net/forum?id=SHB_znlW5G7", - "name": "Towards Achieving Adversarial Robustness Beyond Perceptual Limits", - "authors": "Sravanti Addepalli, Samyak Jain, Gaurang Sriramanan, Shivangi Khare, Venkatesh Babu Radhakrishnan", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar100", - "venue": "OpenReview, Jun 2021", - "architecture": "WideResNet-34-10", - "eps": null, - "clean_acc": "65.73", - "reported": "54.88", - "corruptions_acc": "54.88" -} \ No newline at end of file diff --git a/robustbench/model_info/cifar100/corruptions/Addepalli2022Efficient_WRN_34_10.json b/robustbench/model_info/cifar100/corruptions/Addepalli2022Efficient_WRN_34_10.json deleted file mode 100644 index 641522f2..00000000 --- a/robustbench/model_info/cifar100/corruptions/Addepalli2022Efficient_WRN_34_10.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "link": "https://artofrobust.github.io/short_paper/31.pdf", - "name": "Efficient and Effective Augmentation Strategy for Adversarial Training", - "authors": "Sravanti Addepalli, Samyak Jain, Venkatesh Babu Radhakrishnan", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar100", - "venue": "CVPRW 2022", - "architecture": "WideResNet-34-10", - "eps": null, - "clean_acc": "68.75", - "reported": "56.95", - "corruptions_acc": "56.95" -} \ No newline at end of file diff --git a/robustbench/model_info/cifar100/corruptions/Diffenderfer2021Winning_Binary.json b/robustbench/model_info/cifar100/corruptions/Diffenderfer2021Winning_Binary.json deleted file mode 100644 index 6bf80689..00000000 --- a/robustbench/model_info/cifar100/corruptions/Diffenderfer2021Winning_Binary.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2106.09129", - "name": "A Winning Hand: Compressing Deep Networks Can Improve Out-Of-Distribution Robustness", - "authors": "James Diffenderfer, Brian R. Bartoldson, Shreya Chaganti, Jize Zhang, Bhavya Kailkhura", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar100", - "venue": "NeurIPS 2021", - "architecture": "WideResNet-18-2", - "eps": null, - "clean_acc": "77.69", - "reported": "65.26", - "corruptions_acc": "65.26", - "footnote": "Binary weight network trained with AugMix and pruned to 95% sparsity" -} \ No newline at end of file diff --git a/robustbench/model_info/cifar100/corruptions/Diffenderfer2021Winning_Binary_CARD_Deck.json b/robustbench/model_info/cifar100/corruptions/Diffenderfer2021Winning_Binary_CARD_Deck.json deleted file mode 100644 index 8602c8ac..00000000 --- a/robustbench/model_info/cifar100/corruptions/Diffenderfer2021Winning_Binary_CARD_Deck.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2106.09129", - "name": "A Winning Hand: Compressing Deep Networks Can Improve Out-Of-Distribution Robustness", - "authors": "James Diffenderfer, Brian R. Bartoldson, Shreya Chaganti, Jize Zhang, Bhavya Kailkhura", - "additional_data": false, - "number_forward_passes": 6, - "dataset": "cifar100", - "venue": "NeurIPS 2021", - "architecture": "WideResNet-18-2", - "eps": null, - "clean_acc": "78.50", - "reported": "69.09", - "corruptions_acc": "69.09", - "footnote": "Ensemble of binary weight networks each of which are pruned to 95% sparsity" -} \ No newline at end of file diff --git a/robustbench/model_info/cifar100/corruptions/Diffenderfer2021Winning_LRR.json b/robustbench/model_info/cifar100/corruptions/Diffenderfer2021Winning_LRR.json deleted file mode 100644 index 71b6d114..00000000 --- a/robustbench/model_info/cifar100/corruptions/Diffenderfer2021Winning_LRR.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2106.09129", - "name": "A Winning Hand: Compressing Deep Networks Can Improve Out-Of-Distribution Robustness", - "authors": "James Diffenderfer, Brian R. Bartoldson, Shreya Chaganti, Jize Zhang, Bhavya Kailkhura", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar100", - "venue": "NeurIPS 2021", - "architecture": "WideResNet-18-2", - "eps": null, - "clean_acc": "78.41", - "reported": "66.45", - "corruptions_acc": "66.45", - "footnote": "Trained with AugMix and pruned to 95% sparsity" -} \ No newline at end of file diff --git a/robustbench/model_info/cifar100/corruptions/Diffenderfer2021Winning_LRR_CARD_Deck.json b/robustbench/model_info/cifar100/corruptions/Diffenderfer2021Winning_LRR_CARD_Deck.json deleted file mode 100644 index a8a5e3b5..00000000 --- a/robustbench/model_info/cifar100/corruptions/Diffenderfer2021Winning_LRR_CARD_Deck.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2106.09129", - "name": "A Winning Hand: Compressing Deep Networks Can Improve Out-Of-Distribution Robustness", - "authors": "James Diffenderfer, Brian R. Bartoldson, Shreya Chaganti, Jize Zhang, Bhavya Kailkhura", - "additional_data": false, - "number_forward_passes": 6, - "dataset": "cifar100", - "venue": "NeurIPS 2021", - "architecture": "WideResNet-18-2", - "eps": null, - "clean_acc": "79.93", - "reported": "71.08", - "corruptions_acc": "71.08", - "footnote": "Ensemble of networks each of which are pruned to 95% sparsity" -} \ No newline at end of file diff --git a/robustbench/model_info/cifar100/corruptions/Erichson2022NoisyMix.json b/robustbench/model_info/cifar100/corruptions/Erichson2022NoisyMix.json deleted file mode 100644 index c6341298..00000000 --- a/robustbench/model_info/cifar100/corruptions/Erichson2022NoisyMix.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "link": "https://arxiv.org/pdf/2202.01263.pdf", - "name": "NoisyMix: Boosting Robustness by Combining Data Augmentations, Stability Training, and Noise Injections", - "authors": "N. Benjamin Erichson, Soon Hoe Lim, Francisco Utrera, Winnie Xu, Ziang Cao, and Michael W. Mahoney", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar100", - "venue": "arXiv, Feb 2022", - "architecture": "WideResNet-28-4", - "eps": null, - "clean_acc": "81.16", - "reported": "72.06", - "corruptions_acc": "72.06" -} \ No newline at end of file diff --git a/robustbench/model_info/cifar100/corruptions/Gowal2020Uncovering_Linf.json b/robustbench/model_info/cifar100/corruptions/Gowal2020Uncovering_Linf.json deleted file mode 100644 index 5f5f3203..00000000 --- a/robustbench/model_info/cifar100/corruptions/Gowal2020Uncovering_Linf.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2010.03593", - "name": "Uncovering the Limits of Adversarial Training against Norm-Bounded Adversarial Examples", - "authors": "Sven Gowal, Chongli Qin, Jonathan Uesato, Timothy Mann, Pushmeet Kohli", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Oct 2020", - "architecture": "WideResNet-70-16", - "eps": "8/255", - "clean_acc": "60.86", - "reported": "", - "corruptions_acc": "49.46", - "footnote": "Trained for \\(\\ell_{\\infty} \\) robustness with \\(\\varepsilon = 8/255\\)." -} diff --git a/robustbench/model_info/cifar100/corruptions/Gowal2020Uncovering_extra_Linf.json b/robustbench/model_info/cifar100/corruptions/Gowal2020Uncovering_extra_Linf.json deleted file mode 100644 index a4e97917..00000000 --- a/robustbench/model_info/cifar100/corruptions/Gowal2020Uncovering_extra_Linf.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2010.03593", - "name": "Uncovering the Limits of Adversarial Training against Norm-Bounded Adversarial Examples", - "authors": "Sven Gowal, Chongli Qin, Jonathan Uesato, Timothy Mann, Pushmeet Kohli", - "additional_data": true, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "arXiv, Oct 2020", - "architecture": "WideResNet-70-16", - "eps": "8/255", - "clean_acc": "69.15", - "reported": "", - "corruptions_acc": "56.00", - "footnote": "Trained for \\(\\ell_{\\infty} \\) robustness with \\(\\varepsilon = 8/255\\)." -} diff --git a/robustbench/model_info/cifar100/corruptions/Hendrycks2020AugMix_ResNeXt.json b/robustbench/model_info/cifar100/corruptions/Hendrycks2020AugMix_ResNeXt.json deleted file mode 100644 index d10a6886..00000000 --- a/robustbench/model_info/cifar100/corruptions/Hendrycks2020AugMix_ResNeXt.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "link": "https://arxiv.org/abs/1912.02781", - "name": "AugMix: A Simple Data Processing Method to Improve Robustness and Uncertainty", - "authors": "Dan Hendrycks, Norman Mu, Ekin D. Cubuk, Barret Zoph, Justin Gilmer, Balaji Lakshminarayanan", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ICLR 2020", - "architecture": "ResNeXt29_32x4d", - "eps": null, - "clean_acc": "78.90", - "reported": "65.1", - "corruptions_acc": "65.14" -} diff --git a/robustbench/model_info/cifar100/corruptions/Hendrycks2020AugMix_WRN.json b/robustbench/model_info/cifar100/corruptions/Hendrycks2020AugMix_WRN.json deleted file mode 100644 index 404e1b72..00000000 --- a/robustbench/model_info/cifar100/corruptions/Hendrycks2020AugMix_WRN.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "link": "https://arxiv.org/abs/1912.02781", - "name": "AugMix: A Simple Data Processing Method to Improve Robustness and Uncertainty", - "authors": "Dan Hendrycks, Norman Mu, Ekin D. Cubuk, Barret Zoph, Justin Gilmer, Balaji Lakshminarayanan", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar10", - "venue": "ICLR 2020", - "architecture": "WideResNet-40-2", - "eps": null, - "clean_acc": "76.28", - "reported": "64.1", - "corruptions_acc": "64.11" -} diff --git a/robustbench/model_info/cifar100/corruptions/Modas2021PRIMEResNet18.json b/robustbench/model_info/cifar100/corruptions/Modas2021PRIMEResNet18.json deleted file mode 100644 index 63e32e2d..00000000 --- a/robustbench/model_info/cifar100/corruptions/Modas2021PRIMEResNet18.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2112.13547", - "name": "PRIME: A Few Primitives Can Boost Robustness to Common Corruptions", - "authors": "Apostolos Modas, Rahul Rade, Guillermo Ortiz-Jiménez, Seyed-Mohsen Moosavi-Dezfooli, Pascal Frossard", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "cifar100", - "venue": "arXiv, Dec 2021", - "architecture": "ResNet-18", - "eps": null, - "clean_acc": "77.60", - "reported": "68.28", - "corruptions_acc": "68.28" -} \ No newline at end of file diff --git a/robustbench/model_info/cifar100/corruptions/unaggregated_results.csv b/robustbench/model_info/cifar100/corruptions/unaggregated_results.csv deleted file mode 100644 index 1e392794..00000000 --- a/robustbench/model_info/cifar100/corruptions/unaggregated_results.csv +++ /dev/null @@ -1,15 +0,0 @@ -,brightness,brightness,brightness,brightness,brightness,contrast,contrast,contrast,contrast,contrast,defocus_blur,defocus_blur,defocus_blur,defocus_blur,defocus_blur,elastic_transform,elastic_transform,elastic_transform,elastic_transform,elastic_transform,fog,fog,fog,fog,fog,frost,frost,frost,frost,frost,gaussian_noise,gaussian_noise,gaussian_noise,gaussian_noise,gaussian_noise,glass_blur,glass_blur,glass_blur,glass_blur,glass_blur,impulse_noise,impulse_noise,impulse_noise,impulse_noise,impulse_noise,jpeg_compression,jpeg_compression,jpeg_compression,jpeg_compression,jpeg_compression,motion_blur,motion_blur,motion_blur,motion_blur,motion_blur,pixelate,pixelate,pixelate,pixelate,pixelate,shot_noise,shot_noise,shot_noise,shot_noise,shot_noise,snow,snow,snow,snow,snow,zoom_blur,zoom_blur,zoom_blur,zoom_blur,zoom_blur -,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5 -Hendrycks2020AugMix_WRN,0.7621,0.7564,0.7446,0.7282,0.6836,0.7568,0.7246,0.6946,0.6414,0.4451,0.7625,0.7568,0.7432,0.7288,0.6796,0.7156,0.7212,0.7138,0.6565,0.5975,0.7598,0.7321,0.7048,0.6464,0.4863,0.7259,0.6818,0.6187,0.6097,0.5483,0.6563,0.5539999999999999,0.4482,0.3929,0.34299999999999997,0.5712,0.5851,0.6013,0.4561,0.4904,0.7306,0.6927,0.6308,0.5211,0.409,0.6764,0.635,0.6195,0.5988,0.5758,0.7441,0.7228,0.6949,0.6968,0.6642,0.7476,0.7198,0.6974,0.6095,0.4027,0.7045,0.6555,0.5406,0.4842,0.3995,0.7392,0.6732,0.6672,0.6256,0.5862,0.7390000000000001,0.7383,0.7261,0.7115,0.6766 -Hendrycks2020AugMix_ResNeXt,0.7865,0.7766,0.7664,0.7488,0.7047,0.7819,0.7521,0.7192,0.6573,0.449,0.7894,0.7806,0.7677,0.7516,0.7068,0.7441,0.7499,0.7368,0.6895,0.6277,0.7845,0.7612,0.7225,0.6584,0.4970000000000001,0.7419,0.6973,0.6214,0.6108,0.5419,0.642,0.4926,0.3653,0.312,0.27,0.5439,0.5658,0.6061,0.3951,0.4589,0.7758,0.7531,0.7312,0.6804,0.6063,0.7049,0.6579,0.6412,0.6245,0.5875,0.7699,0.7509,0.7229,0.7240000000000001,0.6919,0.7654,0.723,0.6908,0.5225,0.2531,0.7091,0.6357,0.4715,0.4062,0.3199,0.7653,0.6992,0.6962,0.6519,0.6051,0.7676,0.7658,0.7545,0.7396,0.7124 -Gowal2020Uncovering_extra_Linf,0.6953,0.6889,0.6682,0.6373,0.5502,0.6424,0.439,0.2767,0.1292,0.028999999999999998,0.6819,0.66,0.6338,0.6076,0.5464,0.6214,0.626,0.6084,0.5987,0.5896,0.6636,0.5579999999999999,0.4284,0.2858,0.1115,0.6586,0.6052,0.5436,0.544,0.4944,0.6761,0.6391,0.5585,0.5118,0.4611,0.6298,0.6331,0.6224,0.5577,0.5706,0.5605,0.4392,0.3503,0.2347,0.1585,0.6708,0.6592,0.6537,0.649,0.6431,0.648,0.61,0.5652,0.5658,0.5228,0.6833,0.6719,0.6696,0.6543,0.6298,0.6835,0.6713,0.6052,0.5551,0.4641,0.6787,0.6488,0.6194,0.5672,0.5231,0.6366,0.6337,0.6144,0.5987,0.5751 -Gowal2020Uncovering_Linf,0.6072,0.5961,0.5709,0.5365,0.4255,0.5491,0.3384,0.199,0.0852,0.024,0.5977,0.5749,0.5474,0.5238,0.4732,0.5427,0.5443,0.5305,0.522,0.5202,0.5768,0.474,0.3517,0.2371,0.0972,0.5629,0.4944,0.4274,0.4364,0.3866,0.6021,0.5870000000000001,0.5416,0.5133,0.477,0.5702,0.5702,0.5537,0.5239,0.5195,0.5467,0.4708,0.4059,0.29100000000000004,0.2061,0.5879,0.5798,0.573,0.5716,0.564,0.5657,0.5263,0.4922,0.4868,0.4481,0.6013,0.5924,0.5893,0.5784,0.5553,0.6051,0.5982,0.5646,0.5361,0.4741,0.5961,0.5708,0.5441,0.491,0.4353,0.5512,0.5448,0.5291,0.5167,0.4939 -Diffenderfer2021Winning_LRR,0.7839,0.7777,0.7698,0.7561,0.7190000000000001,0.7795,0.755,0.7365,0.6956,0.5132,0.7831,0.7792,0.7676,0.7543,0.7166,0.7433,0.7465,0.7389,0.6867,0.6159,0.7809,0.7563,0.7239,0.6629,0.4926,0.7489,0.7036,0.6499,0.6393,0.5849,0.6789,0.5512,0.4253,0.369,0.3066,0.5685,0.584,0.6018,0.4554,0.4816,0.7621,0.7275,0.684,0.5707,0.4413,0.7048,0.6574,0.6406,0.6212,0.599,0.7696,0.7497,0.7237,0.7272,0.6970000000000001,0.7703,0.7509999999999999,0.7337,0.6732,0.5564,0.7244,0.6729999999999999,0.5276,0.4674,0.3699,0.7568,0.7040000000000001,0.6920000000000001,0.6499,0.6164,0.7672,0.7613,0.7509999999999999,0.7341,0.7027 -Diffenderfer2021Winning_LRR_CARD_Deck,0.7987,0.7916,0.7847,0.7677,0.7263,0.7903,0.7485,0.7095,0.6468,0.4467,0.7961,0.7871,0.7747,0.7536,0.7083,0.7511,0.7581,0.7512,0.7091,0.6592,0.7915,0.764,0.7144,0.6391,0.4421,0.7724,0.7357,0.6893,0.6816,0.6316,0.7501,0.7138,0.6822,0.6723,0.6593,0.6286,0.6407,0.6605,0.5044,0.5435,0.7853,0.765,0.7406,0.6707,0.5678,0.7518,0.7286,0.7143,0.7048,0.6869,0.7722,0.7532,0.7182,0.7207,0.6834,0.7885,0.775,0.7657,0.7238,0.6348,0.768,0.7501,0.7108,0.6977,0.6689,0.7807,0.7314,0.7159,0.6697,0.6512,0.7712,0.769,0.7557,0.7388,0.7082 -Diffenderfer2021Winning_Binary,0.775,0.7663,0.7552,0.7393,0.6926,0.7676,0.731,0.6997,0.6415,0.4229,0.7757,0.769,0.7559,0.7367,0.7016,0.7273,0.7297,0.7202,0.6669,0.5902,0.7713,0.7455,0.7085,0.6476,0.4861,0.7302,0.6761,0.6069,0.5944,0.5288,0.6941,0.621,0.5355,0.4901,0.449,0.5237,0.5343,0.5565,0.4216,0.4399,0.7272,0.6747,0.6146,0.4724,0.3391,0.6998,0.6542,0.6374,0.6172,0.5921,0.7531,0.7305,0.7061,0.7051,0.6709,0.7603,0.7390000000000001,0.7208,0.6758,0.5785,0.73,0.6946,0.6028,0.5584,0.4863,0.7399,0.6605,0.6583,0.6162,0.5749,0.7507,0.7466,0.7340000000000001,0.7159,0.6831 -Diffenderfer2021Winning_Binary_CARD_Deck,0.7855,0.7767,0.7644,0.7451,0.6893,0.7759,0.7198,0.6681,0.5857,0.3261,0.7827,0.7705,0.7541,0.7287,0.6759999999999999,0.7357,0.7414,0.7289,0.6844,0.6317,0.7836,0.7472,0.7023,0.6265,0.4314,0.7548,0.7126,0.6598,0.6597,0.6001,0.7553,0.7304,0.7058,0.691,0.6814,0.6048,0.6125,0.6329,0.4737,0.5094,0.7633,0.7335,0.7047,0.6216,0.5325,0.7478,0.7191,0.7049,0.6915,0.6774,0.7572,0.7303,0.6945,0.6936,0.655,0.7728,0.7573,0.7429,0.7002,0.5959,0.7677,0.7533,0.7239,0.716,0.6867,0.7592,0.7016,0.6799,0.6409,0.6184,0.753,0.7471,0.733,0.7139,0.6824 -Addepalli2021Towards_PARN18,0.6211,0.6115,0.5906,0.5595,0.4787,0.5629,0.3907,0.2686,0.14300000000000002,0.0373,0.6104,0.5829,0.5523,0.5304,0.4789,0.5529999999999999,0.5536,0.5365,0.5294,0.5209,0.5897,0.4889,0.3733,0.2549,0.1087,0.5859,0.5368,0.4695,0.4705,0.4164,0.6182,0.6038,0.5716,0.5417,0.5124,0.5705,0.5737,0.5565,0.5156,0.5163,0.5998,0.5624,0.5147,0.4023,0.294,0.6041,0.5953,0.5895,0.5868,0.5796,0.5761,0.5382,0.4999,0.4975,0.4624,0.6132,0.603,0.5997,0.5869,0.5629,0.6205,0.6168,0.5877,0.5649,0.5113,0.6122,0.5904,0.564,0.5242,0.4817,0.564,0.557,0.541,0.5303,0.5081 -Addepalli2021Towards_WRN34,0.6612,0.6483,0.629,0.601,0.5244,0.601,0.413,0.2831,0.1501,0.0367,0.6479,0.6225,0.5948,0.5679,0.5046,0.5824,0.5841,0.5723,0.5581,0.5497,0.6252,0.521,0.3998,0.2813,0.1164,0.6244,0.5759,0.508,0.507,0.4457,0.6502,0.6324,0.5878,0.5586,0.5251,0.5992,0.5995,0.5866,0.5378,0.5375,0.6286,0.592,0.551,0.4678,0.3738,0.6358,0.6241,0.6194,0.6153,0.6076,0.6104,0.5701,0.5238,0.5243,0.4813,0.6477,0.6413,0.6321,0.6204,0.5883,0.6534,0.65,0.6141,0.5872,0.5317,0.6522,0.6274,0.6021,0.5634,0.5248,0.5955,0.5896,0.5718,0.5582,0.5327 -Modas2021PRIMEResNet18,0.7739,0.7698,0.7601,0.7442,0.7095,0.7709,0.7508,0.7316,0.7032,0.604,0.7733,0.7593,0.7371,0.707,0.639,0.7184,0.7261,0.7147,0.6767,0.6272,0.7717,0.7484,0.7074,0.6518,0.4926,0.7423,0.7127,0.6769,0.6801,0.6395,0.7315,0.7068,0.6725,0.6565,0.6407,0.623,0.6319,0.6361,0.5417,0.5471,0.7361,0.68,0.6207,0.5216,0.4336,0.7184,0.677,0.6553,0.6399,0.6178,0.7458,0.7153,0.6769,0.6785,0.6433,0.7563,0.7286,0.7057,0.6267,0.5212,0.7488,0.7284,0.7001,0.6911,0.6648,0.7527,0.7045,0.6824,0.6457,0.6284,0.7428,0.7341,0.718,0.697,0.6658 -Erichson2022NoisyMix,0.7887,0.7659,0.6938,0.664,0.597,0.7888,0.7653,0.7323,0.7305,0.6957,0.7925,0.74,0.7366,0.7,0.656,0.7977,0.7792,0.7606,0.6877,0.5489,0.7666,0.7109,0.6427,0.6046,0.5732,0.8101,0.8017,0.7868,0.7634,0.7187,0.8097,0.8034,0.7896,0.7744,0.7241,0.81,0.7935,0.758,0.7166,0.5775,0.7809,0.7793,0.766,0.7496,0.721,0.7835,0.7417,0.6895,0.6884,0.6334,0.6286,0.6355,0.6528,0.5229,0.5414,0.8111,0.8104,0.8087,0.8033,0.8018,0.8071,0.7716,0.7376,0.6672,0.3828,0.7563,0.7151,0.6997,0.6826,0.6571,0.7624,0.7724,0.7612,0.7121,0.6538 -Addepalli2022Efficient_WRN_34_10,0.6816,0.6689,0.6102,0.5803,0.5064,0.6409,0.5995,0.5611,0.5587,0.5168,0.6695,0.6484,0.6201,0.5767,0.5478,0.6785,0.6701,0.6641,0.649,0.6196,0.6762,0.6414,0.578,0.5358,0.497,0.6749,0.652,0.6244,0.6013,0.5432,0.6855,0.6786,0.663,0.6389,0.5722,0.6583,0.569,0.4518,0.3217,0.1393,0.6286,0.62,0.6027,0.5904,0.5669,0.6558,0.6155,0.5626,0.5606,0.5112,0.6163,0.6185,0.6118,0.5383,0.552,0.617,0.5381,0.4629,0.3326,0.2355,0.6424,0.4941,0.3669,0.2089,0.0425,0.6658,0.6531,0.6487,0.6427,0.637,0.6138,0.6131,0.6048,0.589,0.5807 diff --git a/robustbench/model_info/imagenet/Linf/Debenedetti2022Light_XCiT-L12.json b/robustbench/model_info/imagenet/Linf/Debenedetti2022Light_XCiT-L12.json deleted file mode 100644 index c990ffca..00000000 --- a/robustbench/model_info/imagenet/Linf/Debenedetti2022Light_XCiT-L12.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2209.07399", - "name": "A Light Recipe to Train Robust Vision Transformers", - "authors": "Edoardo Debenedetti, Vikash Sehwag, Prateek Mittal", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "imagenet", - "venue": "arXiv, Sep 2022", - "architecture": "XCiT-L12", - "eps": "4/255", - "clean_acc": "73.76", - "reported": "47.60", - "autoattack_acc": "47.60", - "unreliable": false -} diff --git a/robustbench/model_info/imagenet/Linf/Debenedetti2022Light_XCiT-M12.json b/robustbench/model_info/imagenet/Linf/Debenedetti2022Light_XCiT-M12.json deleted file mode 100644 index 0d91c4c7..00000000 --- a/robustbench/model_info/imagenet/Linf/Debenedetti2022Light_XCiT-M12.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2209.07399", - "name": "A Light Recipe to Train Robust Vision Transformers", - "authors": "Edoardo Debenedetti, Vikash Sehwag, Prateek Mittal", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "imagenet", - "venue": "arXiv, Sep 2022", - "architecture": "XCiT-M12", - "eps": "4/255", - "clean_acc": "74.04", - "reported": "45.24", - "autoattack_acc": "45.24", - "unreliable": false -} diff --git a/robustbench/model_info/imagenet/Linf/Debenedetti2022Light_XCiT-S12.json b/robustbench/model_info/imagenet/Linf/Debenedetti2022Light_XCiT-S12.json deleted file mode 100644 index 1bb4b367..00000000 --- a/robustbench/model_info/imagenet/Linf/Debenedetti2022Light_XCiT-S12.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2209.07399", - "name": "A Light Recipe to Train Robust Vision Transformers", - "authors": "Edoardo Debenedetti, Vikash Sehwag, Prateek Mittal", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "imagenet", - "venue": "arXiv, Sep 2022", - "architecture": "XCiT-S12", - "eps": "4/255", - "clean_acc": "72.34", - "reported": "41.78", - "autoattack_acc": "41.78", - "unreliable": false -} diff --git a/robustbench/model_info/imagenet/Linf/Engstrom2019Robustness.json b/robustbench/model_info/imagenet/Linf/Engstrom2019Robustness.json deleted file mode 100644 index 7e12e08d..00000000 --- a/robustbench/model_info/imagenet/Linf/Engstrom2019Robustness.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://github.com/MadryLab/robustness", - "name": "Robustness library", - "authors": "Logan Engstrom, Andrew Ilyas, Hadi Salman, Shibani Santurkar, Dimitris Tsipras", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "imagenet", - "venue": "GitHub,
Oct 2019", - "architecture": "ResNet-50", - "eps": "4/255", - "clean_acc": "62.56", - "reported": "33.38", - "autoattack_acc": "29.22", - "unreliable": false -} diff --git a/robustbench/model_info/imagenet/Linf/Salman2020Do_50_2.json b/robustbench/model_info/imagenet/Linf/Salman2020Do_50_2.json deleted file mode 100644 index 953f4421..00000000 --- a/robustbench/model_info/imagenet/Linf/Salman2020Do_50_2.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2007.08489", - "name": "Do Adversarially Robust ImageNet Models Transfer Better?", - "authors": "Hadi Salman, Andrew Ilyas, Logan Engstrom, Ashish Kapoor, Aleksander Madry", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "imagenet", - "venue": "NeurIPS 2020", - "architecture": "WideResNet-50-2", - "eps": "4/255", - "clean_acc": "68.46", - "reported": "", - "autoattack_acc": "38.14", - "unreliable": false -} diff --git a/robustbench/model_info/imagenet/Linf/Salman2020Do_R18.json b/robustbench/model_info/imagenet/Linf/Salman2020Do_R18.json deleted file mode 100644 index cf065fae..00000000 --- a/robustbench/model_info/imagenet/Linf/Salman2020Do_R18.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2007.08489", - "name": "Do Adversarially Robust ImageNet Models Transfer Better?", - "authors": "Hadi Salman, Andrew Ilyas, Logan Engstrom, Ashish Kapoor, Aleksander Madry", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "imagenet", - "venue": "NeurIPS 2020", - "architecture": "ResNet-18", - "eps": "4/255", - "clean_acc": "52.92", - "reported": "", - "autoattack_acc": "25.32", - "unreliable": false -} diff --git a/robustbench/model_info/imagenet/Linf/Salman2020Do_R50.json b/robustbench/model_info/imagenet/Linf/Salman2020Do_R50.json deleted file mode 100644 index 2233637e..00000000 --- a/robustbench/model_info/imagenet/Linf/Salman2020Do_R50.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2007.08489", - "name": "Do Adversarially Robust ImageNet Models Transfer Better?", - "authors": "Hadi Salman, Andrew Ilyas, Logan Engstrom, Ashish Kapoor, Aleksander Madry", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "imagenet", - "venue": "NeurIPS 2020", - "architecture": "ResNet-50", - "eps": "4/255", - "clean_acc": "64.02", - "reported": "", - "autoattack_acc": "34.96", - "unreliable": false -} diff --git a/robustbench/model_info/imagenet/Linf/Standard_R50.json b/robustbench/model_info/imagenet/Linf/Standard_R50.json deleted file mode 100644 index 6764060b..00000000 --- a/robustbench/model_info/imagenet/Linf/Standard_R50.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "link": "https://github.com/RobustBench/robustbench/", - "name": "Standardly trained model", - "authors": "Torchvision", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "imagenet", - "venue": "N/A", - "architecture": "ResNet-50", - "eps": "4/255", - "clean_acc": "76.52", - "reported": "0.0", - "autoattack_acc": "0.0", - "unreliable": false -} diff --git a/robustbench/model_info/imagenet/Linf/Wong2020Fast.json b/robustbench/model_info/imagenet/Linf/Wong2020Fast.json deleted file mode 100644 index 88423baa..00000000 --- a/robustbench/model_info/imagenet/Linf/Wong2020Fast.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2001.03994", - "name": "Fast is better than free: Revisiting adversarial training", - "authors": "Eric Wong, Leslie Rice, J. Zico Kolter", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "imagenet", - "venue": "ICLR 2020", - "architecture": "ResNet-50", - "eps": "4/255", - "clean_acc": "55.62", - "reported": "30.18", - "footnote": "Focuses on fast adversarial training.", - "autoattack_acc": "26.24", - "unreliable": false -} diff --git a/robustbench/model_info/imagenet/corruptions/Erichson2022NoisyMix.json b/robustbench/model_info/imagenet/corruptions/Erichson2022NoisyMix.json deleted file mode 100644 index 7c63e990..00000000 --- a/robustbench/model_info/imagenet/corruptions/Erichson2022NoisyMix.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "link": "https://arxiv.org/pdf/2202.01263.pdf", - "name": "NoisyMix: Boosting Robustness by Combining Data Augmentations, Stability Training, and Noise Injections", - "authors": "N. Benjamin Erichson, Soon Hoe Lim, Francisco Utrera, Winnie Xu, Ziang Cao, and Michael W. Mahoney", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "imagenet", - "venue": "arXiv, Feb 2022", - "architecture": "ResNet-50", - "eps": null, - "clean_acc": "77.14", - "reported": "52.25", - "corruptions_acc_2d": "52.25", - "corruptions_acc_3d": "53.10", - "corruptions_mce_2d": "60.70", - "corruptions_mce_3d": "62.33" -} diff --git a/robustbench/model_info/imagenet/corruptions/Geirhos2018_SIN.json b/robustbench/model_info/imagenet/corruptions/Geirhos2018_SIN.json deleted file mode 100644 index 1c6e05bc..00000000 --- a/robustbench/model_info/imagenet/corruptions/Geirhos2018_SIN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "link": "https://arxiv.org/abs/1811.12231", - "name": "ImageNet-trained CNNs are biased towards texture; increasing shape bias improves accuracy and robustness", - "authors": "Robert Geirhos, Patricia Rubisch, Claudio Michaelis, Matthias Bethge, Felix A. Wichmann, Wieland Brendel", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "imagenet", - "venue": "ICLR 2019", - "architecture": "ResNet-50", - "eps": null, - "clean_acc": "60.24", - "reported": "", - "corruptions_acc_2d": "39.53", - "corruptions_acc_3d": "37.80", - "corruptions_mce_2d": "77.14", - "corruptions_mce_3d": "83.33", - "footnote": "Model A: trained on Stylized ImageNet." -} diff --git a/robustbench/model_info/imagenet/corruptions/Geirhos2018_SIN_IN.json b/robustbench/model_info/imagenet/corruptions/Geirhos2018_SIN_IN.json deleted file mode 100644 index 67677359..00000000 --- a/robustbench/model_info/imagenet/corruptions/Geirhos2018_SIN_IN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "link": "https://arxiv.org/abs/1811.12231", - "name": "ImageNet-trained CNNs are biased towards texture; increasing shape bias improves accuracy and robustness", - "authors": "Robert Geirhos, Patricia Rubisch, Claudio Michaelis, Matthias Bethge, Felix A. Wichmann, Wieland Brendel", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "imagenet", - "venue": "ICLR 2019", - "architecture": "ResNet-50", - "eps": null, - "clean_acc": "74.88", - "reported": "", - "corruptions_acc_2d": "45.52", - "corruptions_acc_3d": "48.09", - "corruptions_mce_2d": "68.95", - "corruptions_mce_3d": "68.89", - "footnote": "Model B: trained on Stylized ImageNet and standard ImageNet." -} diff --git a/robustbench/model_info/imagenet/corruptions/Geirhos2018_SIN_IN_IN.json b/robustbench/model_info/imagenet/corruptions/Geirhos2018_SIN_IN_IN.json deleted file mode 100644 index 1368aa6f..00000000 --- a/robustbench/model_info/imagenet/corruptions/Geirhos2018_SIN_IN_IN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "link": "https://arxiv.org/abs/1811.12231", - "name": "ImageNet-trained CNNs are biased towards texture; increasing shape bias improves accuracy and robustness", - "authors": "Robert Geirhos, Patricia Rubisch, Claudio Michaelis, Matthias Bethge, Felix A. Wichmann, Wieland Brendel", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "imagenet", - "venue": "ICLR 2019", - "architecture": "ResNet-50", - "eps": null, - "clean_acc": "77.44", - "reported": "", - "corruptions_acc_2d": "41.72", - "corruptions_acc_3d": "46.92", - "corruptions_mce_2d": "73.52", - "corruptions_mce_3d": "70.11", - "footnote": "Model C: trained on Stylized ImageNet and standard ImageNet, then fine-tuned on standard ImageNet." -} diff --git a/robustbench/model_info/imagenet/corruptions/Hendrycks2020AugMix.json b/robustbench/model_info/imagenet/corruptions/Hendrycks2020AugMix.json deleted file mode 100644 index 2c353543..00000000 --- a/robustbench/model_info/imagenet/corruptions/Hendrycks2020AugMix.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "link": "https://arxiv.org/abs/1912.02781", - "name": "AugMix: A Simple Data Processing Method to Improve Robustness and Uncertainty", - "authors": "Dan Hendrycks, Norman Mu, Ekin D. Cubuk, Barret Zoph, Justin Gilmer, Balaji Lakshminarayanan", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "imagenet", - "venue": "ICLR 2020", - "architecture": "ResNet-50", - "eps": null, - "clean_acc": "76.98", - "reported": "", - "corruptions_acc_2d": "48.31", - "corruptions_acc_2d": "51.35", - "corruptions_acc_2d": "65.33", - "corruptions_acc_2d": "64.51" -} diff --git a/robustbench/model_info/imagenet/corruptions/Hendrycks2020Many.json b/robustbench/model_info/imagenet/corruptions/Hendrycks2020Many.json deleted file mode 100644 index 4be0c7e9..00000000 --- a/robustbench/model_info/imagenet/corruptions/Hendrycks2020Many.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2006.16241", - "name": "The Many Faces of Robustness: A Critical Analysis of Out-of-Distribution Generalization", - "authors": "Dan Hendrycks, Steven Basart, Norman Mu, Saurav Kadavath, Frank Wang, Evan Dorundo, Rahul Desai, Tyler Zhu, Samyak Parajuli, Mike Guo, Dawn Song, Jacob Steinhardt, Justin Gilmer", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "imagenet", - "venue": "ICCV 2021", - "architecture": "ResNet-50", - "eps": null, - "clean_acc": "76.88", - "reported": "", - "corruptions_acc_2d": "52.65", - "corruptions_acc_3d": "54.13", - "corruptions_mce_2d": "60.32", - "corruptions_mce_3d": "61.02" -} diff --git a/robustbench/model_info/imagenet/corruptions/Salman2020Do_50_2_Linf.json b/robustbench/model_info/imagenet/corruptions/Salman2020Do_50_2_Linf.json deleted file mode 100644 index f4c49af3..00000000 --- a/robustbench/model_info/imagenet/corruptions/Salman2020Do_50_2_Linf.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "link": "https://arxiv.org/abs/2007.08489", - "name": "Do Adversarially Robust ImageNet Models Transfer Better?", - "authors": "Hadi Salman, Andrew Ilyas, Logan Engstrom, Ashish Kapoor, Aleksander Madry", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "imagenet", - "venue": "NeurIPS 2020", - "architecture": "WideResNet-50-2", - "eps": "4/255", - "clean_acc": "68.46", - "reported": "", - "corruptions_acc_2d": "35.69", - "corruptions_acc_3d": "39.71", - "corruptions_mce_2d": "80.42", - "corruptions_mce_3d": "79.65" -} diff --git a/robustbench/model_info/imagenet/corruptions/Standard_R50.json b/robustbench/model_info/imagenet/corruptions/Standard_R50.json deleted file mode 100644 index d49c9b0b..00000000 --- a/robustbench/model_info/imagenet/corruptions/Standard_R50.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "link": "https://github.com/RobustBench/robustbench/", - "name": "Standardly trained model", - "authors": "Torchvision", - "additional_data": false, - "number_forward_passes": 1, - "dataset": "imagenet", - "venue": "N/A", - "architecture": "ResNet-50", - "eps": null, - "clean_acc": "76.52", - "reported": "", - "corruptions_acc_2d": "39.23", - "corruptions_acc_3d": "44.77", - "corruptions_mce_2d": "76.64", - "corruptions_mce_3d": "72.95" -} diff --git a/robustbench/model_info/imagenet/corruptions/unaggregated_results_2d.csv b/robustbench/model_info/imagenet/corruptions/unaggregated_results_2d.csv deleted file mode 100644 index 672791cb..00000000 --- a/robustbench/model_info/imagenet/corruptions/unaggregated_results_2d.csv +++ /dev/null @@ -1,10 +0,0 @@ -,shot_noise,shot_noise,shot_noise,shot_noise,shot_noise,impulse_noise,impulse_noise,impulse_noise,impulse_noise,impulse_noise,defocus_blur,defocus_blur,defocus_blur,defocus_blur,defocus_blur,contrast,contrast,contrast,contrast,contrast,brightness,brightness,brightness,brightness,brightness,jpeg_compression,jpeg_compression,jpeg_compression,jpeg_compression,jpeg_compression,pixelate,pixelate,pixelate,pixelate,pixelate,glass_blur,glass_blur,glass_blur,glass_blur,glass_blur,motion_blur,motion_blur,motion_blur,motion_blur,motion_blur,zoom_blur,zoom_blur,zoom_blur,zoom_blur,zoom_blur,gaussian_noise,gaussian_noise,gaussian_noise,gaussian_noise,gaussian_noise,fog,fog,fog,fog,fog,frost,frost,frost,frost,frost,snow,snow,snow,snow,snow,elastic_transform,elastic_transform,elastic_transform,elastic_transform,elastic_transform,average -,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5, -Erichson2022NoisyMix,0.6872,0.6376,0.5588,0.4222,0.308,0.6658,0.6166,0.5714,0.4416,0.2832,0.638,0.5848,0.4716,0.3758,0.268,0.7098,0.687,0.6226,0.4306,0.1764,0.7552,0.7426,0.7196,0.6846,0.6312,0.6978,0.6728,0.6584,0.6088,0.529,0.6932,0.6658,0.5732,0.4146,0.315,0.617,0.5126,0.2944,0.2498,0.2014,0.705,0.65,0.5494,0.4054,0.3048,0.6004,0.528,0.4906,0.4174,0.3396,0.6946,0.653,0.569,0.459,0.276,0.663,0.618,0.538,0.4884,0.3322,0.687,0.5814,0.4858,0.4718,0.4004,0.6376,0.4614,0.4868,0.3742,0.2884,0.6932,0.4926,0.6238,0.5218,0.3092,0.522549333 -Hendrycks2020Many,0.7234,0.6726,0.5924,0.4374,0.3192,0.706,0.658,0.6136,0.4968,0.37,0.6898,0.6476,0.5304,0.4154,0.3016,0.7004,0.6562,0.5742,0.3546,0.1268,0.7524,0.741,0.7214,0.694,0.6498,0.7042,0.6786,0.6568,0.5476,0.3696,0.7522,0.7498,0.7214,0.636,0.4246,0.673,0.5734,0.3132,0.2594,0.1868,0.705,0.6482,0.5168,0.3326,0.2188,0.5778,0.4734,0.3922,0.316,0.2378,0.726,0.6896,0.6116,0.48,0.33,0.647,0.59,0.5222,0.4832,0.3472,0.667,0.5548,0.4638,0.436,0.374,0.6086,0.4618,0.4654,0.361,0.3024,0.6984,0.4714,0.623,0.5094,0.2512,0.526469333 -Hendrycks2020AugMix,0.677,0.5828,0.4524,0.228,0.1152,0.6442,0.5388,0.4414,0.2134,0.0536,0.6428,0.6042,0.5028,0.3836,0.2566,0.7066,0.6772,0.6096,0.4158,0.1572,0.7476,0.7334,0.7048,0.6672,0.6064,0.6814,0.6492,0.6314,0.5632,0.4782,0.7006,0.6842,0.5934,0.4744,0.4078,0.6048,0.4828,0.2678,0.223,0.1706,0.7176,0.674,0.5762,0.4134,0.2904,0.6168,0.5532,0.516,0.4308,0.3534,0.6776,0.6068,0.4534,0.2412,0.057,0.6328,0.5792,0.4816,0.4138,0.2386,0.6466,0.4888,0.3672,0.3492,0.2784,0.6096,0.414,0.4278,0.3062,0.2318,0.6914,0.4802,0.6274,0.5262,0.2862,0.483069333 -Geirhos2018_SIN_IN,0.6352,0.554,0.4464,0.2598,0.1546,0.5696,0.5004,0.43,0.2652,0.1204,0.588,0.5392,0.4436,0.3396,0.2508,0.65,0.6094,0.5144,0.3162,0.1022,0.7286,0.714,0.6904,0.6586,0.6018,0.662,0.6364,0.6162,0.5426,0.4288,0.6788,0.6724,0.5768,0.4692,0.404,0.5712,0.4676,0.2438,0.2016,0.1538,0.6512,0.577,0.4696,0.3336,0.2504,0.5164,0.4244,0.367,0.303,0.2312,0.6402,0.5796,0.4504,0.2972,0.1302,0.6142,0.5648,0.474,0.4164,0.2776,0.6078,0.463,0.3522,0.3342,0.278,0.5812,0.3948,0.447,0.342,0.2774,0.653,0.4488,0.605,0.5114,0.2684,0.455202667 -Geirhos2018_SIN_IN_IN,0.6082,0.4768,0.3058,0.1228,0.0562,0.5394,0.4158,0.3126,0.1322,0.0462,0.6022,0.5414,0.418,0.3026,0.211,0.6602,0.6136,0.508,0.2694,0.078,0.75,0.7302,0.7072,0.658,0.5984,0.6682,0.6358,0.599,0.5122,0.378,0.6476,0.641,0.4782,0.3258,0.2376,0.5654,0.4232,0.2044,0.1544,0.1138,0.6634,0.5678,0.4158,0.26,0.1766,0.5294,0.4332,0.3636,0.2854,0.225,0.6236,0.504,0.3198,0.1508,0.0464,0.6282,0.5606,0.4698,0.3978,0.231,0.6292,0.453,0.3354,0.3192,0.2582,0.5714,0.3382,0.3864,0.2716,0.2012,0.6826,0.4662,0.5878,0.4698,0.2186,0.417197333 -Standard_R50,0.5744,0.4294,0.2528,0.0792,0.029,0.4844,0.358,0.2546,0.083,0.0182,0.5956,0.5152,0.382,0.2748,0.183,0.6494,0.5852,0.469,0.2122,0.0546,0.7392,0.7244,0.6956,0.6498,0.5866,0.6664,0.6244,0.5982,0.4728,0.3144,0.6402,0.6426,0.4598,0.2898,0.2068,0.54,0.4012,0.1688,0.131,0.1024,0.6382,0.537,0.3758,0.2154,0.1482,0.529,0.4324,0.358,0.2878,0.2206,0.5978,0.4686,0.2748,0.1128,0.0218,0.6138,0.5612,0.4704,0.4088,0.241,0.615,0.4346,0.309,0.2896,0.2294,0.5498,0.3154,0.3518,0.2382,0.1654,0.6704,0.4556,0.5526,0.4196,0.1746,0.392304 -Geirhos2018_SIN,0.4924,0.4196,0.3604,0.254,0.1954,0.4508,0.3948,0.353,0.2732,0.1936,0.4132,0.3352,0.2638,0.201,0.1452,0.5636,0.5436,0.5056,0.4114,0.2626,0.5956,0.573,0.558,0.5376,0.5074,0.5522,0.5178,0.488,0.404,0.3178,0.5704,0.5736,0.4844,0.3974,0.3624,0.4922,0.4036,0.247,0.2042,0.157,0.5246,0.455,0.3704,0.2854,0.2402,0.3854,0.3188,0.303,0.2408,0.187,0.5222,0.4638,0.39,0.299,0.1854,0.5386,0.5066,0.4564,0.4292,0.3638,0.5044,0.4158,0.3564,0.3378,0.298,0.488,0.3844,0.3978,0.331,0.3126,0.5314,0.3522,0.5598,0.53,0.4056,0.395290667 -Salman2020Do_50_2_Linf,0.5622,0.3802,0.203,0.0608,0.0222,0.3818,0.2122,0.12,0.033,0.0098,0.4628,0.377,0.24,0.1568,0.102,0.3508,0.1528,0.0256,0.0054,0.0054,0.6784,0.6588,0.6168,0.5496,0.4518,0.6634,0.6546,0.6528,0.6384,0.616,0.6618,0.6546,0.6274,0.5772,0.5408,0.56,0.4712,0.3832,0.3036,0.1898,0.584,0.49,0.3614,0.2318,0.1692,0.5238,0.4578,0.3818,0.3362,0.2744,0.5898,0.424,0.2038,0.0678,0.0142,0.242,0.1026,0.0396,0.0304,0.0108,0.5912,0.4304,0.2818,0.2566,0.1836,0.5512,0.3892,0.3752,0.2484,0.2356,0.5886,0.4088,0.6244,0.5886,0.4642,0.356896 \ No newline at end of file diff --git a/robustbench/model_info/imagenet/corruptions/unaggregated_results_3d.csv b/robustbench/model_info/imagenet/corruptions/unaggregated_results_3d.csv deleted file mode 100644 index 2a0a13e1..00000000 --- a/robustbench/model_info/imagenet/corruptions/unaggregated_results_3d.csv +++ /dev/null @@ -1,10 +0,0 @@ -,bit_error,bit_error,bit_error,bit_error,bit_error,color_quant,color_quant,color_quant,color_quant,color_quant,near_focus,near_focus,near_focus,near_focus,near_focus,far_focus,far_focus,far_focus,far_focus,far_focus,flash,flash,flash,flash,flash,fog_3d,fog_3d,fog_3d,fog_3d,fog_3d,h265_abr,h265_abr,h265_abr,h265_abr,h265_abr,h265_crf,h265_crf,h265_crf,h265_crf,h265_crf,iso_noise,iso_noise,iso_noise,iso_noise,iso_noise,low_light,low_light,low_light,low_light,low_light,xy_motion_blur,xy_motion_blur,xy_motion_blur,xy_motion_blur,xy_motion_blur,z_motion_blur,z_motion_blur,z_motion_blur,z_motion_blur,z_motion_blur,average -,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5, -Erichson2022NoisyMix,0.6174,0.5534,0.463,0.3836,0.2198,0.7484,0.7442,0.7226,0.6396,0.3932,0.6982,0.6724,0.6428,0.6128,0.586,0.7018,0.6492,0.5938,0.5466,0.5118,0.5562,0.5202,0.471,0.3998,0.292,0.7082,0.5966,0.4794,0.388,0.3136,0.674,0.6414,0.541,0.3772,0.3788,0.675,0.6734,0.6424,0.5424,0.5044,0.6178,0.5986,0.5612,0.498,0.39,0.6356,0.612,0.589,0.5338,0.4316,0.6056,0.5154,0.425,0.3456,0.286,0.547,0.4808,0.4152,0.3622,0.3336,0.530993333 -Hendrycks2020Many,0.6362,0.5672,0.464,0.3768,0.2022,0.7484,0.7428,0.7182,0.628,0.37,0.7082,0.6932,0.6664,0.6342,0.6054,0.7124,0.6548,0.6014,0.543,0.503,0.5888,0.5522,0.515,0.451,0.3578,0.7038,0.5988,0.4794,0.386,0.3194,0.7164,0.6642,0.559,0.3726,0.374,0.7178,0.712,0.6772,0.573,0.524,0.6624,0.652,0.6234,0.5582,0.448,0.6602,0.6438,0.6086,0.552,0.4494,0.6138,0.5096,0.402,0.3148,0.2472,0.531,0.4424,0.3646,0.301,0.2728,0.541256667 -Hendrycks2020AugMix,0.6298,0.5526,0.4618,0.377,0.2032,0.7434,0.7372,0.7076,0.5942,0.3336,0.6908,0.6656,0.6386,0.6052,0.5808,0.6918,0.6334,0.574,0.5206,0.4752,0.5234,0.4878,0.4322,0.3622,0.2648,0.6888,0.5698,0.459,0.3698,0.2944,0.6958,0.666,0.5646,0.3822,0.3818,0.7038,0.696,0.6696,0.565,0.5242,0.5686,0.5454,0.4958,0.41,0.2574,0.603,0.5734,0.5358,0.4742,0.3584,0.611,0.5232,0.4248,0.3404,0.269,0.5494,0.478,0.4094,0.3482,0.3146,0.51346 -Geirhos2018_SIN_IN,0.5792,0.5104,0.4078,0.3266,0.1702,0.714,0.7102,0.6796,0.5668,0.2618,0.6658,0.6372,0.6048,0.5742,0.5464,0.664,0.6078,0.5442,0.4928,0.4512,0.5266,0.4858,0.4372,0.3632,0.262,0.6556,0.529,0.423,0.329,0.2668,0.6626,0.6396,0.5502,0.3666,0.3718,0.6654,0.662,0.6386,0.5564,0.5086,0.531,0.5076,0.4568,0.375,0.244,0.5948,0.5674,0.5298,0.4742,0.373,0.5464,0.4496,0.3606,0.2946,0.2382,0.4654,0.3866,0.3254,0.273,0.2434,0.480863333 -Geirhos2018_SIN_IN_IN,0.5902,0.5176,0.4272,0.3382,0.1862,0.7386,0.7278,0.6852,0.5374,0.232,0.6774,0.6444,0.6146,0.5822,0.5548,0.6814,0.6204,0.5572,0.5004,0.4558,0.5124,0.4718,0.4194,0.3496,0.2466,0.677,0.5386,0.4212,0.3324,0.257,0.6758,0.6464,0.5396,0.3616,0.3698,0.6764,0.6712,0.6478,0.5464,0.5046,0.4486,0.4062,0.3286,0.2314,0.109,0.5744,0.5438,0.5012,0.4432,0.328,0.54,0.423,0.329,0.2544,0.2016,0.4738,0.404,0.3394,0.2806,0.2556,0.469173333 -Standard_R50,0.5702,0.5048,0.4122,0.3224,0.1732,0.7298,0.7178,0.6774,0.5072,0.1856,0.667,0.63,0.5892,0.5588,0.523,0.6706,0.6066,0.5374,0.4886,0.4458,0.4924,0.453,0.3978,0.3312,0.2196,0.6542,0.5174,0.4022,0.313,0.2526,0.6558,0.6262,0.5174,0.3322,0.3408,0.6586,0.6534,0.6284,0.5278,0.4768,0.406,0.3696,0.2898,0.19,0.0804,0.555,0.5188,0.4648,0.399,0.2832,0.511,0.3932,0.2972,0.2294,0.179,0.4764,0.398,0.3278,0.276,0.2492,0.447703333 -Geirhos2018_SIN,0.4518,0.3902,0.2976,0.237,0.116,0.5996,0.5942,0.566,0.4694,0.2262,0.5082,0.4598,0.422,0.3914,0.368,0.5306,0.44,0.3756,0.328,0.295,0.4176,0.3918,0.3472,0.2896,0.2056,0.568,0.4902,0.4008,0.327,0.28,0.535,0.493,0.3694,0.215,0.21,0.5336,0.5302,0.4928,0.3804,0.3324,0.4384,0.4294,0.4,0.354,0.2756,0.5108,0.4964,0.4706,0.4284,0.376,0.429,0.3498,0.2794,0.223,0.184,0.3314,0.2684,0.2162,0.1814,0.164,0.37804 -Salman2020Do_50_2_Linf,0.5056,0.456,0.38,0.3122,0.1794,0.6768,0.6724,0.6678,0.6104,0.2868,0.5952,0.5584,0.5216,0.4836,0.457,0.623,0.5462,0.4804,0.4302,0.3894,0.4746,0.44,0.3866,0.3166,0.2284,0.4906,0.2892,0.1794,0.1256,0.0898,0.5594,0.5386,0.4822,0.383,0.3992,0.563,0.5598,0.5448,0.4914,0.4632,0.3858,0.3404,0.2534,0.1518,0.0558,0.4396,0.3546,0.2422,0.1128,0.017,0.476,0.376,0.3016,0.2422,0.1948,0.4978,0.45,0.4074,0.3578,0.334,0.397146667 \ No newline at end of file diff --git a/robustbench/model_zoo/__init__.py b/robustbench/model_zoo/__init__.py deleted file mode 100644 index 3eafc941..00000000 --- a/robustbench/model_zoo/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from .models import model_dicts - diff --git a/robustbench/model_zoo/architectures/CARD_resnet.py b/robustbench/model_zoo/architectures/CARD_resnet.py deleted file mode 100644 index 58f65a6f..00000000 --- a/robustbench/model_zoo/architectures/CARD_resnet.py +++ /dev/null @@ -1,122 +0,0 @@ -# Copyright (c) Facebook, Inc. and its affiliates. - -# This source code is licensed under the MIT license found in the -# LICENSE file in the root directory of this source tree. - -import torch -import torchvision - - -class LRR_ResNet(torchvision.models.ResNet): - expansion = 1 - - def __init__(self, block=torchvision.models.resnet.BasicBlock, layers=[2, 2, 2, 2], num_classes=10, width=64): - """To make it possible to vary the width, we need to override the constructor of the torchvision resnet.""" - - torch.nn.Module.__init__(self) # Skip the parent constructor. This replaces it. - self._norm_layer = torch.nn.BatchNorm2d - self.inplanes = width - self.dilation = 1 - self.groups = 1 - self.base_width = 64 - - # The initial convolutional layer. - self.conv1 = torch.nn.Conv2d(3, self.inplanes, kernel_size=3, stride=1, padding=1, bias=False) - self.bn1 = self._norm_layer(self.inplanes) - self.relu = torch.nn.ReLU(inplace=True) - - # The subsequent blocks. - self.layer1 = self._make_layer(block, width, layers[0]) - self.layer2 = self._make_layer(block, width*2, layers[1], stride=2, dilate=False) - self.layer3 = self._make_layer(block, width*4, layers[2], stride=2, dilate=False) - self.layer4 = self._make_layer(block, width*8, layers[3], stride=2, dilate=False) - - # The last layers. - self.avgpool = torch.nn.AvgPool2d(4) - self.fc = torch.nn.Linear(width*8*block.expansion, num_classes) - - # Default init. - for m in self.modules(): - if isinstance(m, torch.nn.Conv2d): - torch.nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu') - elif isinstance(m, torch.nn.BatchNorm2d): - torch.nn.init.constant_(m.weight, 1) - torch.nn.init.constant_(m.bias, 0) - - def forward(self, x): - x = self.conv1(x) - x = self.bn1(x) - x = self.relu(x) - - x = self.layer1(x) - x = self.layer2(x) - x = self.layer3(x) - x = self.layer4(x) - - x = self.avgpool(x) - x = torch.flatten(x, 1) - x = self.fc(x) - - return x - - -# edgepopup -class PreActBasicBlock(torch.nn.Module): - expansion = 1 - - def __init__(self, in_planes, planes, stride=1): - super(PreActBasicBlock, self).__init__() - self.conv1 = torch.nn.Conv2d(in_planes, planes, kernel_size=3, stride=stride, padding=1, bias=False) - self.bn1 = torch.nn.BatchNorm2d(in_planes, affine=False) - self.conv2 = torch.nn.Conv2d(planes, planes, kernel_size=3, stride=1, padding=1, bias=False) - self.bn2 = torch.nn.BatchNorm2d(planes, affine=False) - - self.shortcut = torch.nn.Sequential() - if stride != 1 or in_planes != self.expansion * planes: - self.shortcut = torch.nn.Sequential( - torch.nn.Conv2d(in_planes, self.expansion * planes, kernel_size=1, stride=stride, bias=False), - torch.nn.BatchNorm2d(self.expansion * planes, affine=False), - ) - - def forward(self, x): - out = torch.nn.functional.relu(self.bn1(x)) - shortcut = self.shortcut(out) if hasattr(self, 'shortcut') else x # Important: using out instead of x - out = self.conv1(out) - out = self.conv2(torch.nn.functional.relu(self.bn2(out))) - out += shortcut - return out - - -class WidePreActResNet(torch.nn.Module): - def __init__(self, block=PreActBasicBlock, num_blocks=[2, 2, 2, 2], num_classes=10, widen_factor=2): - super(WidePreActResNet, self).__init__() - self.in_planes = 64 - - self.conv1 = torch.nn.Conv2d(3, 64, kernel_size=3, stride=1, padding=1, bias=False) - self.bn1 = torch.nn.BatchNorm2d(256*(widen_factor+1) * block.expansion, affine=False) - self.layer1 = self._make_layer(block, 64, num_blocks[0], stride=1) - self.layer2 = self._make_layer(block, 64*(widen_factor+1), num_blocks[1], stride=2) - self.layer3 = self._make_layer(block, 128*(widen_factor+1), num_blocks[2], stride=2) - self.layer4 = self._make_layer(block, 256*(widen_factor+1), num_blocks[3], stride=2) - self.avgpool = torch.nn.AdaptiveAvgPool2d(1) - self.fc = torch.nn.Conv2d(256*(widen_factor+1) * block.expansion, num_classes, kernel_size=1, bias=False) - - def _make_layer(self, block, planes, num_blocks, stride): - strides = [stride] + [1] * (num_blocks - 1) - layers = [] - for stride in strides: - layers.append(block(self.in_planes, planes, stride)) - self.in_planes = planes * block.expansion - - return torch.nn.Sequential(*layers) - - def forward(self, x): - out = self.conv1(x) - out = self.layer1(out) - out = self.layer2(out) - out = self.layer3(out) - out = self.layer4(out) - out = torch.nn.functional.relu(self.bn1(out)) - out = torch.nn.functional.avg_pool2d(out, 4) - out = self.fc(out) - return out.flatten(1) \ No newline at end of file diff --git a/robustbench/model_zoo/architectures/__init__.py b/robustbench/model_zoo/architectures/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/robustbench/model_zoo/architectures/boosting_wide_resnet.py b/robustbench/model_zoo/architectures/boosting_wide_resnet.py deleted file mode 100644 index 6a8f385a..00000000 --- a/robustbench/model_zoo/architectures/boosting_wide_resnet.py +++ /dev/null @@ -1,34 +0,0 @@ -import torch -import math -import torch.nn.functional as F -from torch import nn -from .wide_resnet import WideResNet - -class BoostingWideResNet(WideResNet): - - def __init__(self, depth=34, widen_factor=20): - super(BoostingWideResNet, self).__init__(depth=depth, - widen_factor=widen_factor, - sub_block1=True, - bias_last=False) - self.register_buffer( - 'mu', - torch.tensor([0.4914, 0.4822, 0.4465]).view(1, 3, 1, 1)) - self.register_buffer( - 'sigma', - torch.tensor([0.2471, 0.2435, 0.2616]).view(1, 3, 1, 1)) - - def forward(self, x): - x = (x - self.mu) / self.sigma - out = self.conv1(x) - out = self.block1(out) - out = self.block2(out) - out = self.block3(out) - out = self.relu(self.bn1(out)) - out = F.avg_pool2d(out, 8) - out = out.view(-1, self.nChannels) - out = F.normalize(out, p=2, dim=1) - for _, module in self.fc.named_modules(): - if isinstance(module, nn.Linear): - module.weight.data = F.normalize(module.weight, p=2, dim=1) - return self.fc(out) \ No newline at end of file diff --git a/robustbench/model_zoo/architectures/dm_wide_resnet.py b/robustbench/model_zoo/architectures/dm_wide_resnet.py deleted file mode 100644 index 46fee2c6..00000000 --- a/robustbench/model_zoo/architectures/dm_wide_resnet.py +++ /dev/null @@ -1,299 +0,0 @@ -# Copyright 2020 Deepmind Technologies Limited. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""WideResNet implementation in PyTorch. From: -https://github.com/deepmind/deepmind-research/blob/master/adversarial_robustness/pytorch/model_zoo.py -""" - -from typing import Tuple, Type, Union - -import torch -import torch.nn as nn -import torch.nn.functional as F - -CIFAR10_MEAN = (0.4914, 0.4822, 0.4465) -CIFAR10_STD = (0.2471, 0.2435, 0.2616) -CIFAR100_MEAN = (0.5071, 0.4865, 0.4409) -CIFAR100_STD = (0.2673, 0.2564, 0.2762) - - -class _Swish(torch.autograd.Function): - """Custom implementation of swish.""" - - @staticmethod - def forward(ctx, i): - result = i * torch.sigmoid(i) - ctx.save_for_backward(i) - return result - - @staticmethod - def backward(ctx, grad_output): - i = ctx.saved_variables[0] - sigmoid_i = torch.sigmoid(i) - return grad_output * (sigmoid_i * (1 + i * (1 - sigmoid_i))) - - -class Swish(nn.Module): - """Module using custom implementation.""" - - def forward(self, input_tensor): - return _Swish.apply(input_tensor) - - -class _Block(nn.Module): - """WideResNet Block.""" - - def __init__(self, - in_planes, - out_planes, - stride, - activation_fn: Type[nn.Module] = nn.ReLU): - super().__init__() - self.batchnorm_0 = nn.BatchNorm2d(in_planes) - self.relu_0 = activation_fn() - # We manually pad to obtain the same effect as `SAME` (necessary when - # `stride` is different than 1). - self.conv_0 = nn.Conv2d(in_planes, - out_planes, - kernel_size=3, - stride=stride, - padding=0, - bias=False) - self.batchnorm_1 = nn.BatchNorm2d(out_planes) - self.relu_1 = activation_fn() - self.conv_1 = nn.Conv2d(out_planes, - out_planes, - kernel_size=3, - stride=1, - padding=1, - bias=False) - self.has_shortcut = in_planes != out_planes - if self.has_shortcut: - self.shortcut = nn.Conv2d(in_planes, - out_planes, - kernel_size=1, - stride=stride, - padding=0, - bias=False) - else: - self.shortcut = None - self._stride = stride - - def forward(self, x): - if self.has_shortcut: - x = self.relu_0(self.batchnorm_0(x)) - else: - out = self.relu_0(self.batchnorm_0(x)) - v = x if self.has_shortcut else out - if self._stride == 1: - v = F.pad(v, (1, 1, 1, 1)) - elif self._stride == 2: - v = F.pad(v, (0, 1, 0, 1)) - else: - raise ValueError('Unsupported `stride`.') - out = self.conv_0(v) - out = self.relu_1(self.batchnorm_1(out)) - out = self.conv_1(out) - out = torch.add(self.shortcut(x) if self.has_shortcut else x, out) - return out - - -class _BlockGroup(nn.Module): - """WideResNet block group.""" - - def __init__(self, - num_blocks, - in_planes, - out_planes, - stride, - activation_fn: Type[nn.Module] = nn.ReLU): - super().__init__() - block = [] - for i in range(num_blocks): - block.append( - _Block(i == 0 and in_planes or out_planes, - out_planes, - i == 0 and stride or 1, - activation_fn=activation_fn)) - self.block = nn.Sequential(*block) - - def forward(self, x): - return self.block(x) - - -class DMWideResNet(nn.Module): - """WideResNet.""" - - def __init__(self, - num_classes: int = 10, - depth: int = 28, - width: int = 10, - activation_fn: Type[nn.Module] = nn.ReLU, - mean: Union[Tuple[float, ...], float] = CIFAR10_MEAN, - std: Union[Tuple[float, ...], float] = CIFAR10_STD, - padding: int = 0, - num_input_channels: int = 3): - super().__init__() - # persistent=False to not put these tensors in the module's state_dict and not try to - # load it from the checkpoint - self.register_buffer('mean', torch.tensor(mean).view(num_input_channels, 1, 1), - persistent=False) - self.register_buffer('std', torch.tensor(std).view(num_input_channels, 1, 1), - persistent=False) - self.padding = padding - num_channels = [16, 16 * width, 32 * width, 64 * width] - assert (depth - 4) % 6 == 0 - num_blocks = (depth - 4) // 6 - self.init_conv = nn.Conv2d(num_input_channels, - num_channels[0], - kernel_size=3, - stride=1, - padding=1, - bias=False) - self.layer = nn.Sequential( - _BlockGroup(num_blocks, - num_channels[0], - num_channels[1], - 1, - activation_fn=activation_fn), - _BlockGroup(num_blocks, - num_channels[1], - num_channels[2], - 2, - activation_fn=activation_fn), - _BlockGroup(num_blocks, - num_channels[2], - num_channels[3], - 2, - activation_fn=activation_fn)) - self.batchnorm = nn.BatchNorm2d(num_channels[3]) - self.relu = activation_fn() - self.logits = nn.Linear(num_channels[3], num_classes) - self.num_channels = num_channels[3] - - def forward(self, x): - if self.padding > 0: - x = F.pad(x, (self.padding,) * 4) - out = (x - self.mean) / self.std - out = self.init_conv(out) - out = self.layer(out) - out = self.relu(self.batchnorm(out)) - out = F.avg_pool2d(out, 8) - out = out.view(-1, self.num_channels) - return self.logits(out) - - -class _PreActBlock(nn.Module): - """Pre-activation ResNet Block.""" - - def __init__(self, in_planes, out_planes, stride, activation_fn=nn.ReLU): - super().__init__() - self._stride = stride - self.batchnorm_0 = nn.BatchNorm2d(in_planes) - self.relu_0 = activation_fn() - # We manually pad to obtain the same effect as `SAME` (necessary when - # `stride` is different than 1). - self.conv_2d_1 = nn.Conv2d(in_planes, out_planes, kernel_size=3, - stride=stride, padding=0, bias=False) - self.batchnorm_1 = nn.BatchNorm2d(out_planes) - self.relu_1 = activation_fn() - self.conv_2d_2 = nn.Conv2d(out_planes, out_planes, kernel_size=3, stride=1, - padding=1, bias=False) - self.has_shortcut = stride != 1 or in_planes != out_planes - if self.has_shortcut: - self.shortcut = nn.Conv2d(in_planes, out_planes, kernel_size=3, - stride=stride, padding=0, bias=False) - - def _pad(self, x): - if self._stride == 1: - x = F.pad(x, (1, 1, 1, 1)) - elif self._stride == 2: - x = F.pad(x, (0, 1, 0, 1)) - else: - raise ValueError('Unsupported `stride`.') - return x - - def forward(self, x): - out = self.relu_0(self.batchnorm_0(x)) - shortcut = self.shortcut(self._pad(x)) if self.has_shortcut else x - out = self.conv_2d_1(self._pad(out)) - out = self.conv_2d_2(self.relu_1(self.batchnorm_1(out))) - return out + shortcut - - -class DMPreActResNet(nn.Module): - """Pre-activation ResNet.""" - - def __init__(self, - num_classes: int = 10, - depth: int = 18, - width: int = 0, # Used to make the constructor consistent. - activation_fn: Type[nn.Module] = nn.ReLU, - mean: Union[Tuple[float, ...], float] = CIFAR10_MEAN, - std: Union[Tuple[float, ...], float] = CIFAR10_STD, - padding: int = 0, - num_input_channels: int = 3, - use_cuda: bool = True): - super().__init__() - if width != 0: - raise ValueError('Unsupported `width`.') - # persistent=False to not put these tensors in the module's state_dict and not try to - # load it from the checkpoint - self.register_buffer('mean', torch.tensor(mean).view(num_input_channels, 1, 1), - persistent=False) - self.register_buffer('std', torch.tensor(std).view(num_input_channels, 1, 1), - persistent=False) - self.mean_cuda = None - self.std_cuda = None - self.padding = padding - self.conv_2d = nn.Conv2d(num_input_channels, 64, kernel_size=3, stride=1, - padding=1, bias=False) - if depth == 18: - num_blocks = (2, 2, 2, 2) - elif depth == 34: - num_blocks = (3, 4, 6, 3) - else: - raise ValueError('Unsupported `depth`.') - self.layer_0 = self._make_layer(64, 64, num_blocks[0], 1, activation_fn) - self.layer_1 = self._make_layer(64, 128, num_blocks[1], 2, activation_fn) - self.layer_2 = self._make_layer(128, 256, num_blocks[2], 2, activation_fn) - self.layer_3 = self._make_layer(256, 512, num_blocks[3], 2, activation_fn) - self.batchnorm = nn.BatchNorm2d(512) - self.relu = activation_fn() - self.logits = nn.Linear(512, num_classes) - - def _make_layer(self, in_planes, out_planes, num_blocks, stride, - activation_fn): - layers = [] - for i, stride in enumerate([stride] + [1] * (num_blocks - 1)): - layers.append( - _PreActBlock(i == 0 and in_planes or out_planes, - out_planes, - stride, - activation_fn)) - return nn.Sequential(*layers) - - def forward(self, x): - if self.padding > 0: - x = F.pad(x, (self.padding,) * 4) - out = (x - self.mean) / self.std - out = self.conv_2d(out) - out = self.layer_0(out) - out = self.layer_1(out) - out = self.layer_2(out) - out = self.layer_3(out) - out = self.relu(self.batchnorm(out)) - out = F.avg_pool2d(out, 4) - out = out.view(out.size(0), -1) - return self.logits(out) diff --git a/robustbench/model_zoo/architectures/paf_wide_resnet.py b/robustbench/model_zoo/architectures/paf_wide_resnet.py deleted file mode 100644 index cdaeb1e9..00000000 --- a/robustbench/model_zoo/architectures/paf_wide_resnet.py +++ /dev/null @@ -1,125 +0,0 @@ -import math -import torch -import torch.nn as nn -import torch.nn.functional as F - -class PSSiLU(nn.Module): - def __init__(self): - super(PSSiLU, self).__init__() - self.beta = nn.Parameter(torch.tensor([1e-8])) - self.alpha = nn.Parameter(torch.tensor([1.0])) - def forward(self, x): - return x * (F.sigmoid(torch.abs(self.alpha) * x) - torch.abs(self.beta)) / (1 - torch.abs(self.beta)) - -class PAF_BasicBlock(nn.Module): - def __init__(self, activation, in_planes, out_planes, stride, dropRate=0.0): - super(PAF_BasicBlock, self).__init__() - self.bn1 = nn.BatchNorm2d(in_planes) - self.activation = activation - self.conv1 = nn.Conv2d( - in_planes, out_planes, kernel_size=3, stride=stride, padding=1, bias=False - ) - self.bn2 = nn.BatchNorm2d(out_planes) - - self.conv2 = nn.Conv2d( - out_planes, out_planes, kernel_size=3, stride=1, padding=1, bias=False - ) - self.droprate = dropRate - self.equalInOut = in_planes == out_planes - self.convShortcut = ( - (not self.equalInOut) - and nn.Conv2d( - in_planes, - out_planes, - kernel_size=1, - stride=stride, - padding=0, - bias=False, - ) - or None - ) - - def forward(self, x): - if not self.equalInOut: - x = self.activation(self.bn1(x)) - else: - out = self.activation(self.bn1(x)) - out = self.activation(self.bn2(self.conv1(out if self.equalInOut else x))) - if self.droprate > 0: - out = F.dropout(out, p=self.droprate, training=self.training) - out = self.conv2(out) - return torch.add(x if self.equalInOut else self.convShortcut(x), out) - - -class PAF_NetworkBlock(nn.Module): - def __init__(self, activation, nb_layers, in_planes, out_planes, block, stride, dropRate=0.0): - super(PAF_NetworkBlock, self).__init__() - self.layer = self._make_layer( - activation, block, in_planes, out_planes, nb_layers, stride, dropRate - ) - - def _make_layer(self, activation, block, in_planes, out_planes, nb_layers, stride, dropRate): - layers = [] - for i in range(int(nb_layers)): - layers.append( - block( activation, - i == 0 and in_planes or out_planes, - out_planes, - i == 0 and stride or 1, - dropRate - ) - ) - return nn.Sequential(*layers) - - def forward(self, x): - return self.layer(x) - - -class PAF_WideResNet(nn.Module): - def __init__(self, activation, depth=34, num_classes=10, widen_factor=10, dropRate=0.0, **kwargs): - super(PAF_WideResNet, self).__init__() - nChannels = [16, 16 * widen_factor, 32 * widen_factor, 64 * widen_factor] - assert (depth - 4) % 6 == 0 - n = (depth - 4) / 6 - block = PAF_BasicBlock - # 1st conv before any network block - self.conv1 = nn.Conv2d( - 3, nChannels[0], kernel_size=3, stride=1, padding=1, bias=False - ) - # 1st block - self.block1 = PAF_NetworkBlock(activation, n, nChannels[0], nChannels[1], block, 1, dropRate) - # 2nd block - self.block2 = PAF_NetworkBlock(activation, n, nChannels[1], nChannels[2], block, 2, dropRate) - # 3rd block - self.block3 = PAF_NetworkBlock(activation, n, nChannels[2], nChannels[3], block, 2, dropRate) - # global average pooling and classifier - self.bn1 = nn.BatchNorm2d(nChannels[3]) - self.activation = activation - self.fc = nn.Linear(nChannels[3], num_classes) - self.nChannels = nChannels[3] - - for m in self.modules(): - if isinstance(m, nn.Conv2d): - n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels - m.weight.data.normal_(0, math.sqrt(2.0 / n)) - elif isinstance(m, nn.BatchNorm2d): - m.weight.data.fill_(1) - m.bias.data.zero_() - elif isinstance(m, nn.Linear): - m.bias.data.zero_() - - def forward(self, x): - out = self.conv1(x) - out = self.block1(out) - out = self.block2(out) - out = self.block3(out) - out = self.activation(self.bn1(out)) - out = F.avg_pool2d(out, 8) - out = out.view(-1, self.nChannels) - return self.fc(out) - - -def pssilu_wrn_28_10(**kwargs): - act = PSSiLU() - return PAF_WideResNet(act, depth=28, widen_factor=10, **kwargs) - diff --git a/robustbench/model_zoo/architectures/resnest.py b/robustbench/model_zoo/architectures/resnest.py deleted file mode 100644 index 8a1b8f32..00000000 --- a/robustbench/model_zoo/architectures/resnest.py +++ /dev/null @@ -1,584 +0,0 @@ -"""ResNet implementation in PyTorch. -Adapted from https://github.com/zhanghang1989/ResNeSt/blob/master/resnest/torch/models/resnest.py -""" - -import math -import torch -from torch import nn -import torch.nn.functional as F -from torch.nn import Conv2d, Module, Linear, BatchNorm2d, ReLU -from torch.nn.modules.utils import _pair - - -class DropBlock2D(object): - def __init__(self, *args, **kwargs): - raise NotImplementedError - - -class SplAtConv2d(Module): - """Split-Attention Conv2d""" - - def __init__( - self, - in_channels, - channels, - kernel_size, - stride=(1, 1), - padding=(0, 0), - dilation=(1, 1), - groups=1, - bias=True, - radix=2, - reduction_factor=4, - norm_layer=None, - dropblock_prob=0.0, - swish=False, - **kwargs - ): - super(SplAtConv2d, self).__init__() - padding = _pair(padding) - inter_channels = max(in_channels * radix // reduction_factor, 32) - self.radix = radix - self.cardinality = groups - self.channels = channels - self.dropblock_prob = dropblock_prob - self.conv = Conv2d( - in_channels, - channels * radix, - kernel_size, - stride, - padding, - dilation, - groups=groups * radix, - bias=bias, - **kwargs - ) - self.use_bn = norm_layer is not None - if self.use_bn: - self.bn0 = norm_layer(channels * radix) - self.relu = nn.SiLU() if swish else nn.ReLU(inplace=True) - self.fc1 = Conv2d(channels, inter_channels, 1, groups=self.cardinality) - if self.use_bn: - self.bn1 = norm_layer(inter_channels) - self.fc2 = Conv2d(inter_channels, channels * radix, 1, groups=self.cardinality) - if dropblock_prob > 0.0: - self.dropblock = DropBlock2D(dropblock_prob, 3) - self.rsoftmax = rSoftMax(radix, groups) - - def forward(self, x): - x = self.conv(x) - if self.use_bn: - x = self.bn0(x) - if self.dropblock_prob > 0.0: - x = self.dropblock(x) - x = self.relu(x) - - batch, rchannel = x.shape[:2] - if self.radix > 1: - if torch.__version__ < "1.5": - splited = torch.split(x, int(rchannel // self.radix), dim=1) - else: - splited = torch.split(x, rchannel // self.radix, dim=1) - gap = sum(splited) - else: - gap = x - gap = F.adaptive_avg_pool2d(gap, 1) - gap = self.fc1(gap) - - if self.use_bn: - gap = self.bn1(gap) - gap = self.relu(gap) - - atten = self.fc2(gap) - atten = self.rsoftmax(atten).view(batch, -1, 1, 1) - - if self.radix > 1: - if torch.__version__ < "1.5": - attens = torch.split(atten, int(rchannel // self.radix), dim=1) - else: - attens = torch.split(atten, rchannel // self.radix, dim=1) - out = sum([att * split for (att, split) in zip(attens, splited)]) - else: - out = atten * x - return out.contiguous() - - -class rSoftMax(nn.Module): - def __init__(self, radix, cardinality): - super().__init__() - self.radix = radix - self.cardinality = cardinality - - def forward(self, x): - batch = x.size(0) - if self.radix > 1: - x = x.view(batch, self.cardinality, self.radix, -1).transpose(1, 2) - x = F.softmax(x, dim=1) - x = x.reshape(batch, -1) - else: - x = torch.sigmoid(x) - return x - - -class GlobalAvgPool2d(nn.Module): - def __init__(self): - """Global average pooling over the input's spatial dimensions""" - super(GlobalAvgPool2d, self).__init__() - - def forward(self, inputs): - return nn.functional.adaptive_avg_pool2d(inputs, 1).view(inputs.size(0), -1) - - -class Bottleneck(nn.Module): - """ResNet Bottleneck""" - - # pylint: disable=unused-argument - expansion = 4 - - def __init__( - self, - inplanes, - planes, - stride=1, - downsample=None, - radix=1, - cardinality=1, - bottleneck_width=64, - avd=False, - avd_first=False, - dilation=1, - is_first=False, - norm_layer=None, - dropblock_prob=0.0, - last_gamma=False, - swish=False, - ): - super(Bottleneck, self).__init__() - group_width = int(planes * (bottleneck_width / 64.0)) * cardinality - self.conv1 = nn.Conv2d(inplanes, group_width, kernel_size=1, bias=False) - self.bn1 = norm_layer(group_width) - self.dropblock_prob = dropblock_prob - self.radix = radix - self.avd = avd and (stride > 1 or is_first) - self.avd_first = avd_first - - if self.avd: - self.avd_layer = nn.AvgPool2d(3, stride, padding=1) - stride = 1 - - if dropblock_prob > 0.0: - self.dropblock1 = DropBlock2D(dropblock_prob, 3) - if radix == 1: - self.dropblock2 = DropBlock2D(dropblock_prob, 3) - self.dropblock3 = DropBlock2D(dropblock_prob, 3) - - if radix >= 1: - self.conv2 = SplAtConv2d( - group_width, - group_width, - kernel_size=3, - stride=stride, - padding=dilation, - dilation=dilation, - groups=cardinality, - bias=False, - radix=radix, - norm_layer=norm_layer, - dropblock_prob=dropblock_prob, - swish=swish, - ) - else: - self.conv2 = nn.Conv2d( - group_width, - group_width, - kernel_size=3, - stride=stride, - padding=dilation, - dilation=dilation, - groups=cardinality, - bias=False, - ) - self.bn2 = norm_layer(group_width) - - self.conv3 = nn.Conv2d(group_width, planes * 4, kernel_size=1, bias=False) - self.bn3 = norm_layer(planes * 4) - - if last_gamma: - from torch.nn.init import zeros_ - - zeros_(self.bn3.weight) - self.relu = nn.SiLU() if swish else nn.ReLU(inplace=True) - self.downsample = downsample - self.dilation = dilation - self.stride = stride - - def forward(self, x): - residual = x - - out = self.conv1(x) - out = self.bn1(out) - if self.dropblock_prob > 0.0: - out = self.dropblock1(out) - out = self.relu(out) - - if self.avd and self.avd_first: - out = self.avd_layer(out) - - out = self.conv2(out) - if self.radix == 0: - out = self.bn2(out) - if self.dropblock_prob > 0.0: - out = self.dropblock2(out) - out = self.relu(out) - - if self.avd and not self.avd_first: - out = self.avd_layer(out) - - out = self.conv3(out) - out = self.bn3(out) - if self.dropblock_prob > 0.0: - out = self.dropblock3(out) - - if self.downsample is not None: - residual = self.downsample(x) - - out += residual - out = self.relu(out) - - return out - - -class ResNest(nn.Module): - """ResNet Variants - - Parameters - ---------- - block : Block - Class for the residual block. Options are BasicBlockV1, BottleneckV1. - layers : list of int - Numbers of layers in each block - classes : int, default 1000 - Number of classification classes. - dilated : bool, default False - Applying dilation strategy to pretrained ResNet yielding a stride-8 model, - typically used in Semantic Segmentation. - norm_layer : object - Normalization layer used in backbone network (default: :class:`mxnet.gluon.nn.BatchNorm`; - for Synchronized Cross-GPU BachNormalization). - - Reference: - - - He, Kaiming, et al. "Deep residual learning for image recognition." Proceedings of the IEEE conference on computer vision and pattern recognition. 2016. - - - Yu, Fisher, and Vladlen Koltun. "Multi-scale context aggregation by dilated convolutions." - """ - - # pylint: disable=unused-variable - def __init__( - self, - block, - layers, - radix=1, - groups=1, - bottleneck_width=64, - num_classes=10, - dilated=False, - dilation=1, - deep_stem=False, - stem_width=64, - avg_down=False, - avd=False, - avd_first=False, - final_drop=0.0, - dropblock_prob=0, - last_gamma=False, - norm_layer=nn.BatchNorm2d, - swish=False, - ): - self.cardinality = groups - self.bottleneck_width = bottleneck_width - # ResNet-D params - self.inplanes = stem_width * 2 if deep_stem else 64 - self.avg_down = avg_down - self.last_gamma = last_gamma - self.swish = swish - # ResNeSt params - self.radix = radix - self.avd = avd - self.avd_first = avd_first - self.relu = nn.SiLU if swish else nn.ReLU - super(ResNest, self).__init__() - conv_layer = nn.Conv2d - conv_kwargs = {} - if deep_stem: - self.conv1 = nn.Sequential( - conv_layer( - 3, - stem_width, - kernel_size=3, - stride=1, - padding=1, - bias=False, - **conv_kwargs - ), - norm_layer(stem_width), - self.relu(), - conv_layer( - stem_width, - stem_width, - kernel_size=3, - stride=1, - padding=1, - bias=False, - **conv_kwargs - ), - norm_layer(stem_width), - self.relu(), - conv_layer( - stem_width, - stem_width * 2, - kernel_size=3, - stride=1, - padding=1, - bias=False, - **conv_kwargs - ), - ) - else: - self.conv1 = conv_layer( - 3, 64, kernel_size=3, stride=1, padding=3, bias=False, **conv_kwargs - ) - self.bn1 = norm_layer(self.inplanes) - self.relu = self.relu() - # self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) - self.maxpool = nn.Identity() - self.layer1 = self._make_layer( - block, 64, layers[0], norm_layer=norm_layer, is_first=False - ) - self.layer2 = self._make_layer( - block, 128, layers[1], stride=2, norm_layer=norm_layer - ) - if dilated or dilation == 4: - self.layer3 = self._make_layer( - block, - 256, - layers[2], - stride=1, - dilation=2, - norm_layer=norm_layer, - dropblock_prob=dropblock_prob, - ) - self.layer4 = self._make_layer( - block, - 512, - layers[3], - stride=1, - dilation=4, - norm_layer=norm_layer, - dropblock_prob=dropblock_prob, - ) - elif dilation == 2: - self.layer3 = self._make_layer( - block, - 256, - layers[2], - stride=2, - dilation=1, - norm_layer=norm_layer, - dropblock_prob=dropblock_prob, - ) - self.layer4 = self._make_layer( - block, - 512, - layers[3], - stride=1, - dilation=2, - norm_layer=norm_layer, - dropblock_prob=dropblock_prob, - ) - else: - self.layer3 = self._make_layer( - block, - 256, - layers[2], - stride=2, - norm_layer=norm_layer, - dropblock_prob=dropblock_prob, - ) - self.layer4 = self._make_layer( - block, - 512, - layers[3], - stride=2, - norm_layer=norm_layer, - dropblock_prob=dropblock_prob, - ) - self.avgpool = GlobalAvgPool2d() - self.drop = nn.Dropout(final_drop) if final_drop > 0.0 else None - self.fc = nn.Linear(512 * block.expansion, num_classes) - - for m in self.modules(): - if isinstance(m, nn.Conv2d): - n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels - m.weight.data.normal_(0, math.sqrt(2.0 / n)) - elif isinstance(m, norm_layer): - m.weight.data.fill_(1) - m.bias.data.zero_() - - def _make_layer( - self, - block, - planes, - blocks, - stride=1, - dilation=1, - norm_layer=None, - dropblock_prob=0.0, - is_first=True, - ): - downsample = None - if stride != 1 or self.inplanes != planes * block.expansion: - down_layers = [] - if self.avg_down: - if dilation == 1: - down_layers.append( - nn.AvgPool2d( - kernel_size=stride, - stride=stride, - ceil_mode=True, - count_include_pad=False, - ) - ) - else: - down_layers.append( - nn.AvgPool2d( - kernel_size=1, - stride=1, - ceil_mode=True, - count_include_pad=False, - ) - ) - down_layers.append( - nn.Conv2d( - self.inplanes, - planes * block.expansion, - kernel_size=1, - stride=1, - bias=False, - ) - ) - else: - down_layers.append( - nn.Conv2d( - self.inplanes, - planes * block.expansion, - kernel_size=1, - stride=stride, - bias=False, - ) - ) - down_layers.append(norm_layer(planes * block.expansion)) - downsample = nn.Sequential(*down_layers) - - layers = [] - if dilation == 1 or dilation == 2: - layers.append( - block( - self.inplanes, - planes, - stride, - downsample=downsample, - radix=self.radix, - cardinality=self.cardinality, - bottleneck_width=self.bottleneck_width, - avd=self.avd, - avd_first=self.avd_first, - dilation=1, - is_first=is_first, - norm_layer=norm_layer, - dropblock_prob=dropblock_prob, - last_gamma=self.last_gamma, - swish=self.swish, - ) - ) - elif dilation == 4: - layers.append( - block( - self.inplanes, - planes, - stride, - downsample=downsample, - radix=self.radix, - cardinality=self.cardinality, - bottleneck_width=self.bottleneck_width, - avd=self.avd, - avd_first=self.avd_first, - dilation=2, - is_first=is_first, - norm_layer=norm_layer, - dropblock_prob=dropblock_prob, - last_gamma=self.last_gamma, - swish=self.swish, - ) - ) - else: - raise RuntimeError("=> unknown dilation size: {}".format(dilation)) - - self.inplanes = planes * block.expansion - for i in range(1, blocks): - layers.append( - block( - self.inplanes, - planes, - radix=self.radix, - cardinality=self.cardinality, - bottleneck_width=self.bottleneck_width, - avd=self.avd, - avd_first=self.avd_first, - dilation=dilation, - norm_layer=norm_layer, - dropblock_prob=dropblock_prob, - last_gamma=self.last_gamma, - swish=self.swish, - ) - ) - - return nn.Sequential(*layers) - - def forward(self, x): - x = self.conv1(x) - x = self.bn1(x) - x = self.relu(x) - x = self.maxpool(x) - - x = self.layer1(x) - x = self.layer2(x) - x = self.layer3(x) - x = self.layer4(x) - - x = self.avgpool(x) - x = torch.flatten(x, 1) - if self.drop: - x = self.drop(x) - x = self.fc(x) - - return x - - -def ResNest152(num_classes=10, **kwargs): - model = ResNest( - Bottleneck, - [3, 8, 36, 3], - radix=4, - groups=1, - bottleneck_width=64, - num_classes=num_classes, - deep_stem=True, - stem_width=64, - avg_down=True, - avd=True, - avd_first=False, - swish=True, - **kwargs - ) - return model diff --git a/robustbench/model_zoo/architectures/resnet.py b/robustbench/model_zoo/architectures/resnet.py deleted file mode 100644 index e4bfa0be..00000000 --- a/robustbench/model_zoo/architectures/resnet.py +++ /dev/null @@ -1,260 +0,0 @@ -import torch.nn as nn -import torch.nn.functional as F - - -class BasicBlock(nn.Module): - expansion = 1 - - def __init__(self, in_planes, planes, stride=1): - super(BasicBlock, self).__init__() - self.conv1 = nn.Conv2d(in_planes, planes, kernel_size=3, stride=stride, padding=1, bias=False) - self.bn1 = nn.BatchNorm2d(planes) - self.conv2 = nn.Conv2d(planes, planes, kernel_size=3, stride=1, padding=1, bias=False) - self.bn2 = nn.BatchNorm2d(planes) - - self.shortcut = nn.Sequential() - if stride != 1 or in_planes != self.expansion * planes: - self.shortcut = nn.Sequential( - nn.Conv2d(in_planes, self.expansion * planes, kernel_size=1, stride=stride, bias=False), - nn.BatchNorm2d(self.expansion * planes) - ) - - def forward(self, x): - out = F.relu(self.bn1(self.conv1(x))) - out = self.bn2(self.conv2(out)) - out += self.shortcut(x) - out = F.relu(out) - return out - - -class Bottleneck(nn.Module): - expansion = 4 - - def __init__(self, in_planes, planes, stride=1): - super(Bottleneck, self).__init__() - self.conv1 = nn.Conv2d(in_planes, planes, kernel_size=1, bias=False) - self.bn1 = nn.BatchNorm2d(planes) - self.conv2 = nn.Conv2d(planes, planes, kernel_size=3, stride=stride, padding=1, bias=False) - self.bn2 = nn.BatchNorm2d(planes) - self.conv3 = nn.Conv2d(planes, self.expansion * planes, kernel_size=1, bias=False) - self.bn3 = nn.BatchNorm2d(self.expansion * planes) - - self.shortcut = nn.Sequential() - if stride != 1 or in_planes != self.expansion * planes: - self.shortcut = nn.Sequential( - nn.Conv2d(in_planes, self.expansion * planes, kernel_size=1, stride=stride, bias=False), - nn.BatchNorm2d(self.expansion * planes) - ) - - def forward(self, x): - out = F.relu(self.bn1(self.conv1(x))) - out = F.relu(self.bn2(self.conv2(out))) - out = self.bn3(self.conv3(out)) - out += self.shortcut(x) - out = F.relu(out) - return out - - -class BottleneckChen2020AdversarialNet(nn.Module): - expansion = 4 - - def __init__(self, in_planes, planes, stride=1): - super(BottleneckChen2020AdversarialNet, self).__init__() - self.bn0 = nn.BatchNorm2d(in_planes) - self.conv1 = nn.Conv2d(in_planes, planes, kernel_size=1, bias=False) - self.bn1 = nn.BatchNorm2d(planes) - self.conv2 = nn.Conv2d(planes, planes, kernel_size=3, stride=stride, padding=1, bias=False) - self.bn2 = nn.BatchNorm2d(planes) - self.conv3 = nn.Conv2d(planes, self.expansion * planes, kernel_size=1, bias=False) - self.shortcut = nn.Sequential() - if stride != 1 or in_planes != self.expansion * planes: - self.shortcut = nn.Sequential( - nn.Conv2d(in_planes, self.expansion * planes, kernel_size=1, stride=stride, bias=False), - nn.BatchNorm2d(self.expansion * planes) - ) - - def forward(self, x): - pre = F.relu(self.bn0(x)) - out = F.relu(self.bn1(self.conv1(pre))) - out = F.relu(self.bn2(self.conv2(out))) - out = self.conv3(out) - if len(self.shortcut) == 0: - out += self.shortcut(x) - else: - out += self.shortcut(pre) - return out - - -class ResNet(nn.Module): - def __init__(self, block, num_blocks, num_classes=10): - super(ResNet, self).__init__() - self.in_planes = 64 - - self.conv1 = nn.Conv2d(3, 64, kernel_size=3, stride=1, padding=1, bias=False) - self.bn1 = nn.BatchNorm2d(64) - self.layer1 = self._make_layer(block, 64, num_blocks[0], stride=1) - self.layer2 = self._make_layer(block, 128, num_blocks[1], stride=2) - self.layer3 = self._make_layer(block, 256, num_blocks[2], stride=2) - self.layer4 = self._make_layer(block, 512, num_blocks[3], stride=2) - self.linear = nn.Linear(512 * block.expansion, num_classes) - - def _make_layer(self, block, planes, num_blocks, stride): - strides = [stride] + [1] * (num_blocks - 1) - layers = [] - for stride in strides: - layers.append(block(self.in_planes, planes, stride)) - self.in_planes = planes * block.expansion - return nn.Sequential(*layers) - - def forward(self, x): - out = F.relu(self.bn1(self.conv1(x))) - out = self.layer1(out) - out = self.layer2(out) - out = self.layer3(out) - out = self.layer4(out) - out = F.avg_pool2d(out, 4) - out = out.view(out.size(0), -1) - out = self.linear(out) - return out - - -class PreActBlock(nn.Module): - '''Pre-activation version of the BasicBlock.''' - expansion = 1 - - def __init__(self, in_planes, planes, stride=1, out_shortcut=False): - super(PreActBlock, self).__init__() - self.out_shortcut = out_shortcut - self.bn1 = nn.BatchNorm2d(in_planes) - self.conv1 = nn.Conv2d(in_planes, planes, kernel_size=3, stride=stride, padding=1, bias=False) - self.bn2 = nn.BatchNorm2d(planes) - self.conv2 = nn.Conv2d(planes, planes, kernel_size=3, stride=1, padding=1, bias=False) - - if stride != 1 or in_planes != self.expansion*planes: - self.shortcut = nn.Sequential( - nn.Conv2d(in_planes, self.expansion*planes, kernel_size=1, stride=stride, bias=False) - ) - - def forward(self, x): - out = F.relu(self.bn1(x)) - shortcut = self.shortcut(out if self.out_shortcut else x) if hasattr(self, 'shortcut') else x - out = self.conv1(out) - out = self.conv2(F.relu(self.bn2(out))) - out += shortcut - return out - - -class PreActBlockV2(nn.Module): - '''Pre-activation version of the BasicBlock (slightly different forward pass)''' - expansion = 1 - - def __init__(self, in_planes, planes, stride=1, out_shortcut=False): - super(PreActBlockV2, self).__init__() - self.bn1 = nn.BatchNorm2d(in_planes) - self.conv1 = nn.Conv2d(in_planes, planes, kernel_size=3, stride=stride, padding=1, bias=False) - self.bn2 = nn.BatchNorm2d(planes) - self.conv2 = nn.Conv2d(planes, planes, kernel_size=3, stride=1, padding=1, bias=False) - - if stride != 1 or in_planes != self.expansion*planes: - self.shortcut = nn.Sequential( - nn.Conv2d(in_planes, self.expansion*planes, kernel_size=1, stride=stride, bias=False) - ) - - def forward(self, x): - out = F.relu(self.bn1(x)) - shortcut = self.shortcut(out) if hasattr(self, 'shortcut') else x - out = self.conv1(out) - out = self.conv2(F.relu(self.bn2(out))) - out += shortcut - return out - - -class PreActBottleneck(nn.Module): - '''Pre-activation version of the original Bottleneck module.''' - expansion = 4 - - def __init__(self, in_planes, planes, stride=1): - super(PreActBottleneck, self).__init__() - self.bn1 = nn.BatchNorm2d(in_planes) - self.conv1 = nn.Conv2d(in_planes, planes, kernel_size=1, bias=False) - self.bn2 = nn.BatchNorm2d(planes) - self.conv2 = nn.Conv2d(planes, planes, kernel_size=3, stride=stride, padding=1, bias=False) - self.bn3 = nn.BatchNorm2d(planes) - self.conv3 = nn.Conv2d(planes, self.expansion*planes, kernel_size=1, bias=False) - - if stride != 1 or in_planes != self.expansion*planes: - self.shortcut = nn.Sequential( - nn.Conv2d(in_planes, self.expansion*planes, kernel_size=1, stride=stride, bias=False) - ) - - def forward(self, x): - out = F.relu(self.bn1(x)) - shortcut = self.shortcut(out) if hasattr(self, 'shortcut') else x - out = self.conv1(out) - out = self.conv2(F.relu(self.bn2(out))) - out = self.conv3(F.relu(self.bn3(out))) - out += shortcut - return out - - -class PreActResNet(nn.Module): - def __init__(self, block, num_blocks, num_classes=10, bn_before_fc=False, out_shortcut=False): - super(PreActResNet, self).__init__() - self.in_planes = 64 - self.bn_before_fc = bn_before_fc - self.out_shortcut = out_shortcut - - self.conv1 = nn.Conv2d(3, 64, kernel_size=3, stride=1, padding=1, bias=False) - self.layer1 = self._make_layer(block, 64, num_blocks[0], stride=1) - self.layer2 = self._make_layer(block, 128, num_blocks[1], stride=2) - self.layer3 = self._make_layer(block, 256, num_blocks[2], stride=2) - self.layer4 = self._make_layer(block, 512, num_blocks[3], stride=2) - if bn_before_fc: - self.bn = nn.BatchNorm2d(512 * block.expansion) - self.linear = nn.Linear(512*block.expansion, num_classes) - - def _make_layer(self, block, planes, num_blocks, stride): - strides = [stride] + [1]*(num_blocks-1) - layers = [] - for stride in strides: - layers.append(block(self.in_planes, planes, stride, out_shortcut=self.out_shortcut)) - self.in_planes = planes * block.expansion - return nn.Sequential(*layers) - - def forward(self, x): - out = self.conv1(x) - out = self.layer1(out) - out = self.layer2(out) - out = self.layer3(out) - out = self.layer4(out) - if self.bn_before_fc: - out = F.relu(self.bn(out)) - out = F.avg_pool2d(out, 4) - out = out.view(out.size(0), -1) - out = self.linear(out) - return out - - -def ResNet18(): - return ResNet(BasicBlock, [2, 2, 2, 2]) - - -def ResNet34(): - return ResNet(BasicBlock, [3, 4, 6, 3]) - - -def ResNet50(): - return ResNet(Bottleneck, [3, 4, 6, 3]) - - -def ResNet101(): - return ResNet(Bottleneck, [3, 4, 23, 3]) - - -def ResNet152(): - return ResNet(Bottleneck, [3, 8, 36, 3]) - - -def PreActResNet18(): - return PreActResNet(PreActBlock, [2, 2, 2, 2]) - diff --git a/robustbench/model_zoo/architectures/resnext.py b/robustbench/model_zoo/architectures/resnext.py deleted file mode 100644 index bad94548..00000000 --- a/robustbench/model_zoo/architectures/resnext.py +++ /dev/null @@ -1,170 +0,0 @@ -"""ResNeXt implementation (https://arxiv.org/abs/1611.05431). - -MIT License - -Copyright (c) 2017 Xuanyi Dong - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -From: -https://github.com/google-research/augmix/blob/master/third_party/WideResNet_pytorch/wideresnet.py - -""" - -import math - -import torch.nn as nn -import torch.nn.functional as F -from torch.nn import init - - -class ResNeXtBottleneck(nn.Module): - """ - ResNeXt Bottleneck Block type C (https://github.com/facebookresearch/ResNeXt/blob/master/models/resnext.lua). - """ - expansion = 4 - - def __init__(self, - inplanes, - planes, - cardinality, - base_width, - stride=1, - downsample=None): - super(ResNeXtBottleneck, self).__init__() - - dim = int(math.floor(planes * (base_width / 64.0))) - - self.conv_reduce = nn.Conv2d( - inplanes, - dim * cardinality, - kernel_size=1, - stride=1, - padding=0, - bias=False) - self.bn_reduce = nn.BatchNorm2d(dim * cardinality) - - self.conv_conv = nn.Conv2d( - dim * cardinality, - dim * cardinality, - kernel_size=3, - stride=stride, - padding=1, - groups=cardinality, - bias=False) - self.bn = nn.BatchNorm2d(dim * cardinality) - - self.conv_expand = nn.Conv2d( - dim * cardinality, - planes * 4, - kernel_size=1, - stride=1, - padding=0, - bias=False) - self.bn_expand = nn.BatchNorm2d(planes * 4) - - self.downsample = downsample - - def forward(self, x): - residual = x - - bottleneck = self.conv_reduce(x) - bottleneck = F.relu(self.bn_reduce(bottleneck), inplace=True) - - bottleneck = self.conv_conv(bottleneck) - bottleneck = F.relu(self.bn(bottleneck), inplace=True) - - bottleneck = self.conv_expand(bottleneck) - bottleneck = self.bn_expand(bottleneck) - - if self.downsample is not None: - residual = self.downsample(x) - - return F.relu(residual + bottleneck, inplace=True) - - -class CifarResNeXt(nn.Module): - """ResNext optimized for the Cifar dataset, as specified in - https://arxiv.org/pdf/1611.05431.pdf.""" - - def __init__(self, block, depth, cardinality, base_width, num_classes): - super(CifarResNeXt, self).__init__() - - # Model type specifies number of layers for CIFAR-10 and CIFAR-100 model - assert (depth - 2) % 9 == 0, 'depth should be one of 29, 38, 47, 56, 101' - layer_blocks = (depth - 2) // 9 - - self.cardinality = cardinality - self.base_width = base_width - self.num_classes = num_classes - - self.conv_1_3x3 = nn.Conv2d(3, 64, 3, 1, 1, bias=False) - self.bn_1 = nn.BatchNorm2d(64) - - self.inplanes = 64 - self.stage_1 = self._make_layer(block, 64, layer_blocks, 1) - self.stage_2 = self._make_layer(block, 128, layer_blocks, 2) - self.stage_3 = self._make_layer(block, 256, layer_blocks, 2) - self.avgpool = nn.AvgPool2d(8) - self.classifier = nn.Linear(256 * block.expansion, num_classes) - - for m in self.modules(): - if isinstance(m, nn.Conv2d): - n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels - m.weight.data.normal_(0, math.sqrt(2. / n)) - elif isinstance(m, nn.BatchNorm2d): - m.weight.data.fill_(1) - m.bias.data.zero_() - elif isinstance(m, nn.Linear): - init.kaiming_normal_(m.weight) - m.bias.data.zero_() - - def _make_layer(self, block, planes, blocks, stride=1): - downsample = None - if stride != 1 or self.inplanes != planes * block.expansion: - downsample = nn.Sequential( - nn.Conv2d( - self.inplanes, - planes * block.expansion, - kernel_size=1, - stride=stride, - bias=False), - nn.BatchNorm2d(planes * block.expansion), - ) - - layers = [] - layers.append( - block(self.inplanes, planes, self.cardinality, self.base_width, stride, - downsample)) - self.inplanes = planes * block.expansion - for _ in range(1, blocks): - layers.append( - block(self.inplanes, planes, self.cardinality, self.base_width)) - - return nn.Sequential(*layers) - - def forward(self, x): - x = self.conv_1_3x3(x) - x = F.relu(self.bn_1(x), inplace=True) - x = self.stage_1(x) - x = self.stage_2(x) - x = self.stage_3(x) - x = self.avgpool(x) - x = x.view(x.size(0), -1) - return self.classifier(x) diff --git a/robustbench/model_zoo/architectures/robust_wide_resnet.py b/robustbench/model_zoo/architectures/robust_wide_resnet.py deleted file mode 100644 index bffa5db7..00000000 --- a/robustbench/model_zoo/architectures/robust_wide_resnet.py +++ /dev/null @@ -1,54 +0,0 @@ -import torch -import math -import torch.nn.functional as F -from torch import nn -from .wide_resnet import WideResNet, NetworkBlock, BasicBlock - - -class RobustWideResNet(nn.Module): - def __init__(self, num_classes=10, channel_configs=[16, 160, 320, 640], - depth_configs=[5, 5, 5], stride_config=[1, 2, 2], - drop_rate_config=[0.0, 0.0, 0.0]): - super(RobustWideResNet, self).__init__() - assert len(channel_configs) - 1 == len(depth_configs) == len(stride_config) == len(drop_rate_config) - self.channel_configs = channel_configs - self.depth_configs = depth_configs - self.stride_config = stride_config - - self.stem_conv = nn.Conv2d(3, channel_configs[0], kernel_size=3, - stride=1, padding=1, bias=False) - self.blocks = nn.ModuleList([]) - for i, stride in enumerate(stride_config): - self.blocks.append(NetworkBlock(block=BasicBlock, - nb_layers=depth_configs[i], - in_planes=channel_configs[i], - out_planes=channel_configs[i+1], - stride=stride, - dropRate=drop_rate_config[i],)) - - # global average pooling and classifier - self.bn1 = nn.BatchNorm2d(channel_configs[-1]) - self.relu = nn.ReLU(inplace=True) - self.global_pooling = nn.AdaptiveAvgPool2d(1) - self.fc = nn.Linear(channel_configs[-1], num_classes) - self.fc_size = channel_configs[-1] - - for m in self.modules(): - if isinstance(m, nn.Conv2d): - n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels - m.weight.data.normal_(0, math.sqrt(2. / n)) - elif isinstance(m, nn.BatchNorm2d) or isinstance(m, nn.GroupNorm): - m.weight.data.fill_(1) - m.bias.data.zero_() - elif isinstance(m, nn.Linear): - m.bias.data.zero_() - - def forward(self, x): - out = self.stem_conv(x) - for i, block in enumerate(self.blocks): - out = block(out) - out = self.relu(self.bn1(out)) - out = self.global_pooling(out) - out = out.view(-1, self.fc_size) - out = self.fc(out) - return out diff --git a/robustbench/model_zoo/architectures/utils_architectures.py b/robustbench/model_zoo/architectures/utils_architectures.py deleted file mode 100644 index f64307fd..00000000 --- a/robustbench/model_zoo/architectures/utils_architectures.py +++ /dev/null @@ -1,38 +0,0 @@ -import torch -import torch.nn as nn -from collections import OrderedDict -from typing import Tuple, TypeVar -from torch import Tensor - - -class ImageNormalizer(nn.Module): - - def __init__(self, mean: Tuple[float, float, float], - std: Tuple[float, float, float]) -> None: - super(ImageNormalizer, self).__init__() - - self.register_buffer('mean', torch.as_tensor(mean).view(1, 3, 1, 1)) - self.register_buffer('std', torch.as_tensor(std).view(1, 3, 1, 1)) - - def forward(self, input: Tensor) -> Tensor: - return (input - self.mean) / self.std - - def __repr__(self): - return f'ImageNormalizer(mean={self.mean.squeeze()}, std={self.std.squeeze()})' # type: ignore - - -def normalize_model(model: nn.Module, mean: Tuple[float, float, float], - std: Tuple[float, float, float]) -> nn.Module: - layers = OrderedDict([('normalize', ImageNormalizer(mean, std)), - ('model', model)]) - return nn.Sequential(layers) - - -M = TypeVar('M', bound=nn.Module) - - -# def normalize_timm_model(model: M) -> M: -# return normalize_model( -# model, -# model.default_cfg['mean'], # type: ignore -# model.default_cfg['std']) # type: ignore diff --git a/robustbench/model_zoo/architectures/wide_resnet.py b/robustbench/model_zoo/architectures/wide_resnet.py deleted file mode 100644 index b38308bc..00000000 --- a/robustbench/model_zoo/architectures/wide_resnet.py +++ /dev/null @@ -1,95 +0,0 @@ -import math -import torch -import torch.nn as nn -import torch.nn.functional as F - - -class BasicBlock(nn.Module): - def __init__(self, in_planes, out_planes, stride, dropRate=0.0): - super(BasicBlock, self).__init__() - self.bn1 = nn.BatchNorm2d(in_planes) - self.relu1 = nn.ReLU(inplace=True) - self.conv1 = nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride, - padding=1, bias=False) - self.bn2 = nn.BatchNorm2d(out_planes) - self.relu2 = nn.ReLU(inplace=True) - self.conv2 = nn.Conv2d(out_planes, out_planes, kernel_size=3, stride=1, - padding=1, bias=False) - self.droprate = dropRate - self.equalInOut = (in_planes == out_planes) - self.convShortcut = (not self.equalInOut) and nn.Conv2d(in_planes, out_planes, kernel_size=1, stride=stride, - padding=0, bias=False) or None - - def forward(self, x): - if not self.equalInOut: - x = self.relu1(self.bn1(x)) - else: - out = self.relu1(self.bn1(x)) - out = self.relu2(self.bn2(self.conv1(out if self.equalInOut else x))) - if self.droprate > 0: - out = F.dropout(out, p=self.droprate, training=self.training) - out = self.conv2(out) - return torch.add(x if self.equalInOut else self.convShortcut(x), out) - - -class NetworkBlock(nn.Module): - def __init__(self, nb_layers, in_planes, out_planes, block, stride, dropRate=0.0): - super(NetworkBlock, self).__init__() - self.layer = self._make_layer(block, in_planes, out_planes, nb_layers, stride, dropRate) - - def _make_layer(self, block, in_planes, out_planes, nb_layers, stride, dropRate): - layers = [] - for i in range(int(nb_layers)): - layers.append(block(i == 0 and in_planes or out_planes, out_planes, i == 0 and stride or 1, dropRate)) - return nn.Sequential(*layers) - - def forward(self, x): - return self.layer(x) - - -class WideResNet(nn.Module): - """ Based on code from https://github.com/yaodongyu/TRADES """ - def __init__(self, depth=28, num_classes=10, widen_factor=10, sub_block1=False, dropRate=0.0, bias_last=True): - super(WideResNet, self).__init__() - nChannels = [16, 16 * widen_factor, 32 * widen_factor, 64 * widen_factor] - assert ((depth - 4) % 6 == 0) - n = (depth - 4) / 6 - block = BasicBlock - # 1st conv before any network block - self.conv1 = nn.Conv2d(3, nChannels[0], kernel_size=3, stride=1, - padding=1, bias=False) - # 1st block - self.block1 = NetworkBlock(n, nChannels[0], nChannels[1], block, 1, dropRate) - if sub_block1: - # 1st sub-block - self.sub_block1 = NetworkBlock(n, nChannels[0], nChannels[1], block, 1, dropRate) - # 2nd block - self.block2 = NetworkBlock(n, nChannels[1], nChannels[2], block, 2, dropRate) - # 3rd block - self.block3 = NetworkBlock(n, nChannels[2], nChannels[3], block, 2, dropRate) - # global average pooling and classifier - self.bn1 = nn.BatchNorm2d(nChannels[3]) - self.relu = nn.ReLU(inplace=True) - self.fc = nn.Linear(nChannels[3], num_classes, bias=bias_last) - self.nChannels = nChannels[3] - - for m in self.modules(): - if isinstance(m, nn.Conv2d): - n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels - m.weight.data.normal_(0, math.sqrt(2. / n)) - elif isinstance(m, nn.BatchNorm2d): - m.weight.data.fill_(1) - m.bias.data.zero_() - elif isinstance(m, nn.Linear) and not m.bias is None: - m.bias.data.zero_() - - def forward(self, x): - out = self.conv1(x) - out = self.block1(out) - out = self.block2(out) - out = self.block3(out) - out = self.relu(self.bn1(out)) - out = F.avg_pool2d(out, 8) - out = out.view(-1, self.nChannels) - return self.fc(out) - diff --git a/robustbench/model_zoo/cifar10.py b/robustbench/model_zoo/cifar10.py deleted file mode 100644 index a82bc3bf..00000000 --- a/robustbench/model_zoo/cifar10.py +++ /dev/null @@ -1,1048 +0,0 @@ -from collections import OrderedDict - -# import timm -import torch -from torch import nn - -from robustbench.model_zoo.architectures.dm_wide_resnet import CIFAR10_MEAN, CIFAR10_STD, \ - DMWideResNet, Swish, DMPreActResNet -from robustbench.model_zoo.architectures.resnet import Bottleneck, BottleneckChen2020AdversarialNet, \ - PreActBlock, PreActBlockV2, PreActResNet, ResNet, ResNet18, BasicBlock -from robustbench.model_zoo.architectures.resnext import CifarResNeXt, \ - ResNeXtBottleneck -from robustbench.model_zoo.architectures.resnest import ResNest152 -from robustbench.model_zoo.architectures.wide_resnet import WideResNet -from robustbench.model_zoo.architectures.robust_wide_resnet import RobustWideResNet -from robustbench.model_zoo.architectures.boosting_wide_resnet import BoostingWideResNet -from robustbench.model_zoo.enums import ThreatModel -from robustbench.model_zoo.architectures.CARD_resnet import LRR_ResNet, WidePreActResNet -from robustbench.model_zoo.architectures.paf_wide_resnet import pssilu_wrn_28_10 - - -class Hendrycks2020AugMixResNeXtNet(CifarResNeXt): - - def __init__(self, depth=29, num_classes=10, cardinality=4, base_width=32): - super().__init__(ResNeXtBottleneck, - depth=depth, - num_classes=num_classes, - cardinality=cardinality, - base_width=base_width) - self.register_buffer('mu', torch.tensor([0.5] * 3).view(1, 3, 1, 1)) - self.register_buffer('sigma', torch.tensor([0.5] * 3).view(1, 3, 1, 1)) - - def forward(self, x): - x = (x - self.mu) / self.sigma - return super().forward(x) - - -class Hendrycks2020AugMixWRNNet(WideResNet): - - def __init__(self, depth=40, widen_factor=2): - super().__init__(depth=depth, - widen_factor=widen_factor, - sub_block1=False) - self.register_buffer('mu', torch.tensor([0.5] * 3).view(1, 3, 1, 1)) - self.register_buffer('sigma', torch.tensor([0.5] * 3).view(1, 3, 1, 1)) - - def forward(self, x): - x = (x - self.mu) / self.sigma - return super().forward(x) - - -class Hendrycks2019UsingNet(WideResNet): - - def __init__(self, depth=28, widen_factor=10): - super(Hendrycks2019UsingNet, self).__init__(depth=depth, - widen_factor=widen_factor, - sub_block1=False) - - def forward(self, x): - x = 2. * x - 1. - return super(Hendrycks2019UsingNet, self).forward(x) - - -class Rice2020OverfittingNet(WideResNet): - - def __init__(self, depth=34, widen_factor=20): - super(Rice2020OverfittingNet, self).__init__(depth=depth, - widen_factor=widen_factor, - sub_block1=False) - self.register_buffer( - 'mu', - torch.tensor([0.4914, 0.4822, 0.4465]).view(1, 3, 1, 1)) - self.register_buffer( - 'sigma', - torch.tensor([0.2471, 0.2435, 0.2616]).view(1, 3, 1, 1)) - - def forward(self, x): - x = (x - self.mu) / self.sigma - return super(Rice2020OverfittingNet, self).forward(x) - - -class Engstrom2019RobustnessNet(ResNet): - - def __init__(self): - super(Engstrom2019RobustnessNet, - self).__init__(Bottleneck, [3, 4, 6, 3]) - self.register_buffer( - 'mu', - torch.tensor([0.4914, 0.4822, 0.4465]).view(1, 3, 1, 1)) - self.register_buffer( - 'sigma', - torch.tensor([0.2023, 0.1994, 0.2010]).view(1, 3, 1, 1)) - - def forward(self, x): - x = (x - self.mu) / self.sigma - return super(Engstrom2019RobustnessNet, self).forward(x) - - -class Chen2020AdversarialNet(nn.Module): - - def __init__(self): - super(Chen2020AdversarialNet, self).__init__() - self.branch1 = ResNet(BottleneckChen2020AdversarialNet, [3, 4, 6, 3]) - self.branch2 = ResNet(BottleneckChen2020AdversarialNet, [3, 4, 6, 3]) - self.branch3 = ResNet(BottleneckChen2020AdversarialNet, [3, 4, 6, 3]) - - self.models = nn.ModuleList([self.branch1, self.branch2, self.branch3]) - - self.register_buffer( - 'mu', - torch.tensor([0.485, 0.456, 0.406]).view(1, 3, 1, 1)) - self.register_buffer( - 'sigma', - torch.tensor([0.229, 0.224, 0.225]).view(1, 3, 1, 1)) - - def forward(self, x): - out = (x - self.mu) / self.sigma - - out1 = self.branch1(out) - out2 = self.branch2(out) - out3 = self.branch3(out) - - prob1 = torch.softmax(out1, dim=1) - prob2 = torch.softmax(out2, dim=1) - prob3 = torch.softmax(out3, dim=1) - - return (prob1 + prob2 + prob3) / 3 - - -class Wong2020FastNet(PreActResNet): - - def __init__(self): - super(Wong2020FastNet, self).__init__(PreActBlock, [2, 2, 2, 2]) - self.register_buffer( - 'mu', - torch.tensor([0.4914, 0.4822, 0.4465]).view(1, 3, 1, 1)) - self.register_buffer( - 'sigma', - torch.tensor([0.2471, 0.2435, 0.2616]).view(1, 3, 1, 1)) - - def forward(self, x): - x = (x - self.mu) / self.sigma - return super(Wong2020FastNet, self).forward(x) - - -class Ding2020MMANet(WideResNet): - """ - See the appendix of the LICENSE file specifically for this model. - """ - - def __init__(self, depth=28, widen_factor=4): - super(Ding2020MMANet, self).__init__(depth=depth, - widen_factor=widen_factor, - sub_block1=False) - - def forward(self, x): - mu = x.mean(dim=(1, 2, 3), keepdim=True) - std = x.std(dim=(1, 2, 3), keepdim=True) - std_min = torch.ones_like(std) / (x.shape[1] * x.shape[2] * - x.shape[3])**.5 - x = (x - mu) / torch.max(std, std_min) - return super(Ding2020MMANet, self).forward(x) - - -class Augustin2020AdversarialNet(ResNet): - - def __init__(self): - super(Augustin2020AdversarialNet, - self).__init__(Bottleneck, [3, 4, 6, 3]) - self.register_buffer( - 'mu', - torch.tensor( - [0.4913997551666284, 0.48215855929893703, - 0.4465309133731618]).view(1, 3, 1, 1)) - self.register_buffer( - 'sigma', - torch.tensor( - [0.24703225141799082, 0.24348516474564, - 0.26158783926049628]).view(1, 3, 1, 1)) - - def forward(self, x): - x = (x - self.mu) / self.sigma - return super(Augustin2020AdversarialNet, self).forward(x) - - -class Augustin2020AdversarialWideNet(WideResNet): - - def __init__(self, depth=34, widen_factor=10): - super(Augustin2020AdversarialWideNet, - self).__init__(depth=depth, - widen_factor=widen_factor, - sub_block1=False) - self.register_buffer( - 'mu', - torch.tensor( - [0.4913997551666284, 0.48215855929893703, - 0.4465309133731618]).view(1, 3, 1, 1)) - self.register_buffer( - 'sigma', - torch.tensor( - [0.24703225141799082, 0.24348516474564, - 0.26158783926049628]).view(1, 3, 1, 1)) - - def forward(self, x): - x = (x - self.mu) / self.sigma - return super(Augustin2020AdversarialWideNet, self).forward(x) - - -class Rice2020OverfittingNetL2(PreActResNet): - - def __init__(self): - super(Rice2020OverfittingNetL2, self).__init__(PreActBlockV2, - [2, 2, 2, 2], - bn_before_fc=True) - self.register_buffer( - 'mu', - torch.tensor([0.4914, 0.4822, 0.4465]).view(1, 3, 1, 1)) - self.register_buffer( - 'sigma', - torch.tensor([0.2471, 0.2435, 0.2616]).view(1, 3, 1, 1)) - - def forward(self, x): - x = (x - self.mu) / self.sigma - return super(Rice2020OverfittingNetL2, self).forward(x) - - -class Rony2019DecouplingNet(WideResNet): - - def __init__(self, depth=28, widen_factor=10): - super(Rony2019DecouplingNet, self).__init__(depth=depth, - widen_factor=widen_factor, - sub_block1=False) - self.register_buffer( - 'mu', - torch.tensor([0.491, 0.482, 0.447]).view(1, 3, 1, 1)) - self.register_buffer( - 'sigma', - torch.tensor([0.247, 0.243, 0.262]).view(1, 3, 1, 1)) - - def forward(self, x): - x = (x - self.mu) / self.sigma - return super(Rony2019DecouplingNet, self).forward(x) - - -class Kireev2021EffectivenessNet(PreActResNet): - - def __init__(self): - super(Kireev2021EffectivenessNet, self).__init__(PreActBlockV2, - [2, 2, 2, 2], - bn_before_fc=True) - self.register_buffer( - 'mu', - torch.tensor([0.4914, 0.4822, 0.4465]).view(1, 3, 1, 1)) - self.register_buffer( - 'sigma', - torch.tensor([0.2471, 0.2435, 0.2616]).view(1, 3, 1, 1)) - - def forward(self, x): - x = (x - self.mu) / self.sigma - return super(Kireev2021EffectivenessNet, self).forward(x) - - -class Chen2020EfficientNet(WideResNet): - - def __init__(self, depth=34, widen_factor=10): - super().__init__(depth=depth, - widen_factor=widen_factor, - sub_block1=True) - self.register_buffer( - 'mu', - torch.tensor([0.4914, 0.4822, 0.4465]).view(1, 3, 1, 1)) - self.register_buffer( - 'sigma', - torch.tensor([0.2471, 0.2435, 0.2616]).view(1, 3, 1, 1)) - - def forward(self, x): - x = (x - self.mu) / self.sigma - return super().forward(x) - - -class Diffenderfer2021CARD(LRR_ResNet): - - def __init__(self, width=128): - super(Diffenderfer2021CARD, self).__init__(width=width) - self.register_buffer( - 'mu', - torch.tensor([0.491, 0.482, 0.447]).view(1, 3, 1, 1)) - self.register_buffer( - 'sigma', - torch.tensor([0.247, 0.243, 0.262]).view(1, 3, 1, 1)) - - def forward(self, x): - x = (x - self.mu) / self.sigma - return super().forward(x) - - -class Diffenderfer2021CARD_Deck(nn.Module): - - def __init__(self, width=128): - super(Diffenderfer2021CARD_Deck, self).__init__() - self.num_cards = 6 - self.models = nn.ModuleList() - - for i in range(self.num_cards): - self.models.append(LRR_ResNet(width=width)) - - self.register_buffer( - 'mu', - torch.tensor([0.491, 0.482, 0.447]).view(1, 3, 1, 1)) - self.register_buffer( - 'sigma', - torch.tensor([0.247, 0.243, 0.262]).view(1, 3, 1, 1)) - - def forward(self, x): - x = (x - self.mu) / self.sigma - - x_cl = x.clone( - ) # clone to make sure x is not changed by inplace methods - out_list = [] - for i in range(self.num_cards): - # Evaluate model i at input - out = self.models[i](x_cl) - # Compute softmax - out = torch.softmax(out, dim=1) - # Append output to list of logits - out_list.append(out) - - return torch.mean(torch.stack(out_list), dim=0) - - -class Diffenderfer2021CARD_Binary(WidePreActResNet): - - def __init__(self, num_classes=10): - super(Diffenderfer2021CARD_Binary, - self).__init__(num_classes=num_classes) - self.register_buffer( - 'mu', - torch.tensor([0.491, 0.482, 0.447]).view(1, 3, 1, 1)) - self.register_buffer( - 'sigma', - torch.tensor([0.247, 0.243, 0.262]).view(1, 3, 1, 1)) - - def forward(self, x): - x = (x - self.mu) / self.sigma - return super().forward(x) - - -class Diffenderfer2021CARD_Deck_Binary(torch.nn.Module): - - def __init__(self, num_classes=10): - super(Diffenderfer2021CARD_Deck_Binary, self).__init__() - self.num_cards = 6 - self.models = nn.ModuleList() - - for i in range(self.num_cards): - self.models.append(WidePreActResNet(num_classes=num_classes)) - - self.register_buffer( - 'mu', - torch.tensor([0.491, 0.482, 0.447]).view(1, 3, 1, 1)) - self.register_buffer( - 'sigma', - torch.tensor([0.247, 0.243, 0.262]).view(1, 3, 1, 1)) - - def forward(self, x): - x = (x - self.mu) / self.sigma - - x_cl = x.clone( - ) # clone to make sure x is not changed by inplace methods - out_list = [] - for i in range(self.num_cards): - # Evaluate model i at input - out = self.models[i](x_cl) - # Compute softmax - out = torch.softmax(out, dim=1) - # Append output to list of logits - out_list.append(out) - - return torch.mean(torch.stack(out_list), dim=0) - - -class Modas2021PRIMEResNet18(ResNet): - - def __init__(self, num_classes=10): - super().__init__(BasicBlock, [2, 2, 2, 2], num_classes=num_classes) - - # mu & sigma are updated from weights - self.register_buffer('mu', torch.tensor([0.5] * 3).view(1, 3, 1, 1)) - self.register_buffer('sigma', torch.tensor([0.5] * 3).view(1, 3, 1, 1)) - - def forward(self, x): - x = (x - self.mu) / self.sigma - return super().forward(x) - - -linf = OrderedDict( - [ - ('Andriushchenko2020Understanding', { - 'model': lambda: PreActResNet(PreActBlock, [2, 2, 2, 2]), - 'gdrive_id': '1Uyvprd98bIyxfMjLdCZwm-NEJ-6GMVis', - }), - ('Carmon2019Unlabeled', { - 'model': - lambda: WideResNet(depth=28, widen_factor=10, sub_block1=True), - 'gdrive_id': - '15tUx-gkZMYx7BfEOw1GY5OKC-jECIsPQ', - }), - ('Sehwag2020Hydra', { - 'model': - lambda: WideResNet(depth=28, widen_factor=10, sub_block1=True), - 'gdrive_id': - '1pi8GHwAVkxVH41hEnf0IAJb_7y-Q8a2Y', - }), - ('Wang2020Improving', { - 'model': - lambda: WideResNet(depth=28, widen_factor=10, sub_block1=True), - 'gdrive_id': - '1T939mU4kXYt5bbvM55aT4fLBvRhyzjiQ', - }), - ('Hendrycks2019Using', { - 'model': Hendrycks2019UsingNet, - 'gdrive_id': '1-DcJsYw2dNEOyF9epks2QS7r9nqBDEsw', - }), - ('Rice2020Overfitting', { - 'model': Rice2020OverfittingNet, - 'gdrive_id': '1vC_Twazji7lBjeMQvAD9uEQxi9Nx2oG-', - }), - ('Zhang2019Theoretically', { - 'model': - lambda: WideResNet(depth=34, widen_factor=10, sub_block1=True), - 'gdrive_id': - '1hPz9QQwyM7QSuWu-ANG_uXR-29xtL8t_', - }), - ('Engstrom2019Robustness', { - 'model': Engstrom2019RobustnessNet, - 'gdrive_id': '1etqmQsksNIWBvBQ4r8ZFk_3FJlLWr8Rr', - }), - ('Chen2020Adversarial', { - 'model': - Chen2020AdversarialNet, - 'gdrive_id': [ - '1HrG22y_A9F0hKHhh2cLLvKxsQTJTLE_y', - '1DB2ymt0rMnsMk5hTuUzoMTpMKEKWpExd', - '1GfgzNZcC190-IrT7056IZFDB6LfMUL9m' - ], - }), - ('Huang2020Self', { - 'model': - lambda: WideResNet(depth=34, widen_factor=10, sub_block1=True), - 'gdrive_id': - '1nInDeIyZe2G-mJFxQJ3UoclQNomWjMgm', - }), - ('Pang2020Boosting', { - 'model': BoostingWideResNet, - 'gdrive_id': '1iNWOj3MP7kGe8yTAS4XnDaDXDLt0mwqw', - }), - ('Wong2020Fast', { - 'model': Wong2020FastNet, - 'gdrive_id': '1Re--_lf3jCEw9bnQqGkjw3J7v2tSZKrv', - }), - ('Ding2020MMA', { - 'model': Ding2020MMANet, - 'gdrive_id': '19Q_rIIHXsYzxZ0WcZdqT-N2OD7MfgoZ0', - }), - ('Zhang2019You', { - 'model': - lambda: WideResNet(depth=34, widen_factor=10, sub_block1=True), - 'gdrive_id': - '1kB2qqPQ8qUNmK8VKuTOhT1X4GT46kAoA', - }), - ('Zhang2020Attacks', { - 'model': - lambda: WideResNet(depth=34, widen_factor=10, sub_block1=True), - 'gdrive_id': - '1lBVvLG6JLXJgQP2gbsTxNHl6s3YAopqk', - }), - ('Wu2020Adversarial_extra', { - 'model': - lambda: WideResNet(depth=28, widen_factor=10, sub_block1=True), - 'gdrive_id': - '1-WJWpAZLlmc4gJ8XXNf7IETjnSZzaCNp', - }), - ('Wu2020Adversarial', { - 'model': lambda: WideResNet(depth=34, widen_factor=10), - 'gdrive_id': '13LBcgNvhFppCFG22i1xATrahFPfMgXGf', - }), - ('Gowal2020Uncovering_70_16', { - 'model': - lambda: DMWideResNet(num_classes=10, - depth=70, - width=16, - activation_fn=Swish, - mean=CIFAR10_MEAN, - std=CIFAR10_STD), - 'gdrive_id': - "1DVwKclibqzniE2Ss5_g6BY77ChG8QKzl" - }), - ('Gowal2020Uncovering_70_16_extra', { - 'model': - lambda: DMWideResNet(num_classes=10, - depth=70, - width=16, - activation_fn=Swish, - mean=CIFAR10_MEAN, - std=CIFAR10_STD), - 'gdrive_id': - "1GxryYj_Or-VCDca0wgiFLz4ssXSZXQoJ" - }), - ('Gowal2020Uncovering_34_20', { - 'model': - lambda: DMWideResNet(num_classes=10, - depth=34, - width=20, - activation_fn=Swish, - mean=CIFAR10_MEAN, - std=CIFAR10_STD), - 'gdrive_id': - "1YWvZO1u9_yNLFNC3JYd_TVkvrRSMER1O" - }), - ('Gowal2020Uncovering_28_10_extra', { - 'model': - lambda: DMWideResNet(num_classes=10, - depth=28, - width=10, - activation_fn=Swish, - mean=CIFAR10_MEAN, - std=CIFAR10_STD), - 'gdrive_id': - "1MBAWGxiZxKt-GfqEqtLcXcd3tAxPhvV2" - }), - ('Sehwag2021Proxy', { - 'model': lambda: WideResNet(34, 10, sub_block1=False), - 'gdrive_id': '1QFA5fPMj2Qw4aYNG33PkFqiv_RTDWvzm', - }), - ('Sehwag2021Proxy_R18', { - 'model': ResNet18, - 'gdrive_id': '1-ZgoSlD_AMhtXdnUElilxVXnzK2DcHuu', - }), - ('Sehwag2021Proxy_ResNest152', { - 'model': ResNest152, - 'gdrive_id': '1XSjtJZAvDlua6wTM6WRLvW_jON-DqLgT', - }), - ('Sitawarin2020Improving', { - 'model': - lambda: WideResNet(depth=34, widen_factor=10, sub_block1=True), - 'gdrive_id': - '12teknvo6dQGSWBaGnbNFwFO3-Y8j2eB6', - }), - ('Chen2020Efficient', { - 'model': Chen2020EfficientNet, - 'gdrive_id': '1c5EXpd3Kn_s6qQIbkLX3tTOOPC8VslHg', - }), - ('Cui2020Learnable_34_20', { - 'model': - lambda: WideResNet(depth=34, widen_factor=20, sub_block1=True), - 'gdrive_id': - '1y7BUxPhQjNlb4w4BUlDyYJIS4w4fsGiS' - }), - ('Cui2020Learnable_34_10', { - 'model': - lambda: WideResNet(depth=34, widen_factor=10, sub_block1=True), - 'gdrive_id': - '16s9pi_1QgMbFLISVvaVUiNfCzah6g2YV' - }), - ('Zhang2020Geometry', { - 'model': - lambda: WideResNet(depth=28, widen_factor=10, sub_block1=True), - 'gdrive_id': - '1UoG1JhbAps1MdMc6PEFiZ2yVXl_Ii5Jk' - }), - ('Rebuffi2021Fixing_28_10_cutmix_ddpm', { - 'model': - lambda: DMWideResNet(num_classes=10, - depth=28, - width=10, - activation_fn=Swish, - mean=CIFAR10_MEAN, - std=CIFAR10_STD), - 'gdrive_id': - '1-0EChXbc6pOvx26O17av263bCeqIAz6s' - }), - ('Rebuffi2021Fixing_106_16_cutmix_ddpm', { - 'model': - lambda: DMWideResNet(num_classes=10, - depth=106, - width=16, - activation_fn=Swish, - mean=CIFAR10_MEAN, - std=CIFAR10_STD), - 'gdrive_id': - '1-4qnkveIkeWoGdF72kpEFHETiY3y4_tF' - }), - ('Rebuffi2021Fixing_70_16_cutmix_ddpm', { - 'model': - lambda: DMWideResNet(num_classes=10, - depth=70, - width=16, - activation_fn=Swish, - mean=CIFAR10_MEAN, - std=CIFAR10_STD), - 'gdrive_id': - '1-8CWRT-OFWyrz4T4s0I2mbFjPg8K_MUi' - }), - ('Rebuffi2021Fixing_70_16_cutmix_extra', { - 'model': - lambda: DMWideResNet(num_classes=10, - depth=70, - width=16, - activation_fn=Swish, - mean=CIFAR10_MEAN, - std=CIFAR10_STD), - 'gdrive_id': - '1qKDTp6IJ1BUXZaRtbYuo_t0tuDl_4mLg' - }), - ('Sridhar2021Robust', { - 'model': - lambda: WideResNet(depth=28, widen_factor=10, sub_block1=True), - 'gdrive_id': - '1muDMpOyRlgJ7n2rhS2NpfFGp3rzjuIu0' - }), - ('Sridhar2021Robust_34_15', { - 'model': - lambda: WideResNet(depth=34, widen_factor=15, sub_block1=True), - 'gdrive_id': - '1-3ii3GX93YqIcmJ3VNsOgYA7ecdnSZ0Z', - }), - ('Rebuffi2021Fixing_R18_ddpm', { - 'model': - lambda: DMPreActResNet(num_classes=10, - depth=18, - width=0, - activation_fn=Swish, - mean=CIFAR10_MEAN, - std=CIFAR10_STD), - 'gdrive_id': - '1--dxE66AsgBSUsuK2sXCTrsYUV9B5f95' - }), - ('Rade2021Helper_R18_extra', { - 'model': - lambda: DMPreActResNet(num_classes=10, - depth=18, - width=0, - activation_fn=Swish, - mean=CIFAR10_MEAN, - std=CIFAR10_STD), - 'gdrive_id': - '1hdXk1rPJql2Oa84Kky64fMTQzng5UcTL' - }), - ('Rade2021Helper_R18_ddpm', { - 'model': - lambda: DMPreActResNet(num_classes=10, - depth=18, - width=0, - activation_fn=Swish, - mean=CIFAR10_MEAN, - std=CIFAR10_STD), - 'gdrive_id': - '1f2yJUo-jxCQNk589frzriv6wPyrQEZdX' - }), - ('Rade2021Helper_extra', { - 'model': - lambda: DMWideResNet(num_classes=10, - depth=34, - width=10, - activation_fn=Swish, - mean=CIFAR10_MEAN, - std=CIFAR10_STD), - 'gdrive_id': - '1GhAp-0C3ONRy9BxIe0J9vKc082vHvR7t' - }), - ('Rade2021Helper_ddpm', { - 'model': - lambda: DMWideResNet(num_classes=10, - depth=28, - width=10, - activation_fn=Swish, - mean=CIFAR10_MEAN, - std=CIFAR10_STD), - 'gdrive_id': - '1AOF6LxnwgS5fCz_lVLYqs_wnUYuv6O7z' - }), - ('Huang2021Exploring', { - 'model': - lambda: RobustWideResNet(num_classes=10, - channel_configs=[16, 320, 640, 512], - depth_configs=[5, 5, 5]), - 'gdrive_id': - '1-2ram-xtoEidOh1SCYY5KTiyKieINkZe' - }), - ('Huang2021Exploring_ema', { - 'model': - lambda: RobustWideResNet(num_classes=10, - channel_configs=[16, 320, 640, 512], - depth_configs=[5, 5, 5]), - 'gdrive_id': - '1-GRwO5t9HxOS2y6RFK8QEsDXjdcgmVu6' - }), - ('Addepalli2021Towards_RN18', { - 'model': lambda: ResNet18(), - 'gdrive_id': '1-1DxecXz5U_xZ54DVdE-GVm71Tiox-Ri' - }), - ('Addepalli2021Towards_WRN34', { - 'model': - lambda: WideResNet(num_classes=10, depth=34, sub_block1=True), - 'gdrive_id': '1-3vgjTNfSq7LSMKuayEQ-jLflAP196dB' - }), - ('Gowal2021Improving_70_16_ddpm_100m', { - 'model': - lambda: DMWideResNet(num_classes=10, - depth=70, - width=16, - activation_fn=Swish, - mean=CIFAR10_MEAN, - std=CIFAR10_STD), - 'gdrive_id': - '10qBoDG_NomJBrRFeTsSwEcJF1GA-sjC4' - }), - ('Dai2021Parameterizing', { - 'model': lambda: pssilu_wrn_28_10(num_classes=10), - 'gdrive_id': '1eO-MNXQSAoCuNFjIbdCheprT4Beqo9Zv' - }), - ('Gowal2021Improving_28_10_ddpm_100m', { - 'model': - lambda: DMWideResNet(num_classes=10, - depth=28, - width=10, - activation_fn=Swish, - mean=CIFAR10_MEAN, - std=CIFAR10_STD), - 'gdrive_id': - '12L8YE6VBgUDKyW6GMSNefSYj2gg4LEKx' - }), - ('Gowal2021Improving_R18_ddpm_100m', { - 'model': - lambda: DMPreActResNet(num_classes=10, - depth=18, - width=0, - activation_fn=Swish, - mean=CIFAR10_MEAN, - std=CIFAR10_STD), - 'gdrive_id': - '1-0EuCJashqSXEkkd1DOzFA4tH8KL2kim' - }), - ('Chen2021LTD_WRN34_10', { - 'model': - lambda: WideResNet(depth=34, widen_factor=10, sub_block1=False), - 'gdrive_id': - '1-0RoQKYvHLNh7hZ71wJjSit1XtrJQo9D' - }), - ('Chen2021LTD_WRN34_20', { - 'model': - lambda: WideResNet(depth=34, widen_factor=20, sub_block1=False), - 'gdrive_id': - '1-5JmY9rapuGwCUc2nPvy7Rb_sn_dHhFm' - }), - ('Standard', { - 'model': lambda: WideResNet(depth=28, widen_factor=10), - 'gdrive_id': '1t98aEuzeTL8P7Kpd5DIrCoCL21BNZUhC', - }), - # ('Kang2021Stable', { - # 'model': rebuffi_sodef, - # 'gdrive_id': '1-HjG9f7wJDnNRdMQSiz8dlCI3sq5mfqj', - # }), - ('Jia2022LAS-AT_34_10', { - 'model': lambda: WideResNet(depth=34, widen_factor=10), - 'gdrive_id': '1-3l7xKhIPyes3O4QSz0HU6L-hfOoS0xD', - }), - ('Jia2022LAS-AT_70_16', { - 'model': lambda: WideResNet(depth=70, widen_factor=16), - 'gdrive_id': '1-4p-Gr0hjl8wq6qvvTza4x4a5Rmu-Bfr', - }), - ('Pang2022Robustness_WRN28_10', { - 'model': - lambda: DMWideResNet(num_classes=10, - depth=28, - width=10, - activation_fn=Swish, - mean=CIFAR10_MEAN, - std=CIFAR10_STD), - 'gdrive_id': - '16ChNkterCp17BXv-xxqpfedb4u2_CjjS' - }), - ('Pang2022Robustness_WRN70_16', { - 'model': - lambda: DMWideResNet(num_classes=10, - depth=70, - width=16, - activation_fn=Swish, - mean=CIFAR10_MEAN, - std=CIFAR10_STD), - 'gdrive_id': - '1uQZYUuUiL9BzaQUeXLhjr_RhoyFRrHe3' - }), - ('Addepalli2022Efficient_RN18', { - 'model': ResNet18, - 'gdrive_id': '1m5vhdzIUUKhDbsZdOG9z76Eyp6f4xe_f', - }), - ('Addepalli2022Efficient_WRN_34_10', { - 'model': lambda: WideResNet(depth=34, widen_factor=10), - 'gdrive_id': '1--dVDtZhAk4D2zMtTDwIGnImuCGxTcBA', - }), - # ('Debenedetti2022Light_XCiT-S12', { - # 'model': (lambda: timm.create_model( - # 'debenedetti2020light_xcit_s_cifar10_linf', pretrained=True)), - # 'gdrive_id': - # None - # }), - # ('Debenedetti2022Light_XCiT-M12', { - # 'model': (lambda: timm.create_model( - # 'debenedetti2020light_xcit_m_cifar10_linf', pretrained=True)), - # 'gdrive_id': - # None - # }), - # ('Debenedetti2022Light_XCiT-L12', { - # 'model': (lambda: timm.create_model( - # 'debenedetti2020light_xcit_l_cifar10_linf', pretrained=True)), - # 'gdrive_id': - # None - # }), - ]) - -l2 = OrderedDict([ - ('Augustin2020Adversarial', { - 'model': Augustin2020AdversarialNet, - 'gdrive_id': '1oDghrzNfkStC2wr5Fq8T896yNV4wVG4d', - }), - ('Engstrom2019Robustness', { - 'model': Engstrom2019RobustnessNet, - 'gdrive_id': '1O8rGa6xOUIRwQ-M4ESrCjzknby8TM2ZE', - }), - ('Rice2020Overfitting', { - 'model': Rice2020OverfittingNetL2, - 'gdrive_id': '1jo-31utiYNBVzLM0NxUEWz0teo3Z0xa7', - }), - ('Rony2019Decoupling', { - 'model': Rony2019DecouplingNet, - 'gdrive_id': '1Oua2ZYSxNvoDrtlY9vTtRzyBWHziE4Uy', - }), - ('Standard', { - 'model': lambda: WideResNet(depth=28, widen_factor=10), - 'gdrive_id': '1t98aEuzeTL8P7Kpd5DIrCoCL21BNZUhC', - }), - ('Ding2020MMA', { - 'model': Ding2020MMANet, - 'gdrive_id': '13wgY0Q_eor52ltZ0PkfJx5BCZ8cLM52E', - }), - ('Wu2020Adversarial', { - 'model': lambda: WideResNet(depth=34, widen_factor=10), - 'gdrive_id': '1M5AZ0EZQt7d2AlTmsnqZcfx91-x7YEAV', - }), - ('Gowal2020Uncovering', { - 'model': - lambda: DMWideResNet(num_classes=10, - depth=70, - width=16, - activation_fn=Swish, - mean=CIFAR10_MEAN, - std=CIFAR10_STD), - 'gdrive_id': - "1QL4SNvYydjIg1uI3VP9SyNt-2kTXRisG" - }), - ('Gowal2020Uncovering_extra', { - 'model': - lambda: DMWideResNet(num_classes=10, - depth=70, - width=16, - activation_fn=Swish, - mean=CIFAR10_MEAN, - std=CIFAR10_STD), - 'gdrive_id': - "1pkZDCpCBShpAnx92n8PUeNOY1fSiTi0s" - }), - ('Sehwag2021Proxy', { - 'model': lambda: WideResNet(34, 10, sub_block1=False), - 'gdrive_id': '1UviikNzpltVFsgMuqQ8YhpmvGczGRS4S', - }), - ('Sehwag2021Proxy_R18', { - 'model': ResNet18, - 'gdrive_id': '1zPjjZj9wujBNkAmHHHIikem6_aIjMhXG', - }), - ('Rebuffi2021Fixing_70_16_cutmix_ddpm', { - 'model': - lambda: DMWideResNet(num_classes=10, - depth=70, - width=16, - activation_fn=Swish, - mean=CIFAR10_MEAN, - std=CIFAR10_STD), - 'gdrive_id': - '1-8ECIOYF4JB0ywxJOmhkefnv4TW-KuXp' - }), - ('Rebuffi2021Fixing_28_10_cutmix_ddpm', { - 'model': - lambda: DMWideResNet(num_classes=10, - depth=28, - width=10, - activation_fn=Swish, - mean=CIFAR10_MEAN, - std=CIFAR10_STD), - 'gdrive_id': - '1-DUKcvfDzeWwt0NK7q2XvU-dIi8up8B0' - }), - ('Rebuffi2021Fixing_70_16_cutmix_extra', { - 'model': - lambda: DMWideResNet(num_classes=10, - depth=70, - width=16, - activation_fn=Swish, - mean=CIFAR10_MEAN, - std=CIFAR10_STD), - 'gdrive_id': - '1JX82BDVBNO-Ffa2J37EuB8C-aFCbz708' - }), - ('Augustin2020Adversarial_34_10', { - 'model': Augustin2020AdversarialWideNet, - 'gdrive_id': '1qPsKS546mKcs71IEhzOS-kLpQFSFhaKL' - }), - ('Augustin2020Adversarial_34_10_extra', { - 'model': Augustin2020AdversarialWideNet, - 'gdrive_id': '1--1MFZja6C2iVWi9MgetYjnSIenRBLT-' - }), - ('Rebuffi2021Fixing_R18_cutmix_ddpm', { - 'model': - lambda: DMPreActResNet(num_classes=10, - depth=18, - width=0, - activation_fn=Swish, - mean=CIFAR10_MEAN, - std=CIFAR10_STD), - 'gdrive_id': - '1-AlwHsXU28tCOJsf9RKAZxVzbinzzQU3' - }), - ('Rade2021Helper_R18_ddpm', { - 'model': - lambda: DMPreActResNet(num_classes=10, - depth=18, - width=0, - activation_fn=Swish, - mean=CIFAR10_MEAN, - std=CIFAR10_STD), - 'gdrive_id': - '1VWrStAYy5CrUR18sjcpq_LKLpeqgUaoQ' - }), -]) - -common_corruptions = OrderedDict([ - ('Diffenderfer2021Winning_LRR', { - 'model': Diffenderfer2021CARD, - 'gdrive_id': '1-NFL1OxfXgC0peeAV7G60ohhESO-8G0c' - }), - ('Diffenderfer2021Winning_LRR_CARD_Deck', { - 'model': - Diffenderfer2021CARD_Deck, - 'gdrive_id': [ - '1-R56enDUZ3oY74zfmj8M5ogBsV2SEHFR', - '1-_3eqvtBxTn-Afvg4fB5d4lx1cDi_AqC', - '1-cY0IYzLQrXzTa3LQvl6d26KnocsSurs', - '1-phHz-8gnNjN-m08pT_dagsW7Fa5-aTQ', - '1-ryE4owBqQ1HiWS6L60eW5YTPII_88MH', - '1-vka-h7krlJOjN7SRKMW5aDY73_WuZI2' - ], - }), - ('Diffenderfer2021Winning_Binary', { - 'model': Diffenderfer2021CARD_Binary, - 'gdrive_id': '101VSovRuFA0M7idR9ioeVn-UxROdJUYu' - }), - ('Diffenderfer2021Winning_Binary_CARD_Deck', { - 'model': - Diffenderfer2021CARD_Deck_Binary, - 'gdrive_id': [ - '10BOwYD-JdPguAp3dc4owWcyTI_MRWzmG', - '10IuU66vHBNXVmzeY3VCfpRjGoMOpsGkl', - '10WGSGQ0EHaJ0QZcoS0fAPqzlqwzGY-o2', - '10X1mo5I6fKhlZzQQeLFbjnHvOHJupHeC', - '10d8-swRiQutUSbSKksGwKeZfn8poYF3y', - '10ilDm_fojXiQve_LaHApbNalBpk6v53Z' - ], - }), - ('Rebuffi2021Fixing_70_16_cutmix_extra_Linf', { - 'model': - lambda: DMWideResNet(num_classes=10, - depth=70, - width=16, - activation_fn=Swish, - mean=CIFAR10_MEAN, - std=CIFAR10_STD), - 'gdrive_id': - '1qKDTp6IJ1BUXZaRtbYuo_t0tuDl_4mLg' - }), - ('Rebuffi2021Fixing_70_16_cutmix_extra_L2', { - 'model': - lambda: DMWideResNet(num_classes=10, - depth=70, - width=16, - activation_fn=Swish, - mean=CIFAR10_MEAN, - std=CIFAR10_STD), - 'gdrive_id': - '1JX82BDVBNO-Ffa2J37EuB8C-aFCbz708' - }), - ('Hendrycks2020AugMix_WRN', { - 'model': Hendrycks2020AugMixWRNNet, - 'gdrive_id': "1wy7gSRsUZzCzj8QhmTbcnwmES_2kkNph" - }), - ('Hendrycks2020AugMix_ResNeXt', { - 'model': Hendrycks2020AugMixResNeXtNet, - 'gdrive_id': "1uGP3nZbL3LC160kOsxwkkt6tDd4qbZT1" - }), - ('Kireev2021Effectiveness_Gauss50percent', { - 'model': Kireev2021EffectivenessNet, - 'gdrive_id': '1zR6lwYLkO3TFSgeqvu_CMYTq_IS-eicQ', - }), - ('Kireev2021Effectiveness_AugMixNoJSD', { - 'model': Kireev2021EffectivenessNet, - 'gdrive_id': '1p_1v1Oa-FSrjHTAq63QX4WtLYETkcbdH', - }), - ('Kireev2021Effectiveness_RLAT', { - 'model': Kireev2021EffectivenessNet, - 'gdrive_id': '16bCDA_5Rhr6qMKHRAO5W-4nu9_10kFyF', - }), - ('Kireev2021Effectiveness_RLATAugMixNoJSD', { - 'model': Kireev2021EffectivenessNet, - 'gdrive_id': '1hgJuvLPSVQMbUczn8qnIphONlJePsWgU', - }), - ('Kireev2021Effectiveness_RLATAugMix', { - 'model': Kireev2021EffectivenessNet, - 'gdrive_id': '19HNTdqJiuNyqFqIarPejniJEjZ3RQ_nj', - }), - ('Standard', { - 'model': lambda: WideResNet(depth=28, widen_factor=10), - 'gdrive_id': '1t98aEuzeTL8P7Kpd5DIrCoCL21BNZUhC', - }), - ('Addepalli2021Towards_WRN34', { - 'model': lambda: WideResNet(num_classes=10, depth=34, sub_block1=True), - 'gdrive_id': '1-3vgjTNfSq7LSMKuayEQ-jLflAP196dB' - }), - ('Modas2021PRIMEResNet18', { - 'model': Modas2021PRIMEResNet18, - 'gdrive_id': '13oDyqi16FeXy5j4Vm6IghnjTVqp_XF5U' - }), - ('Addepalli2022Efficient_WRN_34_10', { - 'model': lambda: WideResNet(depth=34, widen_factor=10), - 'gdrive_id': '1--dVDtZhAk4D2zMtTDwIGnImuCGxTcBA', - }) -]) - -cifar_10_models = OrderedDict([(ThreatModel.Linf, linf), (ThreatModel.L2, l2), - (ThreatModel.corruptions, common_corruptions)]) diff --git a/robustbench/model_zoo/cifar100.py b/robustbench/model_zoo/cifar100.py deleted file mode 100644 index b0f98f5a..00000000 --- a/robustbench/model_zoo/cifar100.py +++ /dev/null @@ -1,533 +0,0 @@ -from collections import OrderedDict - -# import timm -import torch -from torch import nn - -from robustbench.model_zoo.architectures.dm_wide_resnet import CIFAR100_MEAN, CIFAR100_STD, \ - DMWideResNet, Swish, DMPreActResNet -from robustbench.model_zoo.architectures.resnet import PreActBlock, PreActResNet,PreActBlockV2, \ - ResNet, BasicBlock -from robustbench.model_zoo.architectures.resnext import CifarResNeXt, ResNeXtBottleneck -from robustbench.model_zoo.architectures.wide_resnet import WideResNet -from robustbench.model_zoo.enums import ThreatModel -from robustbench.model_zoo.architectures.CARD_resnet import LRR_ResNet, WidePreActResNet -# from robustbench.model_zoo.architectures import xcit - - -class Chen2020EfficientNet(WideResNet): - - def __init__(self, depth=34, widen_factor=10): - super().__init__(depth=depth, - widen_factor=widen_factor, - sub_block1=True, - num_classes=100) - self.register_buffer( - 'mu', - torch.tensor([0.5071, 0.4867, 0.4408]).view(1, 3, 1, 1)) - self.register_buffer( - 'sigma', - torch.tensor([0.2675, 0.2565, 0.2761]).view(1, 3, 1, 1)) - - def forward(self, x): - x = (x - self.mu) / self.sigma - return super().forward(x) - - -class Wu2020AdversarialNet(WideResNet): - - def __init__(self, depth=34, widen_factor=10): - super().__init__(depth=depth, - widen_factor=widen_factor, - sub_block1=False, - num_classes=100) - self.register_buffer( - 'mu', - torch.tensor( - [0.5070751592371323, 0.48654887331495095, - 0.4409178433670343]).view(1, 3, 1, 1)) - self.register_buffer( - 'sigma', - torch.tensor( - [0.2673342858792401, 0.2564384629170883, - 0.27615047132568404]).view(1, 3, 1, 1)) - - def forward(self, x): - x = (x - self.mu) / self.sigma - return super().forward(x) - - -class Rice2020OverfittingNet(PreActResNet): - - def __init__(self): - super(Rice2020OverfittingNet, self).__init__(PreActBlock, [2, 2, 2, 2], - num_classes=100, - bn_before_fc=True, - out_shortcut=True) - self.register_buffer( - 'mu', - torch.tensor( - [0.5070751592371323, 0.48654887331495095, - 0.4409178433670343]).view(1, 3, 1, 1)) - self.register_buffer( - 'sigma', - torch.tensor( - [0.2673342858792401, 0.2564384629170883, - 0.27615047132568404]).view(1, 3, 1, 1)) - - def forward(self, x): - x = (x - self.mu) / self.sigma - return super(Rice2020OverfittingNet, self).forward(x) - - -class Hendrycks2019UsingNet(WideResNet): - - def __init__(self, depth=28, widen_factor=10): - super(Hendrycks2019UsingNet, self).__init__(depth=depth, - widen_factor=widen_factor, - num_classes=100, - sub_block1=False) - - def forward(self, x): - x = 2. * x - 1. - return super(Hendrycks2019UsingNet, self).forward(x) - - -class Hendrycks2020AugMixResNeXtNet(CifarResNeXt): - - def __init__(self, depth=29, cardinality=4, base_width=32): - super().__init__(ResNeXtBottleneck, - depth=depth, - num_classes=100, - cardinality=cardinality, - base_width=base_width) - self.register_buffer('mu', torch.tensor([0.5] * 3).view(1, 3, 1, 1)) - self.register_buffer('sigma', torch.tensor([0.5] * 3).view(1, 3, 1, 1)) - - def forward(self, x): - x = (x - self.mu) / self.sigma - return super().forward(x) - - -class Hendrycks2020AugMixWRNNet(WideResNet): - - def __init__(self, depth=40, widen_factor=2): - super().__init__(depth=depth, - widen_factor=widen_factor, - sub_block1=False, - num_classes=100) - self.register_buffer('mu', torch.tensor([0.5] * 3).view(1, 3, 1, 1)) - self.register_buffer('sigma', torch.tensor([0.5] * 3).view(1, 3, 1, 1)) - - def forward(self, x): - x = (x - self.mu) / self.sigma - return super().forward(x) - - -class Diffenderfer2021CARD(LRR_ResNet): - - def __init__(self, width=128, num_classes=100): - super(Diffenderfer2021CARD, self).__init__(width=width, - num_classes=num_classes) - self.register_buffer( - 'mu', - torch.tensor([0.5071, 0.4865, 0.4409]).view(1, 3, 1, 1)) - self.register_buffer( - 'sigma', - torch.tensor([0.2673, 0.2564, 0.2762]).view(1, 3, 1, 1)) - - def forward(self, x): - x = (x - self.mu) / self.sigma - return super().forward(x) - - -class Diffenderfer2021CARD_Deck(torch.nn.Module): - - def __init__(self, width=128, num_classes=100): - super(Diffenderfer2021CARD_Deck, self).__init__() - self.num_cards = 6 - self.models = nn.ModuleList() - - for i in range(self.num_cards): - self.models.append(LRR_ResNet(width=width, - num_classes=num_classes)) - - self.register_buffer( - 'mu', - torch.tensor([0.5071, 0.4865, 0.4409]).view(1, 3, 1, 1)) - self.register_buffer( - 'sigma', - torch.tensor([0.2673, 0.2564, 0.2762]).view(1, 3, 1, 1)) - - def forward(self, x): - x = (x - self.mu) / self.sigma - - x_cl = x.clone( - ) # clone to make sure x is not changed by inplace methods - out_list = [] - for i in range(self.num_cards): - # Evaluate model i at input - out = self.models[i](x_cl) - # Compute softmax - out = torch.softmax(out, dim=1) - # Append output to list of logits - out_list.append(out) - - return torch.mean(torch.stack(out_list), dim=0) - - -class Diffenderfer2021CARD_Binary(WidePreActResNet): - - def __init__(self, num_classes=100): - super(Diffenderfer2021CARD_Binary, - self).__init__(num_classes=num_classes) - self.register_buffer( - 'mu', - torch.tensor([0.5071, 0.4865, 0.4409]).view(1, 3, 1, 1)) - self.register_buffer( - 'sigma', - torch.tensor([0.2673, 0.2564, 0.2762]).view(1, 3, 1, 1)) - - def forward(self, x): - x = (x - self.mu) / self.sigma - return super().forward(x) - - -class Diffenderfer2021CARD_Deck_Binary(torch.nn.Module): - - def __init__(self, num_classes=100): - super(Diffenderfer2021CARD_Deck_Binary, self).__init__() - self.num_cards = 6 - self.models = nn.ModuleList() - - for i in range(self.num_cards): - self.models.append(WidePreActResNet(num_classes=num_classes)) - - self.register_buffer( - 'mu', - torch.tensor([0.5071, 0.4865, 0.4409]).view(1, 3, 1, 1)) - self.register_buffer( - 'sigma', - torch.tensor([0.2673, 0.2564, 0.2762]).view(1, 3, 1, 1)) - - def forward(self, x): - x = (x - self.mu) / self.sigma - - x_cl = x.clone( - ) # clone to make sure x is not changed by inplace methods - out_list = [] - for i in range(self.num_cards): - # Evaluate model i at input - out = self.models[i](x_cl) - # Compute softmax - out = torch.softmax(out, dim=1) - # Append output to list of logits - out_list.append(out) - - return torch.mean(torch.stack(out_list), dim=0) - - -class Modas2021PRIMEResNet18(ResNet): - - def __init__(self, num_classes=100): - super().__init__(BasicBlock, [2, 2, 2, 2], num_classes=num_classes) - # mu & sigma are updated from weights - self.register_buffer('mu', torch.tensor([0.5] * 3).view(1, 3, 1, 1)) - self.register_buffer('sigma', torch.tensor([0.5] * 3).view(1, 3, 1, 1)) - - def forward(self, x): - x = (x - self.mu) / self.sigma - return super().forward(x) - - -linf = OrderedDict([ - ('Gowal2020Uncovering', { - 'model': - lambda: DMWideResNet(num_classes=100, - depth=70, - width=16, - activation_fn=Swish, - mean=CIFAR100_MEAN, - std=CIFAR100_STD), - 'gdrive_id': - "16I86x2Vv_HCRKROC86G4dQKgO3Po5mT3" - }), - ('Gowal2020Uncovering_extra', { - 'model': - lambda: DMWideResNet(num_classes=100, - depth=70, - width=16, - activation_fn=Swish, - mean=CIFAR100_MEAN, - std=CIFAR100_STD), - 'gdrive_id': - "1LQBdwO2b391mg7VKcP6I0HIOpC6O83gn" - }), - ('Cui2020Learnable_34_20_LBGAT6', { - 'model': - lambda: WideResNet( - depth=34, widen_factor=20, num_classes=100, sub_block1=True), - 'gdrive_id': - '1rN76st8q_32j6Uo8DI5XhcC2cwVhXBwK' - }), - ('Cui2020Learnable_34_10_LBGAT0', { - 'model': - lambda: WideResNet( - depth=34, widen_factor=10, num_classes=100, sub_block1=True), - 'gdrive_id': - '1RnWbGxN-A-ltsfOvulr68U6i2L8ohAJi' - }), - ('Cui2020Learnable_34_10_LBGAT6', { - 'model': - lambda: WideResNet( - depth=34, widen_factor=10, num_classes=100, sub_block1=True), - 'gdrive_id': - '1TfIgvW3BAkL8jL9J7AAWFSLW3SSzJ2AE' - }), - ('Chen2020Efficient', { - 'model': Chen2020EfficientNet, - 'gdrive_id': '1JEh95fvsfKireoELoVCBxOi12IPGFDUT' - }), - ('Wu2020Adversarial', { - 'model': Wu2020AdversarialNet, - 'gdrive_id': '1yWGvHmrgjtd9vOpV5zVDqZmeGhCgVYq7' - }), - ('Sehwag2021Proxy', { - 'model': - lambda: WideResNet( - depth=34, widen_factor=10, num_classes=100, sub_block1=False), - 'gdrive_id': - '1ejMNF2O4xkSdrjtZt2UXUeim-y9F7Req', - }), - ('Sitawarin2020Improving', { - 'model': - lambda: WideResNet( - depth=34, widen_factor=10, num_classes=100, sub_block1=True), - 'gdrive_id': - '1hbpwans776KM1SMbOxISkDx0KR0DW8EN' - }), - ('Hendrycks2019Using', { - 'model': Hendrycks2019UsingNet, - 'gdrive_id': '1If3tppQsCe5dN8Vbo9ff0tjlKQTTrShd' - }), - ('Rice2020Overfitting', { - 'model': Rice2020OverfittingNet, - 'gdrive_id': '1XXNZn3fZBOkD1aqNL1cvcD8zZDccyAZ6' - }), - ('Rebuffi2021Fixing_70_16_cutmix_ddpm', { - 'model': - lambda: DMWideResNet(num_classes=100, - depth=70, - width=16, - activation_fn=Swish, - mean=CIFAR100_MEAN, - std=CIFAR100_STD), - 'gdrive_id': - '1-GkVLo9QaRjCJl-by67xda1ySVhYxsLV' - }), - ('Rebuffi2021Fixing_28_10_cutmix_ddpm', { - 'model': - lambda: DMWideResNet(num_classes=100, - depth=28, - width=10, - activation_fn=Swish, - mean=CIFAR100_MEAN, - std=CIFAR100_STD), - 'gdrive_id': - '1-P7cs82Tj6UVx7Coin3tVurVKYwXWA9p' - }), - ('Rebuffi2021Fixing_R18_ddpm', { - 'model': - lambda: DMPreActResNet(num_classes=100, - depth=18, - width=0, - activation_fn=Swish, - mean=CIFAR100_MEAN, - std=CIFAR100_STD), - 'gdrive_id': - '1-Qcph_EXw1SCYhDIl8cwqTQQy0sJKO8N' - }), - ('Rade2021Helper_R18_ddpm', { - 'model': - lambda: DMPreActResNet(num_classes=100, - depth=18, - width=0, - activation_fn=Swish, - mean=CIFAR100_MEAN, - std=CIFAR100_STD), - 'gdrive_id': - '1-qUvfOjq6x4I8mZynfGtzzCH_nvqS_VQ' - }), - ('Addepalli2021Towards_PARN18', { - 'model': - lambda: PreActResNet( - PreActBlockV2, [2, 2, 2, 2], num_classes=100, bn_before_fc=True), - 'gdrive_id': - '1-FwVya1sDvdFXr0_ZBoXEJW9ukGC7hPK', - }), - ('Addepalli2021Towards_WRN34', { - 'model': - lambda: WideResNet(num_classes=100, depth=34, sub_block1=True), - 'gdrive_id': '1-9GAld_105-jWBLXL73btmfOCwAqvz7Y', - }), - ('Chen2021LTD_WRN34_10', { - 'model': - lambda: WideResNet( - depth=34, widen_factor=10, num_classes=100, sub_block1=True), - 'gdrive_id': - '1-I4NZyULdEWH46b4EaCTxuuRo4eFXsg_' - }), - ('Pang2022Robustness_WRN28_10', { - 'model': - lambda: DMWideResNet(num_classes=100, - depth=28, - width=10, - activation_fn=Swish, - mean=CIFAR100_MEAN, - std=CIFAR100_STD), - 'gdrive_id': - "1VDDM_j5M4b6sZpt1Nnhkr8FER3kjE33M" - }), - ('Pang2022Robustness_WRN70_16', { - 'model': - lambda: DMWideResNet(num_classes=100, - depth=70, - width=16, - activation_fn=Swish, - mean=CIFAR100_MEAN, - std=CIFAR100_STD), - 'gdrive_id': - "1F3kn8KIdBVls8QuTWc3BbB83htkQeVQD", - }), - ('Jia2022LAS-AT_34_10', { - 'model': - lambda: WideResNet( - depth=34, widen_factor=10, num_classes=100, sub_block1=True), - 'gdrive_id': - '1-338K2PUf5FTwk4cbUUeTNz247GrXaMG', - }), - ('Jia2022LAS-AT_34_20', { - 'model': - lambda: WideResNet(depth=34, widen_factor=20, num_classes=100), - 'gdrive_id': '1WhRq01Yl1v8O3skkrGUBuySlptidc5a6', - }), - ('Addepalli2022Efficient_RN18', { - 'model': lambda: ResNet(BasicBlock, [2, 2, 2, 2], num_classes=100), - 'gdrive_id': '1-2hnxC7lZOQDqQbum4yPbtRtTND86I5N', - }), - ('Addepalli2022Efficient_WRN_34_10', { - 'model': - lambda: WideResNet(depth=34, widen_factor=10, num_classes=100), - 'gdrive_id': '1-3c-iniqNfiwGoGPHC3nSostnG6J9fDt', - }), - # ('Debenedetti2022Light_XCiT-S12', { - # 'model': - # (lambda: timm.create_model('debenedetti2020light_xcit_s_cifar100_linf', - # pretrained=True)), - # 'gdrive_id': - # None - # }), - # ('Debenedetti2022Light_XCiT-M12', { - # 'model': - # (lambda: timm.create_model('debenedetti2020light_xcit_m_cifar100_linf', - # pretrained=True)), - # 'gdrive_id': - # None - # }), - # ('Debenedetti2022Light_XCiT-L12', { - # 'model': - # (lambda: timm.create_model('debenedetti2020light_xcit_l_cifar100_linf', - # pretrained=True)), - # 'gdrive_id': - # None - # }), -]) - -common_corruptions = OrderedDict([ - ('Diffenderfer2021Winning_LRR', { - 'model': Diffenderfer2021CARD, - 'gdrive_id': '1-2egZ5WrO22A2pixw_UxOpENy7zwah8j' - }), - ('Diffenderfer2021Winning_LRR_CARD_Deck', { - 'model': - Diffenderfer2021CARD_Deck, - 'gdrive_id': [ - '1-9-O8k6FZO0k-WhcIZCXvMBQLutxwF0I', - '1-H_kInicE70twnsOaK3axVtHBV7WTalI', - '1-MQjiJy01rc0Wt-dpgEx94pBYIPeXD6F', - '1-VpIloQl8GePLSYbUjh_Sc0ehZgfiWny', - '1-i6HADuWHZ8s598mvUL8dIYpL1mxM94f', - '1-jRg4TpyIYcf-9SeG8vptu4X98VK1ZwE' - ], - }), - ('Diffenderfer2021Winning_Binary', { - 'model': Diffenderfer2021CARD_Binary, - 'gdrive_id': '1-vFzi6uF6hgORX6sgJt1sKDPcr3SXUxB' - }), - ('Diffenderfer2021Winning_Binary_CARD_Deck', { - 'model': - Diffenderfer2021CARD_Deck_Binary, - 'gdrive_id': [ - '107TKzt9Nd1ZBx5u-Lc2lgkiqCeiUChw_', - '10EbQ3BxVQJ0-FyDV42fZL6DEVy5wT7D_', - '10IRU_otxEVWNRLeG2D4UI5s6O97APCYH', - '10PyjvWTTyziwpAUxyohkJZZrVHBTwABz', - '10Skhbub7Uu6_WqQiyzBka4T91-5pOR-K', - '10_thReUp-ia8Gxq1xdOAFelIHyoMWdV5' - ], - }), - ('Gowal2020Uncovering_Linf', { - 'model': - lambda: DMWideResNet(num_classes=100, - depth=70, - width=16, - activation_fn=Swish, - mean=CIFAR100_MEAN, - std=CIFAR100_STD), - 'gdrive_id': - "16I86x2Vv_HCRKROC86G4dQKgO3Po5mT3" - }), - ('Gowal2020Uncovering_extra_Linf', { - 'model': - lambda: DMWideResNet(num_classes=100, - depth=70, - width=16, - activation_fn=Swish, - mean=CIFAR100_MEAN, - std=CIFAR100_STD), - 'gdrive_id': - "1LQBdwO2b391mg7VKcP6I0HIOpC6O83gn" - }), - ('Hendrycks2020AugMix_WRN', { - 'model': Hendrycks2020AugMixWRNNet, - 'gdrive_id': '1XpFFdCdU9LcDtcyNfo6_BV1RZHKKkBVE' - }), - ('Hendrycks2020AugMix_ResNeXt', { - 'model': Hendrycks2020AugMixResNeXtNet, - 'gdrive_id': '1ocnHbvDdOBLvgNr6K7vEYL08hUdkD1Rv' - }), - ('Addepalli2021Towards_PARN18', { - 'model': - lambda: PreActResNet( - PreActBlockV2, [2, 2, 2, 2], num_classes=100, bn_before_fc=True), - 'gdrive_id': - '1-FwVya1sDvdFXr0_ZBoXEJW9ukGC7hPK', - }), - ('Addepalli2021Towards_WRN34', { - 'model': - lambda: WideResNet(num_classes=100, depth=34, sub_block1=True), - 'gdrive_id': '1-9GAld_105-jWBLXL73btmfOCwAqvz7Y' - }), - ('Modas2021PRIMEResNet18', { - 'model': Modas2021PRIMEResNet18, - 'gdrive_id': '1kcohb2tBuJHa5pGSi4nAkvK-hXPSI6Hr' - }), - ('Addepalli2022Efficient_WRN_34_10', { - 'model': - lambda: WideResNet(depth=34, widen_factor=10, num_classes=100), - 'gdrive_id': '1-3c-iniqNfiwGoGPHC3nSostnG6J9fDt', - }), -]) - -cifar_100_models = OrderedDict([(ThreatModel.Linf, linf), - (ThreatModel.corruptions, common_corruptions)]) diff --git a/robustbench/model_zoo/enums.py b/robustbench/model_zoo/enums.py deleted file mode 100644 index 720b268f..00000000 --- a/robustbench/model_zoo/enums.py +++ /dev/null @@ -1,14 +0,0 @@ -from enum import Enum - - -class BenchmarkDataset(Enum): - cifar_10 = 'cifar10' - cifar_100 = 'cifar100' - imagenet = 'imagenet' - imagenet_3d = 'imagenet_3d' - - -class ThreatModel(Enum): - Linf = "Linf" - L2 = "L2" - corruptions = "corruptions" diff --git a/robustbench/model_zoo/imagenet.py b/robustbench/model_zoo/imagenet.py deleted file mode 100644 index 89d86d77..00000000 --- a/robustbench/model_zoo/imagenet.py +++ /dev/null @@ -1,109 +0,0 @@ -from collections import OrderedDict - -# import timm -from torchvision import models as pt_models - -from robustbench.model_zoo.enums import ThreatModel -from robustbench.model_zoo.architectures.utils_architectures import normalize_model -# from robustbench.model_zoo.architectures import xcit - - -mu = (0.485, 0.456, 0.406) -sigma = (0.229, 0.224, 0.225) - - -linf = OrderedDict( - [ - ('Wong2020Fast', { # requires resolution 288 x 288 - 'model': lambda: normalize_model(pt_models.resnet50(), mu, sigma), - 'gdrive_id': '1deM2ZNS5tf3S_-eRURJi-IlvUL8WJQ_w', - 'preprocessing': 'Crop288' - }), - ('Engstrom2019Robustness', { - 'model': lambda: normalize_model(pt_models.resnet50(), mu, sigma), - 'gdrive_id': '1T2Fvi1eCJTeAOEzrH_4TAIwO8HTOYVyn', - 'preprocessing': 'Res256Crop224', - }), - ('Salman2020Do_R50', { - 'model': lambda: normalize_model(pt_models.resnet50(), mu, sigma), - 'gdrive_id': '1TmT5oGa1UvVjM3d-XeSj_XmKqBNRUg8r', - 'preprocessing': 'Res256Crop224' - }), - ('Salman2020Do_R18', { - 'model': lambda: normalize_model(pt_models.resnet18(), mu, sigma), - 'gdrive_id': '1OThCOQCOxY6lAgxZxgiK3YuZDD7PPfPx', - 'preprocessing': 'Res256Crop224' - }), - ('Salman2020Do_50_2', { - 'model': lambda: normalize_model(pt_models.wide_resnet50_2(), mu, sigma), - 'gdrive_id': '1OT7xaQYljrTr3vGbM37xK9SPoPJvbSKB', - 'preprocessing': 'Res256Crop224' - }), - ('Standard_R50', { - 'model': lambda: normalize_model(pt_models.resnet50(pretrained=True), mu, sigma), - 'gdrive_id': '', - 'preprocessing': 'Res256Crop224' - }), - # ('Debenedetti2022Light_XCiT-S12', { - # 'model': (lambda: timm.create_model( - # 'debenedetti2020light_xcit_s_imagenet_linf', pretrained=True)), - # 'gdrive_id': - # None - # }), - # ('Debenedetti2022Light_XCiT-M12', { - # 'model': (lambda: timm.create_model( - # 'debenedetti2020light_xcit_m_imagenet_linf', pretrained=True)), - # 'gdrive_id': - # None - # }), - # ('Debenedetti2022Light_XCiT-L12', { - # 'model': (lambda: timm.create_model( - # 'debenedetti2020light_xcit_l_imagenet_linf', pretrained=True)), - # 'gdrive_id': - # None - # }), - ]) - -common_corruptions = OrderedDict( - [ - ('Geirhos2018_SIN', { - 'model': lambda: normalize_model(pt_models.resnet50(), mu, sigma), - 'gdrive_id': '1hLgeY_rQIaOT4R-t_KyOqPNkczfaedgs', - 'preprocessing': 'Res256Crop224' - }), - ('Geirhos2018_SIN_IN', { - 'model': lambda: normalize_model(pt_models.resnet50(), mu, sigma), - 'gdrive_id': '139pWopDnNERObZeLsXUysRcLg6N1iZHK', - 'preprocessing': 'Res256Crop224' - }), - ('Geirhos2018_SIN_IN_IN', { - 'model': lambda: normalize_model(pt_models.resnet50(), mu, sigma), - 'gdrive_id': '1xOvyuxpOZ8I5CZOi0EGYG_R6tu3ZaJdO', - 'preprocessing': 'Res256Crop224' - }), - ('Hendrycks2020Many', { - 'model': lambda: normalize_model(pt_models.resnet50(), mu, sigma), - 'gdrive_id': '1kylueoLtYtxkpVzoOA1B6tqdbRl2xt9X', - 'preprocessing': 'Res256Crop224' - }), - ('Hendrycks2020AugMix', { - 'model': lambda: normalize_model(pt_models.resnet50(), mu, sigma), - 'gdrive_id': '1xRMj1GlO93tLoCMm0e5wEvZwqhIjxhoJ', - 'preprocessing': 'Res256Crop224' - }), - ('Salman2020Do_50_2_Linf', { - 'model': lambda: normalize_model(pt_models.wide_resnet50_2(), mu, sigma), - 'gdrive_id': '1OT7xaQYljrTr3vGbM37xK9SPoPJvbSKB', - 'preprocessing': 'Res256Crop224' - }), - ('Standard_R50', { - 'model': lambda: normalize_model(pt_models.resnet50(pretrained=True), mu, sigma), - 'gdrive_id': '', - 'preprocessing': 'Res256Crop224' - }), - ]) - -imagenet_models = OrderedDict([(ThreatModel.Linf, linf), - (ThreatModel.corruptions, common_corruptions)]) - - diff --git a/robustbench/model_zoo/models.py b/robustbench/model_zoo/models.py deleted file mode 100644 index 8d5bf962..00000000 --- a/robustbench/model_zoo/models.py +++ /dev/null @@ -1,17 +0,0 @@ -from collections import OrderedDict -from typing import Any, Dict, Dict as OrderedDictType - -from robustbench.model_zoo.cifar10 import cifar_10_models -from robustbench.model_zoo.cifar100 import cifar_100_models -from robustbench.model_zoo.imagenet import imagenet_models -from robustbench.model_zoo.enums import BenchmarkDataset, ThreatModel - -ModelsDict = OrderedDictType[str, Dict[str, Any]] -ThreatModelsDict = OrderedDictType[ThreatModel, ModelsDict] -BenchmarkDict = OrderedDictType[BenchmarkDataset, ThreatModelsDict] - -model_dicts: BenchmarkDict = OrderedDict([ - (BenchmarkDataset.cifar_10, cifar_10_models), - (BenchmarkDataset.cifar_100, cifar_100_models), - (BenchmarkDataset.imagenet, imagenet_models) -]) diff --git a/robustbench/utils.py b/robustbench/utils.py deleted file mode 100644 index 255f4d30..00000000 --- a/robustbench/utils.py +++ /dev/null @@ -1,489 +0,0 @@ -import argparse -import dataclasses -import json -import math -import os -import warnings -from collections import OrderedDict -from pathlib import Path -from typing import Dict, Optional, Union - -import requests -# import timm -import torch -from torch import nn - -from robustbench.model_zoo import model_dicts as all_models -from robustbench.model_zoo.enums import BenchmarkDataset, ThreatModel - - -ACC_FIELDS = { - ThreatModel.corruptions: "corruptions_acc", - ThreatModel.L2: ("external", "autoattack_acc"), - ThreatModel.Linf: ("external", "autoattack_acc") -} - - -def download_gdrive(gdrive_id, fname_save): - """ source: https://stackoverflow.com/questions/38511444/python-download-files-from-google-drive-using-url """ - def get_confirm_token(response): - for key, value in response.cookies.items(): - if key.startswith('download_warning'): - return value - - return None - - def save_response_content(response, fname_save): - CHUNK_SIZE = 32768 - - with open(fname_save, "wb") as f: - for chunk in response.iter_content(CHUNK_SIZE): - if chunk: # filter out keep-alive new chunks - f.write(chunk) - - print('Download started: path={} (gdrive_id={})'.format( - fname_save, gdrive_id)) - - url_base = "https://docs.google.com/uc?export=download&confirm=t" - session = requests.Session() - - response = session.get(url_base, params={'id': gdrive_id}, stream=True) - token = get_confirm_token(response) - - if token: - params = {'id': gdrive_id, 'confirm': token} - response = session.get(url_base, params=params, stream=True) - - save_response_content(response, fname_save) - session.close() - print('Download finished: path={} (gdrive_id={})'.format( - fname_save, gdrive_id)) - - -def rm_substr_from_state_dict(state_dict, substr): - new_state_dict = OrderedDict() - for key in state_dict.keys(): - if substr in key: # to delete prefix 'module.' if it exists - new_key = key[len(substr):] - new_state_dict[new_key] = state_dict[key] - else: - new_state_dict[key] = state_dict[key] - return new_state_dict - - -def add_substr_to_state_dict(state_dict, substr): - new_state_dict = OrderedDict() - for k, v in state_dict.items(): - new_state_dict[substr + k] = v - return new_state_dict - - -def load_model(model_name: str, - model_dir: Union[str, Path] = './models', - dataset: Union[str, - BenchmarkDataset] = BenchmarkDataset.cifar_10, - threat_model: Union[str, ThreatModel] = ThreatModel.Linf, - norm: Optional[str] = None) -> nn.Module: - """Loads a model from the model_zoo. - - The model is trained on the given ``dataset``, for the given ``threat_model``. - - :param model_name: The name used in the model zoo. - :param model_dir: The base directory where the models are saved. - :param dataset: The dataset on which the model is trained. - :param threat_model: The threat model for which the model is trained. - :param norm: Deprecated argument that can be used in place of ``threat_model``. If specified, it - overrides ``threat_model`` - - :return: A ready-to-used trained model. - """ - - # if model_name in timm.list_models(): - # return timm.create_model(model_name, pretrained=True).eval() - - dataset_: BenchmarkDataset = BenchmarkDataset(dataset) - if norm is None: - threat_model_: ThreatModel = ThreatModel(threat_model) - else: - threat_model_ = ThreatModel(norm) - warnings.warn( - "`norm` has been deprecated and will be removed in a future version.", - DeprecationWarning) - - model_dir_ = Path(model_dir) / dataset_.value / threat_model_.value - model_path = model_dir_ / f'{model_name}.pt' - - models = all_models[dataset_][threat_model_] - - # if models[model_name]['gdrive_id'] is None: - # raise ValueError(f"Model `{model_name}` is not a timm model and has no `gdrive_id` specified.") - - if not isinstance(models[model_name]['gdrive_id'], list): - model = models[model_name]['model']() - if dataset_ == BenchmarkDataset.imagenet and 'Standard' in model_name: - return model.eval() - - if not os.path.exists(model_dir_): - os.makedirs(model_dir_) - if not os.path.isfile(model_path): - download_gdrive(models[model_name]['gdrive_id'], model_path) - checkpoint = torch.load(model_path, map_location=torch.device('cpu')) - - if 'Kireev2021Effectiveness' in model_name or model_name == 'Andriushchenko2020Understanding': - checkpoint = checkpoint['last'] # we take the last model (choices: 'last', 'best') - try: - # needed for the model of `Carmon2019Unlabeled` - state_dict = rm_substr_from_state_dict(checkpoint['state_dict'], - 'module.') - # needed for the model of `Chen2020Efficient` - state_dict = rm_substr_from_state_dict(state_dict, - 'model.') - except: - state_dict = rm_substr_from_state_dict(checkpoint, 'module.') - state_dict = rm_substr_from_state_dict(state_dict, 'model.') - - if dataset_ == BenchmarkDataset.imagenet: - # so far all models need input normalization, which is added as extra layer - state_dict = add_substr_to_state_dict(state_dict, 'model.') - - model = _safe_load_state_dict(model, model_name, state_dict, dataset_) - - return model.eval() - - # If we have an ensemble of models (e.g., Chen2020Adversarial, Diffenderfer2021Winning_LRR_CARD_Deck) - else: - model = models[model_name]['model']() - if not os.path.exists(model_dir_): - os.makedirs(model_dir_) - for i, gid in enumerate(models[model_name]['gdrive_id']): - if not os.path.isfile('{}_m{}.pt'.format(model_path, i)): - download_gdrive(gid, '{}_m{}.pt'.format(model_path, i)) - checkpoint = torch.load('{}_m{}.pt'.format(model_path, i), - map_location=torch.device('cpu')) - try: - state_dict = rm_substr_from_state_dict( - checkpoint['state_dict'], 'module.') - except KeyError: - state_dict = rm_substr_from_state_dict(checkpoint, 'module.') - - model.models[i] = _safe_load_state_dict(model.models[i], - model_name, state_dict, - dataset_) - model.models[i].eval() - - return model.eval() - - -def _safe_load_state_dict(model: nn.Module, model_name: str, - state_dict: Dict[str, torch.Tensor], - dataset_: BenchmarkDataset) -> nn.Module: - known_failing_models = { - "Andriushchenko2020Understanding", "Augustin2020Adversarial", - "Engstrom2019Robustness", "Pang2020Boosting", "Rice2020Overfitting", - "Rony2019Decoupling", "Wong2020Fast", "Hendrycks2020AugMix_WRN", - "Hendrycks2020AugMix_ResNeXt", "Kireev2021Effectiveness_Gauss50percent", - "Kireev2021Effectiveness_AugMixNoJSD", "Kireev2021Effectiveness_RLAT", - "Kireev2021Effectiveness_RLATAugMixNoJSD", "Kireev2021Effectiveness_RLATAugMixNoJSD", - "Kireev2021Effectiveness_RLATAugMix", "Chen2020Efficient", - "Wu2020Adversarial", "Augustin2020Adversarial_34_10", - "Augustin2020Adversarial_34_10_extra", "Diffenderfer2021Winning_LRR", - "Diffenderfer2021Winning_LRR_CARD_Deck", "Diffenderfer2021Winning_Binary", - "Diffenderfer2021Winning_Binary_CARD_Deck" - } - - failure_messages = ['Missing key(s) in state_dict: "mu", "sigma".', - 'Unexpected key(s) in state_dict: "model_preact_hl1.1.weight"', - 'Missing key(s) in state_dict: "normalize.mean", "normalize.std"', - 'Unexpected key(s) in state_dict: "conv1.scores"'] - - try: - model.load_state_dict(state_dict, strict=True) - except RuntimeError as e: - if (model_name in known_failing_models or dataset_ == BenchmarkDataset.imagenet - ) and any([msg in str(e) for msg in failure_messages]): - model.load_state_dict(state_dict, strict=False) - else: - raise e - - return model - - -def clean_accuracy(model: nn.Module, - x: torch.Tensor, - y: torch.Tensor, - batch_size: int = 100, - device: torch.device = None): - if device is None: - device = x.device - acc = 0. - n_batches = math.ceil(x.shape[0] / batch_size) - with torch.no_grad(): - for counter in range(n_batches): - x_curr = x[counter * batch_size:(counter + 1) * - batch_size].to(device) - y_curr = y[counter * batch_size:(counter + 1) * - batch_size].to(device) - - output = model(x_curr) - acc += (output.max(1)[1] == y_curr).float().sum() - - return acc.item() / x.shape[0] - - -def get_key(x, keys): - if isinstance(keys, str): - return float(x[keys]) - else: - for k in keys: - if k in x.keys(): - return float(x[k]) - - -def list_available_models( - dataset: Union[str, BenchmarkDataset] = BenchmarkDataset.cifar_10, - threat_model: Union[str, ThreatModel] = ThreatModel.Linf, - norm: Optional[str] = None): - dataset_: BenchmarkDataset = BenchmarkDataset(dataset) - - if norm is None: - threat_model_: ThreatModel = ThreatModel(threat_model) - else: - threat_model_ = ThreatModel(norm) - warnings.warn( - "`norm` has been deprecated and will be removed in a future version.", - DeprecationWarning) - - models = all_models[dataset_][threat_model_].keys() - - acc_field = ACC_FIELDS[threat_model_] - - json_dicts = [] - - jsons_dir = Path("./model_info") / dataset_.value / threat_model_.value - - for model_name in models: - json_path = jsons_dir / f"{model_name}.json" - - # Some models might not yet be in model_info - if not json_path.exists(): - continue - - with open(json_path, 'r') as model_info: - json_dict = json.load(model_info) - - json_dict['model_name'] = model_name - json_dict['venue'] = 'Unpublished' if json_dict[ - 'venue'] == '' else json_dict['venue'] - if isinstance(acc_field, str): - json_dict[acc_field] = float(json_dict[acc_field]) / 100 - else: - for k in acc_field: - if k in json_dict.keys(): - json_dict[k] = float(json_dict[k]) / 100 - json_dict['clean_acc'] = float(json_dict['clean_acc']) / 100 - json_dicts.append(json_dict) - - json_dicts = sorted(json_dicts, key=lambda d: -get_key(d, acc_field)) - print('| # | Model ID | Paper | Clean accuracy | Robust accuracy | Architecture | Venue |') - print('|:---:|---|---|:---:|:---:|:---:|:---:|') - for i, json_dict in enumerate(json_dicts): - if json_dict['model_name'] == 'Chen2020Adversarial': - json_dict['architecture'] = json_dict[ - 'architecture'] + '
(3x ensemble)' - if json_dict['model_name'] != 'Natural': - print( - '| **{}** | **{}** | *[{}]({})* | {:.2%} | {:.2%} | {} | {} |' - .format(i + 1, json_dict['model_name'], json_dict['name'], - json_dict['link'], json_dict['clean_acc'], - get_key(json_dict, acc_field), json_dict['architecture'], - json_dict['venue'])) - else: - print( - '| **{}** | **{}** | *{}* | {:.2%} | {:.2%} | {} | {} |' - .format(i + 1, json_dict['model_name'], json_dict['name'], - json_dict['clean_acc'], get_key(json_dict, acc_field), - json_dict['architecture'], json_dict['venue'])) - - -def _get_bibtex_entry(model_name: str, title: str, authors: str, venue: str, year: int): - authors = authors.replace(', ', ' and ') - return (f"@article{{{model_name},\n" - f"\ttitle\t= {{{title}}},\n" - f"\tauthor\t= {{{authors}}},\n" - f"\tjournal\t= {{{venue}}},\n" - f"\tyear\t= {{{year}}}\n" - "}\n") - - -def get_leaderboard_bibtex(dataset: Union[str, BenchmarkDataset], threat_model: Union[str, ThreatModel]): - dataset_: BenchmarkDataset = BenchmarkDataset(dataset) - threat_model_: ThreatModel = ThreatModel(threat_model) - - jsons_dir = Path("./model_info") / dataset_.value / threat_model_.value - - bibtex_entries = set() - - for json_path in jsons_dir.glob("*.json"): - - model_name = json_path.stem.split("_")[0] - - with open(json_path, 'r') as model_info: - model_dict = json.load(model_info) - title = model_dict["name"] - authors = model_dict["authors"] - full_venue = model_dict["venue"] - if full_venue == "N/A": - continue - venue = full_venue.split(" ")[0] - venue = venue.split(",")[0] - - year = model_dict["venue"].split(" ")[-1] - - bibtex_entry = _get_bibtex_entry( - model_name, title, authors, venue, year) - bibtex_entries.add(bibtex_entry) - - str_entries = '' - for entry in bibtex_entries: - print(entry) - str_entries += entry - - return bibtex_entries, str_entries - - -def get_leaderboard_latex(dataset: Union[str, BenchmarkDataset], - threat_model: Union[str, ThreatModel], - l_keys=['clean_acc', 'external', #'autoattack_acc', - 'additional_data', 'architecture', 'venue', - 'modelzoo_id'], - sort_by='external' #'autoattack_acc' - ): - dataset_: BenchmarkDataset = BenchmarkDataset(dataset) - threat_model_: ThreatModel = ThreatModel(threat_model) - - models = all_models[dataset_][threat_model_] - print(models.keys()) - - jsons_dir = Path("./model_info") / dataset_.value / threat_model_.value - entries = [] - - for json_path in jsons_dir.glob("*.json"): - if not json_path.stem.startswith('Standard'): - model_name = json_path.stem.split("_")[0] - else: - model_name = json_path.stem - - with open(json_path, 'r') as model_info: - model_dict = json.load(model_info) - - str_curr = '\\citet{{{}}}'.format(model_name) if not model_name in ['Standard', 'Standard_R50'] \ - else model_name.replace('_', '\\_') - - for k in l_keys: - if k == 'external' and not 'external' in model_dict.keys(): - model_dict[k] = model_dict['autoattack_acc'] - if k == 'additional_data': - v = 'Y' if model_dict[k] else 'N' - elif k == 'architecture': - v = model_dict[k].replace('WideResNet', 'WRN') - v = v.replace('ResNet', 'RN') - elif k == 'modelzoo_id': - # print(json_path.stem) - v = json_path.stem.split('.json')[0] - if not v in models.keys(): - v = 'N/A' - else: - v = v.replace('_', '\\_') - else: - v = model_dict[k] - str_curr += ' & {}'.format(v) - str_curr += '\\\\' - entries.append((str_curr, float(model_dict[sort_by]))) - - entries = sorted(entries, key=lambda k: k[1], reverse=True) - entries = ['{} &'.format(i + 1) + a for i, (a, b) in enumerate(entries)] - entries = '\n'.join(entries).replace('
', ' ') - - return entries - - -def update_json(dataset: BenchmarkDataset, threat_model: ThreatModel, - model_name: str, accuracy: float, adv_accuracy: float, - eps: Optional[float]) -> None: - json_path = Path( - "model_info" - ) / dataset.value / threat_model.value / f"{model_name}.json" - if not json_path.parent.exists(): - json_path.parent.mkdir(parents=True, exist_ok=True) - - acc_field = ACC_FIELDS[threat_model] - if isinstance(acc_field, tuple): - acc_field = acc_field[-1] - - acc_field_kwarg = {acc_field: adv_accuracy} - - model_info = ModelInfo(dataset=dataset.value, eps=eps, clean_acc=accuracy, **acc_field_kwarg) - - with open(json_path, "w") as f: - f.write(json.dumps(dataclasses.asdict(model_info), indent=2)) - - -@dataclasses.dataclass -class ModelInfo: - link: Optional[str] = None - name: Optional[str] = None - authors: Optional[str] = None - additional_data: Optional[bool] = None - number_forward_passes: Optional[int] = None - dataset: Optional[str] = None - venue: Optional[str] = None - architecture: Optional[str] = None - eps: Optional[float] = None - clean_acc: Optional[float] = None - reported: Optional[float] = None - corruptions_acc: Optional[str] = None - autoattack_acc: Optional[str] = None - footnote: Optional[str] = None - - -def parse_args(): - parser = argparse.ArgumentParser() - parser.add_argument('--model_name', - type=str, - default='Carmon2019Unlabeled') - parser.add_argument('--threat_model', - type=str, - default='Linf', - choices=[x.value for x in ThreatModel]) - parser.add_argument('--dataset', - type=str, - default='cifar10', - choices=[x.value for x in BenchmarkDataset]) - parser.add_argument('--eps', type=float, default=8 / 255) - parser.add_argument('--n_ex', - type=int, - default=100, - help='number of examples to evaluate on') - parser.add_argument('--batch_size', - type=int, - default=500, - help='batch size for evaluation') - parser.add_argument('--data_dir', - type=str, - default='./data', - help='where to store downloaded datasets') - parser.add_argument('--model_dir', - type=str, - default='./models', - help='where to store downloaded models') - parser.add_argument('--seed', - type=int, - default=0, - help='random seed') - parser.add_argument('--device', - type=str, - default='cuda:0', - help='device to use for computations') - parser.add_argument('--to_disk', type=bool, default=True) - args = parser.parse_args() - return args diff --git a/robustbench/zenodo_download.py b/robustbench/zenodo_download.py deleted file mode 100644 index 2429813b..00000000 --- a/robustbench/zenodo_download.py +++ /dev/null @@ -1,83 +0,0 @@ -import hashlib -import shutil -from pathlib import Path -from typing import Set - -import requests -from tqdm import tqdm - -ZENODO_ENTRY_POINT = "https://zenodo.org/api" -RECORDS_ENTRY_POINT = f"{ZENODO_ENTRY_POINT}/records/" - -CHUNK_SIZE = 65536 - - -class DownloadError(Exception): - pass - - -def download_file(url: str, save_dir: Path, total_bytes: int) -> Path: - """Downloads large files from the given URL. - - From: https://stackoverflow.com/a/16696317 - - :param url: The URL of the file. - :param save_dir: The directory where the file should be saved. - :param total_bytes: The total bytes of the file. - :return: The path to the downloaded file. - """ - local_filename = save_dir / url.split('/')[-1] - print(f"Starting download from {url}") - with requests.get(url, stream=True) as r: - r.raise_for_status() - with open(local_filename, 'wb') as f: - iters = total_bytes // CHUNK_SIZE - for chunk in tqdm(r.iter_content(chunk_size=CHUNK_SIZE), - total=iters): - f.write(chunk) - - return local_filename - - -def file_md5(filename: Path) -> str: - """Computes the MD5 hash of a given file""" - hash_md5 = hashlib.md5() - with open(filename, "rb") as f: - for chunk in iter(lambda: f.read(32768), b""): - hash_md5.update(chunk) - - return hash_md5.hexdigest() - - -def zenodo_download(record_id: str, filenames_to_download: Set[str], - save_dir: Path) -> None: - """Downloads the given files from the given Zenodo record. - - :param record_id: The ID of the record. - :param filenames_to_download: The files to download from the record. - :param save_dir: The directory where the files should be saved. - """ - if not save_dir.exists(): - save_dir.mkdir(parents=True, exist_ok=True) - - url = f"{RECORDS_ENTRY_POINT}/{record_id}" - res = requests.get(url) - files = res.json()["files"] - files_to_download = list( - filter(lambda file: file["key"] in filenames_to_download, files)) - - for file in files_to_download: - if (save_dir / file["key"]).exists(): - continue - file_url = file["links"]["self"] - file_checksum = file["checksum"].split(":")[-1] - filename = download_file(file_url, save_dir, file["size"]) - if file_md5(filename) != file_checksum: - raise DownloadError( - "The hash of the downloaded file does not match" - " the expected one.") - print("Download finished, extracting...") - shutil.unpack_archive(filename, - extract_dir=save_dir, - format=file["type"]) - print("Downloaded and extracted.") diff --git a/torchattacks/__init__.py b/torchattacks/__init__.py index 48f18a74..1dddc0dc 100644 --- a/torchattacks/__init__.py +++ b/torchattacks/__init__.py @@ -7,6 +7,7 @@ from .attacks.bim import BIM from .attacks.rfgsm import RFGSM from .attacks.pgd import PGD +from .attacks.espgd import ESPGD from .attacks.eotpgd import EOTPGD from .attacks.ffgsm import FFGSM from .attacks.tpgd import TPGD @@ -25,16 +26,24 @@ from .attacks.spsa import SPSA from .attacks.pifgsm import PIFGSM from .attacks.pifgsmpp import PIFGSMPP +from .attacks.fab import FAB # L2 attacks from .attacks.cw import CW +from .attacks.cwl0 import CWL0 +from .attacks.cwlinf import CWLinf +from .attacks.cwbs import CWBS +from .attacks.cwbsl0 import CWBSL0 +from .attacks.cwbslinf import CWBSLinf from .attacks.pgdl2 import PGDL2 from .attacks.pgdrsl2 import PGDRSL2 from .attacks.deepfool import DeepFool from .attacks.eaden import EADEN +from .attacks.fabl2 import FABL2 # L1 attacks from .attacks.eadl1 import EADL1 +from .attacks.fabl1 import FABL1 # L0 attacks from .attacks.sparsefool import SparseFool @@ -43,9 +52,9 @@ from .attacks.jsma import JSMA # Linf, L2 attacks -from .attacks.fab import FAB from .attacks.autoattack import AutoAttack from .attacks.square import Square +from .attacks.afab import AFAB # Wrapper Class from .wrappers.multiattack import MultiAttack @@ -59,6 +68,7 @@ "BIM", "RFGSM", "PGD", + "ESPGD", "EOTPGD", "FFGSM", "TPGD", @@ -81,6 +91,11 @@ "PIFGSM", "PIFGSMPP", "CW", + "CWL0", + "CWLinf", + "CWBS", + "CWBSL0", + "CWBSLinf", "PGDL2", "DeepFool", "PGDRSL2", @@ -88,6 +103,9 @@ "OnePixel", "Pixle", "FAB", + "FABL1", + "FABL2", + "AFAB", "AutoAttack", "Square", "MultiAttack", diff --git a/torchattacks/attack.py b/torchattacks/attack.py index 4661272d..d91cc070 100644 --- a/torchattacks/attack.py +++ b/torchattacks/attack.py @@ -1,6 +1,8 @@ import time +from typing import Optional, Union, List, Tuple from collections import OrderedDict +import numpy as np import torch from torch.utils.data import DataLoader, TensorDataset @@ -25,7 +27,7 @@ class Attack(object): To change this, please see `set_model_training_mode`. """ - def __init__(self, name, model): + def __init__(self, name: str, model: torch.nn.Module) -> None: r""" Initializes internal attack state. @@ -48,6 +50,7 @@ def __init__(self, name, model): self.attack_mode = "default" self.supported_mode = ["default"] self.targeted = False + self.target_labels = None self._target_map_function = None # Controls when normalization is used. @@ -61,7 +64,7 @@ def __init__(self, name, model): self._batchnorm_training = False self._dropout_training = False - def forward(self, inputs, labels=None, *args, **kwargs): + def forward(self, inputs: torch.nn.Module, labels: Optional[torch.nn.Module], *args, **kwargs) -> None: r""" It defines the computation performed at every call. Should be overridden by all subclasses. @@ -69,26 +72,26 @@ def forward(self, inputs, labels=None, *args, **kwargs): raise NotImplementedError @wrapper_method - def set_model(self, model): + def set_model(self, model: torch.nn.Module) -> None: self.model = model self.model_name = model.__class__.__name__ - def get_logits(self, inputs, labels=None, *args, **kwargs): + def get_logits(self, inputs: torch.Tensor, *args, **kwargs) -> torch.tensor: if self._normalization_applied is False: inputs = self.normalize(inputs) logits = self.model(inputs) return logits @wrapper_method - def _set_normalization_applied(self, flag): + def _set_normalization_applied(self, flag: bool) -> None: self._normalization_applied = flag @wrapper_method - def set_device(self, device): + def set_device(self, device: Union[str, torch.device]) -> None: self.device = device @wrapper_method - def _set_rmodel_normalization_used(self, model): + def _set_rmodel_normalization_used(self, model: torch.nn.Module) -> None: r""" Set attack normalization for MAIR [https://github.com/Harry24k/MAIR]. @@ -104,7 +107,7 @@ def _set_rmodel_normalization_used(self, model): self.set_normalization_used(mean, std) @wrapper_method - def set_normalization_used(self, mean, std): + def set_normalization_used(self, mean: Union[np.ndarray, torch.Tensor, List, Tuple], std: Union[np.ndarray, torch.Tensor, List, Tuple]) -> None: self.normalization_used = {} n_channels = len(mean) mean = torch.tensor(mean).reshape(1, n_channels, 1, 1) @@ -113,17 +116,17 @@ def set_normalization_used(self, mean, std): self.normalization_used["std"] = std self._set_normalization_applied(True) - def normalize(self, inputs): + def normalize(self, inputs: torch.Tensor) -> torch.Tensor: mean = self.normalization_used["mean"].to(inputs.device) std = self.normalization_used["std"].to(inputs.device) return (inputs - mean) / std - def inverse_normalize(self, inputs): + def inverse_normalize(self, inputs: torch.Tensor) -> torch.Tensor: mean = self.normalization_used["mean"].to(inputs.device) std = self.normalization_used["std"].to(inputs.device) return inputs * std + mean - def get_mode(self): + def get_mode(self) -> str: r""" Get attack mode. @@ -131,7 +134,7 @@ def get_mode(self): return self.attack_mode @wrapper_method - def set_mode_default(self): + def set_mode_default(self) -> None: r""" Set attack mode as default mode. @@ -141,7 +144,7 @@ def set_mode_default(self): print("Attack mode is changed to 'default.'") @wrapper_method - def _set_mode_targeted(self, mode, quiet): + def _set_mode_targeted(self, mode: str, quiet: bool) -> None: if "targeted" not in self.supported_mode: raise ValueError("Targeted mode is not supported.") self.targeted = True @@ -150,7 +153,7 @@ def _set_mode_targeted(self, mode, quiet): print("Attack mode is changed to '%s'." % mode) @wrapper_method - def set_mode_targeted_by_function(self, target_map_function, quiet=False): + def set_mode_targeted_by_function(self, target_map_function, quiet: bool = False) -> None: r""" Set attack mode as targeted. @@ -165,7 +168,7 @@ def set_mode_targeted_by_function(self, target_map_function, quiet=False): self._target_map_function = target_map_function @wrapper_method - def set_mode_targeted_random(self, quiet=False): + def set_mode_targeted_random(self, quiet: bool = False) -> None: r""" Set attack mode as targeted with random labels. @@ -177,13 +180,12 @@ def set_mode_targeted_random(self, quiet=False): self._target_map_function = self.get_random_target_label @wrapper_method - def set_mode_targeted_least_likely(self, kth_min=1, quiet=False): + def set_mode_targeted_least_likely(self, kth_min: int = 1, quiet: bool = False) -> None: r""" Set attack mode as targeted with least likely labels. Arguments: - kth_min (str): label with the k-th smallest probability used as target labels. (Default: 1) - num_classses (str): number of classes. (Default: False) + kth_min (int): label with the k-th smallest probability used as target labels. (Default: 1) """ self._set_mode_targeted("targeted(least-likely)", quiet) @@ -192,23 +194,32 @@ def set_mode_targeted_least_likely(self, kth_min=1, quiet=False): self._target_map_function = self.get_least_likely_label @wrapper_method - def set_mode_targeted_by_label(self, quiet=False): + def set_mode_targeted_by_label(self, target_labels: torch.Tensor, quiet: bool = False) -> None: r""" Set attack mode as targeted. Arguments: + target_label (torch.Tensor): Target labels of the targeted attack. quiet (bool): Display information message or not. (Default: False) .. note:: Use user-supplied labels as target labels. """ - self._set_mode_targeted("targeted(label)", quiet) - self._target_map_function = "function is a string" + if isinstance(target_labels, torch.Tensor): + self.target_labels = target_labels + self._set_mode_targeted("targeted(label)", quiet) + self._target_map_function = "function is a string" + else: + raise ValueError( + 'Target labels types not supported: {}'.format(type(target_labels))) @wrapper_method def set_model_training_mode( - self, model_training=False, batchnorm_training=False, dropout_training=False - ): + self, + model_training: bool = False, + batchnorm_training: bool = False, + dropout_training: bool = False + ) -> None: r""" Set training mode during attack process. @@ -247,13 +258,13 @@ def _recover_model_mode(self, given_training): def save( self, data_loader, - save_path=None, - verbose=True, - return_verbose=False, - save_predictions=False, - save_clean_inputs=False, + save_path: Union[str, None] = None, + verbose: bool = True, + return_verbose: bool = False, + save_predictions: bool = False, + save_clean_inputs: bool = False, save_type="float", - ): + ) -> Tuple[float, torch.tensor, float]: r""" Save adversarial inputs as torch.tensor from given torch.utils.data.DataLoader. @@ -370,7 +381,7 @@ def save( return rob_acc, l2, elapsed_time @staticmethod - def to_type(inputs, type): + def to_type(inputs, type: str) -> torch.Tensor: r""" Return inputs as int if float is given. """ @@ -385,11 +396,12 @@ def to_type(inputs, type): ): return inputs.float() / 255 else: - raise ValueError(type + " is not a valid type. [Options: float, int]") + raise ValueError( + type + " is not a valid type. [Options: float, int]") return inputs @staticmethod - def _save_print(progress, rob_acc, l2, elapsed_time, end): + def _save_print(progress: float, rob_acc: float, l2: float, elapsed_time: float, end: Union[str, None]) -> None: print( "- Save progress: %2.2f %% / Robust accuracy: %2.2f %% / L2: %1.5f (%2.3f it/s) \t" % (progress, rob_acc, l2, elapsed_time), @@ -398,13 +410,13 @@ def _save_print(progress, rob_acc, l2, elapsed_time, end): @staticmethod def load( - load_path, - batch_size=128, - shuffle=False, + load_path: str, + batch_size: int = 128, + shuffle: bool = False, normalize=None, - load_predictions=False, - load_clean_inputs=False, - ): + load_predictions: bool = False, + load_clean_inputs: bool = False, + ) -> DataLoader: save_dict = torch.load(load_path) keys = ["adv_inputs", "labels"] @@ -431,14 +443,15 @@ def load( ) / std # nopep8 adv_data = TensorDataset(*[save_dict[key] for key in keys]) - adv_loader = DataLoader(adv_data, batch_size=batch_size, shuffle=shuffle) + adv_loader = DataLoader( + adv_data, batch_size=batch_size, shuffle=shuffle) print( "Data is loaded in the following order: [%s]" % (", ".join(keys)) ) # nopep8 return adv_loader @torch.no_grad() - def get_output_with_eval_nograd(self, inputs): + def get_output_with_eval_nograd(self, inputs: torch.Tensor) -> torch.Tensor: given_training = self.model.training if given_training: self.model.eval() @@ -447,7 +460,7 @@ def get_output_with_eval_nograd(self, inputs): self.model.train() return outputs - def get_target_label(self, inputs, labels=None): + def get_target_label(self, inputs: torch.Tensor, labels: Union[torch.Tensor, None] = None) -> torch.Tensor: r""" Function for changing the attack mode. Return input labels. @@ -457,13 +470,13 @@ def get_target_label(self, inputs, labels=None): "target_map_function is not initialized by set_mode_targeted." ) if self.attack_mode == "targeted(label)": - target_labels = labels + target_labels = self.target_labels else: target_labels = self._target_map_function(inputs, labels) return target_labels @torch.no_grad() - def get_least_likely_label(self, inputs, labels=None): + def get_least_likely_label(self, inputs: torch.Tensor, labels: Union[torch.Tensor, None] = None) -> torch.Tensor: outputs = self.get_output_with_eval_nograd(inputs) if labels is None: _, labels = torch.max(outputs, dim=1) @@ -479,7 +492,7 @@ def get_least_likely_label(self, inputs, labels=None): return target_labels.long().to(self.device) @torch.no_grad() - def get_random_target_label(self, inputs, labels=None): + def get_random_target_label(self, inputs: torch.Tensor, labels: Union[torch.Tensor, None] = None) -> torch.Tensor: outputs = self.get_output_with_eval_nograd(inputs) if labels is None: _, labels = torch.max(outputs, dim=1) @@ -494,7 +507,7 @@ def get_random_target_label(self, inputs, labels=None): return target_labels.long().to(self.device) - def __call__(self, inputs, labels=None, *args, **kwargs): + def __call__(self, inputs: torch.Tensor, labels: Union[torch.Tensor, None] = None, *args, **kwargs) -> torch.Tensor: given_training = self.model.training self._change_model_mode(given_training) diff --git a/torchattacks/attacks/afab.py b/torchattacks/attacks/afab.py new file mode 100644 index 00000000..15b29edc --- /dev/null +++ b/torchattacks/attacks/afab.py @@ -0,0 +1,909 @@ +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function +from __future__ import unicode_literals + +import time +import math + +import torch +import torch.nn.functional as F + +# zero_gradients deprecated in torch >= 1.9. +# zero_gradients is re-defined in the bottom of the code. +# from torch.autograd.gradcheck import zero_gradients +from collections import abc as container_abcs + +from ..attack import Attack + + +class AFAB(Attack): + r""" + Fast Adaptive Boundary Attack in the paper 'Minimally distorted Adversarial Examples with a Fast Adaptive Boundary Attack' + [https://arxiv.org/abs/1907.02044] + [https://github.com/fra31/auto-attack] + + Distance Measure : Linf, L2, L1 + + Arguments: + model (nn.Module): model to attack. + norm (str) : Lp-norm to minimize. ['Linf', 'L2', 'L1'] (Default: 'Linf') + eps (float): maximum perturbation. (Default: 8/255) + steps (int): number of steps. (Default: 10) + n_restarts (int): number of random restarts. (Default: 1) + alpha_max (float): alpha_max. (Default: 0.1) + eta (float): overshooting. (Default: 1.05) + beta (float): backward step. (Default: 0.9) + verbose (bool): print progress. (Default: False) + seed (int): random seed for the starting point. (Default: 0) + targeted (bool): targeted attack for every wrong classes. (Default: False) + n_classes (int): number of classes. (Default: 10) + + Shape: + - images: :math:`(N, C, H, W)` where `N = number of batches`, `C = number of channels`, `H = height` and `W = width`. It must have a range [0, 1]. + - labels: :math:`(N)` where each value :math:`y_i` is :math:`0 \leq y_i \leq` `number of labels`. + - output: :math:`(N, C, H, W)`. + + Examples:: + >>> attack = torchattacks.AFAB(model, norm='Linf', steps=10, eps=8/255, n_restarts=1, alpha_max=0.1, eta=1.05, beta=0.9, loss_fn=None, verbose=False, seed=0, targeted=False, n_classes=10) + >>> adv_images = attack(images, labels) + + """ + + def __init__( + self, + model, + norm="Linf", + eps=8 / 255, + steps=10, + n_restarts=1, + alpha_max=0.1, + eta=1.05, + beta=0.9, + verbose=False, + seed=0, + multi_targeted=False, + n_classes=10, + ): + super().__init__("AFAB", model) + self.norm = norm + self.n_restarts = n_restarts + Default_EPS_DICT_BY_NORM = {"Linf": 0.3, "L2": 1.0, "L1": 5.0} + self.eps = eps if eps is not None else Default_EPS_DICT_BY_NORM[norm] + self.alpha_max = alpha_max + self.eta = eta + self.beta = beta + self.steps = steps + self.verbose = verbose + self.seed = seed + self.target_class = None + self.multi_targeted = multi_targeted + self.n_target_classes = n_classes - 1 + self.supported_mode = ["default", "targeted"] + + def forward(self, images, labels): + r""" + Overridden. + """ + + images = images.clone().detach().to(self.device) + labels = labels.clone().detach().to(self.device) + adv_images = self.perturb(images, labels) + + return adv_images + + def _get_predicted_label(self, x): + with torch.no_grad(): + outputs = self.get_logits(x) + _, y = torch.max(outputs, dim=1) + return y + + def check_shape(self, x): + return x if len(x.shape) > 0 else x.unsqueeze(0) + + def get_diff_logits_grads_batch(self, imgs, la): + im = imgs.clone().requires_grad_() + with torch.enable_grad(): + y = self.get_logits(im) + + g2 = torch.zeros([y.shape[-1], *imgs.size()]).to(self.device) + grad_mask = torch.zeros_like(y) + for counter in range(y.shape[-1]): + zero_gradients(im) + grad_mask[:, counter] = 1.0 + y.backward(grad_mask, retain_graph=True) + grad_mask[:, counter] = 0.0 + g2[counter] = im.grad.data + + g2 = torch.transpose(g2, 0, 1).detach() + # y2 = self.get_logits(imgs).detach() + y2 = y.detach() + df = y2 - y2[torch.arange(imgs.shape[0]), la].unsqueeze(1) + dg = g2 - g2[torch.arange(imgs.shape[0]), la].unsqueeze(1) + df[torch.arange(imgs.shape[0]), la] = 1e10 + + return df, dg + + def get_diff_logits_grads_batch_targeted(self, imgs, la, la_target): + u = torch.arange(imgs.shape[0]) + im = imgs.clone().requires_grad_() + with torch.enable_grad(): + y = self.get_logits(im) + diffy = -(y[u, la] - y[u, la_target]) + sumdiffy = diffy.sum() + + zero_gradients(im) + sumdiffy.backward() + graddiffy = im.grad.data + df = diffy.detach().unsqueeze(1) + dg = graddiffy.unsqueeze(1) + + return df, dg + + def attack_single_run(self, x, y=None, use_rand_start=False): + """ + :param x: clean images + :param y: clean labels, if None we use the predicted labels + """ + + # self.device = x.device + self.orig_dim = list(x.shape[1:]) + self.ndims = len(self.orig_dim) + + x = x.detach().clone().float().to(self.device) + # assert next(self.model.parameters()).device == x.device + + y_pred = self._get_predicted_label(x) + if y is None: + y = y_pred.detach().clone().long().to(self.device) + else: + y = y.detach().clone().long().to(self.device) + pred = y_pred == y + corr_classified = pred.float().sum() + if self.verbose: + print("Clean accuracy: {:.2%}".format(pred.float().mean())) + if pred.sum() == 0: + return x + pred = self.check_shape(pred.nonzero().squeeze()) + + startt = time.time() + # runs the attack only on correctly classified points + im2 = x[pred].detach().clone() + la2 = y[pred].detach().clone() + if len(im2.shape) == self.ndims: + im2 = im2.unsqueeze(0) + bs = im2.shape[0] + u1 = torch.arange(bs) + adv = im2.clone() + adv_c = x.clone() + res2 = 1e10 * torch.ones([bs]).to(self.device) + res_c = torch.zeros([x.shape[0]]).to(self.device) + x1 = im2.clone() + x0 = im2.clone().reshape([bs, -1]) + counter_restarts = 0 + + while counter_restarts < 1: + if use_rand_start: + if self.norm == "Linf": + t = 2 * torch.rand(x1.shape).to(self.device) - 1 + x1 = ( + im2 + + ( + torch.min( + res2, self.eps * torch.ones(res2.shape).to(self.device) + ).reshape([-1, *[1] * self.ndims]) + ) + * t + / ( + t.reshape([t.shape[0], -1]) + .abs() + .max(dim=1, keepdim=True)[0] + .reshape([-1, *[1] * self.ndims]) + ) + * 0.5 + ) + elif self.norm == "L2": + t = torch.randn(x1.shape).to(self.device) + x1 = ( + im2 + + ( + torch.min( + res2, self.eps * torch.ones(res2.shape).to(self.device) + ).reshape([-1, *[1] * self.ndims]) + ) + * t + / ( + (t ** 2) + .view(t.shape[0], -1) + .sum(dim=-1) + .sqrt() + .view(t.shape[0], *[1] * self.ndims) + ) + * 0.5 + ) + elif self.norm == "L1": + t = torch.randn(x1.shape).to(self.device) + x1 = ( + im2 + + ( + torch.min( + res2, self.eps * torch.ones(res2.shape).to(self.device) + ).reshape([-1, *[1] * self.ndims]) + ) + * t + / ( + t.abs() + .view(t.shape[0], -1) + .sum(dim=-1) + .view(t.shape[0], *[1] * self.ndims) + ) + / 2 + ) + + x1 = x1.clamp(0.0, 1.0) + + counter_iter = 0 + while counter_iter < self.steps: + with torch.no_grad(): + df, dg = self.get_diff_logits_grads_batch(x1, la2) + if self.norm == "Linf": + dist1 = df.abs() / ( + 1e-12 + + dg.abs().view(dg.shape[0], dg.shape[1], -1).sum(dim=-1) + ) + elif self.norm == "L2": + dist1 = df.abs() / ( + 1e-12 + + (dg ** 2) + .view(dg.shape[0], dg.shape[1], -1) + .sum(dim=-1) + .sqrt() + ) + elif self.norm == "L1": + dist1 = df.abs() / ( + 1e-12 + + dg.abs() + .reshape([df.shape[0], df.shape[1], -1]) + .max(dim=2)[0] + ) + else: + raise ValueError("norm not supported") + ind = dist1.min(dim=1)[1] + dg2 = dg[u1, ind] + b = -df[u1, ind] + (dg2 * x1).view(x1.shape[0], -1).sum(dim=-1) + w = dg2.reshape([bs, -1]) + + if self.norm == "Linf": + d3 = projection_linf( + torch.cat((x1.reshape([bs, -1]), x0), 0), + torch.cat((w, w), 0), + torch.cat((b, b), 0), + ) + elif self.norm == "L2": + d3 = projection_l2( + torch.cat((x1.reshape([bs, -1]), x0), 0), + torch.cat((w, w), 0), + torch.cat((b, b), 0), + ) + elif self.norm == "L1": + d3 = projection_l1( + torch.cat((x1.reshape([bs, -1]), x0), 0), + torch.cat((w, w), 0), + torch.cat((b, b), 0), + ) + d1 = torch.reshape(d3[:bs], x1.shape) + d2 = torch.reshape(d3[-bs:], x1.shape) + if self.norm == "Linf": + a0 = ( + d3.abs() + .max(dim=1, keepdim=True)[0] + .view(-1, *[1] * self.ndims) + ) + elif self.norm == "L2": + a0 = ( + (d3 ** 2) + .sum(dim=1, keepdim=True) + .sqrt() + .view(-1, *[1] * self.ndims) + ) + elif self.norm == "L1": + a0 = ( + d3.abs() + .sum(dim=1, keepdim=True) + .view(-1, *[1] * self.ndims) + ) + a0 = torch.max(a0, 1e-8 * torch.ones(a0.shape).to(self.device)) + a1 = a0[:bs] + a2 = a0[-bs:] + alpha = torch.min( + torch.max( + a1 / (a1 + a2), torch.zeros(a1.shape).to(self.device) + ), + self.alpha_max * torch.ones(a1.shape).to(self.device), + ) + x1 = ( + (x1 + self.eta * d1) * (1 - alpha) + + (im2 + d2 * self.eta) * alpha + ).clamp(0.0, 1.0) + + is_adv = self._get_predicted_label(x1) != la2 + + if is_adv.sum() > 0: + ind_adv = is_adv.nonzero().squeeze() + ind_adv = self.check_shape(ind_adv) + if self.norm == "Linf": + t = ( + (x1[ind_adv] - im2[ind_adv]) + .reshape([ind_adv.shape[0], -1]) + .abs() + .max(dim=1)[0] + ) + elif self.norm == "L2": + t = ( + ((x1[ind_adv] - im2[ind_adv]) ** 2) + .view(ind_adv.shape[0], -1) + .sum(dim=-1) + .sqrt() + ) + elif self.norm == "L1": + t = ( + (x1[ind_adv] - im2[ind_adv]) + .abs() + .view(ind_adv.shape[0], -1) + .sum(dim=-1) + ) + adv[ind_adv] = x1[ind_adv] * ( + t < res2[ind_adv] + ).float().reshape([-1, *[1] * self.ndims]) + adv[ind_adv] * ( + t >= res2[ind_adv] + ).float().reshape( + [-1, *[1] * self.ndims] + ) + res2[ind_adv] = ( + t * (t < res2[ind_adv]).float() + + res2[ind_adv] * (t >= res2[ind_adv]).float() + ) + x1[ind_adv] = ( + im2[ind_adv] + (x1[ind_adv] - im2[ind_adv]) * self.beta + ) + + counter_iter += 1 + + counter_restarts += 1 + + ind_succ = res2 < 1e10 + if self.verbose: + print( + "success rate: {:.0f}/{:.0f}".format( + ind_succ.float().sum(), corr_classified + ) + + " (on correctly classified points) in {:.1f} s".format( + time.time() - startt + ) + ) + + res_c[pred] = res2 * ind_succ.float() + 1e10 * (1 - ind_succ.float()) + ind_succ = self.check_shape(ind_succ.nonzero().squeeze()) + adv_c[pred[ind_succ]] = adv[ind_succ].clone() + + return adv_c + + def attack_single_run_targeted(self, x, y=None, use_rand_start=False): + """ + :param x: clean images + :param y: clean labels, if None we use the predicted labels + """ + + if self.device is None: + self.device = x.device + self.orig_dim = list(x.shape[1:]) + self.ndims = len(self.orig_dim) + + x = x.detach().clone().float().to(self.device) + # assert next(self.model.parameters()).device == x.device + + y_pred = self._get_predicted_label(x) + if y is None: + y = y_pred.detach().clone().long().to(self.device) + else: + y = y.detach().clone().long().to(self.device) + pred = y_pred == y + corr_classified = pred.float().sum() + if self.verbose: + print("Clean accuracy: {:.2%}".format(pred.float().mean())) + if pred.sum() == 0: + return x + pred = self.check_shape(pred.nonzero().squeeze()) + + output = self.get_logits(x) + if self.multi_targeted: + la_target = output.sort(dim=-1)[1][:, -self.target_class] + else: + la_target = self.target_class + + startt = time.time() + # runs the attack only on correctly classified points + im2 = x[pred].detach().clone() + la2 = y[pred].detach().clone() + la_target2 = la_target[pred].detach().clone() + if len(im2.shape) == self.ndims: + im2 = im2.unsqueeze(0) + bs = im2.shape[0] + u1 = torch.arange(bs) + adv = im2.clone() + adv_c = x.clone() + res2 = 1e10 * torch.ones([bs]).to(self.device) + res_c = torch.zeros([x.shape[0]]).to(self.device) + x1 = im2.clone() + x0 = im2.clone().reshape([bs, -1]) + counter_restarts = 0 + + while counter_restarts < 1: + if use_rand_start: + if self.norm == "Linf": + t = 2 * torch.rand(x1.shape).to(self.device) - 1 + x1 = ( + im2 + + ( + torch.min( + res2, self.eps * torch.ones(res2.shape).to(self.device) + ).reshape([-1, *[1] * self.ndims]) + ) + * t + / ( + t.reshape([t.shape[0], -1]) + .abs() + .max(dim=1, keepdim=True)[0] + .reshape([-1, *[1] * self.ndims]) + ) + * 0.5 + ) + elif self.norm == "L2": + t = torch.randn(x1.shape).to(self.device) + x1 = ( + im2 + + ( + torch.min( + res2, self.eps * torch.ones(res2.shape).to(self.device) + ).reshape([-1, *[1] * self.ndims]) + ) + * t + / ( + (t ** 2) + .view(t.shape[0], -1) + .sum(dim=-1) + .sqrt() + .view(t.shape[0], *[1] * self.ndims) + ) + * 0.5 + ) + elif self.norm == "L1": + t = torch.randn(x1.shape).to(self.device) + x1 = ( + im2 + + ( + torch.min( + res2, self.eps * torch.ones(res2.shape).to(self.device) + ).reshape([-1, *[1] * self.ndims]) + ) + * t + / ( + t.abs() + .view(t.shape[0], -1) + .sum(dim=-1) + .view(t.shape[0], *[1] * self.ndims) + ) + / 2 + ) + + x1 = x1.clamp(0.0, 1.0) + + counter_iter = 0 + while counter_iter < self.steps: + with torch.no_grad(): + df, dg = self.get_diff_logits_grads_batch_targeted( + x1, la2, la_target2 + ) + if self.norm == "Linf": + dist1 = df.abs() / ( + 1e-12 + + dg.abs().view(dg.shape[0], dg.shape[1], -1).sum(dim=-1) + ) + elif self.norm == "L2": + dist1 = df.abs() / ( + 1e-12 + + (dg ** 2) + .view(dg.shape[0], dg.shape[1], -1) + .sum(dim=-1) + .sqrt() + ) + elif self.norm == "L1": + dist1 = df.abs() / ( + 1e-12 + + dg.abs() + .reshape([df.shape[0], df.shape[1], -1]) + .max(dim=2)[0] + ) + else: + raise ValueError("norm not supported") + ind = dist1.min(dim=1)[1] + + dg2 = dg[u1, ind] + b = -df[u1, ind] + (dg2 * x1).view(x1.shape[0], -1).sum(dim=-1) + w = dg2.reshape([bs, -1]) + + if self.norm == "Linf": + d3 = projection_linf( + torch.cat((x1.reshape([bs, -1]), x0), 0), + torch.cat((w, w), 0), + torch.cat((b, b), 0), + ) + elif self.norm == "L2": + d3 = projection_l2( + torch.cat((x1.reshape([bs, -1]), x0), 0), + torch.cat((w, w), 0), + torch.cat((b, b), 0), + ) + elif self.norm == "L1": + d3 = projection_l1( + torch.cat((x1.reshape([bs, -1]), x0), 0), + torch.cat((w, w), 0), + torch.cat((b, b), 0), + ) + d1 = torch.reshape(d3[:bs], x1.shape) + d2 = torch.reshape(d3[-bs:], x1.shape) + if self.norm == "Linf": + a0 = ( + d3.abs() + .max(dim=1, keepdim=True)[0] + .view(-1, *[1] * self.ndims) + ) + elif self.norm == "L2": + a0 = ( + (d3 ** 2) + .sum(dim=1, keepdim=True) + .sqrt() + .view(-1, *[1] * self.ndims) + ) + elif self.norm == "L1": + a0 = ( + d3.abs() + .sum(dim=1, keepdim=True) + .view(-1, *[1] * self.ndims) + ) + a0 = torch.max(a0, 1e-8 * torch.ones(a0.shape).to(self.device)) + a1 = a0[:bs] + a2 = a0[-bs:] + alpha = torch.min( + torch.max( + a1 / (a1 + a2), torch.zeros(a1.shape).to(self.device) + ), + self.alpha_max * torch.ones(a1.shape).to(self.device), + ) + x1 = ( + (x1 + self.eta * d1) * (1 - alpha) + + (im2 + d2 * self.eta) * alpha + ).clamp(0.0, 1.0) + + is_adv = self._get_predicted_label(x1) != la2 + + if is_adv.sum() > 0: + ind_adv = is_adv.nonzero().squeeze() + ind_adv = self.check_shape(ind_adv) + if self.norm == "Linf": + t = ( + (x1[ind_adv] - im2[ind_adv]) + .reshape([ind_adv.shape[0], -1]) + .abs() + .max(dim=1)[0] + ) + elif self.norm == "L2": + t = ( + ((x1[ind_adv] - im2[ind_adv]) ** 2) + .view(ind_adv.shape[0], -1) + .sum(dim=-1) + .sqrt() + ) + elif self.norm == "L1": + t = ( + (x1[ind_adv] - im2[ind_adv]) + .abs() + .view(ind_adv.shape[0], -1) + .sum(dim=-1) + ) + adv[ind_adv] = x1[ind_adv] * ( + t < res2[ind_adv] + ).float().reshape([-1, *[1] * self.ndims]) + adv[ind_adv] * ( + t >= res2[ind_adv] + ).float().reshape( + [-1, *[1] * self.ndims] + ) + res2[ind_adv] = ( + t * (t < res2[ind_adv]).float() + + res2[ind_adv] * (t >= res2[ind_adv]).float() + ) + x1[ind_adv] = ( + im2[ind_adv] + (x1[ind_adv] - im2[ind_adv]) * self.beta + ) + + counter_iter += 1 + + counter_restarts += 1 + + ind_succ = res2 < 1e10 + if self.verbose: + print( + "success rate: {:.0f}/{:.0f}".format( + ind_succ.float().sum(), corr_classified + ) + + " (on correctly classified points) in {:.1f} s".format( + time.time() - startt + ) + ) + + res_c[pred] = res2 * ind_succ.float() + 1e10 * (1 - ind_succ.float()) + ind_succ = self.check_shape(ind_succ.nonzero().squeeze()) + adv_c[pred[ind_succ]] = adv[ind_succ].clone() + + return adv_c + + def perturb(self, x, y): + adv = x.clone() + with torch.no_grad(): + acc = self.get_logits(x).max(1)[1] == y + + startt = time.time() + + torch.random.manual_seed(self.seed) + torch.cuda.random.manual_seed(self.seed) + + def inner_perturb(targeted): + for counter in range(self.n_restarts): + ind_to_fool = acc.nonzero().squeeze() + if len(ind_to_fool.shape) == 0: + ind_to_fool = ind_to_fool.unsqueeze(0) + if ind_to_fool.numel() != 0: + x_to_fool, y_to_fool = ( + x[ind_to_fool].clone(), + y[ind_to_fool].clone(), + ) # nopep8 + + if targeted: + adv_curr = self.attack_single_run_targeted( + x_to_fool, y_to_fool, use_rand_start=(counter > 0) + ) + else: + adv_curr = self.attack_single_run( + x_to_fool, y_to_fool, use_rand_start=(counter > 0) + ) + + acc_curr = self.get_logits(adv_curr).max(1)[1] == y_to_fool + if self.norm == "Linf": + res = ( + (x_to_fool - adv_curr) + .abs() + .view(x_to_fool.shape[0], -1) + .max(1)[0] + ) # nopep8 + elif self.norm == "L2": + res = ( + ((x_to_fool - adv_curr) ** 2) + .view(x_to_fool.shape[0], -1) + .sum(dim=-1) + .sqrt() + ) # nopep8 + acc_curr = torch.max(acc_curr, res > self.eps) + + ind_curr = (acc_curr == 0).nonzero().squeeze() + acc[ind_to_fool[ind_curr]] = 0 + adv[ind_to_fool[ind_curr]] = adv_curr[ind_curr].clone() + + if self.verbose: + if targeted: + print( + "restart {} - target_class {} - robust accuracy: {:.2%} at eps = {:.5f} - cum. time: {:.1f} s".format( + counter, + self.target_class, + acc.float().mean(), + self.eps, + time.time() - startt, + ) + ) + else: + print( + "restart {} - robust accuracy: {:.2%} at eps = {:.5f} - cum. time: {:.1f} s".format( + counter, + acc.float().mean(), + self.eps, + time.time() - startt, + ) + ) + + if self.multi_targeted: + for target_class in range(2, self.n_target_classes + 2): + self.target_class = target_class + inner_perturb(targeted=True) + elif self.targeted: + self.target_class = self.get_target_label(x, y) + inner_perturb(targeted=True) + else: + inner_perturb(targeted=False) + return adv + + +def projection_linf(points_to_project, w_hyperplane, b_hyperplane): + device = points_to_project.device + t, w, b = points_to_project, w_hyperplane.clone(), b_hyperplane.clone() + + sign = 2 * ((w * t).sum(1) - b >= 0) - 1 + w.mul_(sign.unsqueeze(1)) + b.mul_(sign) + + a = (w < 0).float() + d = (a - t) * (w != 0).float() + + p = a - t * (2 * a - 1) + indp = torch.argsort(p, dim=1) + + b = b - (w * t).sum(1) + b0 = (w * d).sum(1) + + indp2 = indp.flip((1,)) + ws = w.gather(1, indp2) + bs2 = -ws * d.gather(1, indp2) + + s = torch.cumsum(ws.abs(), dim=1) + sb = torch.cumsum(bs2, dim=1) + b0.unsqueeze(1) + + b2 = sb[:, -1] - s[:, -1] * p.gather(1, indp[:, 0:1]).squeeze(1) + c_l = b - b2 > 0 + c2 = (b - b0 > 0) & (~c_l) + lb = torch.zeros(c2.sum(), device=device) + ub = torch.full_like(lb, w.shape[1] - 1) + nitermax = math.ceil(math.log2(w.shape[1])) + + indp_, sb_, s_, p_, b_ = indp[c2], sb[c2], s[c2], p[c2], b[c2] + for counter in range(nitermax): + counter4 = torch.floor((lb + ub) / 2) + + counter2 = counter4.long().unsqueeze(1) + indcurr = indp_.gather(1, indp_.size(1) - 1 - counter2) + b2 = ( + sb_.gather(1, counter2) - s_.gather(1, counter2) * p_.gather(1, indcurr) + ).squeeze( + 1 + ) # nopep8 + c = b_ - b2 > 0 + + lb = torch.where(c, counter4, lb) + ub = torch.where(c, ub, counter4) + + lb = lb.long() + + if c_l.any(): + lmbd_opt = torch.clamp_min( + (b[c_l] - sb[c_l, -1]) / (-s[c_l, -1]), min=0 + ).unsqueeze(-1) + d[c_l] = (2 * a[c_l] - 1) * lmbd_opt + + lmbd_opt = torch.clamp_min((b[c2] - sb[c2, lb]) / (-s[c2, lb]), min=0).unsqueeze(-1) + d[c2] = torch.min(lmbd_opt, d[c2]) * a[c2] + torch.max(-lmbd_opt, d[c2]) * ( + 1 - a[c2] + ) + + return d * (w != 0).float() + + +def projection_l2(points_to_project, w_hyperplane, b_hyperplane): + device = points_to_project.device + t, w, b = points_to_project, w_hyperplane.clone(), b_hyperplane + + c = (w * t).sum(1) - b + ind2 = 2 * (c >= 0) - 1 + w.mul_(ind2.unsqueeze(1)) + c.mul_(ind2) + + r = torch.max(t / w, (t - 1) / w).clamp(min=-1e12, max=1e12) + r.masked_fill_(w.abs() < 1e-8, 1e12) + r[r == -1e12] *= -1 + rs, indr = torch.sort(r, dim=1) + rs2 = F.pad(rs[:, 1:], (0, 1)) + rs.masked_fill_(rs == 1e12, 0) + rs2.masked_fill_(rs2 == 1e12, 0) + + w3s = (w ** 2).gather(1, indr) + w5 = w3s.sum(dim=1, keepdim=True) + ws = w5 - torch.cumsum(w3s, dim=1) + d = -(r * w) + d.mul_((w.abs() > 1e-8).float()) + s = torch.cat( + (-w5 * rs[:, 0:1], torch.cumsum((-rs2 + rs) * ws, dim=1) - w5 * rs[:, 0:1]), 1 + ) + + c4 = s[:, 0] + c < 0 + c3 = (d * w).sum(dim=1) + c > 0 + c2 = ~(c4 | c3) + + lb = torch.zeros(c2.sum(), device=device) + ub = torch.full_like(lb, w.shape[1] - 1) + nitermax = math.ceil(math.log2(w.shape[1])) + + s_, c_ = s[c2], c[c2] + for counter in range(nitermax): + counter4 = torch.floor((lb + ub) / 2) + counter2 = counter4.long().unsqueeze(1) + c3 = s_.gather(1, counter2).squeeze(1) + c_ > 0 + lb = torch.where(c3, counter4, lb) + ub = torch.where(c3, ub, counter4) + + lb = lb.long() + + if c4.any(): + alpha = c[c4] / w5[c4].squeeze(-1) + d[c4] = -alpha.unsqueeze(-1) * w[c4] + + if c2.any(): + alpha = (s[c2, lb] + c[c2]) / ws[c2, lb] + rs[c2, lb] + alpha[ws[c2, lb] == 0] = 0 + c5 = (alpha.unsqueeze(-1) > r[c2]).float() + d[c2] = d[c2] * c5 - alpha.unsqueeze(-1) * w[c2] * (1 - c5) + + return d * (w.abs() > 1e-8).float() + + +def projection_l1(points_to_project, w_hyperplane, b_hyperplane): + device = points_to_project.device + t, w, b = points_to_project, w_hyperplane.clone(), b_hyperplane + + c = (w * t).sum(1) - b + ind2 = 2 * (c >= 0) - 1 + w.mul_(ind2.unsqueeze(1)) + c.mul_(ind2) + + r = (1 / w).abs().clamp_max(1e12) + indr = torch.argsort(r, dim=1) + indr_rev = torch.argsort(indr) + + c6 = (w < 0).float() + d = (-t + c6) * (w != 0).float() + ds = torch.min(-w * t, w * (1 - t)).gather(1, indr) + ds2 = torch.cat((c.unsqueeze(-1), ds), 1) + s = torch.cumsum(ds2, dim=1) + + c2 = s[:, -1] < 0 + + lb = torch.zeros(c2.sum(), device=device) + ub = torch.full_like(lb, s.shape[1]) + nitermax = math.ceil(math.log2(w.shape[1])) + + s_ = s[c2] + for counter in range(nitermax): + counter4 = torch.floor((lb + ub) / 2) + counter2 = counter4.long().unsqueeze(1) + c3 = s_.gather(1, counter2).squeeze(1) > 0 + lb = torch.where(c3, counter4, lb) + ub = torch.where(c3, ub, counter4) + + lb2 = lb.long() + + if c2.any(): + indr = indr[c2].gather(1, lb2.unsqueeze(1)).squeeze(1) + u = torch.arange(0, w.shape[0], device=device).unsqueeze(1) + u2 = torch.arange(0, w.shape[1], device=device, dtype=torch.float).unsqueeze(0) + alpha = -s[c2, lb2] / w[c2, indr] + c5 = u2 < lb.unsqueeze(-1) + u3 = c5[u[: c5.shape[0]], indr_rev[c2]] + d[c2] = d[c2] * u3.float() + d[c2, indr] = alpha + + return d * (w.abs() > 1e-8).float() + + +def zero_gradients(x): + if isinstance(x, torch.Tensor): + if x.grad is not None: + x.grad.detach_() + x.grad.zero_() + elif isinstance(x, container_abcs.Iterable): + for elem in x: + zero_gradients(elem) diff --git a/torchattacks/attacks/autoattack.py b/torchattacks/attacks/autoattack.py index 2c72cd3c..28f9da2d 100644 --- a/torchattacks/attacks/autoattack.py +++ b/torchattacks/attacks/autoattack.py @@ -4,7 +4,7 @@ from ..wrappers.multiattack import MultiAttack from .apgd import APGD from .apgdt import APGDT -from .fab import FAB +from .afab import AFAB from .square import Square @@ -76,7 +76,7 @@ def __init__( n_classes=n_classes, n_restarts=1, ), - FAB( + AFAB( model, eps=eps, norm=norm, @@ -120,7 +120,7 @@ def __init__( loss="dlr", n_restarts=5, ), - FAB( + AFAB( model, eps=eps, norm=norm, @@ -147,7 +147,7 @@ def __init__( n_classes=n_classes, n_restarts=1, ), - FAB( + AFAB( model, eps=eps, norm=norm, diff --git a/torchattacks/attacks/cw.py b/torchattacks/attacks/cw.py index 8e33f5fc..c2b98da6 100644 --- a/torchattacks/attacks/cw.py +++ b/torchattacks/attacks/cw.py @@ -18,8 +18,9 @@ class CW(Attack): :math:`minimize \Vert\frac{1}{2}(tanh(w)+1)-x\Vert^2_2+c\cdot f(\frac{1}{2}(tanh(w)+1))` kappa (float): kappa (also written as 'confidence') in the paper. (Default: 0) :math:`f(x')=max(max\{Z(x')_i:i\neq t\} -Z(x')_t, - \kappa)` - steps (int): number of steps. (Default: 50) + steps (int): number of steps (also written as 'max_iterations'). (Default: 50) lr (float): learning rate of the Adam optimizer. (Default: 0.01) + abort_early: if true, allows early aborts if gradient descent gets stuck. (Default: True) .. warning:: With default c, you can't easily get adversarial images. Set higher c like 1. @@ -29,19 +30,20 @@ class CW(Attack): - output: :math:`(N, C, H, W)`. Examples:: - >>> attack = torchattacks.CW(model, c=1, kappa=0, steps=50, lr=0.01) + >>> attack = torchattacks.CWL2(model, c=1, kappa=0, steps=50, lr=0.01, abort_early=True) >>> adv_images = attack(images, labels) - .. note:: Binary search for c is NOT IMPLEMENTED methods in the paper due to time consuming. + .. note:: The binary search version of the CW algorithm has been implemented as CWBS. """ - def __init__(self, model, c=1, kappa=0, steps=50, lr=0.01): + def __init__(self, model, c=1, kappa=0, steps=50, lr=0.01, abort_early=True): super().__init__("CW", model) self.c = c self.kappa = kappa self.steps = steps self.lr = lr + self.abort_early = abort_early self.supported_mode = ["default", "targeted"] def forward(self, images, labels): @@ -53,16 +55,16 @@ def forward(self, images, labels): labels = labels.clone().detach().to(self.device) if self.targeted: - target_labels = self.get_target_label(images, labels) + labels = self.get_target_label(images, labels) # w = torch.zeros_like(images).detach() # Requires 2x times w = self.inverse_tanh_space(images).detach() w.requires_grad = True best_adv_images = images.clone().detach() - best_L2 = 1e10 * torch.ones((len(images))).to(self.device) + batch_size = len(images) + best_Lx = torch.full((batch_size, ), 1e10).to(self.device) prev_cost = 1e10 - dim = len(images.shape) MSELoss = nn.MSELoss(reduction="none") Flatten = nn.Flatten() @@ -74,16 +76,18 @@ def forward(self, images, labels): adv_images = self.tanh_space(w) # Calculate loss - current_L2 = MSELoss(Flatten(adv_images), Flatten(images)).sum(dim=1) - L2_loss = current_L2.sum() + current_Lx = MSELoss(Flatten(adv_images), + Flatten(images)).sum(dim=1) + + Lx_loss = current_Lx.sum() outputs = self.get_logits(adv_images) if self.targeted: - f_loss = self.f(outputs, target_labels).sum() + f_loss = self.f(outputs, labels) else: - f_loss = self.f(outputs, labels).sum() + f_loss = self.f(outputs, labels) - cost = L2_loss + self.c * f_loss + cost = Lx_loss + torch.sum(self.c * f_loss) optimizer.zero_grad() cost.backward() @@ -91,30 +95,34 @@ def forward(self, images, labels): # Update adversarial images pre = torch.argmax(outputs.detach(), 1) - if self.targeted: - # We want to let pre == target_labels in a targeted attack - condition = (pre == target_labels).float() - else: - # If the attack is not targeted we simply make these two values unequal - condition = (pre != labels).float() + condition_1 = self.compare(pre, labels) + condition_2 = (current_Lx < best_Lx) # Filter out images that get either correct predictions or non-decreasing loss, # i.e., only images that are both misclassified and loss-decreasing are left - mask = condition * (best_L2 > current_L2.detach()) - best_L2 = mask * current_L2.detach() + (1 - mask) * best_L2 - - mask = mask.view([-1] + [1] * (dim - 1)) - best_adv_images = mask * adv_images.detach() + (1 - mask) * best_adv_images - - # Early stop when loss does not converge. - # max(.,1) To prevent MODULO BY ZERO error in the next step. - if step % max(self.steps // 10, 1) == 0: - if cost.item() > prev_cost: - return best_adv_images - prev_cost = cost.item() - + mask = torch.logical_and(condition_1, condition_2) + best_Lx[mask] = current_Lx[mask] + best_adv_images[mask] = adv_images[mask] + + # Early stop when loss does not converge + if self.abort_early and step % (self.steps // 10) == 0: + if cost > prev_cost * 0.9999: + break + else: + prev_cost = cost + + # print(best_Lx) return best_adv_images + def compare(self, predition, labels): + if self.targeted: + # We want to let pre == target_labels in a targeted attack + ret = (predition == labels) + else: + # If the attack is not targeted we simply make these two values unequal + ret = (predition != labels) + return ret + def tanh_space(self, x): return 1 / 2 * (torch.tanh(x) + 1) @@ -130,10 +138,10 @@ def atanh(self, x): def f(self, outputs, labels): one_hot_labels = torch.eye(outputs.shape[1]).to(self.device)[labels] - # find the max logit other than the target class - other = torch.max((1 - one_hot_labels) * outputs, dim=1)[0] # get the target class's logit - real = torch.max(one_hot_labels * outputs, dim=1)[0] + real = torch.sum(one_hot_labels * outputs, dim=1) + # find the max logit other than the target class + other = torch.max((1 - one_hot_labels) * outputs - one_hot_labels * 1e12, dim=1)[0] # nopep8 if self.targeted: return torch.clamp((other - real), min=-self.kappa) diff --git a/torchattacks/attacks/cwbs.py b/torchattacks/attacks/cwbs.py new file mode 100644 index 00000000..8e9c27d8 --- /dev/null +++ b/torchattacks/attacks/cwbs.py @@ -0,0 +1,188 @@ +import torch +import torch.nn as nn +import torch.optim as optim + +from ..attack import Attack + + +class CWBS(Attack): + r""" + CW (binary search version) in the paper 'Towards Evaluating the Robustness of Neural Networks' + [https://arxiv.org/abs/1608.04644] + + Distance Measure : L2 + + Arguments: + model (nn.Module): model to attack. + init_c (float): init_c (or c) in the paper. parameter for box-constraint. (Default: 1) + :math:`minimize \Vert\frac{1}{2}(tanh(w)+1)-x\Vert^2_2+c\cdot f(\frac{1}{2}(tanh(w)+1))` + kappa (float): kappa (also written as 'confidence') in the paper. (Default: 0) + :math:`f(x')=max(max\{Z(x')_i:i\neq t\} -Z(x')_t, - \kappa)` + steps (int): number of steps (also written as 'max_iterations'). (Default: 50) + lr (float): learning rate of the Adam optimizer. (Default: 0.01) + binary_search_steps (int): The number of times we perform binary search to find the optimal tradeoff-constant between distance and confidence. (Default: 9) + abort_early: if true, allows early aborts if gradient descent gets stuck. (Default: True) + + Shape: + - images: :math:`(N, C, H, W)` where `N = number of batches`, `C = number of channels`, `H = height` and `W = width`. It must have a range [0, 1]. + - labels: :math:`(N)` where each value :math:`y_i` is :math:`0 \leq y_i \leq` `number of labels`. + - output: :math:`(N, C, H, W)`. + + Examples:: + >>> attack = torchattacks.CWBSL2(model, init_c=1, kappa=0, steps=50, lr=0.01, binary_search_steps=9, abort_early=True) + >>> adv_images = attack(images, labels) + + """ + + def __init__(self, model, init_c=1, kappa=0, steps=50, lr=0.01, binary_search_steps=9, abort_early=True): + super().__init__("CWBS", model) + self.init_c = init_c + self.kappa = kappa + self.steps = steps + self.lr = lr + self.binary_search_steps = binary_search_steps + self.abort_early = abort_early + self.supported_mode = ["default", "targeted"] + + def forward(self, images, labels): + r""" + Overridden. + """ + + images = images.clone().detach().to(self.device) + labels = labels.clone().detach().to(self.device) + + if self.targeted: + labels = self.get_target_label(images, labels) + + # w = torch.zeros_like(images).detach() # Requires 2x times + w = self.inverse_tanh_space(images).detach() + w.requires_grad = True + + o_best_adv_images = images.clone().detach() + + MSELoss = nn.MSELoss(reduction="none") + Flatten = nn.Flatten() + + optimizer = optim.Adam([w], lr=self.lr) + + batch_size = len(images) + lower_bound = torch.zeros((batch_size, )).to(self.device) + const = torch.full((batch_size, ), self.init_c, + dtype=torch.float).to(self.device) + upper_bound = torch.full((batch_size, ), 1e10).to(self.device) + + o_best_score = torch.full( + (batch_size, ), -1, dtype=torch.long).to(self.device) + o_best_Lx = torch.full((batch_size, ), 1e10).to(self.device) + + for _ in range(self.binary_search_steps): + best_score = torch.full( + (batch_size, ), -1, dtype=torch.long).to(self.device) + best_Lx = torch.full((batch_size, ), 1e10).to(self.device) + prev_cost = 1e10 + for step in range(self.steps): + # Get adversarial images + adv_images = self.tanh_space(w) + + # Calculate loss + current_Lx = MSELoss(Flatten(adv_images), + Flatten(images)).sum(dim=1) + + Lx_loss = current_Lx.sum() + + outputs = self.get_logits(adv_images) + if self.targeted: + # f_loss = self.f(outputs, target_labels).sum() + f_loss = self.f(outputs, labels) + else: + # f_loss = self.f(outputs, labels).sum() + f_loss = self.f(outputs, labels) + + cost = Lx_loss + torch.sum(const * f_loss) + + optimizer.zero_grad() + cost.backward() + optimizer.step() + + # Update adversarial images + pre = torch.argmax(outputs.detach(), 1) + condition_1 = self.compare(pre, labels) + condition_2 = (current_Lx < best_Lx) + # Filter out images that get either correct predictions or non-decreasing loss, + # i.e., only images that are both misclassified and loss-decreasing are left + mask_1_2 = torch.logical_and(condition_1, condition_2) + best_Lx[mask_1_2] = current_Lx[mask_1_2] + best_score[mask_1_2] = pre[mask_1_2] + + condition_3 = (current_Lx < o_best_Lx) + o_mask = torch.logical_and(condition_1, condition_3) + o_best_Lx[o_mask] = current_Lx[o_mask] + o_best_score[o_mask] = pre[o_mask] + + o_best_adv_images[o_mask] = adv_images[o_mask] + + # Check if we should abort search if we're getting nowhere. + if self.abort_early and step % (self.steps // 10) == 0: + if cost > prev_cost * 0.9999: + break + else: + prev_cost = cost + + # Adjust the constant as needed + outputs = self.get_logits(adv_images) + pre = torch.argmax(outputs, 1) + + condition_1 = self.compare(pre, labels) + condition_2 = (best_score != -1) + condition_3 = upper_bound < 1e9 + + mask_1_2 = torch.logical_and(condition_1, condition_2) + mask_1_2_3 = torch.logical_and(mask_1_2, condition_3) + const_1 = (lower_bound + upper_bound) / 2.0 + + upper_bound_min = torch.min(upper_bound, const) + upper_bound[mask_1_2] = upper_bound_min[mask_1_2] + const[mask_1_2_3] = const_1[mask_1_2_3] + + mask_n1_n2_3 = torch.logical_and(~mask_1_2, condition_3) + upper_bound_max = torch.max(lower_bound, const) + upper_bound[~mask_1_2] = upper_bound_max[~mask_1_2] + const[mask_n1_n2_3] *= 10 + + # print(o_best_Lx) + return o_best_adv_images + + def compare(self, predition, labels): + if self.targeted: + # We want to let pre == target_labels in a targeted attack + ret = (predition == labels) + else: + # If the attack is not targeted we simply make these two values unequal + ret = (predition != labels) + return ret + + def tanh_space(self, x): + return 1 / 2 * (torch.tanh(x) + 1) + + def inverse_tanh_space(self, x): + # torch.atanh is only for torch >= 1.7.0 + # atanh is defined in the range -1 to 1 + return self.atanh(torch.clamp(x * 2 - 1, min=-1, max=1)) + + def atanh(self, x): + return 0.5 * torch.log((1 + x) / (1 - x)) + + # f-function in the paper + def f(self, outputs, labels): + one_hot_labels = torch.eye(outputs.shape[1]).to(self.device)[labels] + + # get the target class's logit + real = torch.sum(one_hot_labels * outputs, dim=1) + # find the max logit other than the target classs + other = torch.max((1 - one_hot_labels) * outputs - one_hot_labels * 1e12, dim=1)[0] # nopep8 + + if self.targeted: + return torch.clamp((other - real), min=-self.kappa) + else: + return torch.clamp((real - other), min=-self.kappa) diff --git a/torchattacks/attacks/cwbsl0.py b/torchattacks/attacks/cwbsl0.py new file mode 100644 index 00000000..7c1cea31 --- /dev/null +++ b/torchattacks/attacks/cwbsl0.py @@ -0,0 +1,191 @@ +import torch +import torch.nn as nn +import torch.optim as optim + +from ..attack import Attack + + +class CWBSL0(Attack): + r""" + CW (binary search version) in the paper 'Towards Evaluating the Robustness of Neural Networks' + [https://arxiv.org/abs/1608.04644] + + Distance Measure : L0 + + Arguments: + model (nn.Module): model to attack. + init_c (float): init_c (or c) in the paper. parameter for box-constraint. (Default: 1) + :math:`minimize \Vert\frac{1}{2}(tanh(w)+1)-x\Vert^2_2+c\cdot f(\frac{1}{2}(tanh(w)+1))` + kappa (float): kappa (also written as 'confidence') in the paper. (Default: 0) + :math:`f(x')=max(max\{Z(x')_i:i\neq t\} -Z(x')_t, - \kappa)` + steps (int): number of steps (also written as 'max_iterations'). (Default: 50) + lr (float): learning rate of the Adam optimizer. (Default: 0.01) + binary_search_steps (int): The number of times we perform binary search to find the optimal tradeoff-constant between distance and confidence. (Default: 9) + abort_early: if true, allows early aborts if gradient descent gets stuck. (Default: True) + + Shape: + - images: :math:`(N, C, H, W)` where `N = number of batches`, `C = number of channels`, `H = height` and `W = width`. It must have a range [0, 1]. + - labels: :math:`(N)` where each value :math:`y_i` is :math:`0 \leq y_i \leq` `number of labels`. + - output: :math:`(N, C, H, W)`. + + Examples:: + >>> attack = torchattacks.CWBSL0(model, init_c=1, kappa=0, steps=50, lr=0.01, binary_search_steps=9, abort_early=True) + >>> adv_images = attack(images, labels) + + """ + + def __init__(self, model, init_c=1, kappa=0, steps=50, lr=0.01, binary_search_steps=9, abort_early=True): + super().__init__("CWBSL0", model) + self.init_c = init_c + self.kappa = kappa + self.steps = steps + self.lr = lr + self.binary_search_steps = binary_search_steps + self.abort_early = abort_early + self.supported_mode = ["default", "targeted"] + + def forward(self, images, labels): + r""" + Overridden. + """ + + images = images.clone().detach().to(self.device) + labels = labels.clone().detach().to(self.device) + + if self.targeted: + labels = self.get_target_label(images, labels) + + # w = torch.zeros_like(images).detach() # Requires 2x times + w = self.inverse_tanh_space(images).detach() + w.requires_grad = True + + o_best_adv_images = images.clone().detach() + + optimizer = optim.Adam([w], lr=self.lr) + + batch_size = len(images) + lower_bound = torch.zeros((batch_size, )).to(self.device) + const = torch.full((batch_size, ), self.init_c, + dtype=torch.float).to(self.device) + upper_bound = torch.full((batch_size, ), 1e10).to(self.device) + + o_best_score = torch.full( + (batch_size, ), -1, dtype=torch.long).to(self.device) + o_best_Lx = torch.full((batch_size, ), 1e10).to(self.device) + + threshold = 1e-6 + + for _ in range(self.binary_search_steps): + best_score = torch.full( + (batch_size, ), -1, dtype=torch.long).to(self.device) + best_Lx = torch.full((batch_size, ), 1e10).to(self.device) + prev_cost = 1e10 + for step in range(self.steps): + # Get adversarial images + adv_images = self.tanh_space(w) + + # Calculate loss + l0_abs = torch.abs(adv_images.reshape(-1) - images.reshape(-1)) + l0_norm = (l0_abs > threshold) + # Number of non-zero values + l0_loss = (1.0 / l0_abs.shape[0]) * torch.sum(l0_norm).item() + current_Lx = torch.full( + (batch_size, ), l0_loss).to(self.device) + + Lx_loss = current_Lx.sum() + + outputs = self.get_logits(adv_images) + if self.targeted: + # f_loss = self.f(outputs, target_labels).sum() + f_loss = self.f(outputs, labels) + else: + # f_loss = self.f(outputs, labels).sum() + f_loss = self.f(outputs, labels) + + cost = Lx_loss + torch.sum(const * f_loss) + + optimizer.zero_grad() + cost.backward() + optimizer.step() + + # Update adversarial images + pre = torch.argmax(outputs.detach(), 1) + condition_1 = self.compare(pre, labels) + condition_2 = (current_Lx < best_Lx) + # Filter out images that get either correct predictions or non-decreasing loss, + # i.e., only images that are both misclassified and loss-decreasing are left + mask_1_2 = torch.logical_and(condition_1, condition_2) + best_Lx[mask_1_2] = current_Lx[mask_1_2] + best_score[mask_1_2] = pre[mask_1_2] + + condition_3 = (current_Lx < o_best_Lx) + o_mask = torch.logical_and(condition_1, condition_3) + o_best_Lx[o_mask] = current_Lx[o_mask] + o_best_score[o_mask] = pre[o_mask] + + o_best_adv_images[o_mask] = adv_images[o_mask] + + # Check if we should abort search if we're getting nowhere. + if self.abort_early and step % (self.steps // 10) == 0: + if cost > prev_cost * 0.9999: + break + else: + prev_cost = cost + + # Adjust the constant as needed + outputs = self.get_logits(adv_images) + pre = torch.argmax(outputs, 1) + + condition_1 = self.compare(pre, labels) + condition_2 = (best_score != -1) + condition_3 = upper_bound < 1e9 + + mask_1_2 = torch.logical_and(condition_1, condition_2) + mask_1_2_3 = torch.logical_and(mask_1_2, condition_3) + const_1 = (lower_bound + upper_bound) / 2.0 + + upper_bound_min = torch.min(upper_bound, const) + upper_bound[mask_1_2] = upper_bound_min[mask_1_2] + const[mask_1_2_3] = const_1[mask_1_2_3] + + mask_n1_n2_3 = torch.logical_and(~mask_1_2, condition_3) + upper_bound_max = torch.max(lower_bound, const) + upper_bound[~mask_1_2] = upper_bound_max[~mask_1_2] + const[mask_n1_n2_3] *= 10 + + # print(o_best_Lx) + return o_best_adv_images + + def compare(self, predition, labels): + if self.targeted: + # We want to let pre == target_labels in a targeted attack + ret = (predition == labels) + else: + # If the attack is not targeted we simply make these two values unequal + ret = (predition != labels) + return ret + + def tanh_space(self, x): + return 1 / 2 * (torch.tanh(x) + 1) + + def inverse_tanh_space(self, x): + # torch.atanh is only for torch >= 1.7.0 + # atanh is defined in the range -1 to 1 + return self.atanh(torch.clamp(x * 2 - 1, min=-1, max=1)) + + def atanh(self, x): + return 0.5 * torch.log((1 + x) / (1 - x)) + + # f-function in the paper + def f(self, outputs, labels): + one_hot_labels = torch.eye(outputs.shape[1]).to(self.device)[labels] + + # get the target class's logit + real = torch.sum(one_hot_labels * outputs, dim=1) + # find the max logit other than the target classs + other = torch.max((1 - one_hot_labels) * outputs - one_hot_labels * 1e12, dim=1)[0] # nopep8 + + if self.targeted: + return torch.clamp((other - real), min=-self.kappa) + else: + return torch.clamp((real - other), min=-self.kappa) diff --git a/torchattacks/attacks/cwbslinf.py b/torchattacks/attacks/cwbslinf.py new file mode 100644 index 00000000..a042d535 --- /dev/null +++ b/torchattacks/attacks/cwbslinf.py @@ -0,0 +1,187 @@ +import torch +import torch.nn as nn +import torch.optim as optim + +from ..attack import Attack + + +class CWBSLinf(Attack): + r""" + CW (binary search version) in the paper 'Towards Evaluating the Robustness of Neural Networks' + [https://arxiv.org/abs/1608.04644] + + Distance Measure : Linf + + Arguments: + model (nn.Module): model to attack. + init_c (float): init_c (or c) in the paper. parameter for box-constraint. (Default: 1) + :math:`minimize \Vert\frac{1}{2}(tanh(w)+1)-x\Vert^2_2+c\cdot f(\frac{1}{2}(tanh(w)+1))` + kappa (float): kappa (also written as 'confidence') in the paper. (Default: 0) + :math:`f(x')=max(max\{Z(x')_i:i\neq t\} -Z(x')_t, - \kappa)` + steps (int): number of steps (also written as 'max_iterations'). (Default: 50) + lr (float): learning rate of the Adam optimizer. (Default: 0.01) + binary_search_steps (int): The number of times we perform binary search to find the optimal tradeoff-constant between distance and confidence. (Default: 9) + abort_early: if true, allows early aborts if gradient descent gets stuck. (Default: True) + + Shape: + - images: :math:`(N, C, H, W)` where `N = number of batches`, `C = number of channels`, `H = height` and `W = width`. It must have a range [0, 1]. + - labels: :math:`(N)` where each value :math:`y_i` is :math:`0 \leq y_i \leq` `number of labels`. + - output: :math:`(N, C, H, W)`. + + Examples:: + >>> attack = torchattacks.CWBSLinf(model, init_c=1, kappa=0, steps=50, lr=0.01, binary_search_steps=9, abort_early=True) + >>> adv_images = attack(images, labels) + + """ + + def __init__(self, model, init_c=1, kappa=0, steps=50, lr=0.01, binary_search_steps=9, abort_early=True): + super().__init__("CWBSLinf", model) + self.init_c = init_c + self.kappa = kappa + self.steps = steps + self.lr = lr + self.binary_search_steps = binary_search_steps + self.abort_early = abort_early + self.supported_mode = ["default", "targeted"] + + def forward(self, images, labels): + r""" + Overridden. + """ + + images = images.clone().detach().to(self.device) + labels = labels.clone().detach().to(self.device) + + if self.targeted: + labels = self.get_target_label(images, labels) + + # w = torch.zeros_like(images).detach() # Requires 2x times + w = self.inverse_tanh_space(images).detach() + w.requires_grad = True + + o_best_adv_images = images.clone().detach() + + optimizer = optim.Adam([w], lr=self.lr) + + batch_size = len(images) + lower_bound = torch.zeros((batch_size, )).to(self.device) + const = torch.full((batch_size, ), self.init_c, + dtype=torch.float).to(self.device) + upper_bound = torch.full((batch_size, ), 1e10).to(self.device) + + o_best_score = torch.full( + (batch_size, ), -1, dtype=torch.long).to(self.device) + o_best_Lx = torch.full((batch_size, ), 1e10).to(self.device) + + for _ in range(self.binary_search_steps): + best_score = torch.full( + (batch_size, ), -1, dtype=torch.long).to(self.device) + best_Lx = torch.full((batch_size, ), 1e10).to(self.device) + prev_cost = 1e10 + for step in range(self.steps): + # Get adversarial images + adv_images = self.tanh_space(w) + + # Calculate loss + linf_norm = torch.max(torch.abs(adv_images - images)) + linf_loss = (1.0 / batch_size) * linf_norm.item() + current_Lx = torch.full( + (batch_size, ), linf_loss).to(self.device) + + Lx_loss = current_Lx.sum() + + outputs = self.get_logits(adv_images) + if self.targeted: + # f_loss = self.f(outputs, target_labels).sum() + f_loss = self.f(outputs, labels) + else: + # f_loss = self.f(outputs, labels).sum() + f_loss = self.f(outputs, labels) + + cost = Lx_loss + torch.sum(const * f_loss) + + optimizer.zero_grad() + cost.backward() + optimizer.step() + + # Update adversarial images + pre = torch.argmax(outputs.detach(), 1) + condition_1 = self.compare(pre, labels) + condition_2 = (current_Lx < best_Lx) + # Filter out images that get either correct predictions or non-decreasing loss, + # i.e., only images that are both misclassified and loss-decreasing are left + mask_1_2 = torch.logical_and(condition_1, condition_2) + best_Lx[mask_1_2] = current_Lx[mask_1_2] + best_score[mask_1_2] = pre[mask_1_2] + + condition_3 = (current_Lx < o_best_Lx) + o_mask = torch.logical_and(condition_1, condition_3) + o_best_Lx[o_mask] = current_Lx[o_mask] + o_best_score[o_mask] = pre[o_mask] + + o_best_adv_images[o_mask] = adv_images[o_mask] + + # Check if we should abort search if we're getting nowhere. + if self.abort_early and step % (self.steps // 10) == 0: + if cost > prev_cost * 0.9999: + break + else: + prev_cost = cost + + # Adjust the constant as needed + outputs = self.get_logits(adv_images) + pre = torch.argmax(outputs, 1) + + condition_1 = self.compare(pre, labels) + condition_2 = (best_score != -1) + condition_3 = upper_bound < 1e9 + + mask_1_2 = torch.logical_and(condition_1, condition_2) + mask_1_2_3 = torch.logical_and(mask_1_2, condition_3) + const_1 = (lower_bound + upper_bound) / 2.0 + + upper_bound_min = torch.min(upper_bound, const) + upper_bound[mask_1_2] = upper_bound_min[mask_1_2] + const[mask_1_2_3] = const_1[mask_1_2_3] + + mask_n1_n2_3 = torch.logical_and(~mask_1_2, condition_3) + upper_bound_max = torch.max(lower_bound, const) + upper_bound[~mask_1_2] = upper_bound_max[~mask_1_2] + const[mask_n1_n2_3] *= 10 + + # print(o_best_Lx) + return o_best_adv_images + + def compare(self, predition, labels): + if self.targeted: + # We want to let pre == target_labels in a targeted attack + ret = (predition == labels) + else: + # If the attack is not targeted we simply make these two values unequal + ret = (predition != labels) + return ret + + def tanh_space(self, x): + return 1 / 2 * (torch.tanh(x) + 1) + + def inverse_tanh_space(self, x): + # torch.atanh is only for torch >= 1.7.0 + # atanh is defined in the range -1 to 1 + return self.atanh(torch.clamp(x * 2 - 1, min=-1, max=1)) + + def atanh(self, x): + return 0.5 * torch.log((1 + x) / (1 - x)) + + # f-function in the paper + def f(self, outputs, labels): + one_hot_labels = torch.eye(outputs.shape[1]).to(self.device)[labels] + + # get the target class's logit + real = torch.sum(one_hot_labels * outputs, dim=1) + # find the max logit other than the target classs + other = torch.max((1 - one_hot_labels) * outputs - one_hot_labels * 1e12, dim=1)[0] # nopep8 + + if self.targeted: + return torch.clamp((other - real), min=-self.kappa) + else: + return torch.clamp((real - other), min=-self.kappa) diff --git a/torchattacks/attacks/cwl0.py b/torchattacks/attacks/cwl0.py new file mode 100644 index 00000000..b031baf4 --- /dev/null +++ b/torchattacks/attacks/cwl0.py @@ -0,0 +1,150 @@ +import torch +import torch.nn as nn +import torch.optim as optim + +from ..attack import Attack + + +class CWL0(Attack): + r""" + CW in the paper 'Towards Evaluating the Robustness of Neural Networks' + [https://arxiv.org/abs/1608.04644] + + Distance Measure : L0 + + Arguments: + model (nn.Module): model to attack. + c (float): c in the paper. parameter for box-constraint. (Default: 1) + :math:`minimize \Vert\frac{1}{2}(tanh(w)+1)-x\Vert^2_2+c\cdot f(\frac{1}{2}(tanh(w)+1))` + kappa (float): kappa (also written as 'confidence') in the paper. (Default: 0) + :math:`f(x')=max(max\{Z(x')_i:i\neq t\} -Z(x')_t, - \kappa)` + steps (int): number of steps (also written as 'max_iterations'). (Default: 50) + lr (float): learning rate of the Adam optimizer. (Default: 0.01) + abort_early: if true, allows early aborts if gradient descent gets stuck. (Default: True) + + .. warning:: With default c, you can't easily get adversarial images. Set higher c like 1. + + Shape: + - images: :math:`(N, C, H, W)` where `N = number of batches`, `C = number of channels`, `H = height` and `W = width`. It must have a range [0, 1]. + - labels: :math:`(N)` where each value :math:`y_i` is :math:`0 \leq y_i \leq` `number of labels`. + - output: :math:`(N, C, H, W)`. + + Examples:: + >>> attack = torchattacks.CWL0(model, c=1, kappa=0, steps=50, lr=0.01, abort_early=True) + >>> adv_images = attack(images, labels) + + .. note:: The binary search version of the CW algorithm has been implemented as CWBS. + + """ + + def __init__(self, model, c=1, kappa=0, steps=50, lr=0.01, abort_early=True): + super().__init__("CWL0", model) + self.c = c + self.kappa = kappa + self.steps = steps + self.lr = lr + self.abort_early = abort_early + self.supported_mode = ["default", "targeted"] + + def forward(self, images, labels): + r""" + Overridden. + """ + + images = images.clone().detach().to(self.device) + labels = labels.clone().detach().to(self.device) + + if self.targeted: + labels = self.get_target_label(images, labels) + + # w = torch.zeros_like(images).detach() # Requires 2x times + w = self.inverse_tanh_space(images).detach() + w.requires_grad = True + + best_adv_images = images.clone().detach() + batch_size = len(images) + best_Lx = torch.full((batch_size, ), 1e10).to(self.device) + prev_cost = 1e10 + threshold = 1e-6 + + optimizer = optim.Adam([w], lr=self.lr) + + for step in range(self.steps): + # Get adversarial images + adv_images = self.tanh_space(w) + + # Calculate loss + l0_abs = torch.abs(adv_images.reshape(-1) - images.reshape(-1)) + l0_norm = (l0_abs > threshold) + # Number of non-zero values + l0_loss = (1.0 / l0_abs.shape[0]) * torch.sum(l0_norm).item() + current_Lx = torch.full((batch_size, ), l0_loss).to(self.device) + + Lx_loss = current_Lx.sum() + + outputs = self.get_logits(adv_images) + if self.targeted: + f_loss = self.f(outputs, labels) + else: + f_loss = self.f(outputs, labels) + + cost = Lx_loss + torch.sum(self.c * f_loss) + + optimizer.zero_grad() + cost.backward() + optimizer.step() + + # Update adversarial images + pre = torch.argmax(outputs.detach(), 1) + condition_1 = self.compare(pre, labels) + condition_2 = (current_Lx < best_Lx) + + # Filter out images that get either correct predictions or non-decreasing loss, + # i.e., only images that are both misclassified and loss-decreasing are left + mask = torch.logical_and(condition_1, condition_2) + best_Lx[mask] = current_Lx[mask] + best_adv_images[mask] = adv_images[mask] + + # Early stop when loss does not converge + if self.abort_early and step % (self.steps // 10) == 0: + if cost > prev_cost * 0.9999: + break + else: + prev_cost = cost + + # print(best_Lx) + return best_adv_images + + def compare(self, predition, labels): + if self.targeted: + # We want to let pre == target_labels in a targeted attack + ret = (predition == labels) + else: + # If the attack is not targeted we simply make these two values unequal + ret = (predition != labels) + return ret + + def tanh_space(self, x): + return 1 / 2 * (torch.tanh(x) + 1) + + def inverse_tanh_space(self, x): + # torch.atanh is only for torch >= 1.7.0 + # atanh is defined in the range -1 to 1 + return self.atanh(torch.clamp(x * 2 - 1, min=-1, max=1)) + + def atanh(self, x): + return 0.5 * torch.log((1 + x) / (1 - x)) + + # f-function in the paper + def f(self, outputs, labels): + one_hot_labels = torch.eye(outputs.shape[1]).to(self.device)[labels] + + # get the target class's logit + real = torch.sum(one_hot_labels * outputs, dim=1) + # find the max logit other than the target class + other = torch.max((1 - one_hot_labels) * outputs - one_hot_labels * 1e12, dim=1)[0] # nopep8 + + if self.targeted: + return torch.clamp((other - real), min=-self.kappa) + else: + return torch.clamp((real - other), min=-self.kappa) diff --git a/torchattacks/attacks/cwlinf.py b/torchattacks/attacks/cwlinf.py new file mode 100644 index 00000000..51d84177 --- /dev/null +++ b/torchattacks/attacks/cwlinf.py @@ -0,0 +1,147 @@ +import torch +import torch.nn as nn +import torch.optim as optim + +from ..attack import Attack + + +class CWLinf(Attack): + r""" + CW in the paper 'Towards Evaluating the Robustness of Neural Networks' + [https://arxiv.org/abs/1608.04644] + + Distance Measure : Linf + + Arguments: + model (nn.Module): model to attack. + c (float): c in the paper. parameter for box-constraint. (Default: 1) + :math:`minimize \Vert\frac{1}{2}(tanh(w)+1)-x\Vert^2_2+c\cdot f(\frac{1}{2}(tanh(w)+1))` + kappa (float): kappa (also written as 'confidence') in the paper. (Default: 0) + :math:`f(x')=max(max\{Z(x')_i:i\neq t\} -Z(x')_t, - \kappa)` + steps (int): number of steps (also written as 'max_iterations'). (Default: 50) + lr (float): learning rate of the Adam optimizer. (Default: 0.01) + abort_early: if true, allows early aborts if gradient descent gets stuck. (Default: True) + + .. warning:: With default c, you can't easily get adversarial images. Set higher c like 1. + + Shape: + - images: :math:`(N, C, H, W)` where `N = number of batches`, `C = number of channels`, `H = height` and `W = width`. It must have a range [0, 1]. + - labels: :math:`(N)` where each value :math:`y_i` is :math:`0 \leq y_i \leq` `number of labels`. + - output: :math:`(N, C, H, W)`. + + Examples:: + >>> attack = torchattacks.CWLinf(model, c=1, kappa=0, steps=50, lr=0.01, abort_early=True) + >>> adv_images = attack(images, labels) + + .. note:: The binary search version of the CW algorithm has been implemented as CWBS. + + """ + + def __init__(self, model, c=1, kappa=0, steps=50, lr=0.01, abort_early=True): + super().__init__("CWLinf", model) + self.c = c + self.kappa = kappa + self.steps = steps + self.lr = lr + self.abort_early = abort_early + self.supported_mode = ["default", "targeted"] + + def forward(self, images, labels): + r""" + Overridden. + """ + + images = images.clone().detach().to(self.device) + labels = labels.clone().detach().to(self.device) + + if self.targeted: + labels = self.get_target_label(images, labels) + + # w = torch.zeros_like(images).detach() # Requires 2x times + w = self.inverse_tanh_space(images).detach() + w.requires_grad = True + + best_adv_images = images.clone().detach() + batch_size = len(images) + best_Lx = torch.full((batch_size, ), 1e10).to(self.device) + prev_cost = 1e10 + + optimizer = optim.Adam([w], lr=self.lr) + + for step in range(self.steps): + # Get adversarial images + adv_images = self.tanh_space(w) + + # Calculate loss + linf_norm = torch.max(torch.abs(adv_images - images)) + linf_loss = (1.0 / batch_size) * linf_norm.item() + current_Lx = torch.full((batch_size, ), linf_loss).to(self.device) + + Lx_loss = current_Lx.sum() + + outputs = self.get_logits(adv_images) + if self.targeted: + f_loss = self.f(outputs, labels) + else: + f_loss = self.f(outputs, labels) + + cost = Lx_loss + torch.sum(self.c * f_loss) + + optimizer.zero_grad() + cost.backward() + optimizer.step() + + # Update adversarial images + pre = torch.argmax(outputs.detach(), 1) + condition_1 = self.compare(pre, labels) + condition_2 = (current_Lx < best_Lx) + + # Filter out images that get either correct predictions or non-decreasing loss, + # i.e., only images that are both misclassified and loss-decreasing are left + mask = torch.logical_and(condition_1, condition_2) + best_Lx[mask] = current_Lx[mask] + best_adv_images[mask] = adv_images[mask] + + # Early stop when loss does not converge + if self.abort_early and step % (self.steps // 10) == 0: + if cost > prev_cost * 0.9999: + break + else: + prev_cost = cost + + # print(best_Lx) + return best_adv_images + + def compare(self, predition, labels): + if self.targeted: + # We want to let pre == target_labels in a targeted attack + ret = (predition == labels) + else: + # If the attack is not targeted we simply make these two values unequal + ret = (predition != labels) + return ret + + def tanh_space(self, x): + return 1 / 2 * (torch.tanh(x) + 1) + + def inverse_tanh_space(self, x): + # torch.atanh is only for torch >= 1.7.0 + # atanh is defined in the range -1 to 1 + return self.atanh(torch.clamp(x * 2 - 1, min=-1, max=1)) + + def atanh(self, x): + return 0.5 * torch.log((1 + x) / (1 - x)) + + # f-function in the paper + def f(self, outputs, labels): + one_hot_labels = torch.eye(outputs.shape[1]).to(self.device)[labels] + + # get the target class's logit + real = torch.sum(one_hot_labels * outputs, dim=1) + # find the max logit other than the target class + other = torch.max((1 - one_hot_labels) * outputs - one_hot_labels * 1e12, dim=1)[0] # nopep8 + + if self.targeted: + return torch.clamp((other - real), min=-self.kappa) + else: + return torch.clamp((real - other), min=-self.kappa) diff --git a/torchattacks/attacks/eaden.py b/torchattacks/attacks/eaden.py index 3deb51af..4ef70ae2 100644 --- a/torchattacks/attacks/eaden.py +++ b/torchattacks/attacks/eaden.py @@ -13,13 +13,13 @@ class EADEN(Attack): Arguments: model (nn.Module): model to attack. + init_c(float): the initial constant c to pick as a first guess. (Default: 1) kappa (float): how strong the adversarial example should be (also written as 'confidence'). (Default: 0) + beta (float): hyperparameter trading off L2 minimization for L1 minimization. (Default: 0.001) + steps (int): number of iterations to perform gradient descent. (Default: 10) lr (float): larger values converge faster to less accurate results. (Default: 0.01) binary_search_steps (int): number of times to adjust the constant with binary search. (Default: 9) - max_iterations (int): number of iterations to perform gradient descent. (Default: 100) abort_early (bool): if we stop improving, abort gradient descent early. (Default: True) - initial_const (float): the initial constant c to pick as a first guess. (Default: 0.001) - beta (float): hyperparameter trading off L2 minimization for L1 minimization. (Default: 0.001) Shape: - images: :math:`(N, C, H, W)` where `N = number of batches`, `C = number of channels`, `H = height` and `W = width`. It must have a range [0, 1]. @@ -27,7 +27,7 @@ class EADEN(Attack): - output: :math:`(N, C, H, W)`. Examples:: - >>> attack = torchattacks.EADEN(model, kappa=0, lr=0.01, max_iterations=100) + >>> attack = torchattacks.EADEN(model, init_c=1, kappa=0, steps=10, lr=0.01) >>> adv_images = attack(images, labels) """ @@ -35,22 +35,22 @@ class EADEN(Attack): def __init__( self, model, + init_c=1, kappa=0, + beta=0.001, + steps=10, lr=0.01, binary_search_steps=9, - max_iterations=100, abort_early=True, - initial_const=0.001, - beta=0.001, ): super().__init__("EADEN", model) + self.init_c = init_c self.kappa = kappa + self.beta = beta + self.steps = steps self.lr = lr self.binary_search_steps = binary_search_steps - self.max_iterations = max_iterations self.abort_early = abort_early - self.initial_const = initial_const - self.beta = beta # The last iteration (if we run many steps) repeat the search once. self.repeat = binary_search_steps >= 10 self.supported_mode = ["default", "targeted"] @@ -69,120 +69,137 @@ def forward(self, images, labels): outputs = self.get_logits(images) batch_size = images.shape[0] - lower_bound = torch.zeros(batch_size, device=self.device) - const = torch.ones(batch_size, device=self.device) * self.initial_const - upper_bound = torch.ones(batch_size, device=self.device) * 1e10 + lower_bound = torch.zeros((batch_size, )).to(self.device) + const = torch.ones(batch_size).to(self.device) * self.init_c + upper_bound = torch.ones(batch_size).to(self.device) * 1e10 - final_adv_images = images.clone() - y_one_hot = torch.eye(outputs.shape[1]).to(self.device)[labels] - - o_bestl1 = [1e10] * batch_size - o_bestscore = [-1] * batch_size - o_bestl1 = torch.Tensor(o_bestl1).to(self.device) - o_bestscore = torch.Tensor(o_bestscore).to(self.device) + o_best_adv_images = images.clone() + o_best_score = torch.full( + (batch_size, ), -1, dtype=torch.long).to(self.device) + o_best_EN = torch.full((batch_size, ), 1e10).to(self.device) # Initialization: x^{(0)} = y^{(0)} = x_0 in paper Algorithm 1 part x_k = images.clone().detach() y_k = nn.Parameter(images) # Start binary search for outer_step in range(self.binary_search_steps): - self.global_step = 0 - - bestl1 = [1e10] * batch_size - bestscore = [-1] * batch_size - - bestl1 = torch.Tensor(bestl1).to(self.device) - bestscore = torch.Tensor(bestscore).to(self.device) - prevloss = 1e6 + best_score = torch.full( + (batch_size, ), -1, dtype=torch.long).to(self.device) + best_EN = torch.full((batch_size, ), 1e10).to(self.device) if self.repeat and outer_step == (self.binary_search_steps - 1): const = upper_bound lr = self.lr - for iteration in range(self.max_iterations): + prev_cost = 1e6 + for step in range(self.steps): # reset gradient if y_k.grad is not None: y_k.grad.detach_() y_k.grad.zero_() # Loss over images_parameters with only L2 same as CW - # we don't update L1 loss with SGD because we use ISTA - output = self.get_logits(y_k) + # We don't update L1 loss with SGD because we use ISTA + outputs = self.get_logits(y_k) L2_loss = self.L2_loss(y_k, images) - cost = self.EAD_loss(output, y_one_hot, None, L2_loss, const) - # cost.backward(retain_graph=True) + cost = self.EAD_loss(outputs, labels, None, L2_loss, const) cost.backward() # Gradient step - # y_k.data.add_(-lr, y_k.grad.data) self.global_step += 1 with torch.no_grad(): y_k -= y_k.grad * lr # Ploynomial decay of learning rate - lr = ( - self.lr * (1 - self.global_step / self.max_iterations) ** 0.5 - ) # nopep8 + lr = self.lr * (1 - self.global_step / self.steps) ** 0.5 x_k, y_k = self.FISTA(images, x_k, y_k) # Loss ElasticNet or L1 over x_k with torch.no_grad(): - output = self.get_logits(x_k) + outputs = self.get_logits(x_k) L2_loss = self.L2_loss(x_k, images) L1_loss = self.L1_loss(x_k, images) - loss = self.EAD_loss( - output, y_one_hot, L1_loss, L2_loss, const - ) # nopep8 + cost = self.EAD_loss( + outputs, labels, L1_loss, L2_loss, const) + + # EN attack key step! + current_Lx = L2_loss + (self.beta * L1_loss) + + # Update adversarial images + pre = torch.argmax(outputs.detach(), 1) + condition_1 = self.compare(pre, labels) + condition_2 = (current_Lx < best_EN) + # Filter out images that get either correct predictions or non-decreasing loss, + # i.e., only images that are both misclassified and loss-decreasing are left + mask_1_2 = torch.logical_and(condition_1, condition_2) + best_EN[mask_1_2] = current_Lx[mask_1_2] + best_score[mask_1_2] = pre[mask_1_2] + + condition_3 = (current_Lx < o_best_EN) + o_mask = torch.logical_and(condition_1, condition_3) + o_best_EN[o_mask] = current_Lx[o_mask] + o_best_score[o_mask] = pre[o_mask] + + o_best_adv_images[o_mask] = x_k[o_mask] # print('loss: {}, prevloss: {}'.format(loss, prevloss)) - if ( - self.abort_early - and iteration % (self.max_iterations // 10) == 0 - ): - if loss > prevloss * 0.999999: + if self.abort_early and step % (self.steps // 10) == 0: + if cost > prev_cost * 0.9999: break - prevloss = loss + prev_cost = cost - # EN attack key step! - cost = L2_loss + (L1_loss * self.beta) - self.adjust_best_result( - x_k, - labels, - output, - cost, - bestl1, - bestscore, - o_bestl1, - o_bestscore, - final_adv_images, - ) - - self.adjust_constant(labels, bestscore, const, upper_bound, lower_bound) - - return final_adv_images + # Adjust the constant as needed + outputs = self.get_logits(x_k) + pre = torch.argmax(outputs, 1) + + condition_1 = self.compare(pre, labels) + condition_2 = (best_score != -1) + condition_3 = upper_bound < 1e9 + + mask_1_2 = torch.logical_and(condition_1, condition_2) + mask_1_2_3 = torch.logical_and(mask_1_2, condition_3) + const_1 = (lower_bound + upper_bound) / 2.0 + + upper_bound_min = torch.min(upper_bound, const) + upper_bound[mask_1_2] = upper_bound_min[mask_1_2] + const[mask_1_2_3] = const_1[mask_1_2_3] + + mask_n1_n2_3 = torch.logical_and(~mask_1_2, condition_3) + upper_bound_max = torch.max(lower_bound, const) + upper_bound[~mask_1_2] = upper_bound_max[~mask_1_2] + const[mask_n1_n2_3] *= 10 + + return o_best_adv_images + + def compare(self, predition, labels): + if self.targeted: + # We want to let pre == target_labels in a targeted attack + ret = (predition == labels) + else: + # If the attack is not targeted we simply make these two values unequal + ret = (predition != labels) + return ret def L1_loss(self, x1, x2): Flatten = nn.Flatten() L1_loss = torch.abs(Flatten(x1) - Flatten(x2)).sum(dim=1) - # L1_loss = L1.sum() return L1_loss def L2_loss(self, x1, x2): MSELoss = nn.MSELoss(reduction="none") Flatten = nn.Flatten() L2_loss = MSELoss(Flatten(x1), Flatten(x2)).sum(dim=1) - # L2_loss = L2.sum() return L2_loss - def EAD_loss(self, output, one_hot_labels, L1_loss, L2_loss, const): + def EAD_loss(self, outputs, labels, L1_loss, L2_loss, const): + one_hot_labels = torch.eye(outputs.shape[1]).to(self.device)[labels] - # Not same as CW's f function - other = torch.max( - (1 - one_hot_labels) * output - (one_hot_labels * 1e4), dim=1 - )[0] - real = torch.max(one_hot_labels * output, dim=1)[0] + # get the target class's logit + real = torch.sum(one_hot_labels * outputs, dim=1) + # find the max logit other than the target classs + other = torch.max((1 - one_hot_labels) * outputs - (one_hot_labels * 1e12), dim=1)[0] # nopep8 if self.targeted: F_loss = torch.clamp((other - real), min=-self.kappa) @@ -192,11 +209,7 @@ def EAD_loss(self, output, one_hot_labels, L1_loss, L2_loss, const): if isinstance(L1_loss, type(None)): loss = torch.sum(const * F_loss) + torch.sum(L2_loss) else: - loss = ( - torch.sum(const * F_loss) - + torch.sum(L2_loss) - + torch.sum(self.beta * L1_loss) - ) + loss = torch.sum(const * F_loss) + torch.sum(L2_loss) + torch.sum(self.beta * L1_loss) # nopep8 return loss @@ -208,59 +221,10 @@ def FISTA(self, images, x_k, y_k): lower = torch.clamp(y_k + self.beta, min=0) diff = y_k - images - cond1 = (diff > self.beta).float() - cond2 = (torch.abs(diff) <= self.beta).float() - cond3 = (diff < -self.beta).float() + c1 = diff > self.beta + c2 = torch.abs(diff) <= self.beta + c3 = diff < -self.beta - new_x_k = (cond1 * upper) + (cond2 * images) + (cond3 * lower) + new_x_k = (c1.float() * upper) + (c2.float() * images) + (c3.float() * lower) # nopep8 y_k.data = new_x_k + (zt * (new_x_k - x_k)) return new_x_k, y_k - - def compare(self, output, labels): - if len(output.shape) >= 2: - # output is tensor - output = output.clone().detach() - if self.targeted: - output[:, labels] -= self.kappa - else: - output[:, labels] += self.kappa - output = torch.argmax(output, 1) - else: - # output is int or float - pass - - if self.targeted: - return output == labels - else: - return output != labels - - def adjust_best_result( - self, - adv_img, - labels, - output, - cost, - bestl1, - bestscore, - o_bestl1, - o_bestscore, - final_adv_images, - ): - output_label = torch.argmax(output, 1).float() - mask = (cost < bestl1) & self.compare(output, labels) - bestl1[mask] = cost[mask] - bestscore[mask] = output_label[mask] - - mask = (cost < o_bestl1) & self.compare(output, labels) - o_bestl1[mask] = cost[mask] - o_bestscore[mask] = output_label[mask] - final_adv_images[mask] = adv_img[mask] - - def adjust_constant(self, labels, bestscore, const, upper_bound, lower_bound): - mask = (self.compare(bestscore, labels)) & (bestscore != -1) - upper_bound[mask] = torch.min(upper_bound[mask], const[mask]) - lower_bound[~mask] = torch.max(lower_bound[~mask], const[~mask]) # nopep8 - - mask = upper_bound < 1e9 - const[mask] = (lower_bound[mask] + upper_bound[mask]) / 2 - const[~mask] = const[~mask] * 10 diff --git a/torchattacks/attacks/eadl1.py b/torchattacks/attacks/eadl1.py index 0d6b1520..cdd7bbcf 100644 --- a/torchattacks/attacks/eadl1.py +++ b/torchattacks/attacks/eadl1.py @@ -13,13 +13,13 @@ class EADL1(Attack): Arguments: model (nn.Module): model to attack. + init_c(float): the initial constant c to pick as a first guess. (Default: 1) kappa (float): how strong the adversarial example should be (also written as 'confidence'). (Default: 0) + beta (float): hyperparameter trading off L2 minimization for L1 minimization. (Default: 0.001) + steps (int): number of iterations to perform gradient descent. (Default: 10) lr (float): larger values converge faster to less accurate results. (Default: 0.01) binary_search_steps (int): number of times to adjust the constant with binary search. (Default: 9) - max_iterations (int): number of iterations to perform gradient descent. (Default: 100) abort_early (bool): if we stop improving, abort gradient descent early. (Default: True) - initial_const (float): the initial constant c to pick as a first guess. (Default: 0.001) - beta (float): hyperparameter trading off L2 minimization for L1 minimization. (Default: 0.001) Shape: - images: :math:`(N, C, H, W)` where `N = number of batches`, `C = number of channels`, `H = height` and `W = width`. It must have a range [0, 1]. @@ -27,7 +27,7 @@ class EADL1(Attack): - output: :math:`(N, C, H, W)`. Examples:: - >>> attack = torchattacks.EADL1(model, kappa=0, lr=0.01, max_iterations=100) + >>> attack = torchattacks.EADL1(model, init_c=1, kappa=0, steps=10, lr=0.01) >>> adv_images = attack(images, labels) """ @@ -35,22 +35,22 @@ class EADL1(Attack): def __init__( self, model, + init_c=1, kappa=0, + beta=0.001, + steps=10, lr=0.01, binary_search_steps=9, - max_iterations=100, abort_early=True, - initial_const=0.001, - beta=0.001, ): super().__init__("EADL1", model) + self.init_c = init_c self.kappa = kappa + self.beta = beta + self.steps = steps self.lr = lr self.binary_search_steps = binary_search_steps - self.max_iterations = max_iterations self.abort_early = abort_early - self.initial_const = initial_const - self.beta = beta # The last iteration (if we run many steps) repeat the search once. self.repeat = binary_search_steps >= 10 self.supported_mode = ["default", "targeted"] @@ -69,120 +69,137 @@ def forward(self, images, labels): outputs = self.get_logits(images) batch_size = images.shape[0] - lower_bound = torch.zeros(batch_size, device=self.device) - const = torch.ones(batch_size, device=self.device) * self.initial_const - upper_bound = torch.ones(batch_size, device=self.device) * 1e10 + lower_bound = torch.zeros((batch_size, )).to(self.device) + const = torch.ones(batch_size).to(self.device) * self.init_c + upper_bound = torch.ones(batch_size).to(self.device) * 1e10 - final_adv_images = images.clone() - y_one_hot = torch.eye(outputs.shape[1]).to(self.device)[labels] - - o_bestl1 = [1e10] * batch_size - o_bestscore = [-1] * batch_size - o_bestl1 = torch.Tensor(o_bestl1).to(self.device) - o_bestscore = torch.Tensor(o_bestscore).to(self.device) + o_best_adv_images = images.clone() + o_best_score = torch.full( + (batch_size, ), -1, dtype=torch.long).to(self.device) + o_best_L1 = torch.full((batch_size, ), 1e10).to(self.device) # Initialization: x^{(0)} = y^{(0)} = x_0 in paper Algorithm 1 part x_k = images.clone().detach() y_k = nn.Parameter(images) # Start binary search for outer_step in range(self.binary_search_steps): - self.global_step = 0 - - bestl1 = [1e10] * batch_size - bestscore = [-1] * batch_size - - bestl1 = torch.Tensor(bestl1).to(self.device) - bestscore = torch.Tensor(bestscore).to(self.device) - prevloss = 1e6 + best_score = torch.full( + (batch_size, ), -1, dtype=torch.long).to(self.device) + best_L1 = torch.full((batch_size, ), 1e10).to(self.device) if self.repeat and outer_step == (self.binary_search_steps - 1): const = upper_bound lr = self.lr - for iteration in range(self.max_iterations): + prev_cost = 1e6 + for step in range(self.steps): # reset gradient if y_k.grad is not None: y_k.grad.detach_() y_k.grad.zero_() # Loss over images_parameters with only L2 same as CW - # we don't update L1 loss with SGD because we use ISTA - output = self.get_logits(y_k) + # We don't update L1 loss with SGD because we use ISTA + outputs = self.get_logits(y_k) L2_loss = self.L2_loss(y_k, images) - cost = self.EAD_loss(output, y_one_hot, None, L2_loss, const) - # cost.backward(retain_graph=True) + cost = self.EAD_loss(outputs, labels, None, L2_loss, const) cost.backward() # Gradient step - # y_k.data.add_(-lr, y_k.grad.data) self.global_step += 1 with torch.no_grad(): y_k -= y_k.grad * lr # Ploynomial decay of learning rate - lr = ( - self.lr * (1 - self.global_step / self.max_iterations) ** 0.5 - ) # nopep8 + lr = self.lr * (1 - self.global_step / self.steps) ** 0.5 x_k, y_k = self.FISTA(images, x_k, y_k) # Loss ElasticNet or L1 over x_k with torch.no_grad(): - output = self.get_logits(x_k) + outputs = self.get_logits(x_k) L2_loss = self.L2_loss(x_k, images) L1_loss = self.L1_loss(x_k, images) - loss = self.EAD_loss( - output, y_one_hot, L1_loss, L2_loss, const - ) # nopep8 + cost = self.EAD_loss( + outputs, labels, L1_loss, L2_loss, const) + + # L1 attack key step! + current_Lx = L1_loss + + # Update adversarial images + pre = torch.argmax(outputs.detach(), 1) + condition_1 = self.compare(pre, labels) + condition_2 = (current_Lx < best_L1) + # Filter out images that get either correct predictions or non-decreasing loss, + # i.e., only images that are both misclassified and loss-decreasing are left + mask_1_2 = torch.logical_and(condition_1, condition_2) + best_L1[mask_1_2] = current_Lx[mask_1_2] + best_score[mask_1_2] = pre[mask_1_2] + + condition_3 = (current_Lx < o_best_L1) + o_mask = torch.logical_and(condition_1, condition_3) + o_best_L1[o_mask] = current_Lx[o_mask] + o_best_score[o_mask] = pre[o_mask] + + o_best_adv_images[o_mask] = x_k[o_mask] # print('loss: {}, prevloss: {}'.format(loss, prevloss)) - if ( - self.abort_early - and iteration % (self.max_iterations // 10) == 0 - ): - if loss > prevloss * 0.999999: + if self.abort_early and step % (self.steps // 10) == 0: + if cost > prev_cost * 0.9999: break - prevloss = loss + prev_cost = cost - # L1 attack key step! - cost = L1_loss - self.adjust_best_result( - x_k, - labels, - output, - cost, - bestl1, - bestscore, - o_bestl1, - o_bestscore, - final_adv_images, - ) - - self.adjust_constant(labels, bestscore, const, upper_bound, lower_bound) - - return final_adv_images + # Adjust the constant as needed + outputs = self.get_logits(x_k) + pre = torch.argmax(outputs, 1) + + condition_1 = self.compare(pre, labels) + condition_2 = (best_score != -1) + condition_3 = upper_bound < 1e9 + + mask_1_2 = torch.logical_and(condition_1, condition_2) + mask_1_2_3 = torch.logical_and(mask_1_2, condition_3) + const_1 = (lower_bound + upper_bound) / 2.0 + + upper_bound_min = torch.min(upper_bound, const) + upper_bound[mask_1_2] = upper_bound_min[mask_1_2] + const[mask_1_2_3] = const_1[mask_1_2_3] + + mask_n1_n2_3 = torch.logical_and(~mask_1_2, condition_3) + upper_bound_max = torch.max(lower_bound, const) + upper_bound[~mask_1_2] = upper_bound_max[~mask_1_2] + const[mask_n1_n2_3] *= 10 + + return o_best_adv_images + + def compare(self, predition, labels): + if self.targeted: + # We want to let pre == target_labels in a targeted attack + ret = (predition == labels) + else: + # If the attack is not targeted we simply make these two values unequal + ret = (predition != labels) + return ret def L1_loss(self, x1, x2): Flatten = nn.Flatten() L1_loss = torch.abs(Flatten(x1) - Flatten(x2)).sum(dim=1) - # L1_loss = L1.sum() return L1_loss def L2_loss(self, x1, x2): MSELoss = nn.MSELoss(reduction="none") Flatten = nn.Flatten() L2_loss = MSELoss(Flatten(x1), Flatten(x2)).sum(dim=1) - # L2_loss = L2.sum() return L2_loss - def EAD_loss(self, output, one_hot_labels, L1_loss, L2_loss, const): + def EAD_loss(self, outputs, labels, L1_loss, L2_loss, const): + one_hot_labels = torch.eye(outputs.shape[1]).to(self.device)[labels] - # Not same as CW's f function - other = torch.max( - (1 - one_hot_labels) * output - (one_hot_labels * 1e4), dim=1 - )[0] - real = torch.max(one_hot_labels * output, dim=1)[0] + # get the target class's logit + real = torch.sum(one_hot_labels * outputs, dim=1) + # find the max logit other than the target classs + other = torch.max((1 - one_hot_labels) * outputs - (one_hot_labels * 1e12), dim=1)[0] # nopep8 if self.targeted: F_loss = torch.clamp((other - real), min=-self.kappa) @@ -192,11 +209,7 @@ def EAD_loss(self, output, one_hot_labels, L1_loss, L2_loss, const): if isinstance(L1_loss, type(None)): loss = torch.sum(const * F_loss) + torch.sum(L2_loss) else: - loss = ( - torch.sum(const * F_loss) - + torch.sum(L2_loss) - + torch.sum(self.beta * L1_loss) - ) + loss = torch.sum(const * F_loss) + torch.sum(L2_loss) + torch.sum(self.beta * L1_loss) # nopep8 return loss @@ -208,59 +221,10 @@ def FISTA(self, images, x_k, y_k): lower = torch.clamp(y_k + self.beta, min=0) diff = y_k - images - cond1 = (diff > self.beta).float() - cond2 = (torch.abs(diff) <= self.beta).float() - cond3 = (diff < -self.beta).float() + c1 = diff > self.beta + c2 = torch.abs(diff) <= self.beta + c3 = diff < -self.beta - new_x_k = (cond1 * upper) + (cond2 * images) + (cond3 * lower) + new_x_k = (c1.float() * upper) + (c2.float() * images) + (c3.float() * lower) # nopep8 y_k.data = new_x_k + (zt * (new_x_k - x_k)) return new_x_k, y_k - - def compare(self, output, labels): - if len(output.shape) >= 2: - # output is tensor - output = output.clone().detach() - if self.targeted: - output[:, labels] -= self.kappa - else: - output[:, labels] += self.kappa - output = torch.argmax(output, 1) - else: - # output is int or float - pass - - if self.targeted: - return output == labels - else: - return output != labels - - def adjust_best_result( - self, - adv_img, - labels, - output, - cost, - bestl1, - bestscore, - o_bestl1, - o_bestscore, - final_adv_images, - ): - output_label = torch.argmax(output, 1).float() - mask = (cost < bestl1) & self.compare(output, labels) - bestl1[mask] = cost[mask] - bestscore[mask] = output_label[mask] - - mask = (cost < o_bestl1) & self.compare(output, labels) - o_bestl1[mask] = cost[mask] - o_bestscore[mask] = output_label[mask] - final_adv_images[mask] = adv_img[mask] - - def adjust_constant(self, labels, bestscore, const, upper_bound, lower_bound): - mask = (self.compare(bestscore, labels)) & (bestscore != -1) - upper_bound[mask] = torch.min(upper_bound[mask], const[mask]) - lower_bound[~mask] = torch.max(lower_bound[~mask], const[~mask]) # nopep8 - - mask = upper_bound < 1e9 - const[mask] = (lower_bound[mask] + upper_bound[mask]) / 2 - const[~mask] = const[~mask] * 10 diff --git a/torchattacks/attacks/espgd.py b/torchattacks/attacks/espgd.py new file mode 100644 index 00000000..dfa67d74 --- /dev/null +++ b/torchattacks/attacks/espgd.py @@ -0,0 +1,92 @@ +import torch +import torch.nn as nn + +from ..attack import Attack + + +class ESPGD(Attack): + r""" + Early-stopped PGD in the paper 'Attacks Which Do Not Kill Training Make Adversarial Learning Stronger' + [https://arxiv.org/abs/2002.11242] + + Distance Measure : Linf + + Arguments: + model (nn.Module): model to attack. + eps (float): maximum perturbation. (Default: 8/255) + alpha (float): step size. (Default: 2/255) + steps (int): number of steps. (Default: 10) + tau (int): the step controlling how early we should stop interations when wrong adv data is found. (Default: 3) + random_start (bool): using random initialization of delta. (Default: True) + + Shape: + - images: :math:`(N, C, H, W)` where `N = number of batches`, `C = number of channels`, `H = height` and `W = width`. It must have a range [0, 1]. + - labels: :math:`(N)` where each value :math:`y_i` is :math:`0 \leq y_i \leq` `number of labels`. + - output: :math:`(N, C, H, W)`. + + Examples:: + >>> attack = torchattacks.ESPGD(model, eps=8/255, alpha=1/255, steps=10, tau=10, random_start=True) + >>> adv_images = attack(images, labels) + + """ + + def __init__(self, model, eps=8 / 255, alpha=2 / 255, steps=10, tau=3, random_start=True): + super().__init__("PGD", model) + self.eps = eps + self.alpha = alpha + self.steps = steps + self.tau = tau + self.random_start = random_start + self.supported_mode = ["default", "targeted"] + + def forward(self, images, labels): + r""" + Overridden. + """ + + images = images.clone().detach().to(self.device) + labels = labels.clone().detach().to(self.device) + + if self.targeted: + target_labels = self.get_target_label(images, labels) + + loss = nn.CrossEntropyLoss() + control = torch.ones(labels.shape[0]).to(self.device) * self.tau + adv_images = images.clone().detach() + output_images = images.clone().detach() + + if self.random_start: + # Starting at a uniformly random point + adv_images = adv_images + torch.empty_like(adv_images).uniform_( + -self.eps, self.eps + ) + adv_images = torch.clamp(adv_images, min=0, max=1).detach() + + for _ in range(self.steps): + adv_images.requires_grad = True + outputs = self.get_logits(adv_images) + + pred = torch.argmax(outputs, dim=1) + ind_1 = control == 0 + ind_2 = pred != labels + ind_all = torch.logical_and(ind_1, ind_2) + output_images[ind_all] = adv_images[ind_all] + control[ind_2] = control[ind_2] - 1 + + # Calculate loss + if self.targeted: + cost = -loss(outputs, target_labels) + else: + cost = loss(outputs, labels) + + # Update adversarial images + grad = torch.autograd.grad( + cost, adv_images, retain_graph=False, create_graph=False + )[0] + + adv_images = adv_images.detach() + self.alpha * grad.sign() + delta = torch.clamp(adv_images - images, + min=-self.eps, max=self.eps) + adv_images = torch.clamp(images + delta, min=0, max=1).detach() + + return output_images diff --git a/torchattacks/attacks/fab.py b/torchattacks/attacks/fab.py index 02b39984..ea17603b 100644 --- a/torchattacks/attacks/fab.py +++ b/torchattacks/attacks/fab.py @@ -1,43 +1,26 @@ -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function -from __future__ import unicode_literals - -import time -import math - import torch -import torch.nn.functional as F - -# zero_gradients deprecated in torch >= 1.9. -# zero_gradients is re-defined in the bottom of the code. -# from torch.autograd.gradcheck import zero_gradients -from collections import abc as container_abcs +import torch.distributions.uniform as uniform from ..attack import Attack class FAB(Attack): r""" - Fast Adaptive Boundary Attack in the paper 'Minimally distorted Adversarial Examples with a Fast Adaptive Boundary Attack' + Fast Adaptive Boundary Attack (FAB) in the paper 'Minimally distorted Adversarial Examples with a Fast Adaptive Boundary Attack' [https://arxiv.org/abs/1907.02044] - [https://github.com/fra31/auto-attack] + [https://github.com/fra31/fab-attack] - Distance Measure : Linf, L2, L1 + Distance Measure : Linf Arguments: model (nn.Module): model to attack. - norm (str) : Lp-norm to minimize. ['Linf', 'L2', 'L1'] (Default: 'Linf') eps (float): maximum perturbation. (Default: 8/255) - steps (int): number of steps. (Default: 10) n_restarts (int): number of random restarts. (Default: 1) + n_iter (int): number of steps. (Default: 10) alpha_max (float): alpha_max. (Default: 0.1) eta (float): overshooting. (Default: 1.05) beta (float): backward step. (Default: 0.9) - verbose (bool): print progress. (Default: False) - seed (int): random seed for the starting point. (Default: 0) - targeted (bool): targeted attack for every wrong classes. (Default: False) - n_classes (int): number of classes. (Default: 10) + las (bool): final search. (Default: False) Shape: - images: :math:`(N, C, H, W)` where `N = number of batches`, `C = number of channels`, `H = height` and `W = width`. It must have a range [0, 1]. @@ -45,40 +28,20 @@ class FAB(Attack): - output: :math:`(N, C, H, W)`. Examples:: - >>> attack = torchattacks.FAB(model, norm='Linf', steps=10, eps=8/255, n_restarts=1, alpha_max=0.1, eta=1.05, beta=0.9, loss_fn=None, verbose=False, seed=0, targeted=False, n_classes=10) + >>> attack = torchattacks.FAB(model, eps=8/255, n_restarts=1, n_iter=10, alpha_max=0.1, eta=1.05, beta=0.9, las=False) >>> adv_images = attack(images, labels) """ - def __init__( - self, - model, - norm="Linf", - eps=8 / 255, - steps=10, - n_restarts=1, - alpha_max=0.1, - eta=1.05, - beta=0.9, - verbose=False, - seed=0, - multi_targeted=False, - n_classes=10, - ): + def __init__(self, model, eps=8/255, n_restarts=1, n_iter=10, alpha_max=0.1, eta=1.05, beta=0.9, las=False): super().__init__("FAB", model) - self.norm = norm + self.eps = eps self.n_restarts = n_restarts - Default_EPS_DICT_BY_NORM = {"Linf": 0.3, "L2": 1.0, "L1": 5.0} - self.eps = eps if eps is not None else Default_EPS_DICT_BY_NORM[norm] + self.n_iter = n_iter self.alpha_max = alpha_max self.eta = eta self.beta = beta - self.steps = steps - self.verbose = verbose - self.seed = seed - self.target_class = None - self.multi_targeted = multi_targeted - self.n_target_classes = n_classes - 1 + self.las = las self.supported_mode = ["default", "targeted"] def forward(self, images, labels): @@ -92,818 +55,204 @@ def forward(self, images, labels): return adv_images - def _get_predicted_label(self, x): - with torch.no_grad(): - outputs = self.get_logits(x) - _, y = torch.max(outputs, dim=1) - return y - - def check_shape(self, x): - return x if len(x.shape) > 0 else x.unsqueeze(0) - - def get_diff_logits_grads_batch(self, imgs, la): - im = imgs.clone().requires_grad_() - with torch.enable_grad(): - y = self.get_logits(im) - - g2 = torch.zeros([y.shape[-1], *imgs.size()]).to(self.device) - grad_mask = torch.zeros_like(y) - for counter in range(y.shape[-1]): - zero_gradients(im) - grad_mask[:, counter] = 1.0 - y.backward(grad_mask, retain_graph=True) - grad_mask[:, counter] = 0.0 - g2[counter] = im.grad.data - - g2 = torch.transpose(g2, 0, 1).detach() - # y2 = self.get_logits(imgs).detach() - y2 = y.detach() - df = y2 - y2[torch.arange(imgs.shape[0]), la].unsqueeze(1) - dg = g2 - g2[torch.arange(imgs.shape[0]), la].unsqueeze(1) - df[torch.arange(imgs.shape[0]), la] = 1e10 - - return df, dg - - def get_diff_logits_grads_batch_targeted(self, imgs, la, la_target): - u = torch.arange(imgs.shape[0]) - im = imgs.clone().requires_grad_() - with torch.enable_grad(): - y = self.get_logits(im) - diffy = -(y[u, la] - y[u, la_target]) - sumdiffy = diffy.sum() - - zero_gradients(im) - sumdiffy.backward() - graddiffy = im.grad.data - df = diffy.detach().unsqueeze(1) - dg = graddiffy.unsqueeze(1) - - return df, dg - - def attack_single_run(self, x, y=None, use_rand_start=False): - """ - :param x: clean images - :param y: clean labels, if None we use the predicted labels - """ - - # self.device = x.device - self.orig_dim = list(x.shape[1:]) - self.ndims = len(self.orig_dim) - - x = x.detach().clone().float().to(self.device) - # assert next(self.model.parameters()).device == x.device - - y_pred = self._get_predicted_label(x) - if y is None: - y = y_pred.detach().clone().long().to(self.device) - else: - y = y.detach().clone().long().to(self.device) - pred = y_pred == y - corr_classified = pred.float().sum() - if self.verbose: - print("Clean accuracy: {:.2%}".format(pred.float().mean())) - if pred.sum() == 0: - return x - pred = self.check_shape(pred.nonzero().squeeze()) - - startt = time.time() - # runs the attack only on correctly classified points - im2 = x[pred].detach().clone() - la2 = y[pred].detach().clone() - if len(im2.shape) == self.ndims: - im2 = im2.unsqueeze(0) - bs = im2.shape[0] + def perturb(self, images, labels): + logits = self.get_logits(images) + pred = torch.argmax(logits, 1) == labels + pred1 = pred.clone() + im2 = images[pred].clone() + la2 = labels[pred].clone() + bs = torch.sum(pred) u1 = torch.arange(bs) - adv = im2.clone() - adv_c = x.clone() - res2 = 1e10 * torch.ones([bs]).to(self.device) - res_c = torch.zeros([x.shape[0]]).to(self.device) - x1 = im2.clone() - x0 = im2.clone().reshape([bs, -1]) - counter_restarts = 0 - - while counter_restarts < 1: - if use_rand_start: - if self.norm == "Linf": - t = 2 * torch.rand(x1.shape).to(self.device) - 1 - x1 = ( - im2 - + ( - torch.min( - res2, self.eps * torch.ones(res2.shape).to(self.device) - ).reshape([-1, *[1] * self.ndims]) - ) - * t - / ( - t.reshape([t.shape[0], -1]) - .abs() - .max(dim=1, keepdim=True)[0] - .reshape([-1, *[1] * self.ndims]) - ) - * 0.5 - ) - elif self.norm == "L2": - t = torch.randn(x1.shape).to(self.device) - x1 = ( - im2 - + ( - torch.min( - res2, self.eps * torch.ones(res2.shape).to(self.device) - ).reshape([-1, *[1] * self.ndims]) - ) - * t - / ( - (t ** 2) - .view(t.shape[0], -1) - .sum(dim=-1) - .sqrt() - .view(t.shape[0], *[1] * self.ndims) - ) - * 0.5 - ) - elif self.norm == "L1": - t = torch.randn(x1.shape).to(self.device) - x1 = ( - im2 - + ( - torch.min( - res2, self.eps * torch.ones(res2.shape).to(self.device) - ).reshape([-1, *[1] * self.ndims]) - ) - * t - / ( - t.abs() - .view(t.shape[0], -1) - .sum(dim=-1) - .view(t.shape[0], *[1] * self.ndims) - ) - / 2 - ) - - x1 = x1.clamp(0.0, 1.0) - - counter_iter = 0 - while counter_iter < self.steps: - with torch.no_grad(): - df, dg = self.get_diff_logits_grads_batch(x1, la2) - if self.norm == "Linf": - dist1 = df.abs() / ( - 1e-12 - + dg.abs().view(dg.shape[0], dg.shape[1], -1).sum(dim=-1) - ) - elif self.norm == "L2": - dist1 = df.abs() / ( - 1e-12 - + (dg ** 2) - .view(dg.shape[0], dg.shape[1], -1) - .sum(dim=-1) - .sqrt() - ) - elif self.norm == "L1": - dist1 = df.abs() / ( - 1e-12 - + dg.abs() - .reshape([df.shape[0], df.shape[1], -1]) - .max(dim=2)[0] - ) - else: - raise ValueError("norm not supported") - ind = dist1.min(dim=1)[1] - dg2 = dg[u1, ind] - b = -df[u1, ind] + (dg2 * x1).view(x1.shape[0], -1).sum(dim=-1) - w = dg2.reshape([bs, -1]) - - if self.norm == "Linf": - d3 = projection_linf( - torch.cat((x1.reshape([bs, -1]), x0), 0), - torch.cat((w, w), 0), - torch.cat((b, b), 0), - ) - elif self.norm == "L2": - d3 = projection_l2( - torch.cat((x1.reshape([bs, -1]), x0), 0), - torch.cat((w, w), 0), - torch.cat((b, b), 0), - ) - elif self.norm == "L1": - d3 = projection_l1( - torch.cat((x1.reshape([bs, -1]), x0), 0), - torch.cat((w, w), 0), - torch.cat((b, b), 0), - ) - d1 = torch.reshape(d3[:bs], x1.shape) - d2 = torch.reshape(d3[-bs:], x1.shape) - if self.norm == "Linf": - a0 = ( - d3.abs() - .max(dim=1, keepdim=True)[0] - .view(-1, *[1] * self.ndims) - ) - elif self.norm == "L2": - a0 = ( - (d3 ** 2) - .sum(dim=1, keepdim=True) - .sqrt() - .view(-1, *[1] * self.ndims) - ) - elif self.norm == "L1": - a0 = ( - d3.abs() - .sum(dim=1, keepdim=True) - .view(-1, *[1] * self.ndims) - ) - a0 = torch.max(a0, 1e-8 * torch.ones(a0.shape).to(self.device)) - a1 = a0[:bs] - a2 = a0[-bs:] - alpha = torch.min( - torch.max( - a1 / (a1 + a2), torch.zeros(a1.shape).to(self.device) - ), - self.alpha_max * torch.ones(a1.shape).to(self.device), - ) - x1 = ( - (x1 + self.eta * d1) * (1 - alpha) - + (im2 + d2 * self.eta) * alpha - ).clamp(0.0, 1.0) - - is_adv = self._get_predicted_label(x1) != la2 - - if is_adv.sum() > 0: - ind_adv = is_adv.nonzero().squeeze() - ind_adv = self.check_shape(ind_adv) - if self.norm == "Linf": - t = ( - (x1[ind_adv] - im2[ind_adv]) - .reshape([ind_adv.shape[0], -1]) - .abs() - .max(dim=1)[0] - ) - elif self.norm == "L2": - t = ( - ((x1[ind_adv] - im2[ind_adv]) ** 2) - .view(ind_adv.shape[0], -1) - .sum(dim=-1) - .sqrt() - ) - elif self.norm == "L1": - t = ( - (x1[ind_adv] - im2[ind_adv]) - .abs() - .view(ind_adv.shape[0], -1) - .sum(dim=-1) - ) - adv[ind_adv] = x1[ind_adv] * ( - t < res2[ind_adv] - ).float().reshape([-1, *[1] * self.ndims]) + adv[ind_adv] * ( - t >= res2[ind_adv] - ).float().reshape( - [-1, *[1] * self.ndims] - ) - res2[ind_adv] = ( - t * (t < res2[ind_adv]).float() - + res2[ind_adv] * (t >= res2[ind_adv]).float() - ) - x1[ind_adv] = ( - im2[ind_adv] + (x1[ind_adv] - im2[ind_adv]) * self.beta - ) - - counter_iter += 1 - - counter_restarts += 1 - - ind_succ = res2 < 1e10 - if self.verbose: - print( - "success rate: {:.0f}/{:.0f}".format( - ind_succ.float().sum(), corr_classified - ) - + " (on correctly classified points) in {:.1f} s".format( - time.time() - startt - ) - ) - - res_c[pred] = res2 * ind_succ.float() + 1e10 * (1 - ind_succ.float()) - ind_succ = self.check_shape(ind_succ.nonzero().squeeze()) - adv_c[pred[ind_succ]] = adv[ind_succ].clone() + adv = im2.clone() + adv_c = images.clone() + res2 = torch.full((bs, ), 1e10, device=self.device) + x1 = torch.clone(im2) + x0 = torch.clone(im2).reshape(bs, -1) + eps = torch.full(res2.shape, self.eps, device=self.device) + + if self.targeted: + # The code provided in the original paper does not implement the target attack code, + # and the code here is implemented based on the relevant code in the original author's subsequent autoattack work. + # https://github.com/fra31/auto-attack + target_labels = self.get_target_label(images, labels) + la_target2 = target_labels[pred].detach().clone() + else: + la_target2 = None + + for counter_restarts in range(self.n_restarts): + if counter_restarts > 0: + t = uniform.Uniform(-1, 1).sample(x1.shape).to(self.device) + a = torch.min(res2, eps).reshape((-1, 1, 1, 1)) * t + b = torch.abs(t.view(t.shape[0], -1)).max(dim=1, keepdim=True)[0].view((-1, 1, 1, 1)) # nopep8 + x1 = im2 + a / b * 0.5 + x1 = torch.clamp(x1, min=0.0, max=1.0) + + for _ in range(self.n_iter): + # print(i) + df, dg = self.get_diff_logits_grads_batch(x1, la2, la_target2) + dist1 = torch.abs(df) / (1e-8 + torch.sum(torch.abs(dg).view(dg.shape[0], dg.shape[1], -1), -1)) # nopep8 + ind = torch.argmin(dist1, 1) + b = - df[u1, ind] + torch.sum(torch.reshape(dg[u1, ind] * x1, (bs, -1)), 1).to(self.device) # nopep8 + w = torch.reshape(dg[u1, ind], [bs, -1]).to(self.device) + x2 = torch.reshape(x1, (bs, -1)) + d3 = self.projection_linf(torch.cat((x2, x0), 0), torch.cat((w, w), 0), torch.cat((b, b), 0)) # nopep8 + d1 = torch.reshape(d3[:bs], x1.shape) + d2 = torch.reshape(d3[-bs:], x1.shape) + a0 = torch.abs(d3).max(dim=1, keepdim=True)[0].view(-1, 1, 1, 1) # nopep8 + a0 = torch.max(a0, 1e-8 * torch.ones(a0.shape, device=self.device)) # nopep8 + a1 = a0[:bs] + a2 = a0[-bs:] + temp_var_1 = torch.max(a1 / (a1 + a2), torch.zeros(a1.shape, device=self.device)) # nopep8 + temp_var_2 = self.alpha_max * torch.ones(a1.shape, device=self.device) # nopep8 + alpha = torch.min(temp_var_1, temp_var_2) + x1 = torch.clamp((x1 + self.eta * d1) * (1 - alpha) + (im2 + d2 * self.eta) * alpha, min=0.0, max=1.0) # nopep8 + is_adv = torch.argmax(self.get_logits(x1), 1) != la2 + if torch.sum(is_adv) > 0: + temp_var = torch.reshape(x1[is_adv] - im2[is_adv], (torch.sum(is_adv), -1)) # nopep8 + t = torch.max(torch.abs(temp_var), 1)[0] + temp_var_3 = x1[is_adv] * (t < res2[is_adv]).float().reshape([-1, 1, 1, 1]) # nopep8 + temp_var_4 = adv[is_adv] * (t >= res2[is_adv]).float().reshape([-1, 1, 1, 1]) # nopep8 + adv[is_adv] = temp_var_3 + temp_var_4 + res2[is_adv] = t * (t < res2[is_adv]).float() + res2[is_adv] * (t >= res2[is_adv]).float() # nopep8 + x1[is_adv] = im2[is_adv] + (x1[is_adv] - im2[is_adv]) * self.beta # nopep8 + + if self.las: + adv = self.linear_approximation_search(im2, la2, adv, 3) + + adv_c[pred1] = adv return adv_c - def attack_single_run_targeted(self, x, y=None, use_rand_start=False): - """ - :param x: clean images - :param y: clean labels, if None we use the predicted labels - """ + def get_diff_logits_grads_batch(self, images, labels, target_labels=None): + images = images.clone().detach().requires_grad_() # make sure its was leaf node + # print(images.is_leaf) + + if not self.targeted: + logits = self.get_logits(images) + g2 = self.compute_jacobian(images, logits) + y2 = logits + df = y2 - torch.unsqueeze(y2[torch.arange(images.shape[0]), labels], 1) # nopep8 + dg = g2 - torch.unsqueeze(g2[torch.arange(images.shape[0]), labels], 1) # nopep8 + df[torch.arange(images.shape[0]), labels] = 1e10 + else: + u = torch.arange(images.shape[0]) + logits = self.get_logits(images) + diff_logits = -(logits[u, labels] - logits[u, target_labels]) + sum_diff = torch.sum(diff_logits) + + # jacobian + self.zero_gradients(images) + sum_diff.backward() + grad_diff = images.grad.data + df = torch.unsqueeze(diff_logits.detach(), 1) + dg = torch.unsqueeze(grad_diff, 1) - if self.device is None: - self.device = x.device - self.orig_dim = list(x.shape[1:]) - self.ndims = len(self.orig_dim) + return df, dg - x = x.detach().clone().float().to(self.device) - # assert next(self.model.parameters()).device == x.device + def compute_jacobian(self, images, logits): + num_classes = logits.shape[1] + jacobian = torch.zeros(num_classes, *images.size()).to(self.device) + grad_output = torch.zeros_like(logits).to(self.device) - y_pred = self._get_predicted_label(x) - if y is None: - y = y_pred.detach().clone().long().to(self.device) - else: - y = y.detach().clone().long().to(self.device) - pred = y_pred == y - corr_classified = pred.float().sum() - if self.verbose: - print("Clean accuracy: {:.2%}".format(pred.float().mean())) - if pred.sum() == 0: - return x - pred = self.check_shape(pred.nonzero().squeeze()) - - output = self.get_logits(x) - if self.multi_targeted: - la_target = output.sort(dim=-1)[1][:, -self.target_class] - else: - la_target = self.target_class - - startt = time.time() - # runs the attack only on correctly classified points - im2 = x[pred].detach().clone() - la2 = y[pred].detach().clone() - la_target2 = la_target[pred].detach().clone() - if len(im2.shape) == self.ndims: - im2 = im2.unsqueeze(0) - bs = im2.shape[0] - u1 = torch.arange(bs) - adv = im2.clone() - adv_c = x.clone() - res2 = 1e10 * torch.ones([bs]).to(self.device) - res_c = torch.zeros([x.shape[0]]).to(self.device) - x1 = im2.clone() - x0 = im2.clone().reshape([bs, -1]) - counter_restarts = 0 - - while counter_restarts < 1: - if use_rand_start: - if self.norm == "Linf": - t = 2 * torch.rand(x1.shape).to(self.device) - 1 - x1 = ( - im2 - + ( - torch.min( - res2, self.eps * torch.ones(res2.shape).to(self.device) - ).reshape([-1, *[1] * self.ndims]) - ) - * t - / ( - t.reshape([t.shape[0], -1]) - .abs() - .max(dim=1, keepdim=True)[0] - .reshape([-1, *[1] * self.ndims]) - ) - * 0.5 - ) - elif self.norm == "L2": - t = torch.randn(x1.shape).to(self.device) - x1 = ( - im2 - + ( - torch.min( - res2, self.eps * torch.ones(res2.shape).to(self.device) - ).reshape([-1, *[1] * self.ndims]) - ) - * t - / ( - (t ** 2) - .view(t.shape[0], -1) - .sum(dim=-1) - .sqrt() - .view(t.shape[0], *[1] * self.ndims) - ) - * 0.5 - ) - elif self.norm == "L1": - t = torch.randn(x1.shape).to(self.device) - x1 = ( - im2 - + ( - torch.min( - res2, self.eps * torch.ones(res2.shape).to(self.device) - ).reshape([-1, *[1] * self.ndims]) - ) - * t - / ( - t.abs() - .view(t.shape[0], -1) - .sum(dim=-1) - .view(t.shape[0], *[1] * self.ndims) - ) - / 2 - ) - - x1 = x1.clamp(0.0, 1.0) - - counter_iter = 0 - while counter_iter < self.steps: - with torch.no_grad(): - df, dg = self.get_diff_logits_grads_batch_targeted( - x1, la2, la_target2 - ) - if self.norm == "Linf": - dist1 = df.abs() / ( - 1e-12 - + dg.abs().view(dg.shape[0], dg.shape[1], -1).sum(dim=-1) - ) - elif self.norm == "L2": - dist1 = df.abs() / ( - 1e-12 - + (dg ** 2) - .view(dg.shape[0], dg.shape[1], -1) - .sum(dim=-1) - .sqrt() - ) - elif self.norm == "L1": - dist1 = df.abs() / ( - 1e-12 - + dg.abs() - .reshape([df.shape[0], df.shape[1], -1]) - .max(dim=2)[0] - ) - else: - raise ValueError("norm not supported") - ind = dist1.min(dim=1)[1] - - dg2 = dg[u1, ind] - b = -df[u1, ind] + (dg2 * x1).view(x1.shape[0], -1).sum(dim=-1) - w = dg2.reshape([bs, -1]) - - if self.norm == "Linf": - d3 = projection_linf( - torch.cat((x1.reshape([bs, -1]), x0), 0), - torch.cat((w, w), 0), - torch.cat((b, b), 0), - ) - elif self.norm == "L2": - d3 = projection_l2( - torch.cat((x1.reshape([bs, -1]), x0), 0), - torch.cat((w, w), 0), - torch.cat((b, b), 0), - ) - elif self.norm == "L1": - d3 = projection_l1( - torch.cat((x1.reshape([bs, -1]), x0), 0), - torch.cat((w, w), 0), - torch.cat((b, b), 0), - ) - d1 = torch.reshape(d3[:bs], x1.shape) - d2 = torch.reshape(d3[-bs:], x1.shape) - if self.norm == "Linf": - a0 = ( - d3.abs() - .max(dim=1, keepdim=True)[0] - .view(-1, *[1] * self.ndims) - ) - elif self.norm == "L2": - a0 = ( - (d3 ** 2) - .sum(dim=1, keepdim=True) - .sqrt() - .view(-1, *[1] * self.ndims) - ) - elif self.norm == "L1": - a0 = ( - d3.abs() - .sum(dim=1, keepdim=True) - .view(-1, *[1] * self.ndims) - ) - a0 = torch.max(a0, 1e-8 * torch.ones(a0.shape).to(self.device)) - a1 = a0[:bs] - a2 = a0[-bs:] - alpha = torch.min( - torch.max( - a1 / (a1 + a2), torch.zeros(a1.shape).to(self.device) - ), - self.alpha_max * torch.ones(a1.shape).to(self.device), - ) - x1 = ( - (x1 + self.eta * d1) * (1 - alpha) - + (im2 + d2 * self.eta) * alpha - ).clamp(0.0, 1.0) - - is_adv = self._get_predicted_label(x1) != la2 - - if is_adv.sum() > 0: - ind_adv = is_adv.nonzero().squeeze() - ind_adv = self.check_shape(ind_adv) - if self.norm == "Linf": - t = ( - (x1[ind_adv] - im2[ind_adv]) - .reshape([ind_adv.shape[0], -1]) - .abs() - .max(dim=1)[0] - ) - elif self.norm == "L2": - t = ( - ((x1[ind_adv] - im2[ind_adv]) ** 2) - .view(ind_adv.shape[0], -1) - .sum(dim=-1) - .sqrt() - ) - elif self.norm == "L1": - t = ( - (x1[ind_adv] - im2[ind_adv]) - .abs() - .view(ind_adv.shape[0], -1) - .sum(dim=-1) - ) - adv[ind_adv] = x1[ind_adv] * ( - t < res2[ind_adv] - ).float().reshape([-1, *[1] * self.ndims]) + adv[ind_adv] * ( - t >= res2[ind_adv] - ).float().reshape( - [-1, *[1] * self.ndims] - ) - res2[ind_adv] = ( - t * (t < res2[ind_adv]).float() - + res2[ind_adv] * (t >= res2[ind_adv]).float() - ) - x1[ind_adv] = ( - im2[ind_adv] + (x1[ind_adv] - im2[ind_adv]) * self.beta - ) - - counter_iter += 1 - - counter_restarts += 1 - - ind_succ = res2 < 1e10 - if self.verbose: - print( - "success rate: {:.0f}/{:.0f}".format( - ind_succ.float().sum(), corr_classified - ) - + " (on correctly classified points) in {:.1f} s".format( - time.time() - startt - ) - ) - - res_c[pred] = res2 * ind_succ.float() + 1e10 * (1 - ind_succ.float()) - ind_succ = self.check_shape(ind_succ.nonzero().squeeze()) - adv_c[pred[ind_succ]] = adv[ind_succ].clone() + for i in range(num_classes): + self.zero_gradients(images) + grad_output.zero_() + grad_output[:, i] = 1 + logits.backward(grad_output, retain_graph=True) + jacobian[i] = images.grad.data - return adv_c + return torch.transpose(jacobian, dim0=0, dim1=1) - def perturb(self, x, y): - adv = x.clone() - with torch.no_grad(): - acc = self.get_logits(x).max(1)[1] == y - - startt = time.time() - - torch.random.manual_seed(self.seed) - torch.cuda.random.manual_seed(self.seed) - - def inner_perturb(targeted): - for counter in range(self.n_restarts): - ind_to_fool = acc.nonzero().squeeze() - if len(ind_to_fool.shape) == 0: - ind_to_fool = ind_to_fool.unsqueeze(0) - if ind_to_fool.numel() != 0: - x_to_fool, y_to_fool = ( - x[ind_to_fool].clone(), - y[ind_to_fool].clone(), - ) # nopep8 - - if targeted: - adv_curr = self.attack_single_run_targeted( - x_to_fool, y_to_fool, use_rand_start=(counter > 0) - ) - else: - adv_curr = self.attack_single_run( - x_to_fool, y_to_fool, use_rand_start=(counter > 0) - ) - - acc_curr = self.get_logits(adv_curr).max(1)[1] == y_to_fool - if self.norm == "Linf": - res = ( - (x_to_fool - adv_curr) - .abs() - .view(x_to_fool.shape[0], -1) - .max(1)[0] - ) # nopep8 - elif self.norm == "L2": - res = ( - ((x_to_fool - adv_curr) ** 2) - .view(x_to_fool.shape[0], -1) - .sum(dim=-1) - .sqrt() - ) # nopep8 - acc_curr = torch.max(acc_curr, res > self.eps) - - ind_curr = (acc_curr == 0).nonzero().squeeze() - acc[ind_to_fool[ind_curr]] = 0 - adv[ind_to_fool[ind_curr]] = adv_curr[ind_curr].clone() - - if self.verbose: - if targeted: - print( - "restart {} - target_class {} - robust accuracy: {:.2%} at eps = {:.5f} - cum. time: {:.1f} s".format( - counter, - self.target_class, - acc.float().mean(), - self.eps, - time.time() - startt, - ) - ) - else: - print( - "restart {} - robust accuracy: {:.2%} at eps = {:.5f} - cum. time: {:.1f} s".format( - counter, - acc.float().mean(), - self.eps, - time.time() - startt, - ) - ) - - if self.multi_targeted: - for target_class in range(2, self.n_target_classes + 2): - self.target_class = target_class - inner_perturb(targeted=True) - elif self.targeted: - self.target_class = self.get_target_label(x, y) - inner_perturb(targeted=True) - else: - inner_perturb(targeted=False) - return adv - - -def projection_linf(points_to_project, w_hyperplane, b_hyperplane): - device = points_to_project.device - t, w, b = points_to_project, w_hyperplane.clone(), b_hyperplane.clone() - - sign = 2 * ((w * t).sum(1) - b >= 0) - 1 - w.mul_(sign.unsqueeze(1)) - b.mul_(sign) - - a = (w < 0).float() - d = (a - t) * (w != 0).float() - - p = a - t * (2 * a - 1) - indp = torch.argsort(p, dim=1) - - b = b - (w * t).sum(1) - b0 = (w * d).sum(1) - - indp2 = indp.flip((1,)) - ws = w.gather(1, indp2) - bs2 = -ws * d.gather(1, indp2) - - s = torch.cumsum(ws.abs(), dim=1) - sb = torch.cumsum(bs2, dim=1) + b0.unsqueeze(1) - - b2 = sb[:, -1] - s[:, -1] * p.gather(1, indp[:, 0:1]).squeeze(1) - c_l = b - b2 > 0 - c2 = (b - b0 > 0) & (~c_l) - lb = torch.zeros(c2.sum(), device=device) - ub = torch.full_like(lb, w.shape[1] - 1) - nitermax = math.ceil(math.log2(w.shape[1])) - - indp_, sb_, s_, p_, b_ = indp[c2], sb[c2], s[c2], p[c2], b[c2] - for counter in range(nitermax): - counter4 = torch.floor((lb + ub) / 2) - - counter2 = counter4.long().unsqueeze(1) - indcurr = indp_.gather(1, indp_.size(1) - 1 - counter2) - b2 = ( - sb_.gather(1, counter2) - s_.gather(1, counter2) * p_.gather(1, indcurr) - ).squeeze( - 1 - ) # nopep8 - c = b_ - b2 > 0 - - lb = torch.where(c, counter4, lb) - ub = torch.where(c, ub, counter4) - - lb = lb.long() - - if c_l.any(): - lmbd_opt = torch.clamp_min( - (b[c_l] - sb[c_l, -1]) / (-s[c_l, -1]), min=0 - ).unsqueeze(-1) - d[c_l] = (2 * a[c_l] - 1) * lmbd_opt - - lmbd_opt = torch.clamp_min((b[c2] - sb[c2, lb]) / (-s[c2, lb]), min=0).unsqueeze(-1) - d[c2] = torch.min(lmbd_opt, d[c2]) * a[c2] + torch.max(-lmbd_opt, d[c2]) * ( - 1 - a[c2] - ) - - return d * (w != 0).float() - - -def projection_l2(points_to_project, w_hyperplane, b_hyperplane): - device = points_to_project.device - t, w, b = points_to_project, w_hyperplane.clone(), b_hyperplane - - c = (w * t).sum(1) - b - ind2 = 2 * (c >= 0) - 1 - w.mul_(ind2.unsqueeze(1)) - c.mul_(ind2) - - r = torch.max(t / w, (t - 1) / w).clamp(min=-1e12, max=1e12) - r.masked_fill_(w.abs() < 1e-8, 1e12) - r[r == -1e12] *= -1 - rs, indr = torch.sort(r, dim=1) - rs2 = F.pad(rs[:, 1:], (0, 1)) - rs.masked_fill_(rs == 1e12, 0) - rs2.masked_fill_(rs2 == 1e12, 0) - - w3s = (w ** 2).gather(1, indr) - w5 = w3s.sum(dim=1, keepdim=True) - ws = w5 - torch.cumsum(w3s, dim=1) - d = -(r * w) - d.mul_((w.abs() > 1e-8).float()) - s = torch.cat( - (-w5 * rs[:, 0:1], torch.cumsum((-rs2 + rs) * ws, dim=1) - w5 * rs[:, 0:1]), 1 - ) - - c4 = s[:, 0] + c < 0 - c3 = (d * w).sum(dim=1) + c > 0 - c2 = ~(c4 | c3) - - lb = torch.zeros(c2.sum(), device=device) - ub = torch.full_like(lb, w.shape[1] - 1) - nitermax = math.ceil(math.log2(w.shape[1])) - - s_, c_ = s[c2], c[c2] - for counter in range(nitermax): - counter4 = torch.floor((lb + ub) / 2) - counter2 = counter4.long().unsqueeze(1) - c3 = s_.gather(1, counter2).squeeze(1) + c_ > 0 - lb = torch.where(c3, counter4, lb) - ub = torch.where(c3, ub, counter4) - - lb = lb.long() - - if c4.any(): - alpha = c[c4] / w5[c4].squeeze(-1) - d[c4] = -alpha.unsqueeze(-1) * w[c4] - - if c2.any(): - alpha = (s[c2, lb] + c[c2]) / ws[c2, lb] + rs[c2, lb] - alpha[ws[c2, lb] == 0] = 0 - c5 = (alpha.unsqueeze(-1) > r[c2]).float() - d[c2] = d[c2] * c5 - alpha.unsqueeze(-1) * w[c2] * (1 - c5) - - return d * (w.abs() > 1e-8).float() - - -def projection_l1(points_to_project, w_hyperplane, b_hyperplane): - device = points_to_project.device - t, w, b = points_to_project, w_hyperplane.clone(), b_hyperplane - - c = (w * t).sum(1) - b - ind2 = 2 * (c >= 0) - 1 - w.mul_(ind2.unsqueeze(1)) - c.mul_(ind2) - - r = (1 / w).abs().clamp_max(1e12) - indr = torch.argsort(r, dim=1) - indr_rev = torch.argsort(indr) - - c6 = (w < 0).float() - d = (-t + c6) * (w != 0).float() - ds = torch.min(-w * t, w * (1 - t)).gather(1, indr) - ds2 = torch.cat((c.unsqueeze(-1), ds), 1) - s = torch.cumsum(ds2, dim=1) - - c2 = s[:, -1] < 0 - - lb = torch.zeros(c2.sum(), device=device) - ub = torch.full_like(lb, s.shape[1]) - nitermax = math.ceil(math.log2(w.shape[1])) - - s_ = s[c2] - for counter in range(nitermax): - counter4 = torch.floor((lb + ub) / 2) - counter2 = counter4.long().unsqueeze(1) - c3 = s_.gather(1, counter2).squeeze(1) > 0 - lb = torch.where(c3, counter4, lb) - ub = torch.where(c3, ub, counter4) - - lb2 = lb.long() - - if c2.any(): - indr = indr[c2].gather(1, lb2.unsqueeze(1)).squeeze(1) - u = torch.arange(0, w.shape[0], device=device).unsqueeze(1) - u2 = torch.arange(0, w.shape[1], device=device, dtype=torch.float).unsqueeze(0) - alpha = -s[c2, lb2] / w[c2, indr] - c5 = u2 < lb.unsqueeze(-1) - u3 = c5[u[: c5.shape[0]], indr_rev[c2]] - d[c2] = d[c2] * u3.float() - d[c2, indr] = alpha - - return d * (w.abs() > 1e-8).float() - - -def zero_gradients(x): - if isinstance(x, torch.Tensor): + def zero_gradients(self, x): if x.grad is not None: x.grad.detach_() x.grad.zero_() - elif isinstance(x, container_abcs.Iterable): - for elem in x: - zero_gradients(elem) + + def projection_linf(self, t2, w2, b2): + t = t2.clone().float() + w = w2.clone().float() + b = b2.clone().float() + + ind2 = torch.nonzero(torch.sum(w * t, 1) - b < 0) + w[ind2] *= -1 + b[ind2] *= -1 + + c5 = (w < 0).type(torch.FloatTensor).to(self.device) + a = torch.ones(t.shape).to(self.device) + d = (a * c5 - t) * (w != 0).type(torch.FloatTensor).to(self.device) + a -= a * (1 - c5) + + p = torch.ones(t.shape, device=self.device) * c5 - t * (2 * c5 - 1) + indp = torch.argsort(p, dim=1) + + b = b - torch.sum(w * t, 1) + b0 = torch.sum(w * d, 1) + b1 = b0.clone() + + indp2 = indp.unsqueeze(-1).flip(dims=(1, 2)).squeeze() + u = torch.arange(0, w.shape[0]) + ws = w[u.unsqueeze(1), indp2] + bs2 = -ws * d[u.unsqueeze(1), indp2] + + s = torch.cumsum(ws.abs(), dim=1) + sb = torch.cumsum(bs2, dim=1) + b0.unsqueeze(1) + + b2 = sb[u, -1] - s[u, -1] * p[u, indp[u, 0]] + c_l = torch.nonzero(b - b2 > 0).squeeze() + c2 = torch.nonzero((b - b1 > 0) * (b - b2 <= 0)).squeeze() + + lb = torch.zeros(c2.shape[0], device=self.device) + ub = torch.ones(c2.shape[0], device=self.device) * (w.shape[1] - 1) + nitermax = torch.ceil(torch.log2(torch.tensor(w.shape[1]).float())) + + for _ in range(int(nitermax.item())): + counter4 = torch.floor((lb + ub) / 2) + counter2 = counter4.type(torch.LongTensor) + indcurr = indp[c2, -counter2 - 1] + b2 = sb[c2, counter2] - s[c2, counter2] * p[c2, indcurr] + ind3 = b[c2] - b2 > 0 + ind32 = ~ind3 + lb[ind3] = counter4[ind3] + ub[ind32] = counter4[ind32] + + lb = lb.cpu().numpy().astype(int) + + if c_l.nelement != 0: + m = torch.max((b[c_l] - sb[c_l, -1]) / (-s[c_l, -1]), torch.zeros(sb[c_l, -1].shape, device=self.device)) # nopep8 + lmbd_opt = torch.unsqueeze(m, -1) + d[c_l] = (2 * a[c_l] - 1) * lmbd_opt + + m = torch.max((b[c2] - sb[c2, lb])/(-s[c2, lb]), torch.zeros(sb[c2, lb].shape, device=self.device)) # nopep8 + lmbd_opt = torch.unsqueeze(m, -1) + d[c2] = torch.min(lmbd_opt, d[c2]) * c5[c2] + torch.max(-lmbd_opt, d[c2]) * (1 - c5[c2]) # nopep8 + + return d * (w != 0).type(torch.FloatTensor).to(self.device) + + def linear_approximation_search(self, clean_images, clean_labels, adv_images, niter): + a1 = clean_images.clone() + a2 = adv_images.clone() + u = torch.arange(clean_images.shape[0]) + y1 = self.get_logits(a1) + y2 = self.get_logits(a2) + la2 = torch.argmax(y2, 1) + + for _ in range(niter): + t1 = (y1[u, clean_labels] - y1[u, la2]).reshape([-1, 1, 1, 1]) + t2 = (-(y2[u, clean_labels] - y2[u, la2])).reshape([-1, 1, 1, 1]) + + t3 = t1 / (t1 + t2 + 1e-10) + c3 = torch.logical_and(0.0 <= t3, t3 <= 1.0) + t3[~c3] = 1.0 + + a3 = a1 * (1.0 - t3) + a2 * t3 + y3 = self.get_logits(a3) + la3 = torch.argmax(y3, 1) + pred = la3 == clean_labels + + y1[pred] = y3[pred] + 0 + a1[pred] = a3[pred] + 0 + y2[~pred] = y3[~pred] + 0 + la2[~pred] = la3[~pred] + 0 + a2[~pred] = a3[~pred] + 0 + + return a2 diff --git a/torchattacks/attacks/fabl1.py b/torchattacks/attacks/fabl1.py new file mode 100644 index 00000000..ce3a3df0 --- /dev/null +++ b/torchattacks/attacks/fabl1.py @@ -0,0 +1,250 @@ +import torch +import torch.distributions.uniform as uniform + +from ..attack import Attack + + +class FABL1(Attack): + r""" + Fast Adaptive Boundary Attack (FAB) in the paper 'Minimally distorted Adversarial Examples with a Fast Adaptive Boundary Attack' + [https://arxiv.org/abs/1907.02044] + [https://github.com/fra31/fab-attack] + + Distance Measure : L1 + + Arguments: + model (nn.Module): model to attack. + eps (float): maximum perturbation. (Default: 8/255) + n_restarts (int): number of random restarts. (Default: 1) + n_iter (int): number of steps. (Default: 10) + alpha_max (float): alpha_max. (Default: 0.1) + eta (float): overshooting. (Default: 1.05) + beta (float): backward step. (Default: 0.9) + las (bool): final search. (Default: False) + + Shape: + - images: :math:`(N, C, H, W)` where `N = number of batches`, `C = number of channels`, `H = height` and `W = width`. It must have a range [0, 1]. + - labels: :math:`(N)` where each value :math:`y_i` is :math:`0 \leq y_i \leq` `number of labels`. + - output: :math:`(N, C, H, W)`. + + Examples:: + >>> attack = torchattacks.FABL1(model, eps=8/255, n_restarts=1, n_iter=10, alpha_max=0.1, eta=1.05, beta=0.9, las=False) + >>> adv_images = attack(images, labels) + + """ + + def __init__(self, model, eps=8/255, n_restarts=1, n_iter=10, alpha_max=0.1, eta=1.05, beta=0.9, las=False): + super().__init__("FABL1", model) + self.eps = eps + self.n_restarts = n_restarts + self.n_iter = n_iter + self.alpha_max = alpha_max + self.eta = eta + self.beta = beta + self.las = las + self.supported_mode = ["default", "targeted"] + + def forward(self, images, labels): + r""" + Overridden. + """ + + images = images.clone().detach().to(self.device) + labels = labels.clone().detach().to(self.device) + adv_images = self.perturb(images, labels) + + return adv_images + + def perturb(self, images, labels): + logits = self.get_logits(images) + pred = torch.argmax(logits, 1) == labels + pred1 = pred.clone() + im2 = images[pred].clone() + la2 = labels[pred].clone() + bs = torch.sum(pred) + u1 = torch.arange(bs) + + adv = im2.clone() + adv_c = images.clone() + res2 = torch.full((bs, ), 1e10, device=self.device) + x1 = torch.clone(im2) + x0 = torch.clone(im2).reshape(bs, -1) + eps = torch.full(res2.shape, self.eps, device=self.device) + + if self.targeted: + # The code provided in the original paper does not implement the target attack code, + # and the code here is implemented based on the relevant code in the original author's subsequent autoattack work. + # https://github.com/fra31/auto-attack + target_labels = self.get_target_label(images, labels) + la_target2 = target_labels[pred].detach().clone() + else: + la_target2 = None + + for counter_restarts in range(self.n_restarts): + if counter_restarts > 0: + # t = torch.rand(x1.shape[0], x1.shape[1], x1.shape[2], x1.shape[3]) # nopep8 + t = uniform.Uniform(-1, 1).sample(x1.shape).to(self.device) + a = torch.min(res2, eps).reshape((-1, 1, 1, 1)) * t + b = torch.sum(torch.abs(t).view(t.shape[0], -1), -1).view(t.shape[0], 1, 1, 1) # nopep8 + x1 = im2 + a / b * 0.5 + x1 = torch.clamp(x1, min=0.0, max=1.0) + + for _ in range(self.n_iter): + # print(i) + df, dg = self.get_diff_logits_grads_batch(x1, la2, la_target2) + dist1 = torch.abs(df) / torch.max(1e-8 + torch.abs(dg).reshape((df.shape[0], df.shape[1], -1)), 2)[0] # nopep8 + ind = torch.argmin(dist1, 1) + b = - df[u1, ind] + torch.sum(torch.reshape(dg[u1, ind] * x1, (bs, -1)), 1).to(self.device) # nopep8 + w = torch.reshape(dg[u1, ind], [bs, -1]).to(self.device) + x2 = torch.reshape(x1, (bs, -1)) + d3 = self.projection_l1(torch.cat((x2, x0), 0), torch.cat((w, w), 0), torch.cat((b, b), 0)) # nopep8 + d1 = torch.reshape(d3[:bs], x1.shape) + d2 = torch.reshape(d3[-bs:], x1.shape) + a0 = torch.sum(torch.abs(d3), dim=1, keepdim=True).view(-1, 1, 1, 1) # nopep8 + a0 = torch.max(a0, 1e-8 * torch.ones(a0.shape, device=self.device)) # nopep8 + a1 = a0[:bs] + a2 = a0[-bs:] + temp_var_1 = torch.max(a1 / (a1 + a2), torch.zeros(a1.shape, device=self.device)) # nopep8 + temp_var_2 = self.alpha_max * torch.ones(a1.shape, device=self.device) # nopep8 + alpha = torch.min(temp_var_1, temp_var_2) + x1 = torch.clamp((x1 + self.eta * d1) * (1 - alpha) + (im2 + d2 * self.eta) * alpha, min=0.0, max=1.0) # nopep8 + is_adv = torch.argmax(self.get_logits(x1), 1) != la2 + if torch.sum(is_adv) > 0: + temp_var = torch.reshape(x1[is_adv] - im2[is_adv], (torch.sum(is_adv), -1)) # nopep8 + t = torch.sum(torch.abs(temp_var).view(torch.sum(is_adv), -1), -1) # nopep8 + temp_var_3 = x1[is_adv] * (t < res2[is_adv]).float().reshape([-1, 1, 1, 1]) # nopep8 + temp_var_4 = adv[is_adv] * (t >= res2[is_adv]).float().reshape([-1, 1, 1, 1]) # nopep8 + adv[is_adv] = temp_var_3 + temp_var_4 + res2[is_adv] = t * (t < res2[is_adv]).float() + res2[is_adv] * (t >= res2[is_adv]).float() # nopep8 + x1[is_adv] = im2[is_adv] + (x1[is_adv] - im2[is_adv]) * self.beta # nopep8 + + if self.las: + adv = self.linear_approximation_search(im2, la2, adv, 3) + + adv_c[pred1] = adv + return adv_c + + def get_diff_logits_grads_batch(self, images, labels, target_labels=None): + images = images.clone().detach().requires_grad_() # make sure its was leaf node + # print(images.is_leaf) + + if not self.targeted: + logits = self.get_logits(images) + g2 = self.compute_jacobian(images, logits) + y2 = logits + df = y2 - torch.unsqueeze(y2[torch.arange(images.shape[0]), labels], 1) # nopep8 + dg = g2 - torch.unsqueeze(g2[torch.arange(images.shape[0]), labels], 1) # nopep8 + df[torch.arange(images.shape[0]), labels] = 1e10 + else: + u = torch.arange(images.shape[0]) + logits = self.get_logits(images) + diff_logits = -(logits[u, labels] - logits[u, target_labels]) + sum_diff = torch.sum(diff_logits) + + # jacobian + self.zero_gradients(images) + sum_diff.backward() + grad_diff = images.grad.data + df = torch.unsqueeze(diff_logits.detach(), 1) + dg = torch.unsqueeze(grad_diff, 1) + + return df, dg + + def compute_jacobian(self, images, logits): + num_classes = logits.shape[1] + jacobian = torch.zeros(num_classes, *images.size()).to(self.device) + grad_output = torch.zeros_like(logits).to(self.device) + + for i in range(num_classes): + self.zero_gradients(images) + grad_output.zero_() + grad_output[:, i] = 1 + logits.backward(grad_output, retain_graph=True) + jacobian[i] = images.grad.data + + return torch.transpose(jacobian, dim0=0, dim1=1) + + def zero_gradients(self, x): + if x.grad is not None: + x.grad.detach_() + x.grad.zero_() + + def projection_l1(self, t2, w2, b2): + t = t2.clone().float() + w = w2.clone().float() + b = b2.clone().float() + + c = torch.sum(w * t, 1) - b + ind2 = c < 0 + w[ind2] *= -1 + c[ind2] *= -1 + + r = torch.max(1 / w, -1 / w) + r = torch.min(r, 1e20 * torch.ones(r.shape, device=self.device)) # nopep8 + indr = torch.argsort(r, dim=1) + indr_rev = torch.argsort(indr) + + u = torch.arange(0, w.shape[0]).unsqueeze(1).to(self.device) + u2 = torch.arange(0, w.shape[1]).repeat(w.shape[0], 1).to(self.device) # nopep8 + + c6 = (w < 0).float() + d = (-t + c6) * (w != 0).float().to(self.device) + d2 = torch.min(-w * t, w * (1 - t)) + ds = d2[u, indr] + ds2 = torch.cat((c.unsqueeze(-1), ds), 1) + s = torch.cumsum(ds2, dim=1) + + c4 = s[:, -1] < 0 + c2 = c4.nonzero().squeeze(-1) + + lb = torch.zeros(c2.shape[0], device=self.device) + ub = torch.ones(c2.shape[0], device=self.device) * (s.shape[1]) + nitermax = torch.ceil(torch.log2(torch.tensor(s.shape[1]).float())) + counter2 = torch.zeros(lb.shape).type(torch.LongTensor) + + for _ in range(int(nitermax.item())): + counter4 = torch.floor((lb + ub)/2) + counter2 = counter4.type(torch.LongTensor) + ind3 = s[c2, counter2] > 0 + ind32 = ~ind3 + lb[ind3] = counter4[ind3] + ub[ind32] = counter4[ind32] + + lb2 = lb.cpu().numpy().astype(int) + if c2.nelement() != 0: + alpha = -s[c2, lb2] / w[c2, indr[c2, lb2]] + c5 = u2[c2].float() < lb.unsqueeze(-1).float() + u3 = c5[u[:c5.shape[0]], indr_rev[c2]] + d[c2] = d[c2] * u3.float() + d[c2, indr[c2, lb2]] = alpha + + return d + + def linear_approximation_search(self, clean_images, clean_labels, adv_images, niter): + a1 = clean_images.clone() + a2 = adv_images.clone() + u = torch.arange(clean_images.shape[0]) + y1 = self.get_logits(a1) + y2 = self.get_logits(a2) + la2 = torch.argmax(y2, 1) + + for _ in range(niter): + t1 = (y1[u, clean_labels] - y1[u, la2]).reshape([-1, 1, 1, 1]) + t2 = (-(y2[u, clean_labels] - y2[u, la2])).reshape([-1, 1, 1, 1]) + + t3 = t1 / (t1 + t2 + 1e-10) + c3 = torch.logical_and(0.0 <= t3, t3 <= 1.0) + t3[~c3] = 1.0 + + a3 = a1 * (1.0 - t3) + a2 * t3 + y3 = self.get_logits(a3) + la3 = torch.argmax(y3, 1) + pred = la3 == clean_labels + + y1[pred] = y3[pred] + 0 + a1[pred] = a3[pred] + 0 + y2[~pred] = y3[~pred] + 0 + la2[~pred] = la3[~pred] + 0 + a2[~pred] = a3[~pred] + 0 + + return a2 diff --git a/torchattacks/attacks/fabl2.py b/torchattacks/attacks/fabl2.py new file mode 100644 index 00000000..34d54810 --- /dev/null +++ b/torchattacks/attacks/fabl2.py @@ -0,0 +1,257 @@ +import torch +import torch.nn.functional as F +import torch.distributions.uniform as uniform + + +from ..attack import Attack + + +class FABL2(Attack): + r""" + Fast Adaptive Boundary Attack (FAB) in the paper 'Minimally distorted Adversarial Examples with a Fast Adaptive Boundary Attack' + [https://arxiv.org/abs/1907.02044] + [https://github.com/fra31/fab-attack] + + Distance Measure : L2 + + Arguments: + model (nn.Module): model to attack. + eps (float): maximum perturbation. (Default: 8/255) + n_restarts (int): number of random restarts. (Default: 1) + n_iter (int): number of steps. (Default: 10) + alpha_max (float): alpha_max. (Default: 0.1) + eta (float): overshooting. (Default: 1.05) + beta (float): backward step. (Default: 0.9) + las (bool): final search. (Default: False) + + Shape: + - images: :math:`(N, C, H, W)` where `N = number of batches`, `C = number of channels`, `H = height` and `W = width`. It must have a range [0, 1]. + - labels: :math:`(N)` where each value :math:`y_i` is :math:`0 \leq y_i \leq` `number of labels`. + - output: :math:`(N, C, H, W)`. + + Examples:: + >>> attack = torchattacks.FABL2(model, eps=8/255, n_restarts=1, n_iter=10, alpha_max=0.1, eta=1.05, beta=0.9, las=False) + >>> adv_images = attack(images, labels) + + """ + + def __init__(self, model, eps=8/255, n_restarts=1, n_iter=10, alpha_max=0.1, eta=1.05, beta=0.9, las=False): + super().__init__("FABL2", model) + self.eps = eps + self.n_restarts = n_restarts + self.n_iter = n_iter + self.alpha_max = alpha_max + self.eta = eta + self.beta = beta + self.las = las + self.supported_mode = ["default", "targeted"] + + def forward(self, images, labels): + r""" + Overridden. + """ + + images = images.clone().detach().to(self.device) + labels = labels.clone().detach().to(self.device) + adv_images = self.perturb(images, labels) + + return adv_images + + def perturb(self, images, labels): + logits = self.get_logits(images) + pred = torch.argmax(logits, 1) == labels + pred1 = pred.clone() + im2 = images[pred].clone() + la2 = labels[pred].clone() + bs = torch.sum(pred) + u1 = torch.arange(bs) + + adv = im2.clone() + adv_c = images.clone() + res2 = torch.full((bs, ), 1e10, device=self.device) + x1 = torch.clone(im2) + x0 = torch.clone(im2).reshape(bs, -1) + eps = torch.full(res2.shape, self.eps, device=self.device) + + if self.targeted: + # The code provided in the original paper does not implement the target attack code, + # and the code here is implemented based on the relevant code in the original author's subsequent autoattack work. + # https://github.com/fra31/auto-attack + target_labels = self.get_target_label(images, labels) + la_target2 = target_labels[pred].detach().clone() + else: + la_target2 = None + + for counter_restarts in range(self.n_restarts): + if counter_restarts > 0: + # t = torch.rand(x1.shape[0], x1.shape[1], x1.shape[2], x1.shape[3]) # nopep8 + t = uniform.Uniform(-1, 1).sample(x1.shape).to(self.device) + a = torch.min(res2, eps).reshape((-1, 1, 1, 1)) * t + b1 = torch.sum(torch.square(t).reshape(t.shape[0], -1), -1) + b2 = torch.sqrt(b1).reshape((-1, 1, 1, 1)) * 0.5 + x1 = im2 + a / b2 * 0.5 + x1 = torch.clamp(x1, min=0.0, max=1.0) + + for _ in range(self.n_iter): + # print(i) + df, dg = self.get_diff_logits_grads_batch(x1, la2, la_target2) + dist1 = torch.abs(df) / torch.sqrt(torch.sum(1e-12 + torch.square(dg).reshape(dg.shape[0], dg.shape[1], -1), -1)) # nopep8 + ind = torch.argmin(dist1, 1) + b = - df[u1, ind] + torch.sum(torch.reshape(dg[u1, ind] * x1, (bs, -1)), 1).to(self.device) # nopep8 + w = torch.reshape(dg[u1, ind], [bs, -1]).to(self.device) + x2 = torch.reshape(x1, (bs, -1)) + d3 = self.projection_l2(torch.cat((x2, x0), 0), torch.cat((w, w), 0), torch.cat((b, b), 0)) # nopep8 + d1 = torch.reshape(d3[:bs], x1.shape) + d2 = torch.reshape(d3[-bs:], x1.shape) + a0 = torch.sqrt(torch.sum(torch.square(d3), dim=1, keepdim=True)).view(-1, 1, 1, 1) # nopep8 + a0 = torch.max(a0, 1e-8 * torch.ones(a0.shape, device=self.device)) # nopep8 + a1 = a0[:bs] + a2 = a0[-bs:] + temp_var_1 = torch.max(a1 / (a1 + a2), torch.zeros(a1.shape, device=self.device)) # nopep8 + temp_var_2 = self.alpha_max * torch.ones(a1.shape, device=self.device) # nopep8 + alpha = torch.min(temp_var_1, temp_var_2) + x1 = torch.clamp((x1 + self.eta * d1) * (1 - alpha) + (im2 + d2 * self.eta) * alpha, min=0.0, max=1.0) # nopep8 + is_adv = torch.argmax(self.get_logits(x1), 1) != la2 + if torch.sum(is_adv) > 0: + temp_var = torch.reshape(x1[is_adv] - im2[is_adv], (torch.sum(is_adv), -1)) # nopep8 + t = torch.sqrt(torch.sum(torch.square(temp_var).view(torch.sum(is_adv), -1), -1)) # nopep8 + temp_var_3 = x1[is_adv] * (t < res2[is_adv]).float().reshape([-1, 1, 1, 1]) # nopep8 + temp_var_4 = adv[is_adv] * (t >= res2[is_adv]).float().reshape([-1, 1, 1, 1]) # nopep8 + adv[is_adv] = temp_var_3 + temp_var_4 + res2[is_adv] = t * (t < res2[is_adv]).float() + res2[is_adv] * (t >= res2[is_adv]).float() # nopep8 + x1[is_adv] = im2[is_adv] + (x1[is_adv] - im2[is_adv]) * self.beta # nopep8 + + if self.las: + adv = self.linear_approximation_search(im2, la2, adv, 3) + + adv_c[pred1] = adv + return adv_c + + def get_diff_logits_grads_batch(self, images, labels, target_labels=None): + images = images.clone().detach().requires_grad_() # make sure its was leaf node + # print(images.is_leaf) + + if not self.targeted: + logits = self.get_logits(images) + g2 = self.compute_jacobian(images, logits) + y2 = logits + df = y2 - torch.unsqueeze(y2[torch.arange(images.shape[0]), labels], 1) # nopep8 + dg = g2 - torch.unsqueeze(g2[torch.arange(images.shape[0]), labels], 1) # nopep8 + df[torch.arange(images.shape[0]), labels] = 1e10 + else: + u = torch.arange(images.shape[0]) + logits = self.get_logits(images) + diff_logits = -(logits[u, labels] - logits[u, target_labels]) + sum_diff = torch.sum(diff_logits) + + # jacobian + self.zero_gradients(images) + sum_diff.backward() + grad_diff = images.grad.data + df = torch.unsqueeze(diff_logits.detach(), 1) + dg = torch.unsqueeze(grad_diff, 1) + + return df, dg + + def compute_jacobian(self, images, logits): + num_classes = logits.shape[1] + jacobian = torch.zeros(num_classes, *images.size()).to(self.device) + grad_output = torch.zeros_like(logits).to(self.device) + + for i in range(num_classes): + self.zero_gradients(images) + grad_output.zero_() + grad_output[:, i] = 1 + logits.backward(grad_output, retain_graph=True) + jacobian[i] = images.grad.data + + return torch.transpose(jacobian, dim0=0, dim1=1) + + def zero_gradients(self, x): + if x.grad is not None: + x.grad.detach_() + x.grad.zero_() + + def projection_l2(self, t2, w2, b2): + t, w, b = t2, w2.clone(), b2 + + c = torch.sum(w * t, 1) - b + ind2 = 2 * (c >= 0) - 1 + w = torch.mul(w, torch.unsqueeze(ind2, 1)) + c = torch.mul(c, ind2) + + r = torch.clamp(torch.max(t / w, (t - 1) / w), min=-1e12, max=1e12) + r[torch.abs(w) < 1e-8] = 1e12 + r[r == -1e12] *= -1 + rs, indr = torch.sort(r, dim=1) + rs2 = F.pad(rs[:, 1:], (0, 1)) + rs[rs == 1e12] = 0 + rs2[rs2 == 1e12] = 0 + + w3s = (w ** 2).gather(1, indr) + w5 = w3s.sum(dim=1, keepdim=True) + ws = w5 - torch.cumsum(w3s, dim=1) + d = -(r * w) + d = torch.mul(d, (torch.abs(w) > 1e-8).float()) + temp_var_1 = -w5 * rs[:, 0:1] + temp_var_2 = torch.cumsum((-rs2 + rs) * ws, dim=1) - w5 * rs[:, 0:1] + s = torch.cat((temp_var_1, temp_var_2), 1) + + c4 = s[:, 0] + c < 0 + c3 = torch.sum(d * w, 1) + c > 0 + c2 = ~(c4 | c3) + + lb = torch.zeros(c2.sum(), device=self.device) + ub = torch.full_like(lb, w.shape[1] - 1) + nitermax = torch.ceil(torch.log2(torch.tensor(s.shape[1]).float())) + + s_, c_ = s[c2], c[c2] + for _ in range(int(nitermax.item())): + counter4 = torch.floor((lb + ub) / 2) + counter2 = counter4.long().unsqueeze(1) + c3 = s_.gather(1, counter2).squeeze(1) + c_ > 0 + lb = torch.where(c3, counter4, lb) + ub = torch.where(c3, ub, counter4) + + lb = lb.long() + + if c4.any(): + alpha = c[c4] / w5[c4].squeeze(-1) + d[c4] = -alpha.unsqueeze(-1) * w[c4] + + if c2.any(): + alpha = (s[c2, lb] + c[c2]) / ws[c2, lb] + rs[c2, lb] + alpha[ws[c2, lb] == 0] = 0 + c5 = (alpha.unsqueeze(-1) > r[c2]).float() + d[c2] = d[c2] * c5 - alpha.unsqueeze(-1) * w[c2] * (1 - c5) + + return d * (w != 0).type(torch.FloatTensor).to(self.device) + + def linear_approximation_search(self, clean_images, clean_labels, adv_images, niter): + a1 = clean_images.clone() + a2 = adv_images.clone() + u = torch.arange(clean_images.shape[0]) + y1 = self.get_logits(a1) + y2 = self.get_logits(a2) + la2 = torch.argmax(y2, 1) + + for _ in range(niter): + t1 = (y1[u, clean_labels] - y1[u, la2]).reshape([-1, 1, 1, 1]) + t2 = (-(y2[u, clean_labels] - y2[u, la2])).reshape([-1, 1, 1, 1]) + + t3 = t1 / (t1 + t2 + 1e-10) + c3 = torch.logical_and(0.0 <= t3, t3 <= 1.0) + t3[~c3] = 1.0 + + a3 = a1 * (1.0 - t3) + a2 * t3 + y3 = self.get_logits(a3) + la3 = torch.argmax(y3, 1) + pred = la3 == clean_labels + + y1[pred] = y3[pred] + 0 + a1[pred] = a3[pred] + 0 + y2[~pred] = y3[~pred] + 0 + la2[~pred] = la3[~pred] + 0 + a2[~pred] = a3[~pred] + 0 + + return a2 diff --git a/torchattacks/attacks/jsma.py b/torchattacks/attacks/jsma.py index 72f86e9f..62dae7c4 100644 --- a/torchattacks/attacks/jsma.py +++ b/torchattacks/attacks/jsma.py @@ -13,8 +13,9 @@ class JSMA(Attack): Arguments: model (nn.Module): model to attack. - theta (float): perturb length, range is either [theta, 0], [0, theta]. (Default: 1.0) - gamma (float): highest percentage of pixels can be modified. (Default: 0.1) + theta (float): the change made to pixels. (Default: 1.0) + gamma (float): the maximum distortion. (Default: 0.1) + increasing (bool): crafting perturbation by increasing or decreasing pixel intensities. (Default: True) Shape: - images: :math:`(N, C, H, W)` where `N = number of batches`, `C = number of channels`, `H = height` and `W = width`. It must have a range [0, 1]. @@ -22,15 +23,16 @@ class JSMA(Attack): - output: :math:`(N, C, H, W)`. Examples:: - >>> attack = torchattacks.JSMA(model, theta=1.0, gamma=0.1) + >>> attack = torchattacks.JSMA(model, theta=1.0, gamma=0.1, increasing=True) >>> adv_images = attack(images, labels) """ - def __init__(self, model, theta=1.0, gamma=0.1): + def __init__(self, model, theta=1.0, gamma=0.1, increasing=True): super().__init__("JSMA", model) self.theta = theta self.gamma = gamma + self.increasing = increasing self.supported_mode = ["default", "targeted"] def forward(self, images, labels): @@ -40,6 +42,8 @@ def forward(self, images, labels): images = images.clone().detach().to(self.device) labels = labels.clone().detach().to(self.device) + # only predict one image + class_num = self.get_logits(torch.unsqueeze(images[0], 0)).shape[1] if self.targeted: target_labels = self.get_target_label(images, labels) @@ -49,163 +53,115 @@ def forward(self, images, labels): # (we have no control over the convergence of the attack to a data point that is NOT equal to the original class), # so we make the default setting of the target label is right circular shift # to make attack work if user didn't set target label. - target_labels = (labels + 1) % 10 - - adv_images = None - for im, tl in zip(images, target_labels): - # Since the attack uses the Jacobian-matrix, - # if we input a large number of images directly into it, - # the processing will be very complicated, - # here, in order to simplify the processing, - # we only process one image at a time. - # Shape of MNIST is [-1, 1, 28, 28], - # and shape of CIFAR10 is [-1, 3, 32, 32]. - pert_image = self.perturbation_single( - torch.unsqueeze(im, 0), torch.unsqueeze(tl, 0) - ) - try: - adv_images = torch.cat((adv_images, pert_image), 0) - except Exception: - adv_images = pert_image + target_labels = (labels + 1) % class_num + + adv_images = images + dim_x = int(np.prod(images.shape[1:])) + max_iter = int(dim_x * self.gamma / 2) + search_space = torch.ones(images.shape[0], dim_x).to(self.device) + adv_prediction = torch.argmax(self.get_logits(adv_images), 1) + + # Algorithm 2 + i = 0 + while torch.sum(adv_prediction != target_labels) != 0 and i < max_iter and torch.sum(search_space != 0) != 0: + grads_target, grads_other = self.compute_forward_derivative( + adv_images, target_labels, class_num) + p1, p2 = self.saliency_map( + search_space, grads_target, grads_other, target_labels) + + cond = (adv_prediction != target_labels) + self.update_search_space(search_space, p1, p2, cond) + adv_images = self.update_adv_images(adv_images, p1, p2, cond) + adv_prediction = torch.argmax(self.get_logits(adv_images), 1) + i += 1 adv_images = torch.clamp(adv_images, min=0, max=1) return adv_images - def compute_jacobian(self, image): - var_image = image.clone().detach() - var_image.requires_grad = True - output = self.get_logits(var_image) - - num_features = int(np.prod(var_image.shape[1:])) - jacobian = torch.zeros([output.shape[1], num_features]) - for i in range(output.shape[1]): - if var_image.grad is not None: - var_image.grad.zero_() - output[0][i].backward(retain_graph=True) - # Copy the derivative to the target place - jacobian[i] = ( - var_image.grad.squeeze().view(-1, num_features).clone() - ) # nopep8 - - return jacobian.to(self.device) - - @torch.no_grad() - def saliency_map( - self, jacobian, target_label, increasing, search_space, nb_features - ): - # The search domain - domain = torch.eq(search_space, 1).float() - # The sum of all features' derivative with respect to each class - all_sum = torch.sum(jacobian, dim=0, keepdim=True) - # The forward derivative of the target class - target_grad = jacobian[target_label] - # The sum of forward derivative of other classes - others_grad = all_sum - target_grad - - # This list blanks out those that are not in the search domain - if increasing: - increase_coef = 2 * (torch.eq(domain, 0)).float().to(self.device) - else: - increase_coef = -1 * 2 * (torch.eq(domain, 0)).float().to(self.device) - increase_coef = increase_coef.view(-1, nb_features) - - # Calculate sum of target forward derivative of any 2 features. - target_tmp = target_grad.clone() - target_tmp -= increase_coef * torch.max(torch.abs(target_grad)) - # PyTorch will automatically extend the dimensions - alpha = target_tmp.view(-1, 1, nb_features) + target_tmp.view( - -1, nb_features, 1 - ) - # Calculate sum of other forward derivative of any 2 features. - others_tmp = others_grad.clone() - others_tmp += increase_coef * torch.max(torch.abs(others_grad)) - beta = others_tmp.view(-1, 1, nb_features) + others_tmp.view(-1, nb_features, 1) - - # Zero out the situation where a feature sums with itself - tmp = np.ones((nb_features, nb_features), int) - np.fill_diagonal(tmp, 0) - zero_diagonal = torch.from_numpy(tmp).byte().to(self.device) - - # According to the definition of saliency map in the paper (formulas 8 and 9), - # those elements in the saliency map that doesn't satisfy the requirement will be blanked out. - if increasing: - mask1 = torch.gt(alpha, 0.0) - mask2 = torch.lt(beta, 0.0) - else: - mask1 = torch.lt(alpha, 0.0) - mask2 = torch.gt(beta, 0.0) - - # Apply the mask to the saliency map - mask = torch.mul(torch.mul(mask1, mask2), zero_diagonal.view_as(mask1)) - # Do the multiplication according to formula 10 in the paper - saliency_map = torch.mul(torch.mul(alpha, torch.abs(beta)), mask.float()) - # Get the most significant two pixels - max_idx = torch.argmax(saliency_map.view(-1, nb_features * nb_features), dim=1) - # p = max_idx // nb_features - p = torch.div(max_idx, nb_features, rounding_mode="floor") - # q = max_idx % nb_features - q = max_idx - p * nb_features - return p, q - - def perturbation_single(self, image, target_label): - """ - image: only one element - label: only one element - """ - var_image = image - var_label = target_label - var_image = var_image.to(self.device) - var_label = var_label.to(self.device) - - if self.theta > 0: - increasing = True - else: - increasing = False - - num_features = int(np.prod(var_image.shape[1:])) - shape = var_image.shape + def update_adv_images(self, adv_images, p1, p2, cond): + origin_shape = adv_images.shape + adv_images = adv_images.view(adv_images.shape[0], -1) + for idx in range(adv_images.shape[0]): + if cond[idx]: + if self.increasing: + # Section IV, A + adv_images[idx, p1[idx]] += self.theta + adv_images[idx, p2[idx]] += self.theta + else: + # Section IV, B + adv_images[idx, p1[idx]] -= self.theta + adv_images[idx, p2[idx]] -= self.theta - # Perturb two pixels in one iteration, thus max_iters is divided by 2 - max_iters = int(np.ceil(num_features * self.gamma / 2.0)) + adv_images = torch.clamp(adv_images, min=0, max=1) + adv_images = adv_images.view(origin_shape) + return adv_images - # Masked search domain, if the pixel has already reached the top or bottom, we don't bother to modify it - if increasing: - search_domain = torch.lt(var_image, 0.99) + def update_search_space(self, search_space, p1, p2, cond): + # Algorithm 2 line 10 and line 11 + p1_cond = torch.logical_or(p1 == 0, p1 == 1) + p2_cond = torch.logical_or(p2 == 0, p2 == 1) + + # Early stop + p1_cond = torch.logical_or(p1_cond, cond) + p2_cond = torch.logical_or(p2_cond, cond) + + for ind in range(search_space.shape[0]): + if p1_cond[ind]: + search_space[ind, p1[ind]] = False + if p2_cond[ind]: + search_space[ind, p2[ind]] = False + + def jacobian(self, adv_images, class_num): + tmp_images = adv_images.detach().clone() + tmp_images.requires_grad = True + jacobians = [] + output = self.get_logits(tmp_images) + + for n in range(class_num): + if tmp_images.grad is not None: + tmp_images.grad.zero_() + torch.sum(output[:, n]).backward(retain_graph=True) + grad = tmp_images.grad.detach().clone() + jacobians.append(grad) + + jacobians = torch.stack(jacobians, 0) + return jacobians + + def compute_forward_derivative(self, adv_images, target_labels, class_num): + jacobians = self.jacobian(adv_images, class_num) + grads = jacobians.view((jacobians.shape[0], jacobians.shape[1], -1)) + grads_target = grads[target_labels, range(len(target_labels)), :] + grads_other = grads.sum(dim=0) - grads_target + return grads_target, grads_other + + def sum_pair(self, grads, dim): + # Eq 8 and Eq 9 + return grads.view(-1, dim, 1) + grads.view(-1, 1, dim) + + def and_pair(self, cond, dim): + return cond.view(-1, dim, 1) & cond.view(-1, 1, dim) + + def saliency_map(self, search_space, grads_target, grads_other, y): + dim = search_space.shape[1] + # alpha in Algorithm 3 line 2 + gradsum_target = self.sum_pair(grads_target, dim) + # beta in Algorithm 3 line 3 + gradsum_other = self.sum_pair(grads_other, dim) + + # Algorithm 3 line 4 + if self.increasing: + scores_mask = torch.logical_and( + gradsum_target > 0, gradsum_other < 0) else: - search_domain = torch.gt(var_image, 0.01) - - search_domain = search_domain.view(num_features) - output = self.get_logits(var_image) - current_pred = torch.argmax(output.data, 1) - - iter = 0 - while ( - (iter < max_iters) - and (current_pred != target_label) - and (search_domain.sum() != 0) - ): - # Calculate Jacobian matrix of forward derivative - jacobian = self.compute_jacobian(var_image) - # Get the saliency map and calculate the two pixels that have the greatest influence - p1, p2 = self.saliency_map( - jacobian, var_label, increasing, search_domain, num_features - ) - # Apply modifications - # var_sample_flatten = var_image.view(-1, num_features).clone().detach_() - var_sample_flatten = var_image.view(-1, num_features) - var_sample_flatten[0, p1] += self.theta - var_sample_flatten[0, p2] += self.theta - - new_image = torch.clamp(var_sample_flatten, min=0.0, max=1.0) - new_image = new_image.view(shape) - search_domain[p1] = 0 - search_domain[p2] = 0 - # var_image = new_image.clone().detach().to(self.device) - var_image = new_image.to(self.device) - - output = self.get_logits(var_image) - current_pred = torch.argmax(output.data, 1) - iter += 1 - - adv_image = var_image - return adv_image + scores_mask = torch.logical_and( + gradsum_target < 0, gradsum_other > 0) + + search_space_mask = self.and_pair(search_space != 0, dim) + scores_mask = torch.logical_and(scores_mask, search_space_mask) + scores_mask[:, range(dim), range(dim)] = 0 + scores = scores_mask.float() * (-1 * gradsum_target * gradsum_other) + best_indices = torch.argmax(scores.view(-1, dim * dim), 1) + + p1 = torch.remainder(best_indices, dim) + p2 = ((best_indices - p1) / dim).to(torch.long) + return p1, p2 diff --git a/torchattacks/attacks/mifgsm.py b/torchattacks/attacks/mifgsm.py index fc65d191..4d2baa6d 100644 --- a/torchattacks/attacks/mifgsm.py +++ b/torchattacks/attacks/mifgsm.py @@ -48,14 +48,13 @@ def forward(self, images, labels): if self.targeted: target_labels = self.get_target_label(images, labels) - momentum = torch.zeros_like(images).detach().to(self.device) loss = nn.CrossEntropyLoss() - adv_images = images.clone().detach() + adv_images.requires_grad = True + momentum = torch.zeros_like(images).detach().to(self.device) for _ in range(self.steps): - adv_images.requires_grad = True outputs = self.get_logits(adv_images) # Calculate loss @@ -70,11 +69,10 @@ def forward(self, images, labels): )[0] grad = grad / torch.mean(torch.abs(grad), dim=(1, 2, 3), keepdim=True) - grad = grad + momentum * self.decay - momentum = grad + momentum = self.decay * momentum + grad - adv_images = adv_images.detach() + self.alpha * grad.sign() + adv_images = adv_images + self.alpha * torch.sign(momentum) delta = torch.clamp(adv_images - images, min=-self.eps, max=self.eps) - adv_images = torch.clamp(images + delta, min=0, max=1).detach() + adv_images = torch.clamp(images + delta, min=0, max=1) return adv_images