adversarial-attacks-pytorch
adversarial-attacks-pytorch(又名 Torchattacks)是一个基于 PyTorch 构建的开源库,旨在帮助开发者轻松生成“对抗样本”。所谓对抗样本,是指通过对原始图像添加人眼难以察觉的微小扰动,从而误导人工智能模型做出错误判断的数据。该工具主要解决了在深度学习研究中,复现和实现各类对抗攻击算法门槛高、代码重复编写繁琐的问题,让研究人员能专注于模型鲁棒性的评估与改进,而非底层攻击逻辑的实现。
它非常适合从事人工智能安全研究的研究员、需要测试模型稳定性的算法工程师,以及高校中相关领域的师生使用。adversarial-attacks-pytorch 的最大亮点在于其高度友好的"PyTorch 原生风格”接口设计。用户只需几行代码即可调用 PGD 等经典攻击算法,无需复杂配置。此外,它内置了自动归一化处理与输入范围裁剪机制,严格遵循计算机视觉领域的通用标准,并支持通过设置确定性模式来确保实验结果的可复现性。无论是用于学术探索还是工业界的模型压力测试,它都是一个高效且可靠的得力助手。
使用场景
某自动驾驶初创公司的算法团队正在对车载行人检测模型进行安全压力测试,试图找出模型在极端干扰下的识别漏洞。
没有 adversarial-attacks-pytorch 时
- 重复造轮子耗时久:工程师需手动复现 FGSM、PGD 等经典攻击算法的数学公式,花费数周编写底层梯度计算代码,极易出错。
- 接口适配成本高:每次更换测试模型架构,都要重新调整输入数据的归一化范围和裁剪逻辑,导致测试脚本无法通用。
- 实验结果难复现:由于缺乏统一的随机种子管理和确定性后端设置,不同成员生成的对抗样本不一致,难以横向对比模型鲁棒性。
- 维护负担重:自行编写的攻击代码缺乏文档和社区支持,一旦 PyTorch 版本升级,内部工具链往往需要大规模重构。
使用 adversarial-attacks-pytorch 后
- 开箱即用效率高:通过
torchattacks.PGD等几行代码即可调用多种成熟攻击算法,将原本数周的开发周期缩短至几小时。 - 标准化流程顺畅:工具自动处理输入域 [0, 1] 的约束及归一化参数设置,无缝适配 torchvision 主流模型,实现“一次编写,到处运行”。
- 结果稳定可信赖:内置确定性计算支持,固定随机种子后即可精确复现相同的对抗样本,确保团队评估基准一致。
- 生态集成便捷:可直接与 MAIR 训练框架或 RobustBench 基准库联动,快速构建从攻击生成到防御训练的完整闭环。
adversarial-attacks-pytorch 将复杂的对抗攻击理论转化为标准化的工程实践,让开发者能专注于提升模型鲁棒性而非底层算法实现。
运行环境要求
- 未说明
非必需(支持 CPU),若使用 GPU 需注意设置 torch.backends.cudnn.deterministic = True 以保证结果可复现,具体型号和显存未说明
未说明

快速开始
对抗攻击-PyTorch
Torchattacks 是一个 PyTorch 库,提供了用于生成对抗样本的对抗攻击方法。
它拥有 类似 PyTorch 的接口和函数,使得 PyTorch 用户更容易实现对抗攻击。
import torchattacks
atk = torchattacks.PGD(model, eps=8/255, alpha=2/255, steps=4)
# 如果输入已经归一化,则
# atk.set_normalization_used(mean=[...], std=[...])
adv_images = atk(images, labels)
其他推荐的包。
- MAIR: 对抗训练框架,NeurIPS'23 主赛道。
- RobustBench: 对抗训练模型与基准测试,NeurIPS'21 数据集与基准测试赛道。
引用。如果您使用本包,请引用以下 BibTex(GoogleScholar):
@article{kim2020torchattacks,
title={Torchattacks: A pytorch repository for adversarial attacks},
author={Kim, Hoki},
journal={arXiv preprint arXiv:2010.01950},
year={2020}
}
:hammer: 要求与安装
要求
- PyTorch 版本 >=1.4.0
- Python 版本 >=3.6
安装
# pip
pip install torchattacks
# 源码
pip install git+https://github.com/Harry24k/adversarial-attacks-pytorch.git
# git 克隆
git clone https://github.com/Harry24k/adversarial-attacks-pytorch.git
cd adversarial-attacks-pytorch/
pip install -e .
:rocket: 开始使用
注意事项
- 所有模型应仅返回形状为
(N, C)的单个向量,其中C为类别数。 考虑到 torchvision.models 中大多数模型都返回形状为(N,C)的向量,其中N是输入数量,C是类别数,因此 torchattacks 也仅支持有限形式的输出。请仔细检查模型输出的形状。 - 输入数据的取值范围应在 [0, 1] 之间。 由于扰动后始终会进行裁剪操作,原始输入应具有 [0, 1] 的范围,这也是视觉领域的通用设置。
- 设置
torch.backends.cudnn.deterministic = True以在固定随机种子下获得相同的对抗样本。 在 GPU 上使用浮点张量时,某些操作是非确定性的 [讨论]。如果您希望对相同输入得到相同结果,请运行torch.backends.cudnn.deterministic = True[参考]。
针对性模式
- 随机目标标签
# 随机标签作为目标标签。 atk.set_mode_targeted_random() - 最不可能的标签
# 将概率最小的第 k 个标签作为目标标签。 atk.set_mode_targeted_least_likely(kth_min) - 自定义函数
# 通过映射函数获取的目标标签。 # 将所有类别循环右移一位,1=>2,2=>3,..,9=>0 atk.set_mode_targeted_by_function(target_map_function=lambda images, labels:(labels+1)%10) - 指定标签
atk.set_mode_targeted_by_label(quiet=True) # 将所有类别循环右移一位,1=>2,2=>3,..,9=>0 target_labels = (labels + 1) % 10 adv_images = atk(images, target_labels) - 恢复默认模式
atk.set_mode_default()
- 随机目标标签
保存对抗图像
# 保存 atk.save(data_loader, save_path="./data.pt", verbose=True) # 加载 adv_loader = atk.load(load_path="./data.pt")攻击过程中的训练/评估
# 对于基于 RNN 的模型,我们无法在评估模式下计算梯度。 # 因此,在攻击过程中应将其切换回训练模式。 atk.set_model_training_mode(model_training=False, batchnorm_training=False, dropout_training=False)组合多种攻击
- 强力攻击
atk1 = torchattacks.FGSM(model, eps=8/255) atk2 = torchattacks.PGD(model, eps=8/255, alpha=2/255, iters=40, random_start=True) atk = torchattacks.MultiAttack([atk1, atk2]) - CW 的二分搜索
atk1 = torchattacks.CW(model, c=0.1, steps=1000, lr=0.01) atk2 = torchattacks.CW(model, c=1, steps=1000, lr=0.01) atk = torchattacks.MultiAttack([atk1, atk2]) - 随机重启
atk1 = torchattacks.PGD(model, eps=8/255, alpha=2/255, iters=40, random_start=True) atk2 = torchattacks.PGD(model, eps=8/255, alpha=2/255, iters=40, random_start=True) atk = torchattacks.MultiAttack([atk1, atk2])
- 强力攻击
:page_with_curl: 支持的攻击
括号内为距离度量。
| 名称 | 论文 | 备注 |
|---|---|---|
| FGSM (Linf) |
解释与利用对抗样本 (Goodfellow et al., 2014) | |
| BIM (Linf) |
物理世界中的对抗样本 (Kurakin et al., 2016) | 基本迭代方法或迭代-FSGM |
| CW (L2) |
评估神经网络的鲁棒性 (Carlini et al., 2016) | |
| RFGSM (Linf) |
集成对抗训练:攻击与防御 (Tramèr et al., 2017) | 随机初始化 + FGSM |
| PGD (Linf) |
构建对抗攻击鲁棒的深度学习模型 (Mardry et al., 2017) | 投影梯度法 |
| PGDL2 (L2) |
构建对抗攻击鲁棒的深度学习模型 (Mardry et al., 2017) | 投影梯度法 |
| MIFGSM (Linf) |
利用动量增强对抗攻击 (Dong et al., 2017) | :heart_eyes: 贡献者 zhuangzi926, huitailangyz |
| TPGD (Linf) |
理论上合理的鲁棒性与准确率之间的权衡 (Zhang et al., 2019) | |
| EOTPGD (Linf) |
对“Adv-BNN:通过鲁棒贝叶斯神经网络改进对抗防御”的评论 (Zimmermann, 2019) | EOT+PGD |
| APGD (Linf, L2) |
使用多样化的无参数攻击集合可靠地评估对抗鲁棒性 (Croce et al., 2020) | |
| APGDT (Linf, L2) |
使用多样化的无参数攻击集合可靠地评估对抗鲁棒性 (Croce et al., 2020) | 目标APGD |
| FAB (Linf, L2, L1) |
以快速自适应边界攻击生成失真最小的对抗样本 (Croce et al., 2019) | |
| Square (Linf, L2) |
Square攻击:一种基于随机搜索的高效黑盒对抗攻击 (Andriushchenko et al., 2019) | |
| AutoAttack (Linf, L2) |
使用多样化的无参数攻击集合可靠地评估对抗鲁棒性 (Croce et al., 2020) | APGD+APGDT+FAB+Square |
| DeepFool (L2) |
DeepFool:一种简单且精确的欺骗深度神经网络的方法 (Moosavi-Dezfooli et al., 2016) | |
| OnePixel (L0) |
用于欺骗深度神经网络的一像素攻击 (Su et al., 2019) | |
| SparseFool (L0) |
SparseFool:少量像素就能产生巨大影响 (Modas et al., 2019) | |
| DIFGSM (Linf) |
通过输入多样性提高对抗样本的迁移性 (Xie et al., 2019) | :heart_eyes: 贡献者 taobai |
| TIFGSM (Linf) |
通过平移不变攻击规避防御并实现可迁移的对抗样本 (Dong et al., 2019) | :heart_eyes: 贡献者 taobai |
| NIFGSM (Linf) |
用于对抗攻击的Nesterov加速梯度和尺度不变性 (Lin, et al., 2022) | :heart_eyes: 贡献者 Zhijin-Ge |
| SINIFGSM (Linf) |
用于对抗攻击的Nesterov加速梯度和尺度不变性 (Lin, et al., 2022) | :heart_eyes: 贡献者 Zhijin-Ge |
| VMIFGSM (Linf) |
通过方差调优提升对抗攻击的迁移性 (Wang, et al., 2022) | :heart_eyes: 贡献者 Zhijin-Ge |
| VNIFGSM (Linf) |
通过方差调优提升对抗攻击的迁移性 (Wang, et al., 2022) | :heart_eyes: 贡献者 Zhijin-Ge |
| Jitter (Linf) |
探索鲁棒神经网络的误分类以增强对抗攻击 (Schwinn, Leo, et al., 2021) | |
| Pixle (L0) |
Pixle:一种基于像素重排的快速有效的黑盒攻击 (Pomponi, Jary, et al., 2022) | |
| LGV (Linf, L2, L1, L0) |
LGV:从大范围几何邻域提升对抗样本的迁移性 (Gubri, et al., 2022) | :heart_eyes: 贡献者 Martin Gubri |
| SPSA (Linf) |
对抗风险及使用弱攻击进行评估的危险性 (Uesato, Jonathan, et al., 2018) | :heart_eyes: 贡献者 Riko Naka |
| JSMA (L0) |
深度学习在对抗环境中的局限性 (Papernot, Nicolas, et al., 2016) | :heart_eyes: 贡献者 Riko Naka |
| EADL1 (L1) |
EAD:针对深度神经网络的弹性网攻击 (Chen, Pin-Yu, et al., 2018) | :heart_eyes: 贡献者 Riko Naka |
| EADEN (L1, L2) |
EAD:针对深度神经网络的弹性网攻击 (Chen, Pin-Yu, et al., 2018) | :heart_eyes: 贡献者 Riko Naka |
| PIFGSM (PIM) (Linf) |
用于欺骗深度神经网络的补丁式攻击 (Gao, Lianli, et al., 2020) | :heart_eyes: 贡献者 Riko Naka |
| PIFGSM++ (PIM++) (Linf) |
用于对抗目标攻击的补丁式++扰动 (Gao, Lianli, et al., 2021) | :heart_eyes: 贡献者 Riko Naka |
:bar_chart: 性能对比
在比较的工具包中,我们选择了当前最新更新且引用次数最多的几种方法:
对比了针对 CIFAR10 前 50 张图像的每种攻击下的鲁棒准确率及运行耗时。对于 L2 攻击,记录了对抗样本与原始样本之间的平均 L2 距离。所有实验均在 GeForce RTX 2080 上进行。如需查看最新版本,请参阅此处(代码,nbviewer)。
| 攻击 | 工具包 | 标准 | Wong2020Fast | Rice2020Overfitting | 备注 |
|---|---|---|---|---|---|
| FGSM (Linf) | Torchattacks | 34% (54ms) | 48% (5ms) | 62% (82ms) | |
| Foolbox* | 34% (15ms) | 48% (8ms) | 62% (30ms) | ||
| ART | 34% (214ms) | 48% (59ms) | 62% (768ms) | ||
| PGD (Linf) | Torchattacks | 0% (174ms) | 44% (52ms) | 58% (1348ms) | :crown: 最快 |
| Foolbox* | 0% (354ms) | 44% (56ms) | 58% (1856ms) | ||
| ART | 0% (1384 ms) | 44% (437ms) | 58% (4704ms) | ||
| CW† (L2) | Torchattacks | 0% / 0.40 (2596ms) |
14% / 0.61 (3795ms) |
22% / 0.56 (43484ms) |
:crown: 成功率最高 :crown: 最快 |
| Foolbox* | 0% / 0.40 (2668ms) |
32% / 0.41 (3928ms) |
34% / 0.43 (44418ms) |
||
| ART | 0% / 0.59 (196738ms) |
24% / 0.70 (66067ms) |
26% / 0.65 (694972ms) |
||
| PGD (L2) | Torchattacks | 0% / 0.41 (184ms) | 68% / 0.5 (52ms) |
70% / 0.5 (1377ms) |
:crown: 最快 |
| Foolbox* | 0% / 0.41 (396ms) | 68% / 0.5 (57ms) |
70% / 0.5 (1968ms) |
||
| ART | 0% / 0.40 (1364ms) | 68% / 0.5 (429ms) |
70% / 0.5 (4777ms) |
* 需要注意的是,Foolbox 会同时返回准确率和对抗样本,因此生成对抗样本的 实际 时间可能比记录的时间更短。
†考虑到用于确定常数 c 的二分搜索算法可能较为耗时,Torchattacks 支持使用 MutliAttack 对 c 进行网格搜索。
此外,我还推荐使用最近提出的一个工具包,Rai-toolbox。
| 攻击 | 工具包 | 每步时间/准确率 |
|---|---|---|
| FGSM (Linf) | rai-toolbox | 58 ms (0%) |
| Torchattacks | 81 ms (0%) | |
| Foolbox | 105 ms (0%) | |
| ART | 83 ms (0%) | |
| PGD (Linf) | rai-toolbox | 58 ms (44%) |
| Torchattacks | 79 ms (44%) | |
| Foolbox | 82 ms (44%) | |
| ART | 90 ms (44%) | |
| PGD (L2) | rai-toolbox | 58 ms (70%) |
| Torchattacks | 81 ms (70%) | |
| Foolbox | 82 ms (70%) | |
| ART | 89 ms (70%) |
Rai-toolbox 采用了一种独特的基于梯度扰动的方法:它们通过 参数变换优化器 和 扰动模型 来实现。这使得用户能够以与标准 PGD 攻击相同的范式来实现多种算法(例如 通用扰动 和 稀疏梯度的概念探测)。
版本历史
v3.5.12023/10/20v3.5.02023/10/20v3.4.02023/03/27v3.3.02022/10/03v3.2.62022/04/10v3.2.52022/04/10v3.2.42022/04/10v3.2.32021/12/09v3.0.02021/07/08v2.10.22020/12/04常见问题
相似工具推荐
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。
