——《Adversarial Preprocessing: Understanding and Preventing Image-Scaling Attacks in Machine Learning》
一、图像缩放攻击是什么
做过神经网络相关的小伙伴应该了解,为保证图像提取特征参数的一致性,我们在进行数据预处理时,会把所有的图片进行一个缩放的操作,将所有图片整合成同一个尺寸在进行下一步的处理。图像缩放攻击,指的就是攻击者针对数据预处理部分中图像缩放时的攻击。
这里有一个小例子:

本图中,左图为正常原图,我们采用OpenCV的压缩函数压缩后,变成了一只哈士奇。
二、图像缩放的研究动机
在这篇论文发表前,前辈Xiao等人的最新工作提出了针对图像缩放的攻击(在论文中多次被引用)。这些攻击其实与机器学习模型无关,但是正因此会影响计算机视觉中大多数基于机器学习的方法。但是在这篇论文前,我们尚不了解攻击的潜在机制,其根本原因仍然未知。
本篇论文提供了对图像缩放攻击的首次深入分析,确定了其根本原因:下采样和卷积的相互作用。基于此发现,论文作者研究了三个流行的用于机器学习的开源库(OpenCV,TensorFlow和Pillow),并确认了这种缩放攻击作用在不同的算法中的效果。之后并作为补救措施,开发了针对图像缩放攻击的防御措施,可防止所有可能的攻击变体。从实践上证明了这种针对非自适应和自适应对手的防御的有效性。
二、图像缩放攻击带来的主要威胁
1、图像的缩放对于计算机视觉而言可谓必要,因为图像的大小决定了算法训练的成本,因此是几乎所有视觉算法在数据预处理时必须要做的,因此此类攻击涵盖的范围非常广。
2、由于是数据预处理时进行的攻击,因此攻击几乎不用考虑神经网络模型框架,也和特征、训练数据无关。
3、该攻击还可以用于影响训练中的数据,与此同时来误导我们训练出的分类器。
三、图像缩放攻击分析:
攻击过程:

1、攻击者所需信息:可以针对未知学习模型、不需要训练数据和提取特征。需要知道两个参数: (a)使用的缩放算法、(b)目标大小m’×n’。

参数获取方式:通过黑盒攻击发送特制的图像以访问机器学习系统,轻松推断这两个参数。同时常见的开放源代码库有有限的缩放选项,因此只需要几次尝试就可以发现正确的参数设置。(后者深有体会)
2、攻击范围:由于在数据预处理时操作的,特征未被提取,因此可以有效地误导在此之后的所有步骤,包括训练和测试。
3、攻击策略:包括强弱两种,我们的研究主要针对强策略
4、攻击者要达成的目标:
- 在缩放过程中产生目标图像。
- 攻击图像要混迹于原图像。
化为数学上的量化目标:
对手寻求S的最小扰动∆,使得∆+S=A的降尺度产生类似于T的输出

同时采用二次规划保证A的像素在一个固定范围内,从而获得看起来像原图的图像,且缩放后匹配。
之后攻击者进行横向和纵向优化:
通过先水平调整图像大小,然后垂直调整图像大小来实现缩小。基于简单矩阵乘法的闭合形式表达式实现:

基于此矩阵乘法,攻击还可以分解为水平和垂直操作:
行的优化:
计算S的一个调整大小的版本:S’

然后将S’视为源,T仍为目标
从而:


基于列的优化:
为了进一步减少计算量,可以将优化问题进一步分解为各个维度:

对水平方向重复此优化,并最终对所有颜色通道进行计算。
5、对于缩放算法的深入研究:
从信号角度分析:
缩放缩小了图像的尺寸,使图像的频率混合改变并且丢失更高的频率。这一过程与信号处理中的下采样密切相关,在信号处理中,高频信号被转换为低频信号。降采样的一个主要问题是,降低的分辨率可能无法描述图像中的所有相关频率。根据奈奎斯特-香农定理,只有当采样率fT至少是信号中最高频率fmax的两倍:fT ≥ 2 · fmax时,才能从离散数量的采样点重构信号s(t),反之产生混叠效应。
这些算法在缩小源图像的尺度之前仔细地对其像素进行插值,以减轻混叠效应。这种计算可以描述为源信号和核函数之间的卷积。
根本原因分析:
并非源图像中的所有像素对其缩放版本都有相同的贡献。只有那些接近内核中心的像素才会获得高权重,而所有剩余的像素在缩放过程中所起的作用有限。
源像素的这种不平衡影响为图像缩放攻击提供了完美的基础。对手只需要修改那些高权重的像素来控制缩放,就可以保持图像的其余部分不变

四、图像缩放攻击的防御方式
我们采用两个方向:非自适应与自适应
1、鲁棒缩放算法
一种理想缩放算法:算法至少对源图像的每个像素进行一次缩小,而如果源和缩放图像之间的比率越大,卷积核需要变得越宽以覆盖图像的所有像素。一个理想的算法还需要对所有像素进行平均加权,理想算法的卷积应该是均匀的,并且以相等的权重组合当前核窗口中的所有像素。
因此我们提出在所有框架中都是用动态内核宽度β实现的算法:面积缩放。
面积缩放就是指通过简单地计算核窗口下所有像素的平均值来缩放图像,面积缩放对应于降低混叠效应的低通滤波器。因此,区域缩放可以有效地防止图像缩放攻击,如果卷积的均匀加权不影响后续的分析步骤,则该算法是一种合理的防御方法。

2、图像重建算法
由于攻击者通过控制缩放过程的一小部分像素来操作。通过对缩放算法的了解,我们可以精确地识别攻击图像中的这组像素。我们首先识别所有经过缩放算法处理的像素,然后使用图像的剩余像素重建它们的内容。
同时论文提出了两种滤波器:
选择性中值滤波器:
给定缩放算法和目标大小,我们的滤波器识别在缩放过程中处理的输入图像中的像素集P。对每个像素进行卷积核,并计算P∈P的中值像素值,确定P周围的一个窗口Wp,类似于这个窗口。为了保证计算的健壮性,我们将该窗口的大小定义为2βh×2βv,保证了不同窗口之间有一半像素重叠,从而阻止了现有的缩放攻击。

选择性随机滤波器:
为解决效率问题,我们还提出了一种选择性随机滤波器,它从每个窗口取一个随机点而不是中值。此筛选器适用于需要非常高效的运行时性能并且容忍可能的视觉质量损失。
五、思考和总结
从读者角度分析论文:
1、首次深入分析图像缩放攻击
2、研究了三种流行的用于机器学习的成像库,并确认了不同的缩放算法面临攻击时的表现,并分析了其中缘由。
3、开发了针对图像缩放攻击的新颖防御措施,可防止所有可能的攻击变体。
我们也可以借鉴文中对神经网络攻击性的分析,来为今后的神经网络架构,尤其是卷积核部分进行更好的优化。暑假有时间,一定要尝试实践操作一下。
写在最后:
选择这篇论文的原因:
其实做这个方向的根本原因是19年到20年我一直在做计算机视觉相关的算法开发,我曾经一度认为在深度学习的路上可能这是我现阶段能走到的最远了。因为做久了开发,我很难不去尝试自己构造一个属于自己的神经网络架构,却因为数学基础不够,实践经历太少,屡屡碰壁,只能使用现有网络“炼丹”。
转折点在于这门课,我发现从安全来看待人工智能和神经网络领域,真的是全新的天地。正巧今年的一门选修中推荐了这篇论文,由于我有一定基础,又有兴趣,就很努力阅读了一下论文,并准备当作一个自己的小挑战(挖坑了)
最后:本报告由自己翻译阅读而来,如有错误欢迎指正!