利用python实现深度学习生成对抗样本模型,为任一图片加扰动并恢复原像素的全流程记录

利用python实现深度学习生成对抗样本,为任一图片加扰动并恢复原像素

  • 一、前言
    • (一)什么是深度学习
    • (二)什么是样本模型
    • (三)什么是对抗样本
      • 1、对抗的目的
      • 2、谁来对抗/li>
      • 3、对抗的敌人是谁/li>
      • 4、怎么对抗/li>
        • (1)这里有两个样本模型
        • (2)用来训练图片的样本模型和加扰动的关系
        • (3)在这个过程中,我们要做的是什么/li>
  • 二、实现代码
    • (一)获取样本模型
      • 1、选取样本
      • 2、训练模型
    • (二)处理图片(即生成对抗图片)
    • (三)还图片至原像素大小
    • (四)进一步恢复目视效果(可能会适得其反)
  • 三、总结
  • 四、附件下载

一、前言

每个语言都有自己的独到之处,C适合嵌入式开发,C++适合桌面端软件,java适合移动端应用,js适合 页,而python,则是为了机器学习,人工只能,应运而生似得。
这次尝试通过python,实现对抗样本模型的生成,并依据此样本,处理任一图片,并实现图片的尺寸还原,做一下记录。
首先,对一些基本概念解释一下,我只通过我的理解记录,可能不够准确,专业解释请自行百度。

(一)什么是深度学习

机器学习,举例来说,比如为了让计算机能识别出一张图片中有一只鸟,他需要进行学习,学习的过程不同于人类的思维,他是通过大量的整理好的鸟的图片,通过类似数字图像处理的方法,将每张图片分解成一个个特征,他通过记忆这些特征,并且分析出某些特征,如果在大量的鸟的图片中,都曾出现过的,计算机便认为这些特征,便是识别图片中有一只鸟的重要特征,这时候丢给计算机一张图片,如果此时图片上也能搜寻到类似的特征,计算机便把这张图片识别成鸟的图片。

(二)什么是样本模型

样本模型,则是刚刚提到的,通过大量图片,识别出来的,某一物品的重要特征的所组成的库。当然,这个库里可以包含更多物品的重要特征,不见得只有鸟或者狒狒。

(三)什么是对抗样本

对抗样本就是基于样本模型,即这个特征库已经可以较高概率的通过其所记录的特征,来较为准确的描述某一物品的前提下,进行的操作。
说到对抗样本,要搞清楚几个问题,非常重要,不然很难理解, 络上掉书袋的解释非常多,不好懂,我尝试口水解释,当然可能会有偏差,专业解释还请自行百度。

1、对抗的目的

就是给一个训练好的样本模型,任意一张包含在此模型的物品类型的图片,比如一只小鸟的图片,他能准确识别出这是一只鸟,但是经过对这张图片的一些处理后,这个样本模型或者别的包含此类物品的样本模型,竟然都把他识别成了大象,到这就结束了,重头戏在后面,这张图片,此时要不影响人眼的目视效果,即人眼看着没什么变化,而计算机却已经认不出这张图片来,这样才算是对抗成功了。

2、谁来对抗/h3>

谁来对抗,当然是你选中的那张,要通过样本模型来识别的图片。

3、对抗的敌人是谁/h3>

划重点,所指的对抗,到底对抗的是什么抗的其实是试图来识别这张图片上面的物品类型的那个样本模型,那么就说得清楚了, 上那些牛逼哄哄的名词,什么白盒攻击,黑盒攻击,到底是什么意思了。
白盒攻击,解释起来就是以己之矛,攻己之盾,没错,就是拿自己的模型,来识别这张图片,正常情况下,当然是这个意思就是,测试一下对抗样本的加扰动的成功与否。
黑盒攻击,就是以彼之矛,攻己之盾,就是用别人家训练的样本模型,即通过不同的样本,训练出来的模型,比如这个模型里也有鸟这个物品,用他来尝试识别这张图片,是否能识别出图片中那是一只可爱的小鸟。

4、怎么对抗/h3>

就是刚刚说到的,怎么处理这个图片,即给图片如何加上扰动。这个就是诸位大神们,研究的重点了。方法不少,有各种算法,有名的比如FGSM、IGSM、DeepFool、JSMA等等,实现这些算法的方法也简单,都不用自己写了,直接调用就能实现,直接调用art包,这个art包,是IBM公司开发的AE工具箱(Adversarial Robustness Toolbox),python下可以直接通过pip3工具安装。
以下是重点!!!
但是我要说的不仅如此,而是我刚一接触深度学习时,困扰了我很久的一个问题,就是如果只是给图片加上扰动,跟样本模型有啥关系是不是用不着样本模型,直接加扰动,跳过这一步也行为 上能够搜到的恶意样本的相关解释也很单一,都没强调这方面的解释,也无怪乎我这样的自学者,有此困扰了。有几个问题,需要特意解释一下。

(1)这里有两个样本模型

一个样本模型是用来训练图片的样本模型,即用来处理图片的样本模型,另一个是被攻击的样本模型,即用来测试的样本模型,当然,这两个可以是一个,就是白盒和黑盒攻击的区别。

(2)用来训练图片的样本模型和加扰动的关系

给图片加扰动,到底需不需要样本模型者说样本模型在这个过程中,起了一个什么作用案当然是肯定的,需要,而且是决定性的作用。我大致可以这么理解,给图片加扰动,实质上就是在给图片,与别的物品的特征进行拟合,甚至多次拟合,什么是拟合单的说,就是把图片上的某些鸟的特征,给杂糅进大猩猩的特征,这里本来会被识别成鸟翅膀的,因为拟合了大猩猩的特征,变成了大猩猩的手臂,从而这张图片就被识别成了大猩猩。就是说,样本模型在其中起到的作用,就是选定一个别的物品的特征,将其记录的特征,拟合进这张图片中去,以至于这张图片会被识别成别的物品。

(3)在这个过程中,我们要做的是什么/h4>

在刚刚解释的拟合概念中,就会出现一个拟合度的问题,即大猩猩的特征这么多,加多少到这张图片中去,这是一个很重要的问题,加多了,影响了人的目视效果,不影响目视效果,是一切的前提,加少了,就会提高了被对抗的样本模型的识别正确的概率。因此,就需要在人眼的识别度和计算机的识别度之间取一个平衡,这个度,就是拟合度,就是我们需要不断调整的一个值了。

二、实现代码

刚刚花了大篇幅来解释清楚了几个概念,我以为非常重要,所以不厌其烦。
下面,我将要带着大家来尝试,实现整个过程。另,文末附上全文代码,包含两个训练好的模型。

(一)获取样本模型

1、选取样本

样本的选择余地挺大的,我看中了两种样本,一个是cifar10,另一个是inception_v3,选前者是因为我想尝试自己生成训练模型,选择后者是因为这是谷歌的现成的训练模型,成熟,并且训练的图片的像素高,在299299,而前者的模型的图片像素是3232,实际使用中,我选后者。

2、训练模型

训练模型,我就尝试用cifar10训练一个自己的模型了,关于这个模型,特别解释一下,如果直接用keras进行训练,如果本地没有这个样本库,就会自动下载这个样本库,然而这个过程非常的漫长且容易失败,因此,推荐自行下载这个训练样本库,下载文件cifar-10-batches-py.tar.gz(文末附上下载链接),注意,划重点,你所下载的此样本库的名称可以是别的名字,但是下载以后,务必改成这个名字,而且必须放在指定目录下,在ubuntu下的目录为/home/XXX/.keras/datasets/cifar-10-batches-py.tar.gz,在windows下记不清了,反正大概是用户文件夹下的,/.keras/datasets/cifar-10-batches-py.tar.gz,这个目录,没错,windows也是用.gz结尾的压缩包。只有在这个位置,才能被keras默认识别到。
好了,直接上训练的代码。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年7月22日
下一篇 2022年7月22日

相关推荐