论文笔记——Adversarial Patch(对抗补丁)

article/2025/9/25 1:33:59

在这里插入图片描述

摘要

We present a method to create universal, robust, targeted adversarial image patches in the real world. The patches are universal because they can be used to attack any scene, robust because they work under a wide variety of transformations, and targeted because they can cause a classifier to output any target class. These adversarial patches can be printed, added to any scene, photographed, and presented to image classifiers; even when the patches are small, they cause the classifiers to ignore the other items in the scene and report a chosen target class.

  我们提出一种在现实世界中创建通用的、健壮的、有针对性的对抗图像补丁的方法。这些补丁之所以通用,是因为它们可用于攻击任何场景;它们之所以健壮,是因为它们可以在各种各样的转换下工作;而由于它们可以使分类器输出任何目标类,因此具有针对性。这些对抗补丁可以被打印,添加到任何场景,进行拍照并呈现给图像分类器。即使补丁很小,它们也会导致分类器忽略场景中的其他类别对象并报告选定的目标类别。

1.引言

  深度学习系统很容易受到对抗样本的攻击,这些样本是经过精心选择的输入,这些输入会导致网络更改输出而对人类没有明显的影响。这些对抗样本通常会对每个像素进行少量修改,可以使用多种优化策略找到它们,例如L-BFGS,快速梯度符号方法(FGSM),DeepFool,投影梯度下降(PGD)以及最近提出了离散化输入的Logit空间投影梯度上升(LS-PGA)。 其他攻击方法试图仅修改图像中的少量像素(Jacobian-based saliency map),或修改图像固定位置的小块像素。
  对抗样本已被证明可以推广到现实世界。Kurakin等人证明,当打印出来时,即使在不同的光照和方向下,对抗构造的图像也将继续对分类器不利。Athalye等人最近展示了对抗性对象,这些对象可以被3d打印并通过网络以不同的方向和比例进行错误分类。他们的对抗对象被设计为对正常对象的微妙扰动(例如,比如乌龟被扰动后分类为步枪)。另一项工作表明,人们可以通过制造对抗性眼镜来欺骗面部识别软件。这些眼镜的目标是可以伪装成任何人,但可以针对攻击者的脸部量身定制,并且设计时要牢记固定的方向。甚至在最近,Evtimov等人演示了各种构造因模型而分类错误的停车标志的方法,方法是打印出看起来像停车标志的大型海报,或者在停车标志上放置各种贴纸。在防御方面,对于输入的 Lp 扰动,已经进行了大量工作来提高图像模型的对抗鲁棒性。
  如上所示,大多数先前的工作都集中于攻击和防御输入的细微或不明显的变化。在这项工作中,我们探讨了如果攻击者不再将自己限制在无法察觉的变化之内的可能性。我们构建的攻击不会试图将现有目标巧妙地转换为另一项。取而代之的是,这种攻击会产生与图像无关的补丁,这对神经网络极为重要。然后可以将该补丁放置在分类器视场内的任何位置,并使分类器输出目标类。由于此补丁与场景无关,因此,攻击者无需事先了解照明条件、摄像机角度、被攻击的分类器类型甚至是场景中的其他目标,即可发起物理世界的攻击。
在这里插入图片描述

  这种攻击意义重大,因为攻击者在构造攻击时无需知道他们要攻击的映像。生成对抗性补丁后,该补丁可以在Internet上广泛分发,以供其他攻击者打印和使用。另外,由于攻击使用了较大的扰动,因此专注于防御较小扰动的现有防御技术可能对此类较大的扰动没有鲁棒性。的确,最近的工作表明,与通过训练所使用的模型相比,MNIST上最先进的对抗训练模型仍然容易受到较大的干扰,方法是使用不同的距离度量来寻找附近的对抗样本,或在背景中施加较大的扰动。

2. 方法

  查找目标对抗样本的传统策略如下:给定一些分类器P [y | x],某些输入 x∈Rn,某些目标类别 y ^ \hat{y} y^和最大扰动 ϵ \epsilon ϵ,我们想找到一个输入 x ^ \hat{x} x^来最大化 l o g ( P ( [ y ^ ∣ x ^ ] ) ) log\left ( P\left ( \left [ \hat{y}\mid \hat{x} \right ] \right ) \right ) log(P([y^x^])),但要受 ∥ x − x ^ ∥ ∞ ≤ ϵ \left \| x-\hat{x}\right \|_{\infty }\leq \epsilon xx^ϵ的约束。当 P [y | x] 由神经网络参数化,有权访问模型的攻击者可以对 x 执行迭代梯度下降,以找到合适的输入 x ^ \hat{x} x^。该策略可以产生很好的伪装攻击,但要求修改目标图像。

  相反,我们通过用补丁完全替换图像的一部分来发起攻击。我们遮罩补丁以使其具有任何形状,然后训练各种图像,对每个图像中的补丁应用随机平移、缩放和旋转,并使用梯度下降进行优化。特别是对于给定图像 x ∈ R w ∗ h ∗ c x\in R^{w*h*c} xRwhc、补丁p 、补丁位置 l和补丁变换 t (例如旋转或缩放),我们定义了补丁应用运算符A(p,x,l,t),它首先将变换 t应用于补丁 p,然后将变换的补丁 p 应用于位置 l 处的图像 x
在这里插入图片描述
  比如将补丁、图像、位置和任何变换(例如缩放和旋转)作为输入,并将转换后的补丁应用于给定位置的图像。然后对补丁进行训练,以优化目标类别的预期概率,其中对随机图像、位置和变换进行预期。
  为了获得训练有素的补丁,我们使用Athalye等人的“转换期望”(EOT)框架的变体。特别是,对补丁进行了训练以优化目标功能:
在这里插入图片描述
  其中 X是图像的训练集, T 是补丁变换的分布, L 是图像位置的分布。请注意,这种期望是基于图像的,这鼓励训练有素的补丁工作,而不管背景是什么。这与大多数先前关于对抗性扰动的工作不同,因为这种扰动是通用的,因为它适用于任何背景。

  我们还考虑了伪装补丁,这些补丁被迫看起来像给定的起始图像。在这里,我们仅向补丁目标添加 ∥ p − p o r i g ∥ ∞ < ϵ \left \| p-p_{orig} \right \|_{_{\infty }}< \epsilon pporig<ϵ 形式的约束,这将迫使最终补丁在某个初始补丁程序的 L ∞ L_{_{\infty }} L范数的 ϵ \epsilon ϵ内。

  我们认为,这种攻击利用了构建图像分类任务的方式。尽管图像可能包含多个目标,但是只有一个目标标签被认为是真实的,因此网络必须学会检测帧中最“突出”的目标。对抗补丁通过产生比真实世界中的对象显着得多的输入来利用此功能。因此,当攻击目标检测或图像分割模型时,我们期望将目标烤面包机补丁分类为烤面包机,并且不会影响图像的其他部分。

3. 实验结果

  为了测试我们的攻击,我们比较了2种白盒攻击、黑盒攻击和控制补丁的功效。白盒整体攻击联合训练了五个ImageNet模型的单个补丁:inceptionv3,resnet50,xception,VGG16和VGG19。然后,我们通过平均所有五个模型的获胜率来评估攻击。白盒单一模型攻击的功能相同,但仅针对单一模型进行训练和评估。黑盒攻击联合训练了四个ImageNet模型中的单个补丁,然后评估了第五个模型上的黑盒攻击,我们在训练过程中没有对此模型进行访问。控件是烤面包机的图片。在训练和评估期间,补丁会重新缩放,然后以数字方式插入到随机ImageNet图像上的随机位置,如之前示意图所示。

  请注意,在此通用设置下(黑盒,目标类别以及所有图像,位置和变换)可靠地欺骗模型所需的补丁大小明显大于对单个图像执行非目标攻击所需的补丁大小以及白盒设置中的单个位置。例如,Su等人最近证明,在32x32像素CIFAR-10图像上修改1个像素(图像中像素的0.1%)足以用非目标、非通用的白盒攻击来欺骗大多数图像。但是,我们的攻击仍然比简单地插入带有目标类的图像要有效得多,例如将真实的烤面包机插入场景的性能相对较差。

  我们通过最小化其距离到图案的距离并在训练过程中使用peace sign mask(就是那个代表和平的符号)来创建变相的补丁,这些实验的结果如下图所示。请注意,这些成功率是针对将补丁随机放置在图像顶部的情况。通过将补丁应用到这些图像中随机位置的400个随机选择的测试图像来计算图中的每个点。是针对补丁的各种比例(仅作为图像大小的一小部分)完成的,每个比例都在400张图像上独立测试。
在这里插入图片描述
在这里插入图片描述
在最后的实验中,我们测试了攻击在物理世界中的可传递性。我们使用标准的彩色打印机打印生成的补丁,并在各种现实情况下使用它。下图中显示的结果表明,即使场景中还有其他对象,攻击也成功地欺骗了分类器。有关攻击的完整视频演示,请参阅。

4.总结

  我们证明了我们可以生成一个通用的、健壮的、有针对性的补丁,无论补丁的规模或位置如何,它都会欺骗分类器,并且不需要了解攻击场景中的其他目标。我们的攻击在现实世界中可行,并且可以伪装成无害的标签。这些结果表明,可以离线创建然后广泛共享的攻击。

  在防止对自然图像的小 Lp 扰动方面进行了大量工作,至少部分是出于安全方面的考虑。 这项工作的部分动机是,潜在的恶意攻击者可能不会担心对自然图像产生小的或无法察觉的干扰,而是可能会选择对输入进行更大、更有效但更明显的干扰-尤其是在设计模型时,抵抗小Lp 的扰动。

  许多ML模型在没有人工验证每个输入的情况下运行,因此恶意攻击者可能不会担心其攻击的隐秘性。即使人类能够注意到这些补丁,他们也可能不理解补丁的意图,而是将其视为一种艺术形式。这项工作表明,仅专注于防御小扰动是不够的,因为大的局部扰动也会破坏分类器


http://chatgpt.dhexx.cn/article/CXYRreZV.shtml

相关文章

patch diff 补丁文件

diff 和 patch 是一对工具&#xff0c;使用这对工具可以获取更新文件与历史文件的差异&#xff0c;并将更新应用到历史文件上。在数学上说&#xff0c;diff就是对两个集合的差运算&#xff0c;patch就是对两个集合的和运算。在数学上我们知道&#xff1a; A - B C&#xff0c;…

提交内核补丁patch

提交内核补丁 荣涛 2021年10月28日 文档修改日志 日期修改内容修改人备注2021年10月28日创建荣涛 1. 引言 2. 克隆内核 # 从 GitHub克隆Linux内核 $ git clone --depth32 https://github.com/torvalds/linux # 切换分支 $ git checkout master # 同步 $ git pull upstream …

代码打补丁的利器——diff和patch

一般来说&#xff0c;如果我们在研发过程中需要对代码进行修改&#xff0c;是不需要通过打补丁的方式的&#xff0c;因为我们可以直接改动文件即可。但是如果针对一款要上线的产品&#xff0c;我们总不能在研发的电脑上编译通过后直接发布到线上的。&#xff08;转载请指明出于…

diff制作patch补丁

diff制作patch补丁 对于源代码项目软件移植的时候&#xff0c;会出现各种各样的问题&#xff0c;系统环境不匹配&#xff0c;版本升级&#xff0c;环境依赖等问题&#xff0c;需要制作补丁&#xff0c;打在源代码项目中&#xff0c;修复bug问题。 diff命令 使用diff命令制作…

git补丁操作:git生成patch和应用patch

一、生成patch 1、拉取代码仓 git clone xxx代码仓地址 2、在clone到本地的代码目录中&#xff0c;例如对README.md文件进行了修改。然后使用 git status 命令查看工作目录和暂存区的状态。 git status &#xff08;示例修改是在README.md文件开头添加了如下内容&#xff09…

patch 修补文件命令

patch 修补文件命令 patch 修补文件命令操作练习&#xff1a;针对单个文件的修改补丁针对文件目录下所有文件的修改补丁 补充&#xff1a;svn生成补丁文件和打补丁文件总结 patch 修补文件命令 功能&#xff1a;修补文件&#xff0c;使用补丁文件&#xff0c;对源文件进行更改…

patch-package给依赖打补丁实例详解

1、安装patch-package patch-package 官方只支持 npm 和 yarn。注意&#xff1a;不要使用cnpm yarn add patch-package -D 2、创建补丁 先修改依赖文件&#xff0c;然后运行patch-package来创建patch文件了。我这里用element-ui来举例子 yarn patch-package element-ui 此时&…

diff和patch工具打补丁

diff和patch工具打补丁 1 对比单个文件差异1.1 编写两个版本的脚本&#xff0c;一个为v1版本&#xff0c;一个为v2版本。2.2 使用diff命令语法 2 使用patch命令对单文件代码打补丁2.1 生成补丁文件2.2 使用patch命令打补丁 3 对比目录中所有文件的差异3.1 准备实验环境3.2 对比…

【知识点】patch补丁文件格式

linux补丁文件格式 “补丁” 指的是文件之间一系列差异。 在原始文件的基础上进行修改后&#xff0c;然后根据所做的修改生成补丁文件&#xff08;使用diff命令&#xff09;。 一个持有原始文件的人&#xff0c;将该补丁打到原始文件上&#xff08;使用patch命令&#xff09…

Git 补丁— diff 和 patch 使用详解

Git 补丁— diff 和 patch 使用详解 1. diff 和 patch 的区别2. 生成patch2.1 git diff3. git format-patch 3. 应用patch4. 冲突解决题外话 1. diff 和 patch 的区别 Git 提供了两种补丁方案&#xff0c;一种是通过 git diff 生成的 .diff 文件&#xff0c;第二种是通过 git …

手把手教你使用patch-package给npm包打补丁

具体文档https://github.com/ds300/patch-package 一、背景 故事从日常团队协作开发展开&#xff0c;整个team使用react antd4搭建前端页面&#xff0c;在开发中我发现antd4.9.*版本的Input.TextArea组件存在一个bug&#xff0c;该bug表现为maxLength属性限制不符合预期&…

patch-package打补丁

如何修改node_modules源码&#xff1f; 首先&#xff0c;我们能想到的思路是直接修改第三方库的代码&#xff0c;不过这会带来团队协作的问题&#xff0c;你的改动需要同步到团队所有成员&#xff0c;比较麻烦。 好在&#xff0c;我们可以使用patch-package这个库来解决这类问题…

Git 打patch (打补丁)的使用

patch 的使用 一般是diff ,apply ,format-patch,am 1 生成patch git diff > test.patch 这个是打补丁(test.patch自己取的名字,这个命令可以看出没有指定修改的问题所以默认把所有修改的文件都打patch了,同时还需要注意,这里是本地修改的没有执行add缓存的) 如果想指定某…

linux基本功系列之fdisk命令实战

文章目录 前言一. fdisk命令介绍二. 语法格式及常用选项三. 参考案例3.1 列出每个分区的大小3.2 分区操作3.2.1 添加硬盘3.2.2 开启虚拟机并分区3.3.3 分区完成后进行格式化挂载 四 . 设置分区自动挂载 前言 大家好&#xff0c;又见面了&#xff0c;我是沐风晓月&#xff0c;本…

fdisk磁盘分区

fdisk磁盘分区 fdisk磁盘分区 fdisk磁盘分区文件系统类型fdisk分区过程 文件系统类型 EXT4 第四代扩展文件系统 存放数据 SWAP 交换文件系统 交换分区 fdisk fdisk 参数 fdisk -l 查看所有磁盘磁盘分区 fdisk命令 格式fdisk 磁盘设备 常用选项&#xff1a; m&#xff1a;查…

linux fdisk原理,fdisk详细剖析笔记

fdisk 简单使用 fdisk 工具原理就是修改磁盘的分区表&#xff0c;和分区信息。 查看帮助 #fdisk --help (1)磁盘列表 #fdisk -l (2)管理某个磁盘 #fdisk /dev/sdb 交互模式&#xff0c;可以直接m查看帮助信息&#xff0c;后面可以使用非交互模式&#xff0c;脚本自动格式化 磁盘…

Linux基础命令-fdisk管理磁盘分区表

文章目录 fdisk 命令介绍 命令格式 基本参数 1&#xff09;常用参数 2&#xff09;fdisk菜单操作说明 创建一个磁盘分区 1&#xff09;创建分区 2&#xff09;创建交换分区 参考实例 1&#xff09; 显示当前分区的信息 2&#xff09; 显示每个磁盘的分区信息 命令…

linux磁盘分区fdisk命令详解及云硬盘挂载实操

linux磁盘分区fdisk命令详解 1、什么是分区&#xff1f; 分区是将一个硬盘驱动器分成若干个逻辑驱动器&#xff0c;分区是把硬盘连续的区块当做一个独立的磁硬使用。分区表是一个硬盘分区的索引,分区的信息都会写进分区表。 2、为什么要有多个分区&#xff1f; 防止数据丢失…

linux磁盘挂载之fdisk

linux磁盘挂载&#xff0c;使用fdisk命令 fdisk可以支持2T以下的分区的挂载&#xff0c;如果分区大于2T需要使用parted工具 磁盘情况查看 fdisk -l 可以看到有两块物理盘 名称磁盘符号磁盘大小备注Disk/dev/sda214.7G已分区Disk/dev/sdb1073.7G未分区 如果disk中有Device项…

fdisk分区命令

fdisk是Linux系统中最常用的分区工具&#xff0c;通过这个命令也可以查看系统中所有可用的分区&#xff0c;但是这个命令只支持MBR的分区表(这句话应该只对某些系统&#xff0c;CentOS7-1810适用&#xff0c;Debian9.5和openSUSE15应该已经支持GPT分区表&#xff0c;下面对fdis…