.. raw:: html
.. image:: https://badge.fury.io/py/foolbox.svg :target: https://badge.fury.io/py/foolbox
.. image:: https://readthedocs.org/projects/foolbox/badge/?version=latest :target: https://foolbox.readthedocs.io/en/latest/
.. image:: https://img.shields.io/badge/code%20style-black-000000.svg :target: https://github.com/ambv/black
.. image:: https://joss.theoj.org/papers/10.21105/joss.02607/status.svg :target: https://doi.org/10.21105/joss.02607
=============================================================================================================================== Foolbox:使用 PyTorch、TensorFlow 和 JAX 进行快速对抗攻击以基准测试机器学习模型的鲁棒性
Foolbox <https://foolbox.jonasrauber.de>
_ 是一个 Python 库,使您可以轻松地对深度神经网络等机器学习模型进行对抗攻击。它构建在 EagerPy 之上,并能原生支持 PyTorch <https://pytorch.org>
、TensorFlow <https://www.tensorflow.org>
和 JAX <https://github.com/google/jax>
_ 的模型。
🔥 设计
Foolbox 3 使用 EagerPy <https://github.com/jonasrauber/eagerpy>
_ 从头重写,
取代了 NumPy ,以实现 PyTorch、TensorFlow 和 JAX 模型的原生性能,无需重复代码。
- 原生性能:Foolbox 3 构建在 EagerPy 之上,能在 PyTorch、TensorFlow 和 JAX 中原生运行,并提供真正的批处理支持。
- 先进的攻击:Foolbox 提供了大量先进的基于梯度和基于决策的对抗攻击。
- 类型检查:得益于 Foolbox 的广泛类型注释,可以在运行代码之前捕捉到错误。
📖 文档
- 指南:开始使用 Foolbox 的最佳位置是官方
指南 <https://foolbox.jonasrauber.de>
_。 - 教程:如果您在寻找教程,请查看此
Jupyter notebook <https://github.com/jonasrauber/foolbox-native-tutorial/blob/master/foolbox-native-tutorial.ipynb>
_ |colab|。 - 文档:API 文档可以在
ReadTheDocs <https://foolbox.readthedocs.io/en/stable/>
_ 上找到。
.. |colab| image:: https://colab.research.google.com/assets/colab-badge.svg :target: https://colab.research.google.com/github/jonasrauber/foolbox-native-tutorial/blob/master/foolbox-native-tutorial.ipynb
🚀 快速开始
.. code-block:: bash
pip install foolbox
Foolbox 经过 Python 3.8 及更新版本的测试—然而,它可能也适用于 3.6 - 3.8 版本。要在 PyTorch <https://pytorch.org>
、TensorFlow <https://www.tensorflow.org>
或 JAX <https://github.com/google/jax>
_ 上使用,需要分别单独安装相应框架。这些框架没有被声明为依赖项,因为并不是所有人都想使用并安装所有这些框架,并且有些包针对不同的架构和 CUDA 版本有不同的构建方式。除此之外,所有必要的依赖项将会自动安装。
您可以在下面的 兼容性部分 <#-compatibility>
_ 查看我们目前用于测试的版本,但一般来说,更新的版本预期也能正常工作。
🎉 示例
.. code-block:: python
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 <./examples/>
_ 文件夹,例如 ResNet-18 示例 <./examples/single_attack_pytorch_resnet18.py>
_。
📄 引用
如果您在工作中使用 Foolbox,请引用我们的 JOSS 关于 Foolbox Native 的论文(即 Foolbox 3.0) <https://doi.org/10.21105/joss.02607>
_ 以及我们的 ICML 工作坊关于 Foolbox 的论文 <https://arxiv.org/abs/1707.04131>
_,使用以下 BibTeX 条目:
.. code-block::
@article{rauber2017foolboxnative, doi = {10.21105/joss.02607}, url = {https://doi.org/10.21105/joss.02607}, year = {2020}, publisher = {The Open Journal}, volume = {5}, number = {53}, pages = {2607}, author = {Jonas Rauber and Roland Zimmermann and Matthias Bethge and Wieland Brendel}, title = {Foolbox Native: Fast adversarial attacks to benchmark the robustness of machine learning models in PyTorch, TensorFlow, and JAX}, journal = {Journal of Open Source Software} }
.. code-block::
@inproceedings{rauber2017foolbox, title={Foolbox: A Python toolbox to benchmark the robustness of machine learning models}, author={Rauber, Jonas and Brendel, Wieland and Bethge, Matthias}, booktitle={Reliable Machine Learning in the Wild Workshop, 34th International Conference on Machine Learning}, year={2017}, url={http://arxiv.org/abs/1707.04131}, }
👍 贡献
我们欢迎各种形式的贡献,请参阅我们的
开发指南 <https://foolbox.jonasrauber.de/guide/development.html>
。
特别是,您被邀请贡献
新的对抗攻击 <https://foolbox.jonasrauber.de/guide/adding_attacks.html>
。
如果您想帮助,也可以查看标记为 欢迎贡献 <https://github.com/bethgelab/foolbox/issues?q=is%3Aopen+is%3Aissue+label%3A%22contributions+welcome%22>
_ 的问题。
💡 有问题吗?
如果您有问题或需要帮助,请随时在 GitHub 上开启一个 issue。一旦 GitHub Discussions 公共开放,我们将转换到那里。
💨 性能
Foolbox 3.0 比 Foolbox 1 和 2 快得多。基本的 性能对比
_ 可在 性能
文件夹中找到。
🐍 兼容性
我们目前测试的版本为:
- PyTorch 1.10.1
- TensorFlow 2.6.3
- JAX 0.2.517
- NumPy 1.18.1
.. _performance comparison: performance/README.md