Adversarial Examples for Semantic Segmentation and Object Detection

(语义分割和目标检测中的对抗样本)

作者:Cihang Xie, Jianyu Wang, Zhishuai Zhang, Yuyin Zhou, Lingxi Xie, Alan Yuille, Department of Computer Science, The Johns Hopkins University, Baltimore, MD 21218 USA Baidu Research USA, Sunnyvale, CA 94089 USA

机构:The Johns Hopkins University(美国约翰霍普金斯大学)

全文链接:https://arxiv.org/abs/1703.08603

摘要:对抗样本:给自然图片加入视觉不可见的噪声,可能导致深层网络无法对图像进行正确分类。

如上样本x的label为熊猫,在对x添加部分干扰后,在人眼中仍然分为熊猫,但对深度模型,却将其错分为长臂猿,且给出了高达99.3%的置信度。

在本文中,我们将对抗样本扩展到语义分割和目标检测中。分割和检测都是建立在对图像目标分类的基础上,比如分割是对目标区域或者像素进行分类,目标检测是对目标proposal分类。思考是否能在一组像素/proposal的基础上优化损失函数,以产生对抗样本。以此为基础,本文提出了一种新的算法:密度对抗生成网络 (DAG),它产生了大量的对抗样本,并应用于最先进的分割和检测深度网络上。实验发现,对抗样本可以在具有不同训练数据、不同架构、甚至不同识别任务的网络之间传递的特性(对抗样本是相对鲁棒的, 即神经网络A生成的对抗样本,在神经网路B下仍然是,即使B是不同的网络结构、超参、和训练数据。因此,神经网络含有一些内在的盲点和非显示的特征,其结构与数据分布相关)。实验证明:具有相同结构的网络的可移植性更强大。对非均匀扰动进行累加,能获得更好的传递性,为黑盒对抗攻击提供了一种有效的方法。

介绍:深度网络在视觉识别和特征表示方面取得了成功,但它们往往对输入图像的微小扰动非常敏感。添加视觉上不可感知的噪声会导致图像分类失败。这些添加噪声的图像,通常被称为对抗样本。噪声落在大的高维特征空间的一些区域,而这些区域在训练过程中没有被探索。因此,研究这一问题不仅有助于理解深层网络的工作机制,而且为提高网络训练的鲁棒性提供了机会。

本文生成了用于语义分割和目标检测的对抗样本,并展示了它们的可移植性。这个问题很难,因为需要考虑更多目标(例如像素或proposal)的数量级。

基于每个目标都需要经历一个单独的分类的过程,作者提出了DAG。DAG是一种同时考虑所有目标并优化整体损失函数的算法。它的实现很简单,只需要为每个目标指定一个对抗性标签,并执行迭代梯度反向传播。

在检测中产生对抗样本比在分割中更困难,因为在目标检测中,目标的数量要大几个数量级。对于有k个像素的图像,可能的proposal数量是O(k^2),而像素只有O(k)。如果只考虑proposal的一个子集,在提取出一组新的proposal后,扰动图像仍然可以被正确识别。为了增加攻击的鲁棒性,在优化中改变IOU率来保护一个在持续增加的合理的proposal数量。在实验中验证了当原始图像上的proposal足够密集时,扰动图像上产生的新proposal很可能也会产生错误的识别结果。

随着网络,数据,任务的差异增大,DAG产生的扰动在一定程度上的传递难度增大,但DAG产生的扰动在一定程度上能够传递。有趣的是,加入两个或更多的扰动可以显著提高可移植性,为一些未知结构和/或属性的网络实施黑盒对抗攻击提供了一种有效的方法。

本文算法:

1. DAG。

X代表图片。

代表X的N个检测目标

代表N个检测目标的标签,用表示。

f( X, tn) ∈RC 去表示X的第n个目标的分类分数向量(在softmax之前)。生成对抗样本的目标是,对所有目标的预测结果都为错。比如对于每个n:

这里的r代表加入X的噪声。

为了这个目的,干脆给每个目标加入一个对抗标签l’n。l’n是从其他错误标签里随机选的。

表示。

函数π用来表示这一随机选择排列函数。π:所以:

包括所有目标的损失函数可以写为:

通过是的所有目标都被错误预测能够使得L最小化:抑制正确分类,促进期望分类(即对抗分类)。

使用梯度下降来实现最优化。在第m次迭代中,表示当前图像(可能在添加了几个扰动之后)为Xm。把正确预测的叫做active target set:

然后计算关于输入数据的梯度,然后累积所有这些扰动:

注意:就算m增大时,这样就大大减少了开销。

为了避免数值不稳定,标准化:

γ=0.5是固定的超参数。

然后,我们将添加到当前图像Xm,并继续下一个迭代。

如果所有的目标都被预测为期望结果(即对抗结果),则算法终止 ,即,;或达到最大迭代次数,分割任务设为200,检测任务设为150。

最后的扰动r=。注意,在实践中我们通常会把原图减 去均值 作为输入图像。所以最终的对抗图像是 代表把每个像素归一化到[0,255]之间。

算法流程如下:

2. 为目标检测算法选择输入proposal。

DAG算法的一个关键问题是选择一个合理的τ集作为目标。

在语义分割任务中这个问题容易,目标是对所有像素产生不正确的分类,因此我们可以将每个像素设置为一个单独的目标,比如对图像点阵进行密集采样,这样计算复杂度与像素总数成正比。

在场景中的目标检测中,目标选择就很难了。因为整个可能的目标(边界盒子的proposal)在数量级上比语义分割大。用简单点的方法,只考虑通过一个sideway网络产生的proposal。比如:regional proposal 网络(RPN,是fast-RCNN结构中的一部分)。但是发现在对抗扰动r加入到原图像X中时,可能会因为新的输入X+r产生一个新的proposal,而且网络可能仍然能够正确地对这些新提议进行分类。为了解决这一问题,我们通过增加RPN中NMS(非极大值抑制)的阈值,使proposal变得非常密集。

在实践中把IOU从0.7调到0.9,每张图片的proposal从300张上升到3000张。使用这个更密集的目标集τ,最有可能的目标边界框,至少和一个输入proposal之间的距离只有一个像素,这样可以使得分类错误在相邻边界框之间转移。

从技术上讲,考虑RPN生成的proposal,保留所有positive proposals并丢弃其余的。positive proposals满足以下两个条件:(1)与最接近的真实物体框之间的IOU大于0.1。(2)对应的ground-truth的类别的置信度得分大于0:1。如果两个条件都适用于多个ground-truth 目标,选择IOU大的。proposals的标签被定义为相应的置信度类。该策略旨在为算法1选择高质量的目标。

3. 定量评估。

通过测量识别准确率的下降来评估本文方法,即使用原始测试图像和添加对抗性扰动后的图像,分别测量:均值IOU(mIOU)用于语义分割,均值平均精度(mAP)用于目标检测。

Adversarial Examples for Semantic Segmentation and Object Detection 阅读笔记的更多相关文章

  1. [YOLO]《You Only Look Once: Unified, Real-Time Object Detection》笔记

    一.简单介绍 目标检测(Objection Detection)算是计算机视觉任务中比较常见的一个任务,该任务主要是对图像中特定的目标进行定位,通常是由一个矩形框来框出目标. 在深度学习CNN之前,传 ...

  2. Flow-Guided Feature Aggregation for Video Object Detection论文笔记

    摘要 目前检测的准确率受物体视频中变化的影响,如运动模糊,镜头失焦等.现有工作是想要在框的级别上寻找时序信息,但这样的方法通常不能端到端训练.我们提出了flow-guided feature aggr ...

  3. Ubuntu18.04下安装、测试tensorflow/models Tensorflow Object Detection API 笔记

    参考:https://www.jianshu.com/p/1ed2d9ce6a88 安装 安装conda+tensorflow库 下载protoc linux x64版,https://github. ...

  4. 《MIDINET: A CONVOLUTIONAL GENERATIVE ADVERSARIAL NETWORK FOR SYMBOLIC-DOMAIN MUSIC GENERATION》论文阅读笔记

    出处 arXiv.org (引用量暂时只有3,too new)2017.7 SourceCode:https://github.com/RichardYang40148/MidiNet Abstrac ...

  5. JDK源码阅读:Object类阅读笔记

    Object 1. @HotSpotIntrinsicCandidate @HotSpotIntrinsicCandidate public final native Class<?> g ...

  6. semantic segmentation 和instance segmentation

    作者:周博磊链接:https://www.zhihu.com/question/51704852/answer/127120264来源:知乎著作权归作者所有,转载请联系作者获得授权. 图1. 这张图清 ...

  7. 论文阅读笔记五十五:DenseBox: Unifying Landmark Localization with End to End Object Detection(CVPR2015)

    论文原址:https://arxiv.org/abs/1509.04874 github:https://github.com/CaptainEven/DenseBox 摘要 本文先提出了一个问题:如 ...

  8. 目标检测(一)RCNN--Rich feature hierarchies for accurate object detection and semantic segmentation(v5)

    作者:Ross Girshick,Jeff Donahue,Trevor Darrell,Jitendra Malik 该论文提出了一种简单且可扩展的检测算法,在VOC2012数据集上取得的mAP比当 ...

  9. 目标检测--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 ...

随机推荐

  1. curl的POST请求,封装方法

    //POST请求//参数1是请求的url//参数2是发送的数据的数组//参数3是其他POST选项public static function POST($url, array $post = arra ...

  2. sql server 学习笔记 ( row_number, rank, dense_rank over partition by order by )

    refer : https://blog.csdn.net/winer2008/article/details/4283539 https://www.cnblogs.com/linJie193090 ...

  3. python 往mysql数据库中插入多条记录。

    最近想写mysql库,用到insert into语句,如何一次性将多条记录插入库表中呢. MySQLdb提供了两个执行语句的方法:一个是execute(),另一个是executemany() exec ...

  4. LeetCode--031--下一个排列(java)*

    实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改,只允许使用额外常数空间. ...

  5. HotSpot虚拟机对象探秘-笔记

    学习目的:探讨HotSpot虚拟机在Java堆中对象分配.布局和访问的全过程. 1.对象的创建 虚拟机在执行到一条new指令时,先要检查指令的参数(将要实例化的类)是否已经被加载.解析.初始化过,如果 ...

  6. 小程序批量获取input的输入值,监听输入框,数据同步

    在使用小程序时,跟vue的数据绑定不一样,没有v-model这个属性了,官网也只是给了一些事件监听. 但是我们如果有多个表单时,需要写多个事件来同步数据.这样做很麻烦.下面的方法可以解决,只需要一个方 ...

  7. 【C/C++】C++11 Move, Forward

    左值与右值 Lvalue:可以出现在 operator= 左边的 Rvalue:只能出现在operator= 右边的 ; int a = b; a = b; a = a + b; a + b = a; ...

  8. python 变量之小整数池跟大整数池

    在python中定义变量会有:id,type,value.对于==比较的是value,对于is比较的是id. 因此,对于相同value的变量,它的type相同,但是它的id值可能不一样.对于相同id的 ...

  9. python day1 之三级菜单的正确姿势

    看了几个同学有关三级菜单的实现,都是通过一级一级输出,是较为过程的实现.另外如果菜单(树形结构)更多级这样处理起来就比较麻烦了. 可以使用python强大的列表和字典,实现的更优美或简洁一些: 注:复 ...

  10. rabbitmq的问题Failed to start bean 'listenerContainer'

    第一次使用mq发送消息,启动报错了,网上看了好多也没找到几个相关论坛,好几个置顶的都是发帖后不说明解决方案的.因此在这里记录一下. 原因: 因为消息监听的地址在mq服务中没有对应的q, 解决: 需要手 ...