对抗防御之对抗样本检测(一):Feature Squeezing
引言
在之前的文章中,我们介绍了对抗样本和对抗攻击的方法。在该系列文章中,我们介绍一种对抗样本防御的策略--对抗样本检测,可以通过检测对抗样本来强化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个像素点),将该小窗在整张图片上移动,每次移动后做如下的工作:
- 找到9个像素点的中值(中位数),记为δ
- 用δ替代中间像素点的值
不断移动小窗,重复上面的工作。
Non-local Smoothing
非局部平滑不同于局部平滑,因为它在更大的区域内处理相似的像素,而不仅仅是附近的像素。很多图像平滑技术,比如高斯平滑,中值平滑等,当噪声比较小时这些技术的效果都是很好的。在这些技术中我们选取像素周围一个小的邻域然后用高斯平均值或者中值平均值取代中心像素。简单来说,像素级别的噪声去除是限制在局部邻域的。
NL-Means的全称是∶Non-Local Means,直译过来是非局部平均,在2005年由Baudes提出,该算法使用自然图像中普遍存在的冗余信息来去噪声。与常用的双线性滤波、中值滤波等利用图像局部信息来滤波不同的是,它利用了整幅图像来进行去噪,以图像块为单位在图像中寻找相似区域,再对这些区域求平均,能够比较好地去掉图像中存在的高斯噪声。对于彩色图像,要先转换到 CIELAB
颜色空间,然后对L
和AB
成分分别去噪。
非局部平滑方法的参数通常包括搜索窗口大小(用于搜索类似补丁的大区域)、补丁大小和滤波器强度(高斯核的带宽)。我们将把一个过滤器表示为nl(a-b-c)
,其中a
表示搜索窗口a*a
,b
表示补丁大小b*b
,c
表示过滤器强度。
对抗样本检测原理及实施方法
原理:一个直觉与猜想
下图是从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})\)是特征压缩后的输入图像的输出概率向量,那么两者之间输出向量的差异值如下:
\]
选择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的更多相关文章
- 对抗网络之目标检测应用:A-Fast-RCNN
对抗网络之目标检测应用:A-Fast-RCNN 论文:A-Fast-RCNN: Hard Positive Generation via Adversary for Object Detection ...
- 腾讯推出超强少样本目标检测算法,公开千类少样本检测训练集FSOD | CVPR 2020
论文提出了新的少样本目标检测算法,创新点包括Attention-RPN.多关系检测器以及对比训练策略,另外还构建了包含1000类的少样本检测数据集FSOD,在FSOD上训练得到的论文模型能够直接迁移到 ...
- 【旧文章搬运】对抗RKU的StealthCode检测
原文发表于百度空间,2009-07-02========================================================================== 快一个月没 ...
- 目标检测--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 ...
- RNA测序样本检测
常规转录组测序 样品类型:去蛋白并进行DNase处理后的完整总RNA 样品需求量(单次): 植物和真菌样品:≥20 μg: 人.大鼠.小鼠样品:≥5 μg: 其他类型动物:≥10 μg: 原核 ...
- 浏览器特性检测插件Feature.js
<script src="js/feature.js"></script> if (feature.webGL) { console.log("你 ...
- 准确率99%!基于深度学习的二进制恶意样本检测——瀚思APT 沙箱恶意文件检测使用的是CNN,LSTM TODO
所以我们的流程如图所示.将正负样本按 1:1 的比例转换为图像.将 ImageNet 中训练好的图像分类模型作为迁移学习的输入.在 GPU 集群中进行训练.我们同时训练了标准模型和压缩模型,对应不同的 ...
- 对抗样本攻防战,清华大学TSAIL团队再获CAAD攻防赛第一
最近,在全球安全领域的殿堂级盛会 DEF CON 2018 上,GeekPwn 拉斯维加斯站举行了 CAAD CTF 邀请赛,六支由国内外顶级 AI 学者与研究院组成的队伍共同探讨以对抗训练为攻防手段 ...
- KDD 2018 | 最佳论文:首个面向Facebook、arXiv网络图类的对抗攻击研究
8 月 19 日至 23 日,数据挖掘顶会 KDD 2018 在英国伦敦举行,昨日大会公布了最佳论文等奖项.最佳论文来自慕尼黑工业大学的研究者,他们提出了针对图深度学习模型的对抗攻击方法,是首个在属性 ...
随机推荐
- POJ 3449 Geometric Shapes 判断多边形相交
题意不难理解,给出多个多边形,输出多边形间的相交情况(嵌套不算相交),思路也很容易想到.枚举每一个图形再枚举每一条边 恶心在输入输出,不过还好有sscanf(),不懂可以查看cplusplus网站 根 ...
- Spring源码编译一次性通过&遇到的坑解决方法
前言 spring源码本地编译,按网上的博客参考资料的操作步骤,总是会出现各种莫名其妙的错误.根据错误信息找解决方案,但在自己的环境下又总是编译不过去.结合参加培训学习Jack老师提供的方法,自己多种 ...
- bash的RANDOM变量生成的是真正的随机数吗
static void seedrand () { struct timeval tv; gettimeofday (&tv, NULL); sbrand (tv.tv_sec ^ tv.tv ...
- java集合(3)-Java8新增的Stream操作集合
Java8新增了Stream,IntStream,LongStream,DoubleStream等流式API,这些API代表多个支持串行和并行聚集操作的元素.上面的4个接口中,Stream是一个通用的 ...
- [刘阳Java]_为什么要前后端分离
前后端分离已成为互联网项目开发的业界标准使用方式,通过nginx+tomcat的方式(也可以中间加一个nodejs)有效的进行解耦,并且前后端分离会为以后的大型分布式架构.弹性计算架构.微服务架构.多 ...
- Requests 方法 -- post请求操作实践
1.登录Jenkins抓包 ,小编的Jenkins部署在Tomcat上,把Jenkins.war 包放置到webapps目录. 本次用浏览器自带抓包,按下F12操作,主要看post就可以,登录是向服务 ...
- 数据结构与算法-排序(二)选择排序(Selection Sort)
摘要 选择排序的逻辑是先遍历比较出序列中最大的,然后把最大的放在最后位置. 遵循这个逻辑,用代码实现时,做到1.减少比较次数之外,这里引入一个新的指标 - 稳定性,2.保证排序过程中的稳定性也是一个优 ...
- 新建一个DJango项目
好长时间没有用过DJango了,都忘记了怎么使用,哈哈哈,看到一篇讲的很好的博客,直接附链接了. https://blog.csdn.net/woo_home/article/details/9645 ...
- Python -- 长字符串
如果需要写一个非常非常长的字符串,它需要跨多行,那么,可以使用三个引号代替普通引号. print '''This is a very long string. It continues here. A ...
- SQL修改列名,增加列,删除列语句的写法
1.修改数据表名 ALTER TABLE [表名.]OLD_TABLE_NAME RENAME TO NEW_TABLE_NAME; 2.修改列名 ALTER TABLE [表名.]TABLE_NAM ...