项目介绍:Foolbox
Foolbox 是一个使用 Python 编写的库,专门用于对机器学习模型——尤其是深度神经网络——实施对抗性攻击。它目前兼容 PyTorch、TensorFlow 和 JAX 这三大主流框架。借助 Foolbox,用户可以轻松运行各种对抗性攻击,以检测和评估机器学习模型的鲁棒性。
设计特点
Foolbox 的第三版进行了全新改写,相较以往版本有了显著的提升。此版本基于 EagerPy,而非传统的 NumPy,这一设计使其能够在 PyTorch、TensorFlow 和 JAX 环境中运行本地性能,且实现了真正的批量支持。
- 本地性能:基于 EagerPy 开发,并在 PyTorch、TensorFlow 和 JAX 中提供本地支持。
- 顶尖攻击算法:Foolbox 拥有多种先进的基于梯度和决策的对抗攻击方法。
- 类型检查:通过广泛的类型注解,帮助用户在代码运行前发现潜在的错误。
文档与教程
- Foolbox 提供详尽的指南,帮助用户快速上手。
- 提供 Jupyter notebook 教程,方便用户实操学习。
- API 文档详细记录了各类功能供用户查阅。
快速入门
用户只需运行如下命令即可安装 Foolbox:
pip install foolbox
需要注意的是,Foolbox 同时依赖于相应的机器学习框架(如 PyTorch、TensorFlow、JAX),这些框架需另外单独安装。
示例代码
下面是一个简短的代码示例,展示如何在 Foolbox 中运行对抗性攻击:
import foolbox as fb
model = ...
fmodel = fb.PyTorchModel(model, bounds=(0, 1))
attack = fb.attacks.LinfPGD()
epsilons = [0.0, 0.001, 0.01, 0.03, 0.1, 0.3, 0.5, 1.0]
_, advs, success = attack(fmodel, images, labels, epsilons=epsilons)
更多详细示例可以在项目的 examples 目录中找到,例如完整的 ResNet-18 示例。
引用方式
如果在科研或工程中使用到 Foolbox,请引用相关的研究论文。这些论文详细介绍了 Foolbox 的设计和实现细节:
- JOSS 上关于 Foolbox 原生版本的论文。
- ICML 工作坊上的 Foolbox 介绍论文。
贡献与社区支持
Foolbox 项目欢迎各类形式的贡献,开发者可以参阅开发指南,或对标记为“欢迎贡献”的问题进行反馈。如果有任何疑问或需要帮助,用户可以在 GitHub 上提交问题;未来还可能转向 GitHub Discussions 以更好地服务社区。
性能和兼容性
Foolbox 3.0 在性能上较前两个版本有大幅提升。目前官方测试支持以下版本:
- PyTorch 1.10.1
- TensorFlow 2.6.3
- JAX 0.2.517
- NumPy 1.18.1
这一特性让 Foolbox 成为进行对抗性攻击研究和应用的利器,能够在不同环境中快速、准确地评估模型的鲁棒性。