zoukankan      html  css  js  c++  java
  • 照片里的秘密,你看到的不是你认为的,这种造假方法能同时骗过AI和人眼

    来自 | 量子位

    你能看出下面两张图有什么区别吗?

    它们看起来一样,都是广场风景照。只是右边的仔细一看,会发现有些“奇怪的点阵”。

    但在AI的眼里,右边的照片却是一只哈士奇。为什么?

    问题就出在那些“奇怪的点阵”里,原来把点阵重新组合,就能看到哈士奇的缩略图。

    这种骗过AI的方法其实并不新鲜,也不复杂。AI技术还未流行的时候,已经有网友在泡论坛的时候发现了这种技巧:

    把一张正常图片缩小后在色情图片里,没点进帖子,缩略图上看到的是一张无害照片。但是如果你当众点开了这个帖子,一张黄图显示在眼前,立刻让你“社会性死亡”。

    比如把著名的花花公子封面女郎Lena稍微伪装一下,缩略图就变成了一个长发男子。

    在今年的USENIX安全研讨会上,来自德国布伦瑞克大学的团队提出了这种攻击AI的方法:图片缩放攻击(image scaling attack)。

       骗过AI和人眼

    图片缩放攻击的操作原理很简单,把需要隐藏的图像按比例插在新图像的像素中,一般大图是小图的5到10倍。

    当图像交给AI模型处理时,出于计算成本考虑,系统一般会进行预处理,也就是图片压缩到比较小的尺寸。而且卷积神经网络本身处理图像时,还会进行池化(pooling)。

    不仅AI,人眼也会过滤掉图像像素中的“少数派”,被这种攻击方法骗过。

    下面,我们来看看把文章开头的右侧图片用OpenCV的图像压缩预处理一下的结果:

    广场照真的变成了哈士奇。缩小的图片和原来的图片完全不一样!

    除了OpenCV外,该团队还测试了PyTorch的Pillow和TensorFlow的tf.image,几种常见的图像滤波器全部都中招了。

       原理

    缩放攻击的根本原因是,下采样卷积相互作用的结果。通俗来说,就是算法没有同等地考虑源图像中的所有像素。

    因此,攻击者只需修改一小部分权重较高的像素,就能改变缩略图,图片其余大部分像素保持不变。

    下面以一维情况来简单说明一下攻击的基本原理。

    压缩图的像素是这样算出来的:滤波器窗口在图片源信号s上移动,将窗口中的每个像素值(图中圆圈)乘以该位置窗口上的权重,得到缩略后的点值。

    可以看到,输出缩略图图中的第一个像素是s第三、第四个像素的平均结果,而第二个像素仅考虑了s第七个像素。导致9个像素中只有3个被用于计算缩略图。

    只有那些靠近内核中心(三角形部分)的像素会获得较高的权重,而其他像素对缩略图的作用有限。

    如果算法的步长超过窗口宽度,甚至有些像素还会被忽略。因此,攻击的成功取决于高权重像素的稀疏性。

    如果要进行图像缩放攻击,需要做到两点。首先,修改少数影响压缩算法的像素;其次,攻击图像在视觉上与源图像匹配。

       如何预防

    图像缩放攻击原理简单,能同时骗过人眼和AI,因此布伦瑞克大学团队认为这种攻击具有一定的迷惑性。

    经过处理的图像中,在后端,可以逃过AI对图片的审查;在前端,可以骗过收集数据集的人,污染AI训练数据集。

    如果有人把这些图像掺进自动驾驶训练数据集,那么我们用训练出来的自动驾驶系统可靠吗?在这种情况下,汽车会不会发生意外?

    当然,这种方法并非不可预防。

    既然问题出在图像压缩的滤波器上,那么我们只要选择合适的滤波器就能抵御攻击。

    实验表明,中值滤波和随机滤波对非自适应攻击提供了有效的防御。

    具体到代码上,如果你在使用OpenCV,可以通过在调用resize API时使用interpolation参数来解决,而不要使用默认值。

    TensorFlow 2.0依然容易受到攻击,双线性和双三次缩放对图像缩放攻击具有鲁棒性,可将参数antialias设置为true,但是此举会影响网络性能。

  • 相关阅读:
    JavaWeb
    申请百度开发者账号
    秋招C++面试相关总结索引
    游戏开发客户端
    Python源码剖析——02虚拟机
    Python源码剖析——01内建对象
    Pymongo 笔记
    调用其他文件__name__=='__main__'下代码
    Python 相关
    Python import本地模块
  • 原文地址:https://www.cnblogs.com/zm131417-/p/14337414.html
Copyright © 2011-2022 走看看