# torch_pgd **Repository Path**: xiesan/torch_pgd ## Basic Information - **Project Name**: torch_pgd - **Description**: 基于torch完成了对数据的pgd攻击,输入图片,输出攻击后的成功率和攻击后的图片。 - **Primary Language**: Python - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-11-03 - **Last Updated**: 2024-11-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # torch_pgd #### 介绍 基于torch完成了对数据的pgd攻击,输入图片,输出攻击后的成功率和攻击后的图片。 #### 软件架构 ##### 1. 导入必要的库 ```python import numpy as np import json import torch import torch.nn as nn import torch.utils.data as Data import torchvision.utils from torchvision import models import torchvision.datasets as dsets import torchvision.transforms as transforms import matplotlib.pyplot as plt import os ``` - 这些库提供了数值计算、深度学习、数据加载和处理、可视化等功能。 ##### 2. 设备设置 ```python device = torch.device("cuda" if torch.cuda.is_available() else "cpu") ``` - 检测是否有可用的 GPU,如果有,则使用 GPU,否则使用 CPU。 ##### 3. 加载 ImageNet 标签 ```python with open("./data/imagenet_class_index.json") as f: class_idx = json.load(f) idx2label = [class_idx[str(k)][1] for k in range(len(class_idx))] ``` - 从 JSON 文件中加载 ImageNet 的类标签,并创建一个从索引到标签名称的映射。 ##### 4. 图像预处理 ```python transform = transforms.Compose([ transforms.Resize((299, 299)), transforms.ToTensor(), ]) ``` - 定义图像预处理流程,包括调整图像大小和转换为张量格式。 ##### 5. 自定义数据加载函数 ```python def image_folder_custom_label(root, transform, custom_label): ... ``` - 定义一个函数来加载数据集,并将标签转换为自定义标签。这里使用 `ImageFolder` 进行图像分类数据的加载。 ##### 6. 加载数据 ```python normal_data = image_folder_custom_label(root='./data/imagenet', transform=transform, custom_label=idx2label) normal_loader = Data.DataLoader(normal_data, batch_size=1, shuffle=False) ``` - 使用自定义函数加载数据集并创建数据加载器。 ##### 7. 可视化函数 ```python def imshow(img, title): ... ``` - 定义一个函数用于可视化图像,并显示标题。 ##### 8. 加载预训练模型 ```python model = models.inception_v3(weights='IMAGENET1K_V1').to(device) model.eval() ``` - 加载预训练的 Inception v3 模型,并将其设置为评估模式。 ##### 9. PGD 攻击实现 ```python def pgd_attack(model, images, labels, eps=0.3, alpha=2/255, iters=40): ... ``` - 定义 PGD 攻击的实现,计算对抗样本。通过迭代更新图像,使其在给定的 ε 范围内最大化模型的损失。 ##### 10. 攻击后的测试 ```python for i, (images, labels) in enumerate(normal_loader): ... ``` - 对每个图像进行 PGD 攻击,输出攻击前后的预测结果,并可视化攻击后的对抗样本。 - 计算准确率以评估模型在对抗攻击下的性能。 ##### 11. 结果输出 ```python print('Accuracy after attack: {:.2f}%'.format(100 * float(correct) / total)) ``` - 输出攻击后的准确率,评估模型的鲁棒性。 ##### 总结 整体架构包括数据预处理、模型加载、对抗攻击实现和结果评估。代码逻辑清晰,遵循了深度学习常见的流程,适合进行对抗样本的研究和分析。可以根据需要调整攻击参数(如 `eps`、`alpha` 和 `iters`)以观察对模型性能的影响。 #### 安装教程 下载到本地后使用python运行 #### 使用说明 1. 在data/imagenet下存储攻击对象图片 2. 在def pgd_attack(model, images, labels, eps=0.3, alpha=2/255, iters=40)定义了初始化攻击参数,可以进行调参 3. 注意需要下载python对应的包`pip install numpy torch torchvision matplotlib` #### 参与贡献 1. xie_san