查看原文
其他

【源头活水】ICME21 你的检测器还安全吗? RPATTACK:YOLO和Faster R-CNN的攻击利器

“问渠那得清如许,为有源头活水来”,通过前沿领域知识的学习,从其他研究领域得到启发,对研究问题的本质有更清晰的认识和理解,是自我提高的不竭源泉。为此,我们特别精选论文阅读笔记,开辟“源头活水”专栏,帮助你广泛而深入的阅读科研文献,敬请关注。

来源:知乎—化星为辰
地址:https://zhuanlan.zhihu.com/p/380761240

01

写在前面
目标检测(object detection)是当前CV最重要、最基础的几个任务之一,这也是很多网课带大家入门的计算机视觉任务,相信很多小伙伴第一次亲自上手跑出的模型就是大名鼎鼎的YOLO或者Faster R-CNN,看着屏幕前的图片/视频被标上了一个个带着分类和置信度的框框,简直让人感觉自己就是CV界一颗冉冉升起的新星。
但是,作为大家炼丹生涯起始点的YOLO/Faster R-CNN真的足够“安全”吗?有没有可能我们给它一张在人类看来非常容易进行检测的输入之后,模型却出乎意料地无法成功地完成检测出框呢?(如下图所示)如果当你检查了自己的模型和inference的代码都没有问题,那么不妨考虑一下是不是这里的输入样本被人做了“手脚”。
这里给大家介绍一下我们已经发表在ICME2021上的工作

RPATTACK: REFINED PATCH ATTACK ON GENERAL OBJECT DETECTORS

https://arxiv.org/abs/2103.12469

在patch-based的攻击检测器方法中达到了SOTA的性能,可以同时保证高攻击成功率和少的扰动比例,在patch-based的攻击检测器方法中达到了SOTA的性能,可以同时保证高攻击成功率和少的扰动比例。同时, 基于该方法的竞赛在阿里天池第四期AI安全竞赛中总榜排名:2/1757
目前这项工作已经开源:https: //github.com/VDIGPKU/RPAt

几个点就让鸡隐身在两种主流检测器下,是不是很神奇?


02

目标检测中的对抗样本
对抗样本(adversarial example)是指通过对于输入的数据添加了一些人类无法感知的微小扰动(perturbation,给图像添加noise),可以对模型的输出产生和原先结果完全不同的变化。在最基本的分类问题上,表现就是输出的类别发生了变化,如下图所示:原先分类为panda的图片在加上perturbation之后对于同一个网络被分类为了gibbon。

对抗样本最早是在分类任务上,很快大家就意识到可以将这套做法移植到目标检测这一任务中,一种方案是和分类任务一样,在整张图片(现实中全场景)上加上扰动,不过考虑到实际场景下,攻击图片中的整个场景并不现实(物理上无法实现);另一种实际场景下可行的方案则是所谓的patch-based方法,即,对图片仅仅引入补丁(patch)而非在全局上添加扰动的方式来干扰检测。
不过,当前的patch-based方法尚存在如下的问题:
1. patch过大,使得对抗样本很容易被人眼分辨出来;
2. 攻击效率不高(比如DPATCH需要200,000次迭代才能产生对抗样本);
3. 大多攻击方法仅能攻击一种模型;


03

motivation&method
为了解决上面提到的当前patch-based方法的缺陷,我们设计了一种全新的patch-based攻击方法RPAttack,主要的想法来自于这几个观察:
1. 一个patch中不同像素的重要性是不同的,因此我们希望能找到对于攻击效果相关度高的像素(key-pixels),而为了找到这类key-pixels,我们提出了一种patch selection & refining的方案以逐渐实现该目标。具体而言,我们的做法是动态地为基于梯度的攻击选择patch,并逐渐去除每个patch中“不重要的”那些像素。
2. 从集成学习(ensemble learning)以及一些通用对抗扰动的方案中得到启发,我们提出了一种集成的攻击方式,以同时攻击当前SOTA的YOLO v4和Faster R-CNN。具体而言,我们攻击时同时利用了来自这两个模型的梯度,并进行了权衡以避免过度优化倾向于某一个模型(类似于过拟合)。
下面我们来介绍一下RPAttack的具体实现:
我们将对于目标检测的攻击问题建模为

 ,其中  是第j张图片,  则是第  个模型在  上检测出框的数量,  则是对图片j添加的扰动。我们可以将这个建模目标理解为通过最小的扰动,来尽量隐藏所有应该被检测出的物体
为了能尽量隐藏图片中所有待检测的物体,我们需要降低对于每个bounding box的置信度  ,因此这里我们将损失函数定义为

,其中  是回归中常见的损失函数MSE。下图简要展示了我们的攻击流程,
1. 首先,原图作为输入经Faster RCNN和Yolo v4获取预测框和对应的置信度。
2. 之后我们instance-level的攻击(可以修改框内任意像素),需要注意的是,为了找到上面所说的“key pixels”,单次迭代中的梯度并不能确保某个像素和攻击效果一定是高度相关的(随着更新扰动这些key pixels可能会改变),因此需要不断重复instance-level攻击直至模型均无法检测到任何物体,这时我们再利用累计梯度信息找到initial key pixels。
3. 接下来,我们用上面找到的initial key pixels来攻击原图,并每次迭代中找到最合适的修改位置,当攻击效果收敛(趋于稳定后),我们去掉哪些相对不那么重要的扰动。
4. 最后,为了使得添加的扰动尽可能少,我们进一步去打掉对最终结果没有影响的像素上的扰动。
具体而言,上面提到的“根据梯度信息选出key pixels”的做法是:将每个  的预测框分为  个  大小的单元(cell),随后计算每个单元中的梯度和,并选择其中的K个(实验中设定为5)最大的。我们将grid line上的像素作为key pixels。
下面的流程图概括了我们描述的算法过程

04

实验结果
实验的数据集是我们在目标检测领域常用的 VOC2007和Alibaba-Tsinghua Adversarial Challenge on Object Detection竞赛中的数据集,我们在VOC2007上的超参设置为迭代次数  ,  为100,  为25,patch size为  
我们这里引入的度量指标  代表了扰动的大小得分,  则衡量了原图和对抗样本之间检测框的数量的差距,  则是二者的综合考量后的综合评价指标。此外mAP的下降也是一项度量指标。
具体而言

在VOC 2007上,我们的方法仅仅修改0.45%的像素即可实现对所有检测框的成功攻击,而在进行了points-removal之后,这一比例更是下降到了0.32%。攻击效果上我们的方案也是超过了当前的SOTA方案。

最后,总结一下,我们的工作提出了一种全新的基于patch的目标检测对抗攻击方案,在达到SOTA成功率的基础上,我们的方案不仅添加的扰动极少,且能有效同时攻击各类不同的目标检测模型,看到这里,大家不妨去试试自己的模型还是不是足够安全。
https://github.com/VDIGPKU/RPAttack
感谢 @serenity 对本文的贡献~

本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。


“源头活水”历史文章


更多源头活水专栏文章,

请点击文章底部“阅读原文”查看



分享、在看,给个三连击呗!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存