引言

在之前的文章中,我们介绍了对抗样本和对抗攻击的方法。在该系列文章中,我们介绍一种对抗样本防御的策略--对抗样本检测,可以通过检测对抗样本来强化DNN模型。本篇文章论述其中一种方法:feature squeezing,特征压缩通过将原始空间中许多不同特征向量对应的样本合并成一个样本,减少了对手可用的搜索空间。通过比较DNN模型对原始输入的预测与对实施特征压缩后的输入的预测,特征压缩能够以高精度检测出对抗样本,并且误报率很低。本文探讨两种特征压缩方法:减少每个像素的颜色位深度和空间平滑。这些简单的策略相比于其他防御方法的代价较小(训练时间等),并且可以与其他防御相补充,实现性能很好的对抗防御效果。

预备知识

Color Depth

色深(Color Depth),顾名思义,就是“色彩的深度”,这里的“深度”就是指精细度。在数字图像中,最小的单位叫“像素”(Pixel),这里的像素是彩色的像素,每一个像素都有自己独立完整的参数,在RGB三通道图像中,每一个像素都由R,G,B三个通道组成,其中每个通道又由若干个二进制位来表示其“含量”,例如,11001101100110011111111(共24位),表示102红,204绿和255蓝,根据加色系理论,这个颜色就是我们常说的“天依蓝”。其中,用来表示该颜色的2进制位数,就是“色深”,即24bit。

Spatial Smoothing

空间平滑(也称为模糊)是一组广泛应用于图像处理以降低图像噪声的技术。

Local Smoothing

局部平滑方法利用附近的像素来平滑每个像素。通过选择不同的加权机制,可以设计不同的局部平滑方法:Gaussian smoothing、mean smoothing or median smoothing。本篇文章涉及的特征压缩选择median smoothing。下图是中值平滑的效果:



一些对比:

废话:中值滤波是一种典型的非线性滤波,是基于排序统计理论的一种能够有效抑制噪声的非线性信号处理技术,基本思想是用像素点邻域灰度值的中值来代替该像素点的灰度值让周围的像素值接近真实的值从而消除孤立的噪声点。该方法在取出脉冲噪声、椒盐噪声的同时能保留图像的边缘细节。

简单叙述之:一张图片由一堆像素点组成,取一个小窗,假设大小为3 * 3(即9个像素点),将该小窗在整张图片上移动,每次移动后做如下的工作:

  1. 找到9个像素点的中值(中位数),记为δ
  2. 用δ替代中间像素点的值

不断移动小窗,重复上面的工作。

Non-local Smoothing

非局部平滑不同于局部平滑,因为它在更大的区域内处理相似的像素,而不仅仅是附近的像素。很多图像平滑技术,比如高斯平滑,中值平滑等,当噪声比较小时这些技术的效果都是很好的。在这些技术中我们选取像素周围一个小的邻域然后用高斯平均值或者中值平均值取代中心像素。简单来说,像素级别的噪声去除是限制在局部邻域的

NL-Means的全称是∶Non-Local Means,直译过来是非局部平均,在2005年由Baudes提出,该算法使用自然图像中普遍存在的冗余信息来去噪声。与常用的双线性滤波、中值滤波等利用图像局部信息来滤波不同的是,它利用了整幅图像来进行去噪,以图像块为单位在图像中寻找相似区域,再对这些区域求平均,能够比较好地去掉图像中存在的高斯噪声。对于彩色图像,要先转换到 CIELAB颜色空间,然后对LAB成分分别去噪。

非局部平滑方法的参数通常包括搜索窗口大小(用于搜索类似补丁的大区域)、补丁大小和滤波器强度(高斯核的带宽)。我们将把一个过滤器表示为nl(a-b-c),其中a表示搜索窗口a*ab表示补丁大小b*bc表示过滤器强度。

对抗样本检测原理及实施方法

原理:一个直觉与猜想

下图是从8-bit色深依次降低到1-bit色深时的图像:



下图是对图像应用中值平滑后的效果:

我们可以看到,从人眼角度,我们能够分辨出色深bit降低不多时的图像,以及中值平滑后的图像。在人眼看来,原始图像和处理后的图像差别不大,从分辨的角度来看,结果可以说是高度一致。那么,我们希望DNN分类器能够做到与人类相同的分辨,而对于对抗样本,我们猜想,应用这些特征压缩后,DNN分类器会给出与原始输入对应的输出差别较大的输出。

实施方法

我们知道使用softmax的DNN分类器输出概率向量,对于原始输入,我们能得到DNN分类器的对应输出概率向量,将原始输入实施特征压缩后,再输入到DNN分类器中,又会得到一个概率向量。通过测量这两个概率向量之间的差距,我们就能分辨对抗样本。因为之前我们已经基于直觉推出特征压缩后的正常图像和没有压缩的特征图像的概率向量输出差别不会大,否则与人眼识别的效果不一致,说明模型本身不合格(即使没有加对抗样本,这样的模型可以说不合格),而我们也假设对抗样本施加特征压缩后会得到与原始对抗样本输入对应的输出差别较大的输出

度量概率向量之间的差异

可以有很多方法度量概率向量之间的差异,这里采用\(L_1\)范数度量:

\(\boldsymbol{x}\)是原始输入图像,\(\boldsymbol{x}_{squ}\)是对原始输入实施特征压缩后的图像,\(g(\boldsymbol{x})\)是原始输入图像的输出概率向量,\(g(\boldsymbol{x}_{squ})\)是特征压缩后的输入图像的输出概率向量,那么两者之间输出向量的差异值如下:

\[score^{(\boldsymbol{x},\boldsymbol{x}_{squ})} = ||g(\boldsymbol{x}) - g(\boldsymbol{x}_{squ})||_1
\]

选择threshold:判断差异多大才属于对抗样本

\(score^{(\boldsymbol{x},\boldsymbol{x}_{squ})}\)较小的\(\boldsymbol{x}\)我们认为是正常图像,差异大认为是对抗样本,这个阈值多大决定了检测的效果

  • threshold太小,虽然能够检测到几乎全部的对抗样本,但是正常图像被错分为对抗样本的几率大增
  • threshold太大,不能有效检测到大部分的对抗样本

实验:对直觉和猜想的检验

分别在三个数据集上统计\(score^{(\boldsymbol{x},\boldsymbol{x}_{squ})}\),横轴为\(score^{(\boldsymbol{x},\boldsymbol{x}_{squ})}\)的数值,纵轴为得分等于横轴某个值的输入x的数量。蓝色代表正常图像,红色代表对抗样本,结果如下:



可以看到绝大部分的正常图像的得分值都很小,绝大部分对抗样本的得分值都很大,这验证了我们之前的猜想

联合检测方法

可以将上述特征压缩方法结合起来,每种特征压缩方法和原始输入计算输出,得到多个\(score^{(\boldsymbol{x},\boldsymbol{x}_{squ})}\),取最大值作为评判指标。因此对抗样本的联合检测模型如下:

模型训练:选择适当的threshold

在上面的联合检测模型中,我们需要确定适当的threshold:T,以区分对抗样本和正常输入。因为DNN分类的输入绝大部分是正常输入,对抗样本只是少数,在数据不平衡的情况下,准确率无法体现模型的真实水平。因此,用准确率作为指标不合适。在此,我们选择使正常输入被错分为对抗样本不能超过5%为指标,因此只用正常图像作为输入训练检测器即可。

防止对抗攻击对特征压缩的适应性

引入随机:

  • 在color depth中,不再四舍五入(即不固定0.5为舍入阈值,而是在正负0.1范围内的随机值,即随机选择0.4-0.6为舍入阈值)
  • 在median smoothing中,选择随机区域大小,不再是2 * 2或3 * 3等固定大小的区域
  • ......

参考资料

[1] Xu, Weilin & Evans, David & Qi, Yanjun. (2018). Feature Squeezing: Detecting Adversarial Examples in Deep Neural Networks. 10.14722/ndss.2018.23210.

[2] Nicholas Carlini. Robust Evasion Attacks against Neural Network to Find Adversarial Examples. https://github.com/carlini/nn_robust_attacks/.

[3] 「色深」和「位深」有什么区别? - 天才Pika小透明的文章 - 知乎 https://zhuanlan.zhihu.com/p/144207333

[4] 图像平滑处理-中值滤波 - Monster_H7 - CSDN https://blog.csdn.net/Monster_H7/article/details/83788754

对抗防御之对抗样本检测(一):Feature Squeezing的更多相关文章

  1. 对抗网络之目标检测应用:A-Fast-RCNN

    对抗网络之目标检测应用:A-Fast-RCNN 论文:A-Fast-RCNN: Hard Positive Generation via Adversary for Object Detection ...

  2. 腾讯推出超强少样本目标检测算法,公开千类少样本检测训练集FSOD | CVPR 2020

    论文提出了新的少样本目标检测算法,创新点包括Attention-RPN.多关系检测器以及对比训练策略,另外还构建了包含1000类的少样本检测数据集FSOD,在FSOD上训练得到的论文模型能够直接迁移到 ...

  3. 【旧文章搬运】对抗RKU的StealthCode检测

    原文发表于百度空间,2009-07-02========================================================================== 快一个月没 ...

  4. 目标检测--Rich feature hierarchies for accurate object detection and semantic segmentation(CVPR 2014)

    Rich feature hierarchies for accurate object detection and semantic segmentation 作者: Ross Girshick J ...

  5. RNA测序样本检测

    常规转录组测序     样品类型:去蛋白并进行DNase处理后的完整总RNA 样品需求量(单次): 植物和真菌样品:≥20 μg: 人.大鼠.小鼠样品:≥5 μg: 其他类型动物:≥10 μg: 原核 ...

  6. 浏览器特性检测插件Feature.js

    <script src="js/feature.js"></script> if (feature.webGL) { console.log("你 ...

  7. 准确率99%!基于深度学习的二进制恶意样本检测——瀚思APT 沙箱恶意文件检测使用的是CNN,LSTM TODO

    所以我们的流程如图所示.将正负样本按 1:1 的比例转换为图像.将 ImageNet 中训练好的图像分类模型作为迁移学习的输入.在 GPU 集群中进行训练.我们同时训练了标准模型和压缩模型,对应不同的 ...

  8. 对抗样本攻防战,清华大学TSAIL团队再获CAAD攻防赛第一

    最近,在全球安全领域的殿堂级盛会 DEF CON 2018 上,GeekPwn 拉斯维加斯站举行了 CAAD CTF 邀请赛,六支由国内外顶级 AI 学者与研究院组成的队伍共同探讨以对抗训练为攻防手段 ...

  9. KDD 2018 | 最佳论文:首个面向Facebook、arXiv网络图类的对抗攻击研究

    8 月 19 日至 23 日,数据挖掘顶会 KDD 2018 在英国伦敦举行,昨日大会公布了最佳论文等奖项.最佳论文来自慕尼黑工业大学的研究者,他们提出了针对图深度学习模型的对抗攻击方法,是首个在属性 ...

随机推荐

  1. keycloak~管理平台的查询bug与自定rest中文检索

    对于keycloak来说,它的管理平台在它的源码中的admin-client中,它会定义相关的rest接口规范:在我们使用keycloak管理平台时,其中有一个组的查询,在我们查询中文组时,它是不支持 ...

  2. JAVA并发(8)-ThreadPoolExecutor的讲解

    很久前(2020-10-23),就有想法学习线程池并输出博客,但是写着写着感觉看不懂了,就不了了之了.现在重拾起,重新写一下(学习一下). 线程池的优点也是老生常谈的东西了 减少线程创建的开销(任务数 ...

  3. 前端笔记:Html页面常用元素

    Html页面由基本几个元素(标签)组成 html.head.body.foot(很少使用). html是整个页面的父级元素,内部包括head.body.foot子类标签. head是页头,及页面的头部 ...

  4. Spring:Spring优势——分层架构简介

    Spring框架采用分层架构,根据不同的功能被划分成了多个模块,这些模块大体可分为 Data Access/Integration.Web.AOP.Aspects.Messaging.Instrume ...

  5. 21 shell Here Document/String

    Here Document 的用法 Here Document可以将它理解为"嵌入文档""内嵌文档""立即文档",它将命令需要处理的数据或者 ...

  6. php+redis+lua实现分布式锁(转载)

    以下是我在工作中用到的类,redis加锁两种方式,解锁为了保证原子性所以只用lua+redis的方式 缺陷:虽然死锁问题解决了,但业务执行时间超过锁有效期还是存在多客户端加锁问题.不过,这个类已经满足 ...

  7. 通过MMIO的方式实现VIRTIO-BLK设备(一)

    背景知识 什么是VIRTIO 使用完全虚拟化,Guest不加任何修改就可以运行在任何VMM上,VMM对于Guest是完全透明的.但每次I/O都将导致CPU在Guest模式与Host模式间切换,在I/O ...

  8. python numpy高效体现

    import numpy as np import time def python_sum(n): a=[i**2 for i in range(n)] b=[i**3 for i in range( ...

  9. [001] - JavaSE面试题(一):面向对象

    第一期:Java面试 - 100题,梳理各大网站优秀面试题.大家可以跟着我一起来刷刷Java理论知识 [001] - JavaSE面试题(一):面向对象 第1问:面向对象和面向过程的区别? 面向过程 ...

  10. Day12 抽象类、接口、内部类-面向对象编程(3)

    抽象类 abstract修饰符可以用来修饰方法也可以用来修饰类,如果修饰方法,那么该方法就是抽象方法;如果修饰类,那么该类就是抽象类: 抽象类中可以没有抽象方法,但是有抽象方法的类一定要声明为抽象类. ...