引言
论文:Adversarial Preprocessing Understanding and Preventing Image-Scaling Attacks in Machine Learning
相关会议:USENIX
等级:CCF A
年份:2020
1.论文****概述
**1.1 **研究背景与重要性
近年来,机器学习在多个领域取得了显著成就,特别是在图像识别和自然语言处理方面。然而,这些技术的成功同时也带来了新的安全挑战。对抗性攻击的出现,特别是针对图像缩放的攻击,对机器学习系统的安全性构成了严重威胁。
**1.2 **研究动机
尽管对抗性攻击已经得到了广泛研究,但主要集中在学习算法本身,对预处理阶段的安全性研究相对较少。图像缩放攻击作为一种新型攻击手段,能够绕过学习模型,直接在数据预处理阶段进行干预,对现有防御措施提出了新的挑战。
**1.3 **研究目标与贡献
论文旨在深入分析图像缩放攻击的机制,从信号处理的角度识别攻击的根本原因,并提出有效的防御措施。论文的主要贡献包括:
- 对图像缩放攻击的首次全面理论分析。
- 对三种流行图像处理库的实证研究,揭示了不同缩放算法中的安全隐患。
- 提出了一种新的防御策略,能够有效抵御图像缩放攻击。
- 通过实证评估验证了所提防御措施的有效性。
2. 论文****相关工作
**2.1 **对抗性机器学习
对抗性机器学习是研究对抗性攻击和防御的领域。这些研究主要集中在对抗性示例的生成、检测以及对学习模型的操纵等方面。
**2.2 **图像缩放攻击
图像缩放攻击是一种针对图像预处理阶段的新型攻击手段。与传统的对抗性攻击不同,它不依赖于特定的学习模型,因此具有更广泛的适用性。
**2.3 **防御策略
现有的防御策略主要集中在提高学习模型的鲁棒性,而对预处理阶段的防御研究较少。论文提出的防御措施旨在填补这一空白。
3. 论文****方法和原理
**3.1 **理论分析
文章首先从信号处理的角度对图像缩放攻击进行了理论分析。通过分析下采样和卷积过程中的相互作用,确定了攻击成功的根本原因。
**3.2 **实证研究
对OpenCV、TensorFlow和Pillow三种流行的图像处理库进行了实证研究。通过分析这些库中的不同缩放算法,揭示了它们在处理图像缩放时可能存在的安全隐患。
**3.3 **防御措施
基于理论分析和实证研究的结果,开发了一种新的防御策略。该策略通过清理缩放算法处理的像素来防止攻击,并提出了两种图像重建方法——选择性中值滤波器和选择性随机滤波器,用于恢复被攻击者改变的像素内容。
4.论文****实验结果展示
论文给出的实验代码地址:https://github.com/EQuiw/2019-scalingattack
**4.1 **实验一
在论文的第一个实验中,检查了来自 OpenCV、TensorFlow 和 Pillow 的现有缩放算法对图像缩放攻击的鲁棒性。
**4.1.1 **步骤一
目标
** **该步骤主要为了实现两个目标:
O1:缩放后的攻击图像应与目标图像相对应(通过绘制图像进行观察)。
O2:攻击图像应与原始源图像相对应(同样通过绘制图像进行观察)。
代码实现流程
导入模块
加载图像
- 使用 load_image_examples 函数加载一对图像,作为源图像和目标图像。这里使用的是猫和咖啡的图像对。
- 确保图像数据类型为 numpy.uint8,数值范围在 [0, 255] 之间。
图表 1左为源图片,右为目标图片
说明:为了加快计算,作者减小了猫图像的大小。
攻击设置
- 选择缩放算法和库: - 选择最近邻插值算法(SuppScalingAlgorithms.NEAREST)作为缩放算法。- 选择 OpenCV 作为缩放库(SuppScalingLibraries.CV)。
- 检查算法和库的兼容性: - 使用 ScalingGenerator.check_valid_lib_alg_input 函数确保所选库支持所选算法。
- 生成缩放对象: - 使用 ScalingGenerator.create_scaling_approach 创建一个缩放方法对象,该对象将提供缩放图像所需的所有信息,并包含优化方法所需的缩放矩阵。
- 执行缩放攻击: - 使用 QuadraticScaleAttack 类进行攻击,设置 eps(攻击强度)为 1,并开启详细输出。- 攻击可能需要一些时间来完成。
- 缩放攻击图像: - 使用 scaler_approach.scale_image 方法对攻击图像进行缩放,模拟真实机器学习流程中的图像预处理步骤。
- 绘制图像: - 使用 plot_images_in_actual_size 函数以实际大小绘制图像,确保图像的清晰度和细节。
观察结果
- 成功的攻击应满足两个目标: - O1:缩放后的攻击图像应与目标图像相对应(通过绘制图像进行观察)。
图表 2左为目标图片,右为攻击图片缩放后的图
- O2:攻击图像应与原始源图像相对应(同样通过绘制图像进行观察)。
图表 3左为源图片,右为攻击图片
原理分析
最近邻插值算法
最近邻插值算法(Nearest Neighbor Interpolation)是一种简单的图像缩放或图像重建技术。其核心思想是,当需要计算新像素的位置时,最近邻插值算法会选择距离这个新像素位置最近的原始图像中的像素点,并用这个像素点的值作为新像素的值。
算法实现:
- 确定新像素位置:首先确定在缩放或重建后的图像中,新像素的位置。
- 查找最近像素:在原始图像中查找与新像素位置距离最近的像素点。这里的“距离”通常是指欧几里得距离,即两点之间的直线距离。
- 复制像素值:将找到的最近像素点的值复制给新像素。这个值包括颜色信息(如果是彩色图像的话),以及亮度信息(对于灰度图像)。
- 重复过程:对所有需要计算的新像素点重复上述过程。
非自适应图片缩放攻击
经过对代码调用的跟踪,发现图片缩放攻击的核心代码为根目录下attack/ _attack_ononedimension.py文件中定义的QuadraticScaleAttack类中的attack_ononedimension方法和_attack_in_one_direction方法。以下是这两个方法的详细解释:
- **(1)_attack_ononedimension **方法
这个方法执行单维度(一维)上的缩放攻击,基于 Xiao 等人论文中的算法 2。
参数
- src_image: 源图像的 NumPy 数组。
- target_image: 目标图像的 NumPy 数组。
- scaler_approach: ScalingApproach 对象,包含缩放所需的矩阵和方法。
返回值
- 返回一个包含三个 NumPy 数组的元组:处理后的攻击图像、水平方向上的目标函数值、垂直方向上的目标函数值。
逻辑流程
- 水平方向攻击: - 使用 scaler_approach 对 src_image 进行水平方向的缩放。- 调用 _attack_in_one_direction 方法对缩放后的图像执行水平方向的攻击。
- 四舍五入: - 如果 self.round_to_integer 为 True,则将攻击图像的像素值四舍五入到最近的整数,并限制在 0 到 255 范围内。
- 垂直方向攻击: - 对 src_image 和 attackimg1 进行转置。- 使用 scaler_approach 的垂直方向缩放矩阵的转置,再次调用 _attack_in_one_direction 方法。
- 返回结果: - 返回垂直方向攻击后的图像的转置,以及两个方向上的目标函数值。
(2)_attack_in_one_direction** **方法
这个方法在一个方向(水平或垂直)上执行攻击。如果需要在垂直方向上执行攻击,需要先对矩阵进行转置。
参数
- src_image: 源图像的 NumPy 数组。
- target_image: 目标图像的 NumPy 数组。
- cl_matrix: 用于缩放的矩阵。
返回值
- 返回攻击图像和目标函数值。
逻辑流程
- 初始化: - 根据是否优化运行时间,初始化攻击图像数组和使用的像素索引。
- 迭代每个目标像素: - 对目标图像的每一列进行迭代。- 打印调试信息,显示当前迭代进度。
- 优化过程: - 对每一列,尝试使用不同的 eps 值来解决优化问题。- 使用 CVXPY 定义目标函数和约束条件,创建并解决问题实例。
- 问题解决: - 如果在当前 eps 值下成功解决优化问题,记录结果并退出循环。- 如果无法解决,继续尝试下一个更大的 eps 值。
- 异常处理: - 如果在所有 eps 值下都无法解决优化问题,打印错误信息并抛出异常。
- 记录目标函数值: - 记录每次成功优化的目标函数值。
- 返回结果: - 返回攻击图像和目标函数值数组。
这两个方法在根目录下attack/ScaleAttackStrategy.py文件中定义的ScaleAttackStrategy类中被attack方法调用。QuadraticScaleAttack类是ScaleAttackStrategy的子类。ScaleAttackStrategy.py代码定义了一个名为 ScaleAttackStrategy 的抽象基类(ABC),用于实现图像缩放攻击的接口。以下是对ScaleAttackStrategy.py代码的详细解释:
类定义与初始化
- class ScaleAttackStrategy(ABC): 定义了一个名为 ScaleAttackStrategy 的抽象基类。
- def init(self, verbose: bool): 类的构造函数,接受一个布尔值 verbose 来控制是否在执行过程中打印详细信息。
攻击方法
- def attack(...): 这是一个公共方法,用于执行图像缩放攻击。它接受源图像、目标图像和缩放方法对象作为参数,并返回攻击后的图像以及两个目标函数值的列表。
参数检查
- 代码首先检查源图像和目标图像的像素值是否在 [0, 255] 的范围内,以确保它们适合进行图像处理。
- 接着检查图像的数据类型是否为 np.uint8。如果不是,将抛出异常。如果输入图像的数据类型是浮点型,但像素值在 [0, 255] 范围内,也可以使用这个方法,但最终返回的攻击图像将是 np.uint8 类型。
攻击逻辑
- 如果图像是二维的(灰度图像),则直接调用 _attack_ononedimension 方法处理,并返回结果。
- 如果图像是三维的(彩色图像),则对每个颜色通道分别调用 _attack_ononedimension 方法,并将各个通道的处理结果组合成最终的攻击图像。
抽象方法
- @abstractmethod: 这是一个装饰器,用于指定 _attack_ononedimension 方法是一个抽象方法,必须在子类中实现。
- def _attack_ononedimension(...): 这是一个抽象方法,用于在单维度(单通道)上执行主要的攻击逻辑。它应该首先在水平方向上执行攻击,然后是垂直方向。
返回值
- attack 方法和_attack_ononedimension抽象方法都返回一个元组,包含: 1. 攻击后的图像(或单通道图像)。2. 水平方向上的目标函数值。3. 垂直方向上的目标函数值。
**4.1.2 **步骤二
该步骤实现了观察缩放比率和核大小对非自适应攻击效果的影响,验证了论文3.3节。
代码实现流程
导入依赖
代码开始部分导入了执行图像缩放攻击和绘图所需的所有模块和函数。
加载图像
- 使用 load_image_examples(img_src=2) 加载一对图像,用作源图像和目标图像。
图表 4左为源图片,右为目标图片
定义缩放库
- 设置使用的缩放库为 OpenCV,通过 SuppScalingLibraries.CV 指定。
改变核大小并观察影响 (A部分)
- 准备一个列表 results_attacks 用于保存攻击图像,results_outputs 用于保存缩放后的输出图像。
- 遍历不同的缩放算法:最近邻 (NEAREST)、线性 (LINEAR)、三次 (CUBIC)。 - 对每种算法,使用 ScalingGenerator.create_scaling_approach 创建缩放方法对象。- 实例化 QuadraticScaleAttack 对象,设置 eps=1 并开启详细输出。- 调用 attack 方法执行攻击,获取攻击图像和目标函数值。- 使用 scaler_approach.scale_image 对攻击图像进行缩放,得到输出图像。- 将攻击图像和输出图像添加到相应列表。
- 使用 plot_images_in_actual_size 函数绘制不同核大小的攻击图像和输出图像。
图表 5不同核大小的输出图像
图表 6不同核大小的攻击图像
观察核大小对攻击的影响
- 绘制不同核宽度的攻击图像,分析核宽度对攻击效果的影响。
- 观察到线性和三次算法产生的攻击图像相似,因为它们的核宽度和权重中心相似。
改变缩放比率并观察影响 (B部分)
- 准备一个列表 results_attacks 用于保存不同缩放比率下的攻击图像。
- 固定使用最近邻缩放算法。
- 遍历不同的缩放比率因子(1, 1.5, 2, 4)。 - 对每个因子,使用 scale_cv2 调整目标图像的大小,从而改变缩放比率。- 创建新的缩放方法对象 scaler_approach。- 实例化 QuadraticScaleAttack 对象,执行攻击,获取攻击图像。- 将攻击图像添加到列表。
- 使用 plot_images_in_actual_size 函数绘制不同缩放比率下的攻击图像。
观察缩放比率对攻击的影响
- 绘制不同缩放比率因子的攻击图像,分析缩放比率对攻击效果的影响。
- 观察到缩放比率越小,攻击越明显,因为相对于整个图像,修改的像素数量更多。
图表 7不同缩放比例的攻击图像
原理分析
** **针对缩放攻击的代码原理与步骤一一致。以下是该步骤验证论文3.3节缩放比率和核大小对攻击效果的影响的原理分析:
- 缩放与信号处理
- 图像可以被视为一种二维信号,与音频和视频信号类似。
- 图像缩放过程涉及到信号的频率变换,尤其是在下采样过程中,高频信号被转换成低频信号。
- 下采样的主要问题在于,如果采样率低于信号中最高频率的两倍(根据奈奎斯特-香农定理),信号就无法被准确重建,导致混叠效应(aliasing effect)。
- 缩放与卷积
- 缩放算法在降低图像尺寸时,通过插值像素来减轻混叠效应。这可以通过卷积操作来描述,即源图像信号与核函数的卷积。
- 每个缩放算法都使用特定的核函数,如最近邻、双线性、双三次等,它们决定了在缩放过程中如何加权和平滑源图像的像素。
- 攻击原理
- 图像缩放攻击利用了缩放算法中的一个关键弱点:不是所有源图像像素在缩放过程中都同等重要。
- 只有靠近卷积核中心的像素在缩放图像中具有较高的权重,而其他像素的影响有限。
- 如果缩放步长大于核宽度,一些像素甚至在缩放过程中被忽略。攻击者可以利用这一点,通过仅修改权重高的像素来控制缩放过程。
- 攻击成功的因素
- 攻击的成功依赖于高权重像素的稀疏性。如果这些像素分布稀疏,攻击者可以较容易地实现攻击目标。
- 缩放比率(β)和核宽度(σ)是影响高权重像素稀疏性的两个因素。缩放比率越大,核宽度越小,高权重像素越稀疏,攻击越容易成功。
**4.1.3 **步骤三
该步骤是针对面积缩放(Area Scaling)的自适应攻击实验。
实验代码是针对面积缩放(Area Scaling)的自适应攻击实验脚本。自适应攻击意味着攻击者知道防御者可能采用的防御措施,并据此调整攻击策略。
实现代码流程
导入模块
这部分代码导入了执行图像处理和攻击所需的所有工具和函数。
加载图像
加载一对图像,用作攻击的源图像和目标图像。
图表 8左为源图片,右为目标图片
定义攻击参数
设置攻击的范数(L0、L1或L2),以及是否在每个面积缩放块中随机分布L0变化。
调整源图像大小
将源图像调整到目标图像形状的整数倍,以简化攻击过程。如果缩放比率不是整数,则在面积缩放中会出现重叠块,这会增加攻击的复杂性。
创建缩放方法对象
创建一个 ScalingApproach 对象,用于定义使用OpenCV库和面积缩放算法的缩放方法。
执行攻击
根据选择的攻击范数(L0、L1或L2),执行不同的自适应攻击策略:
- 对于L1和L2范数,使用 area_scale_attack_integerborders 函数。
- 对于L0范数,使用 area_straight_scale_attack 函数。
攻击函数的参数
- tar_image: 目标图像。
- src_img: 源图像。
- eps: 允许的误差范围。
- blockwise: 是否分块处理。
- verbose: 是否打印详细信息。
- attack_norm: 攻击使用的范数。
- permutation: 是否使用排列。
绘制结果图像
使用 plot_images_in_actual_size 函数绘制源图像、攻击图像、目标图像和输出图像。
图表 9左为攻击源图片,右为攻击图片
图表 10左为目标图片,右为攻击图片缩放后的图片
观察结果
- 攻击图像可能看起来并不理想,因为需要改变许多像素才能在面积缩放后获得所需的结果,导致攻击图像中有明显的目标图像痕迹。
- 输出图像(攻击图像的缩放版本)应与目标图像对应,这意味着自适应攻击成功。
进一步实验
将area_attack_norm 设置为L1,并重新运行实验,以观察使用基于L1范数的自适应攻击策略的结果:
图表 11左为攻击源图片,右为攻击图片
图表 12左为目标图片,右为攻击图片缩放后的图片
将area_attack_norm 设置为L2,并重新运行实验,以观察使用基于L1范数的自适应攻击策略的结果:
图表 13左为攻击源图片,右为攻击图片
图表 14左为目标图片,右为攻击图片缩放后的图片
说明:L1和L2用的是同样的攻击方法。
观察结果
- 攻击图像可能看起来同样不理想,因为需要改变许多像素才能在面积缩放后获得所需的结果,导致攻击图像中有明显的目标图像痕迹。
- 输出图像(攻击图像的缩放版本)应与目标图像对应,这意味着自适应攻击成功。
原理分析
自适应图片缩放攻击:
经过对代码调用的跟踪,发现自适应攻击的核心代码在根目录area_attack/ area_scale_integerborders.py和area_straight_scale_attack.py文件中。
area_scale_integerborders.py代码实现了对基于L1和L2范式面积缩放算法的自适应攻击,具体包括以下几个函数:
- area_direct_blockwise_int 函数: - 这个函数是对面积缩放算法的L1或L2范数攻击的变体。- 它将图像分成多个较大的块,并在每个块上解决优化问题以获得攻击图像。- 这种方法比逐个块解决问题的 area_direct 更快。
- area_direct_int 函数: - 这个函数是 area_direct_blockwise_int 的一个变体,但它不是以块状方式进行优化,而是直接在每个像素上解决问题。
- area_scale_attack_integerborders 函数: - 这个函数用于创建攻击图像,如果进行下采样,应该看起来像目标图像。- 它只适用于整数下采样因子的情况。
主要步骤
- 计算缩放比例,确保缩放比例是整数。
- 根据是否使用L2范数(如果不是则使用L1范数)来设置优化问题。
- 对图像进行遍历,为每个像素或块定义优化问题,包括目标函数和约束条件。
- 使用CVXPY求解优化问题。如果默认求解器失败,则尝试使用其他求解器(如ECOS)。
- 检查求解状态,如果不是最优或次优解,则抛出异常。
- 更新源图像的像素值以生成攻击图像。
函数参数
- tar_image:目标图像,攻击最终要生成的图像。
- src_img:源图像,攻击起始的图像。
- ksizex 和 ksizey:在x和y方向上的缩放核大小。
- verbose:是否显示详细进度信息。
- eps:优化问题中的精度参数。
- attack_norm:攻击使用的范数类型,可以是L1或L2。
攻击策略
- 对于每个目标图像块或像素,定义一个优化问题,目标是最小化源图像与攻击图像之间的差异,同时满足目标图像的期望值。
- 使用CVXPY作为优化求解器,它支持多种类型的优化问题,包括线性、二次和锥规划等。
- area_straight_scale_attack.py文件代码实现了基于L0范数的面积缩放攻击算法,用于生成攻击图像。以下是对代码的详细解释:
函数 _area_straight_direct
- 这个函数是对面积缩放算法的L0范数攻击的直接实现。
- 它逐个像素地调整源图像,以使缩放后的图像看起来像目标图像。
参数
- tar_image: 目标图像,攻击最终要生成的图像。
- src_img: 源图像,攻击起始的图像。
- ksizex 和 ksizey: 定义缩放块的大小,假设缩放比率是整数。
- verbose: 如果为True,则显示进度信息。
- permutation: 如果为True,则在每个块中随机排列像素对,以确定调整顺序。
返回值
- 修改后的源图像。
- 每个目标图像像素块中被重写的像素百分比。
逻辑流程
- 对目标图像的每个像素块进行遍历。
- 计算当前块的平均值,并与目标图像的对应像素值比较。
- 根据比较结果,确定需要增加或减少像素值。
- 通过迭代每个块中的像素对,调整像素值以接近目标值。
- 如果permutation为True,则在调整像素值之前对像素对列表进行随机排列。
- 计算并记录每个目标像素块中被修改的像素数量。
函数 area_straight_scale_attack
- 这个函数是_area_straight_direct的包装器,用于处理多通道图像。
参数
- 与_area_straight_direct相同,但增加了对彩色图像的支持。
返回值
- 修改后的源图像(对每个通道分别处理)。
- 记录每个通道的重写像素信息。
逻辑流程
- 计算缩放比率,确保缩放比率是整数。
- 对于灰度图像,直接调用_area_straight_direct。
- 对于彩色图像,遍历每个通道,分别调用_area_straight_direct。
- 合并每个通道的结果,返回最终的攻击图像和重写像素信息。
**4.2 **实验二
评估了基于图像重建的新型防御措施(第4.3节提出的防御2),特别是将选择性中值滤波器和随机滤波器与易受攻击的缩放算法结合使用,并测试了这些组合的健壮性。
**4.2.1 **步骤一
该步骤专注于评估和展示中值滤波器和随机滤波器两种图像重建技术作为防御措施,以对抗图像缩放攻击。
代码实现流程
导入依赖
代码开始部分导入了执行图像处理、攻击执行、防御应用和结果可视化所需的所有工具和函数。
设置
- usecythonifavailable: 一个布尔值,指示是否使用Cython优化的代码。Cython可以提供比纯Python更快的执行速度。
参数定义
- scaling_algorithm 和 scaling_library: 定义了使用的缩放算法(线性)和库(OpenCV)。
加载图像
- 使用 load_image_examples 加载一对图像,用作源图像和目标图像。
检查参数有效性
- 确保所选的缩放库和算法组合是有效的。
执行攻击
- 创建 ScalingApproach 对象,定义了缩放的方法和参数。
- 实例化 QuadraticScaleAttack 对象,执行攻击,并获取攻击图像。
应用中值滤波器防御
- 初始化 FourierPeakMatrixCollector 对象,用于收集频率域中的峰值信息,这有助于识别可能被攻击操纵的像素。
- 设置防御类型为中值滤波,并创建 PreventionDefense 对象。
- 使用 make_image_secure 方法对攻击图像应用中值滤波防御。
- 使用缩放方法对过滤后的攻击图像进行缩放,以评估防御效果。
可视化结果
- 使用 plot_images_in_actual_size 函数展示攻击前后的图像,以及实际的源图像,以比较防御效果。
图表 15左为中值滤波器防御前的攻击图片,中为中值滤波器防御后的攻击图片,右为源图片
应用随机滤波器防御
- 重复上述过程,但这次使用随机滤波作为防御措施。
- 可视化展示使用随机滤波器前后的图像。
图表 16左为随机滤波器防御前的攻击图片,中为随机滤波器防御后的攻击图片,右为源图片
观察和结论
- 脚本两种防御方式都能成功防御攻击
图表 17左为防御后缩放的攻击图,右为目标图(攻击成功后期望的图片)
- 中值滤波器在视觉上提供了更好的结果,尽管随机滤波器也能防止攻击。
图表 18左为防御前的攻击图片,中为中值滤波器防御后的攻击图片,右为随机滤波器防御后的攻击图片
代码细节
- PreventionDefenseGenerator.create_prevention_defense: 用于初始化防御措施的函数。
- PreventionDefense.make_image_secure: 应用指定的防御措施并返回处理后的图像。
- args_bandwidthfactor: 中值滤波器的带宽因子,影响滤波窗口的大小。
- usecythonifavailable: 如果可用,使用Cython优化代码以提高性能。
原理分析
中值滤波器(Median Filter)
**原理: **中值滤波器是一种非线性的数字滤波器,它通过替换每个像素值为其邻域内的中值来减少图像噪声和异常值的影响。在图像缩放攻击的防御中,中值滤波器可以用来抵抗攻击,因为它不依赖于邻域内所有像素的值,而是只依赖于中间的值。
**防御应用: **在论文中提到的中值滤波器防御中,该滤波器用于识别和重构攻击图像中被操纵的像素。通过计算每个像素邻域的中值并替换原像素值,可以有效地消除攻击者为了实现攻击目标而做的最小化修改。
优势:
- 强大的去噪能力,尤其对于椒盐噪声。
- 保留了图像的边缘信息,不会模糊图像。
局限性:
- 对于高密度的攻击修改可能不够有效,因为攻击者可能改变了足够多的像素以影响中值。
随机滤波器(Random Filter)
**原理: **随机滤波器,也称为随机抽样滤波器,是一种简单的滤波器,它通过在每个像素的邻域内随机选择一个像素值来替换原像素值。这种方法的目的是引入随机性,使得攻击者难以预测哪些像素会被保留。
防御应用: 在论文中提到的随机滤波器防御中,该滤波器用于通过引入随机性来抵御图像缩放攻击。即使攻击者知道某些像素会被修改,他们也无法确定哪些具体的像素会被选中。
优势:
- 简单易实现。
- 通过随机性增加了攻击的难度。
局限性:
- 可能会降低图像质量,特别是在高密度攻击下。
- 对于保持图像细节和结构的效果不如中值滤波器。
总结
中值滤波器和随机滤波器都是用于防御图像缩放攻击的技术。中值滤波器通过使用统计学上的中值来减少噪声和异常值的影响,而随机滤波器则通过引入随机性来增加攻击的不确定性。两者都可以在不同程度上抵御攻击,但它们各自有不同的优势和局限性。在实际应用中,选择合适的滤波器需要考虑到攻击的类型、图像的特性以及对图像质量的要求。根据实验结果,中值滤波器在视觉效果上提供了更好的结果,而随机滤波器虽然也能防止攻击,但可能会在一定程度上降低图像质量。
**4.2.2 **步骤二
该步骤专注于评估针对自适应攻击者的防御策略,该步骤主要实现两个目标:
- O1:攻击图像下采样后的输出应与目标图像对应。
- O2:攻击图像在下采样前应看起来像源图像。
实验代码专注于评估和展示如何防御自适应攻击者,这些攻击者了解防御措施并能够相应地调整其攻击策略。
代码实现流程
以下是代码的详细解释:
实验设置
- 定义了是否使用Cython优化代码的标志,并设置了缩放算法和库的类型。
加载图像
- 使用特定的函数加载一对图像,作为源图像和目标图像。
参数验证
- 确保所选的缩放库和算法组合是有效的。
执行攻击
- 创建缩放方法对象,并执行二次缩放攻击,获取攻击图像。
初始化 Fourier 峰值矩阵收集器
- 用于收集频率域中的峰值信息,帮助识别可能被攻击操纵的像素。
防御措施
中值滤波器防御:
- 定义了使用中值滤波器的防御类型,并创建了防御对象。
- 自适应攻击: - 初始化自适应攻击,允许在每个块中修改一定百分比的像素。
- 应用中值滤波器防御: - 使用中值滤波器处理自适应攻击图像,并获取过滤后的图像。
- 可视化结果: - 展示经过中值滤波器处理后的攻击图像与目标图像和源图像的对比。
图表 19左为中值滤波器防御后缩放的攻击图片,右为目标图片即期望攻击图片缩放后的图片
图表 20左为中值滤波器防御后的自适应攻击图片,右为源图片
随机滤波器防御
- 定义随机滤波器防御: - 定义了使用随机滤波器的防御类型,并创建了防御对象。
- 自适应攻击: - 针对随机滤波器重复自适应攻击的过程。
- 应用随机滤波器防御: - 使用随机滤波器处理自适应攻击图像,并获取过滤后的图像。
- 可视化结果: - 展示经过随机滤波器处理后的攻击图像与目标图像和源图像的对比。
图表 21作为随机滤波器防御前的缩放攻击图片,中为随机滤波器防御后的缩放攻击图片,右为目标图片即期望的缩放攻击图片
图表 22左为随机滤波器防御后的自适应攻击图片,右为源图片
攻击目标分析
- 分析了攻击的两个目标: - O1:攻击图像下采样后的输出应与目标图像对应。- O2:攻击图像在下采样前应看起来像源图像。
结论
- 自适应攻击在中值和随机滤波器下能够实现目标O1,但无法实现目标O2,因为攻击图像中的修改过于明显,无法通过滤波器的防御。
**5.**结论与思考
**5.1 **结论
- 图像缩放攻击的普遍威胁:论文展示了图像缩放攻击如何对机器学习模型的安全性构成普遍威胁,这些攻击利用了图像预处理阶段的漏洞。
- 攻击的独立性:攻击的成功不依赖于特定的学习模型或特征提取方法,表明了其独立性和广泛的适用性。
- 防御措施的创新性:提出的防御措施通过理论分析和图像重建技术,有效地对抗了图像缩放攻击,这在对抗性攻击的研究中是一个创新点。
- 防御策略的实用性:实验结果表明,所提出的防御策略不仅在理论上有效,而且在实际应用中也具有较高的实用性和适应性。
**5.2 **思考
- 防御措施的深入研究:虽然论文提出的防御措施在实验中表现良好,但需要进一步研究其在不同环境和条件下的稳定性和鲁棒性。
- 计算成本与实际应用:在现实世界中部署这些防御措施时,必须考虑其计算成本和效率,特别是在需要实时处理的场景中。
- 攻击者策略的不断演化:随着防御技术的发展,攻击者可能也会不断更新他们的攻击策略,这可能导致一场持续的攻防对抗。
- 跨学科的安全研究:图像缩放攻击的研究应该促进跨学科合作,结合信号处理、计算机视觉、机器学习等领域的专业知识,以更全面地理解和防御这些攻击。
- 伦理和社会责任:技术的发展应以负责任的方式进行,研究者需要考虑其工作可能带来的伦理和社会影响,确保技术的安全和正当使用。
- 公开研究的长远影响:论文作者通过公开数据集和代码,不仅促进了当前的研究,也可能对未来的学术和工业应用产生深远影响。
- 防御措施的普及和教育:需要通过教育和培训,提高研究人员和从业者对于机器学习系统潜在漏洞的认识,并普及有效的防御措施。
- 长期安全策略的制定:鉴于技术的不断进步,需要制定长期的安全策略,以应对新出现的威胁,并确保系统的持续安全。
- 技术与政策的协同:除了技术解决方案外,还需要制定相应的政策和标准,以规范机器学习模型的开发和部署,减少潜在的安全风险。
- 对现有系统的评估:需要对现有的机器学习系统进行全面的安全评估,以识别和修复可能的漏洞。
6.参考文献
[1] Quiring E, Klein D, Arp D, Johns M, Rieck K. Adversarial preprocessing: Understanding and preventing image-scaling attacks in machine learning. 2020.
[2] Quiring E, Klein D, Arp D, Johns M, Rieck K. Adversarial preprocessing: Understanding and preventing image-scaling attacks in machine learning [EB/OL]. (2020-09-23) [2024-08-24]. https://github.com/EQuiw/2019-scalingattack.
[3] Quiring E, Klein D, Arp D, Johns M, Rieck K. Image-Scaling Attacks and Defenses [EB/OL]. (2020-09-23) [2024-08-24]. https://scaling-attacks.net/.
版权归原作者 不懂技术的小胖子 所有, 如有侵权,请联系我们删除。