FGSM、PGD、BIM对抗攻击算法实现

     

       本篇文章是博主在AI、无人机、强化学习等领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在AI学习

       AI学习笔记(6)---《FGSM、PGD、BIM对抗攻击算法实现》

FGSM、PGD、BIM对抗攻击算法实现

目录

1 前言

2 采用PGD对抗样本生成

3 采用BIM对抗样本生成

4 总结


1 前言

        PGD、BIM对抗攻击算法实现可以直接导入这个 torchattacks这个库,这个库中有很多常用的对抗攻击的算法。

pip install  torchattacks

         然后添加相关代码,即可直接调用:

perturbed_data = torchattacks.PGD(model, epsilon, 0.2, steps=4)
# perturbed_data = (torchattacks.BIM(model, epsilon, 0.2, steps=4))
perturbed_data = perturbed_data(data, target)

 FGSM对抗样本识别的代码请看这篇文章:

FGSM对抗攻击算法实现

本篇文章主要分享使用FGSM、PGD、BIM对抗攻击算法实现实现手写数字识别,项目的代码在下面的链接中:

FGSM、PGD、BIM对抗攻击算法实现资源

如果CSDN下载不了的话,可以关注公众号免费获取:小趴菜只卖红薯


2 采用PGD对抗样本生成

2.1 PGD对抗样本生成代码

class PGD(Attack):def __init__(self, model, eps=8 / 255, alpha=2 / 255, steps=10, random_start=True):super().__init__("PGD", model)self.eps = epsself.alpha = alphaself.steps = stepsself.random_start = random_startself.supported_mode = ["default", "targeted"]def forward(self, images, labels):r"""Overridden."""images = images.clone().detach().to(self.device)labels = labels.clone().detach().to(self.device)if self.targeted:target_labels = self.get_target_label(images, labels)loss = nn.CrossEntropyLoss()adv_images = images.clone().detach()if self.random_start:# Starting at a uniformly random pointadv_images = adv_images + torch.empty_like(adv_images).uniform_(-self.eps, self.eps)adv_images = torch.clamp(adv_images, min=0, max=1).detach()for _ in range(self.steps):adv_images.requires_grad = Trueoutputs = self.get_logits(adv_images)# Calculate lossif self.targeted:cost = -loss(outputs, target_labels)else:cost = loss(outputs, labels)# Update adversarial imagesgrad = torch.autograd.grad(cost, adv_images, retain_graph=False, create_graph=False)[0]adv_images = adv_images.detach() + self.alpha * grad.sign()delta = torch.clamp(adv_images - images, min=-self.eps, max=self.eps)adv_images = torch.clamp(images + delta, min=0, max=1).detach()return adv_images

2.2 PGD对抗样本生成测试结果


3 采用BIM对抗样本生成

3.1 BIM对抗样本生成代码

class BIM(Attack):def __init__(self, model, eps=8 / 255, alpha=2 / 255, steps=10):super().__init__("BIM", model)self.eps = epsself.alpha = alphaif steps == 0:self.steps = int(min(eps * 255 + 4, 1.25 * eps * 255))else:self.steps = stepsself.supported_mode = ["default", "targeted"]def forward(self, images, labels):r"""Overridden."""images = images.clone().detach().to(self.device)labels = labels.clone().detach().to(self.device)if self.targeted:target_labels = self.get_target_label(images, labels)loss = nn.CrossEntropyLoss()ori_images = images.clone().detach()for _ in range(self.steps):images.requires_grad = Trueoutputs = self.get_logits(images)# Calculate lossif self.targeted:cost = -loss(outputs, target_labels)else:cost = loss(outputs, labels)# Update adversarial imagesgrad = torch.autograd.grad(cost, images, retain_graph=False, create_graph=False)[0]adv_images = images + self.alpha * grad.sign()a = torch.clamp(ori_images - self.eps, min=0)b = (adv_images >= a).float() * adv_images + (adv_images < a).float() * a  # nopep8c = (b > ori_images + self.eps).float() * (ori_images + self.eps) + (b <= ori_images + self.eps).float() * b  # nopep8images = torch.clamp(c, max=1).detach()return images

3.2 BIM对抗样本生成测试结果


4 总结

        由上述的实验结果可以看出,在epsilon相同的时候有FGSM的准确率率 > PGD的准确率 > BIM的准确率衰减速率;

        通过图像的倾斜角度可以观察出,FGSM的准确率衰减速率 < PGD的准确率衰减速率 < BIM的准确率衰减速率。

        如果限制扰动量的大小,以使人眼不易察觉,可以通过改进对抗样本生成方法,使用不同对抗样本生成方法,提高对抗样本的对抗性。


     文章若有不当和不正确之处,还望理解与指出。由于部分文字、图片等来源于互联网,无法核实真实出处,如涉及相关争议,请联系博主删除。如有错误、疑问和侵权,欢迎评论留言联系作者,或者关注VX公众号:Rain21321,联系作者。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/279316.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win10电脑字体大小怎么设置?介绍四种方法

在Win10操作系统中&#xff0c;字体大小的设置对于用户来说是一个非常重要的问题。合适的字体大小能够保护我们的视力&#xff0c;提高我们的工作效率。本文将介绍几种常用的方法来调整Win10电脑的字体大小&#xff0c;帮助用户轻松设置自己喜欢的字体大小。 方法一&#xff1…

【C++11特性篇】C++11中新增的initializer_list——初始化的小利器(2)

前言 大家好吖&#xff0c;欢迎来到 YY 滴C11系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; 目录 一.探究std::initializer_list是什么…

让高清媒体无限畅享——Movist Pro for Mac推广文章

随着科技的迅猛发展&#xff0c;高清媒体已经成为我们日常生活中不可或缺的一部分。无论是观看电影、追剧、还是欣赏高清音乐视频&#xff0c;我们都希望能够获得最佳的视听体验。为了满足这一需求&#xff0c;我们向大家推荐一款强大的高清媒体播放器——Movist Pro for Mac。…

Redis新数据类型-Bitmaps

目录 Bitmaps 简介 命令 1. setbit (1) 格式 (2) 实例 2. getbit (1) 格式 (2) 实例 3. bitcount (1) 格式 (2) 实例 4. bitop (1) 格式 (2) 实例 我的其他博客 Bitmaps 简介 Bitmaps 是 Redis 的一种新数据类型&#xff0c;它是一种用于存储位信息的数据结构&…

进程优化软件(Process Lasso pro) v10.2.0.7-好用的系统优化软件-能够为用户提供超多专业的算法

调试进程级别的系统优化工具&#xff0c;主要功能是基于其特别的算法动态调整各个进程的优先级并设为合理的优先级以实现为系统减负的目的&#xff0c;可有效避免蓝屏、假死、进程停止响应、进程占用 CPU 时间过多等症状。同时它还具备前台进程推进、工作集修整、进程黑名单等附…

移动端机器学习框架 MDL 简介与实践

Mobile-deep-learning&#xff08;MDL&#xff09; MDL 是百度研发的可以部署在移动端的基于卷积神经网络实现的移动端框架&#xff0c;可以应用在图像识别领域。 具体应用&#xff1a;在手机百度 App 中&#xff0c;用户只需要点击自动拍开关&#xff0c;将手机对准物体&…

计算机组成原理-选择语句和循环语句的汇编表示

文章目录 选择语句jmpjxx示例&#xff1a;选择语句的机器级表示扩展&#xff1a;cmp指令的底层原理 循环语句使用条件转移指令实现循环用loop指令实现循环 选择语句 不一定知道指令的位置&#xff0c;所以jmp直接跳转到指令的位置很难办 jmp 标号相当于位置&#xff0c;名字…

点燃温暖时光:探索酒精壁炉的独特历史与现代化魅力

酒精壁炉的历史可以追溯到18世纪末。最初&#xff0c;人们用酒精在暖炉或炉子中燃烧&#xff0c;以获得热量。19世纪初&#xff0c;法国发明家提出了利用酒精燃烧来供暖的概念。这一概念被逐渐应用于家庭取暖装置&#xff0c;酒精壁炉也开始在欧洲兴起。 随着科技的发展&#x…

MQTT 介绍与学习 —— 筑梦之路

之前写过的相关文章&#xff1a; MQTT协议&#xff08;转载&#xff09;——筑梦之路_mqtt url-CSDN博客 k8s 部署mqtt —— 筑梦之路-CSDN博客 CentOS 7 搭建mqtt服务——筑梦之路_腾讯云宝塔搭 centos 7.9.2009 x86_64 建标准mqtt服务器-CSDN博客 mqtt简介 MQTT&#xff…

NLP项目实战02:英文文本识别

简介&#xff1a; 欢迎来到本篇文章&#xff01;今天我们将讨论一个新的自然语言处理任务——英文短文识别。具体而言&#xff0c;即通过分析输入的英文文本来判断其是比较消极的还是比较积极的。 展示&#xff1a; 1、项目界面 如下所示是项目启动后用户使用使用界面 2、布…

重新理解一下F.cross_entropy()的细节

最初疑问&#xff1a;为什么F.cross_entropy &#xff08;logits,labels&#xff09;里的labels为212,213&#xff0c;这样的标签

CSS学习

CSS学习 1. 什么是css?2.css引入方式2.1 内嵌式2.2 外联式2.3 行内式2.4 引入方式特点 3. 基础选择器3.1 标签选择器3.2 类选择器3.3 id选择器3.4 通配符选择器 4. 文字基本样式4.1 字体样式4.1.1 字体大小4.1.2 字体粗细4.1.3 倾斜4.1.4 字体4.1.5 字体font相关属性连写 4.2 …