{ "info": { "author": "Jonas Rauber", "author_email": "git@jonasrauber.de", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Topic :: Scientific/Engineering :: Artificial Intelligence" ], "description": ".. image:: https://badge.fury.io/py/foolbox-native.svg\n :target: https://badge.fury.io/py/foolbox-native\n\n.. image:: https://img.shields.io/badge/code%20style-black-000000.svg\n :target: https://github.com/ambv/black\n\n\n==============\nFoolbox Native\n==============\n\nFoolbox Native is an extension for `Foolbox `_\nthat tries to bring native performance to Foolbox. This extension is a\nprototype with the goal of ultimately becoming part of Foolbox itself.\nPlease be aware of the the differences to Foolbox listed below.\n\nFoolbox Native currently provides full support for:\n\n* PyTorch\n* TensorFlow\n* JAX\n\nOther frameworks can be used as well by falling back to Foolbox for the\nmodel API, see below.\n\nInstallation\n------------\n\n.. code-block:: bash\n\n pip install --upgrade foolbox-native\n\n\nPyTorch Example\n---------------\n\n.. code-block:: python\n\n import foolbox.ext.native as fbn\n import torchvision.models as models\n\n # instantiate a model\n model = models.resnet18(pretrained=True).eval()\n preprocessing = dict(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225], axis=-3)\n fmodel = fbn.models.PyTorchModel(model, bounds=(0, 1), preprocessing=preprocessing)\n\n # get data and test the model\n images, labels = fbn.utils.samples(fmodel, dataset='imagenet', batchsize=16)\n print(fbn.utils.accuracy(fmodel, images, labels))\n # -> 0.9375\n\n # apply the attack\n attack = fbn.attacks.LinfinityBasicIterativeAttack(fmodel)\n adversarials = attack(images, labels, epsilon=0.03, step_size=0.005) # L-inf norm\n print(fbn.utils.accuracy(fmodel, adversarials, labels))\n # -> 0.0\n\n # apply another attack\n attack = fbn.attacks.L2BasicIterativeAttack(fmodel)\n adversarials = attack(images, labels, epsilon=2.0, step_size=0.2) # L2 norm\n print(fbn.utils.accuracy(fmodel, adversarials, labels))\n # -> 0.0\n\nTensorFlow Example\n------------------\n\n.. code-block:: python\n\n import foolbox.ext.native as fbn\n import tensorflow as tf\n\n # instantiate a model\n model = tf.keras.applications.ResNet50(weights='imagenet')\n preprocessing = dict(flip_axis=-1, mean=[104., 116., 123.]) # RGB to BGR\n fmodel = fbn.models.TensorFlowModel(model, bounds=(0, 255), preprocessing=preprocessing)\n\n # get data and test the model\n images, labels = fbn.utils.samples(fmodel, dataset='imagenet', batchsize=16)\n print(fbn.utils.accuracy(fmodel, images, labels))\n\n # apply the attack\n attack = fbn.attacks.LinfinityBasicIterativeAttack(fmodel)\n adversarials = attack(images, labels, epsilon=0.03 * 255., step_size=0.005 * 255.) # L-inf norm\n print(fbn.utils.accuracy(fmodel, adversarials, labels))\n\n # apply another attack\n attack = fbn.attacks.L2BasicIterativeAttack(fmodel)\n adversarials = attack(images, labels, epsilon=2.0 * 255., step_size=0.2 * 255.) # L2 norm\n print(fbn.utils.accuracy(fmodel, adversarials, labels))\n\nRobust Accuracy Evaluation\n--------------------------\n\n.. code-block:: python\n\n import foolbox.ext.native as fbn\n\n # get fmodel, images, labels like above\n fmodel = ...\n images, labels = ...\n\n attacks = [\n L2BasicIterativeAttack,\n L2CarliniWagnerAttack,\n L2ContrastReductionAttack,\n BinarySearchContrastReductionAttack,\n LinearSearchContrastReductionAttack,\n ]\n epsilons = [0.0, 1.0, 2.0, 4.0, 8.0, 16.0, 32.0, 64.0, 128.0]\n\n _, robust_accuracy = fbn.evaluate_l2(fmodel, x, y, attacks=attacks, epsilons=epsilons)\n print(robust_accuracy)\n\n # Plot an accuracy-distortion curve\n plt.plot(epsilons, robust_accuracy)\n\nOther Frameworks\n----------------\n\nFoolbox Native supports all frameworks supported by the standard Foolbox\nby simply wrapping the ``foolbox.models.*`` classes using ``fbn.model.FoolboxModel``.\nThis, however, comes with a performance penalty. Nevertheless, it still\nallows one to profit from the manually batched attack reimplementations\nthat come with Foolbox Native.\n\nImportant differences to Foolbox\n--------------------------------\n\nUnlike Foolbox:\n\n* Foolbox Native does not yet guarantee API stability (expect breaking changes)\n\n* Foolbox Native is currently limited to very few attacks\n\n* Foolbox Native does not make any guarantees about the output of an attack\n\n * The user is responsible for checking if the returned samples are adversarial\n\n * Whether the size of the perturbations is guaranteed depends on the attack\n\n * Foolbox, on the other hand, searches for the smallest perturbation while\n guaranteeing that the returned samples are adversarial", "description_content_type": "text/x-rst", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/jonasrauber/foolbox-native", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "foolbox-native", "package_url": "https://pypi.org/project/foolbox-native/", "platform": "", "project_url": "https://pypi.org/project/foolbox-native/", "project_urls": { "Homepage": "https://github.com/jonasrauber/foolbox-native" }, "release_url": "https://pypi.org/project/foolbox-native/0.8.0/", "requires_dist": null, "requires_python": "", "summary": "Foolbox Native is an extension for Foolbox that tries to bring native performance to Foolbox. This extension is a prototype with the goal of ultimately becoming part of Foolbox itself.", "version": "0.8.0", "yanked": false, "yanked_reason": null }, "last_serial": 6459038, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "17c6fb059c1763d3b5f938f02d26bcc0", "sha256": "ff489b798588f82701a3b13420880f3c146caff43119b5f01d64a50fee1f3a06" }, "downloads": -1, "filename": "foolbox-native-0.1.0.tar.gz", "has_sig": false, "md5_digest": "17c6fb059c1763d3b5f938f02d26bcc0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2093, "upload_time": "2019-10-28T18:39:43", "upload_time_iso_8601": "2019-10-28T18:39:43.947654Z", "url": "https://files.pythonhosted.org/packages/f5/c3/c820c5436fdd399af228302fceb5f8695153dfb7a680a9b33b3889d0cd21/foolbox-native-0.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "6e7123fb5ee30d4c300c34f260ff105d", "sha256": "a021e9189181384566fbcb43709cf6e07d9afa05fef7312153c5175b3e4f79c0" }, "downloads": -1, "filename": "foolbox-native-0.2.0.tar.gz", "has_sig": false, "md5_digest": "6e7123fb5ee30d4c300c34f260ff105d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2099, "upload_time": "2019-10-29T10:55:41", "upload_time_iso_8601": "2019-10-29T10:55:41.121907Z", "url": "https://files.pythonhosted.org/packages/34/ba/be7cb5f69c0ab4b23cf89f4a736745939e6a7f73bef0a3895ae1d058e4d1/foolbox-native-0.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "f1fdc2cd89214ee93b96d34a6163864e", "sha256": "40dbdf0fa99305640428571961a44fadc19d9cc2d3500c359e77f8fac51ac769" }, "downloads": -1, "filename": "foolbox-native-0.2.1.tar.gz", "has_sig": false, "md5_digest": "f1fdc2cd89214ee93b96d34a6163864e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2250, "upload_time": "2019-10-29T13:11:01", "upload_time_iso_8601": "2019-10-29T13:11:01.043530Z", "url": "https://files.pythonhosted.org/packages/04/67/0c8de608c87eb7e7fcf2e799bde56d2acc1732d72514079d45cf88548ce5/foolbox-native-0.2.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "7035838096be595f7b1f6d7a5cfc07b9", "sha256": "14cf46874066b94e4a6c020d4404d744d2213fe8431e68d29d0df2bddd07c9d2" }, "downloads": -1, "filename": "foolbox-native-0.2.2.tar.gz", "has_sig": false, "md5_digest": "7035838096be595f7b1f6d7a5cfc07b9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2281, "upload_time": "2019-10-29T13:30:06", "upload_time_iso_8601": "2019-10-29T13:30:06.294549Z", "url": "https://files.pythonhosted.org/packages/6b/4e/353577fa941a634756cf0765c0bec905e5f9dc81daadf586440ad9356fa7/foolbox-native-0.2.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "2b480718133575656b78cb5b74626269", "sha256": "e56fab1db4df19292e2675e304a63fbc10a9ebf015a26468731cc3b4099c29c0" }, "downloads": -1, "filename": "foolbox-native-0.2.3.tar.gz", "has_sig": false, "md5_digest": "2b480718133575656b78cb5b74626269", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3930, "upload_time": "2019-10-29T13:37:12", "upload_time_iso_8601": "2019-10-29T13:37:12.265680Z", "url": "https://files.pythonhosted.org/packages/c5/2b/474566e7c7a2a8cd3c48211efbde1d18c2e19259020a7a2413fc7e77dc33/foolbox-native-0.2.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "9eee21e7349035f1bff479d40bff5ce8", "sha256": "6a9d3faa717c55cc6930f37b57617c9beae40cab1a28047497443332bbc1e6c5" }, "downloads": -1, "filename": "foolbox-native-0.3.0.tar.gz", "has_sig": false, "md5_digest": "9eee21e7349035f1bff479d40bff5ce8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6598, "upload_time": "2019-10-29T18:07:30", "upload_time_iso_8601": "2019-10-29T18:07:30.615546Z", "url": "https://files.pythonhosted.org/packages/b2/6e/70d66067c0fa1e6a20b592ab14fb61d34a6f1f1c8c63794568a53f7a7203/foolbox-native-0.3.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "400afa1aa6c0572d3153c0faed20bc33", "sha256": "aad6284805ee1d100cd28a2d1db6e216f729af0520f7adcb9949744f7a201251" }, "downloads": -1, "filename": "foolbox-native-0.4.0.tar.gz", "has_sig": false, "md5_digest": "400afa1aa6c0572d3153c0faed20bc33", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7173, "upload_time": "2019-10-29T23:20:12", "upload_time_iso_8601": "2019-10-29T23:20:12.251871Z", "url": "https://files.pythonhosted.org/packages/16/6a/5f0cc12305f45effc2392665b7feacedb2a51685779b27f5f14c49479af1/foolbox-native-0.4.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "8692cc22d0a820100efcbd4c242ef021", "sha256": "d44abdb280f3aa05dff9946dc7f50270f7cb626a2cf368d615954555b7670656" }, "downloads": -1, "filename": "foolbox-native-0.4.1.tar.gz", "has_sig": false, "md5_digest": "8692cc22d0a820100efcbd4c242ef021", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7167, "upload_time": "2019-10-29T23:22:52", "upload_time_iso_8601": "2019-10-29T23:22:52.778711Z", "url": "https://files.pythonhosted.org/packages/3b/cc/9720a69691c2774e224ef591883cc426acc5c068015d56d7244cfc0ffe2a/foolbox-native-0.4.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "6ee9be7db8aae014b65e43ef4dd3b35f", "sha256": "f10801496da321e5ee12685dc9a6dc945417b73037bbc6afb09f607fc0ef8068" }, "downloads": -1, "filename": "foolbox-native-0.5.0.tar.gz", "has_sig": false, "md5_digest": "6ee9be7db8aae014b65e43ef4dd3b35f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7716, "upload_time": "2019-10-30T00:00:38", "upload_time_iso_8601": "2019-10-30T00:00:38.507309Z", "url": "https://files.pythonhosted.org/packages/ec/39/dc4982d06e1f7e4e16ec61f873247dffb87c87afce642fc272d4b47536ef/foolbox-native-0.5.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "03c87546ce0c537638e3aba53676c4c6", "sha256": "f60f1e787df9107057eb0907a59774d4ab0489710134b02d889fcb921072d93c" }, "downloads": -1, "filename": "foolbox-native-0.6.0.tar.gz", "has_sig": false, "md5_digest": "03c87546ce0c537638e3aba53676c4c6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10499, "upload_time": "2019-10-30T19:24:56", "upload_time_iso_8601": "2019-10-30T19:24:56.470779Z", "url": "https://files.pythonhosted.org/packages/ba/b4/3086e1df2c226c0eb4ab12b304659a4f0358742f49c141b28d93745dee86/foolbox-native-0.6.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "b9a37753e253151cb3a0713111436529", "sha256": "253da33657117b0f2843695843419b9ead911c015ff44d4d3773fde7b36f43fc" }, "downloads": -1, "filename": "foolbox-native-0.6.1.tar.gz", "has_sig": false, "md5_digest": "b9a37753e253151cb3a0713111436529", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10578, "upload_time": "2019-10-31T12:31:25", "upload_time_iso_8601": "2019-10-31T12:31:25.851918Z", "url": "https://files.pythonhosted.org/packages/b7/17/f4c2a46c6030dee97a18e3a2e547d2ad7a7e2b4752e6097e22b62fe9d96f/foolbox-native-0.6.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.6.2": [ { "comment_text": "", "digests": { "md5": "c98e7cfc999038c30bf520ae76708295", "sha256": "48376a1b6283c15e9010ee433fe058b71acae4bf46c2e036cfbf5a9258c584bd" }, "downloads": -1, "filename": "foolbox-native-0.6.2.tar.gz", "has_sig": false, "md5_digest": "c98e7cfc999038c30bf520ae76708295", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10610, "upload_time": "2019-10-31T16:53:45", "upload_time_iso_8601": "2019-10-31T16:53:45.498368Z", "url": "https://files.pythonhosted.org/packages/43/db/61efe3f335791e0d1fd5bae7056dc16f1034a7a2edea2a1e1a703ae88989/foolbox-native-0.6.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "212a72f5d714f10604cd1e57c5b04a4a", "sha256": "1df51fcb78c230883931bdfc74a4d0f3a6dcd4708298e37d733e111d0834704c" }, "downloads": -1, "filename": "foolbox-native-0.7.0.tar.gz", "has_sig": false, "md5_digest": "212a72f5d714f10604cd1e57c5b04a4a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19776, "upload_time": "2020-01-10T15:15:38", "upload_time_iso_8601": "2020-01-10T15:15:38.805607Z", "url": "https://files.pythonhosted.org/packages/2c/06/be6f592be85740291b57452df5689ac3be5e992664ea44ab42c4a0345899/foolbox-native-0.7.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.8.0": [ { "comment_text": "", "digests": { "md5": "20297f4b313e35e1dd8a0ca4d1685742", "sha256": "866f3907a2619e935c1a0f8dc2dd40cd05278c462a662728c90fdb346ecb25f9" }, "downloads": -1, "filename": "foolbox-native-0.8.0.tar.gz", "has_sig": false, "md5_digest": "20297f4b313e35e1dd8a0ca4d1685742", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38166, "upload_time": "2020-01-15T14:42:48", "upload_time_iso_8601": "2020-01-15T14:42:48.777253Z", "url": "https://files.pythonhosted.org/packages/72/98/01079ac2d91fa18637dad28895b0a9d963fabc9d5245a12ed278dc6559ff/foolbox-native-0.8.0.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "20297f4b313e35e1dd8a0ca4d1685742", "sha256": "866f3907a2619e935c1a0f8dc2dd40cd05278c462a662728c90fdb346ecb25f9" }, "downloads": -1, "filename": "foolbox-native-0.8.0.tar.gz", "has_sig": false, "md5_digest": "20297f4b313e35e1dd8a0ca4d1685742", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38166, "upload_time": "2020-01-15T14:42:48", "upload_time_iso_8601": "2020-01-15T14:42:48.777253Z", "url": "https://files.pythonhosted.org/packages/72/98/01079ac2d91fa18637dad28895b0a9d963fabc9d5245a12ed278dc6559ff/foolbox-native-0.8.0.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }