目标检测对抗攻击

赛题:1000张图,在图上贴补丁,最多不超过10个,导致检测框失效就算得分。

比赛链接:https://tianchi.aliyun.com/competition/entrance/531806/information

数据描述:从MSCOCO 2017测试数据集中有条件的筛选了1000张图像,这些图像不会包含过多或者过少的检测框(至少会有一个检测框),并且检测框的面积相对于整图不会太小。每张图都被resize到500 * 500的大小,并以.png的格式存储。

攻击的检测器:Faster RCNN, YOLOv4,另外三个是黑盒

最近做了一段时间,分享一下思路,我做的分数不高,只是做个入门介绍。

首先介绍一下相关的论文:

  • Adversarial Patch
  • DPatch
  • On Physical Adversarial Patches for Object Detection
  • Fooling automated surveillance cameras: adversarial patches to attack person detection

Adversarial Patch

简要思路

没有接触过对抗攻击的可以从这篇入手,这是第一个在对抗攻击中提出Patch的。传统的对抗攻击就是在原图的基础上加入肉眼不可见的噪音干扰分类器,用数学的方式定义就是,给定分类器,其中 为样本, 为样本自身的类别,假设我们需要误判为的目标类别为 ,想要找到一个与 相近的 最大化 , 相近的约束表示为存在一个 误差满足  .

通俗点讲,就是把Patch贴在图上,跟原图相差不大并且使分类器分类失误,如下图表示了Patch粘贴的方式:


损失函数

就是最大化目标类别的概率期望,导致分类器误判即可,A就是apply函数,把Patch粘贴到图中的方式,p为Patch的参数,x为原图,l为位置。

但是这个与天池的比赛有点差距,因为是目标检测的对抗攻击,不是分类器的对抗攻击,所以就有了下面DPatch的论文,其实道理变化不大。

DPatch

简要思路

这篇是AAAI Workshop2019 的论文,这个思路是最贴切赛题而且非常简单容易实现的,就是在原图的基础上直接添加Patch,固定住YOLO或者Faster R-CNN等检测器的权重,反向传播只更新Patch,文章只在图片的左上角贴了Patch,这里需要看他的损失函数如何设计的。


如下图所示,只在单车左上方贴上40*40的Patch,即可让检测器失效。

损失函数

为了训练无目标的DPatch,这里的无目标DPatch是指只需要把检测框失效,不需要把单车误识别为人,这样是有目标攻击。所以我们希望找到一个Patch,假设把Patch贴上图中的apply函数为A,我们需要最大化与真正的类标签 和边界框标签 目标检测器的损失:

如果是有目标攻击,我们希望找到一个P,它能使目标类标签和边界框标签的损失最小化:

GT的类别标签在这个比赛中没有提供,其实也很简单,可以直接用未攻击过的检测器模型得到label存下来,我也直接用了官方给的YOLOv4的代码跑了结果存下了类别标签以及检测框BBox的位置,大小。

论文效果


从指标上看,小物体如鸟这样的无目标攻击会比较困难。论文作者指出DPatch是具有泛化能力的,YOLO训练出来的Patch给Faster-RCNN用也是没问题的,反之也行。有一份github的开源代码https://github.com/veralauee/DPatch,我在这个基础上把Patch与pytorch-yolov4结合,做了论文的思路,但是效果不是很好只有56分,如果把Patch贴在中心有200分左右。

On Physical Adversarial Patches for Object Detection

简要思路

这是一篇ICML 2019 Workshop的论文,其实就是在DPatch的基础上的一点改进,改进了参数更新的方式,应用对抗攻击的手段,视频效果非常好,先看效果吧。

但是这里他是显示了有目标的全图攻击,把所有的框都失效了,并且把Patch中检测出斑马,这个跟我们的赛题其实不太符合,天池的比赛是把框都失效才有分,如果失效一个又多一个别的框并不得分。

改进点

  • 给Patch贴的方式发生一些变化,不只是左上的角落,而是增加一些旋转,亮度,位置的变化
  • 损失函数用了PGD的方式

第一点其实很容易实现,在贴Patch之前应用一些变换函数上去即可,是Patch的参数,是损失函数,权重的更新方式如下:

可以对照着DPatch的更新方式:

DPatch的损失函数的更新是直接的最小化目标类别,或者最大化GT的类别,并没有用到对抗攻击的手段,这里直接使用了PGD一阶最强攻击,可以理解为最大化GT类别的一种方式。仔细的看更新方式,最原始的SGD就是沿着梯度的负方向更新达到最小化loss的目的,如果要最大化loss就是得沿着梯度的正方向。PGD的方式,就是对同一样本多次沿着梯度正方向更新,但是更新的值不能太大,所以clip成0到1,也就是每次沿着梯度正方向更新0到1的值数次,达到攻击样本的目的。

效果

论文指出这样训练要比DPatch快,可是他也更新了30w轮,而且每轮还多次攻击。

我改了以上的改进点发现并没有太大的改变,也是200分左右。

Fooling automated surveillance cameras: adversarial patches to attack person detection

简要思路

这篇是2019的论文,给了代码的 https://gitlab.com/EAVISE/adversarial-yolo,主要是对人这个类别进行攻击,而天池这个比赛其中人的类别就有600多张是有的,所以1000张中搞定人的类别的框就已经可以说很成功了。其中loss的设计不太符合比赛,因为他这里的loss由三部分组成,考虑了可打印出真实世界进行物理攻击的因素。

方法思路是差不多的,都是在原图上贴Patch然后只更新Patch的部分,在于损失函数如何设计了。


损失函数

损失函数包含了三个,其中前两个是关于物理因素的,是可否打印出来进行物理攻击的因素,在 中 是patch P中的一个像素, 是一组可打印颜色C集合中的一种颜色。这loss 倾向于使模型中生成的Patch与我们的可打印颜色非常接近。而第二个loss是关于轮廓的smooth程度的, 确保了我们的加了Patch的图像倾向于一个平滑的颜色转换图像。如果相邻像素相似,则loss较低;如果相邻像素不同,loss较高。那我们这个比赛其实不需要考虑可否打印或者平滑度,其实我在实践中也没有加入这两个loss去训练。

最后一项loss是关于有没有物体的,其中YOLO的loss是有一项的,YOLO预测得到的output第四维channel就是该特征的, 但是需要sigmoid后处理,而5到85维是coco数据集中的80类分类分数,需要softmax处理。另外0,1,2,3 维分别是x,y,w,h 用处不大。具体代码如下,其中output为YOLOv4模型的输出,n_ch为85维,fsize是特征图大小,人类类别在coco数据集的80类中是第0类,所以confs_for_class只取了第0类的分类分数,最后loss是分类的分数和有无目标的分数的乘积

            output = output.view(batchsize, self.n_anchors, n_ch,                                 fsize * fsize)            output = output.transpose(1, 2).contiguous()            output = output.view(batchsize, n_ch,                                 self.n_anchors * fsize * fsize)            output_objectness = torch.sigmoid(output[:, 4, :])  # [batch, 1805]            output = output[:, 5:n_ch, :]  # [batch, 80, 1805]            # perform softmax to normalize probabilities for object classes to [0,1]            normal_confs = torch.nn.Softmax(dim=1)(output)            # we only care for probabilities of the class of interest (person)            confs_for_class = normal_confs[:, 0, :]            confs_if_object = confs_for_class * output_objectness

但是作者最后也尝试了多种组合方式,只用分类CLS的loss,只用有无目标OBJ的loss,以及代码所示的两个都用的loss,结果如下图,AP应该越低越好。而用OBJ-CLS的AP值有42.8%,只用OBJ的AP值为25.53%,只用CLS的AP值为82.08%。所以要是无目标攻击的话,最好只攻击OBJ的loss。

我也在天池的比赛中尝试过这篇论文的这个点,但是分数不升反降了。

结论

本次比赛重在学习,我也没有做过对抗攻击的研究,这番下来对目标检测对抗攻击领域其实有了一定的了解,也希望能够帮助更多的人入门这个领域,我看到落地的demo有很多,攻击的效果也是惊人,但是我的尝试过后分数并没有明显的提升,也有可能是我训练得次数太少了,目前我都是只训练了最多500轮,论文中都是30w轮的迭代。想法十分有趣,攻击的套路其实变化不大,都是在原图贴Patch,然后设计loss反向传播只更新Patch的参数,另外我发现Patch的位置其实对结果影响很大。

pytorch 对抗样本_【天池大赛】通用目标检测的对抗攻击方法一览相关推荐

  1. 天池大赛通用目标检测的对抗攻击方法一览

    ©PaperWeekly 原创 · 作者|文永亮 学校|哈尔滨工业大学(深圳) 研究方向|时空序列预测,目标检测 赛题:1000张图,在图上贴补丁,最多不超过10个,导致检测框失效就算得分. 比赛链接 ...

  2. 通用目标检测的review

    今晚去蹭了超强师姐的讲座,以下是今晚的笔记. 目前存在的目标检测可以分为以下几类: One-short, few-short, weakly supervised object detection:这 ...

  3. ThunderNet:国防科大、旷视提出首个在ARM上实时运行的通用目标检测算法

    点击我爱计算机视觉标星,更快获取CVML新技术 今天跟大家分享一篇前天新出的论文<ThunderNet: Towards Real-time Generic Object Detection&g ...

  4. CVPR 2023|UniDetector:7000类通用目标检测算法(港大清华)

    作者 | CV君  编辑 | 极市平台 点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心[目标检测]技术交流群 导读 论文中仅用了500 ...

  5. 神经网络学习小记录50——Pytorch 利用efficientnet系列模型搭建yolov3目标检测平台

    神经网络学习小记录50--Pytorch 利用efficientnet系列模型搭建yolov3目标检测平台 学习前言 什么是EfficientNet模型 源码下载 EfficientNet模型的实现思 ...

  6. 基于昇腾AI异构计算架构CANN的通用目标检测与识别一站式方案初体验

    前言 强大的社会粘性不断催温数字化发展,目标检测与识别作为计算机视觉领域的一项关键技术,应用场景广泛,前景十分广阔,从城市治理.楼宇园区.互联网等领域,延伸至智能家居.金融.医疗影像等更多创新领域.随 ...

  7. 通用目标检测开源框架YOLOv6在美团的量化部署实战

    基于美团目标检测模型开源框架 YOLOv6,本文介绍了一种通用的量化部署方案,在保持精度的同时大幅提升了检测的速度,为通用检测的工业化部署探索出一条可行之路,希望能给大家带来一些启发或者帮助. 1. ...

  8. 基于区域注意的通用目标检测

                                        Towards Universal Object Detection by Domain Attention Xudong Wa ...

  9. 目标检测---以制作yolov5的数据集为例,利用labelimg制作自己的深度学习目标检测数据集(正确方法)

    以制作yolov5的数据集为例,利用labelimg制作自己的深度学习目标检测数据集的正确方法 文章目录 前言 一.labelimg简单介绍 1 VOC标签格式,保存为xml文件. 2 yolo标签格 ...

最新文章

  1. 《零成本实现Web自动化测试--基于Selenium》第一章 自动化测试基础
  2. 如何使用pyecharts中自带的数据集?
  3. JAVA三元运算符排序三个随机数
  4. 知乎回答多线程爬虫案例
  5. python汉字转拼音代码_Python 汉字转换拼音代码
  6. 纸白银:交易简便成本低
  7. MySQL第41题怎么评分_mysql练习题1-41
  8. 使用jQuery+huandlebars遍历中if判断
  9. 推荐几个最好用的CRM软件,本人亲测
  10. 【驱动安装及keil使用】win10 stm32 stlink驱动安装,检测不到芯片,下载不了程序
  11. springboot基于微信小程序的在线考试系统
  12. python 彩票图表下载_python彩票
  13. 独立键盘检测 proteus仿真小实验
  14. 数据分析真题日刷 | 京东2019春招京东数据分析类试卷
  15. 电大计算机统考大纲,电大计算机专科论文大纲模板范文 电大计算机专科论文提纲怎么写...
  16. DELL 服务器 PCI-E 6IR 通道卡 6I阵列卡8口SAS SATA (整理)
  17. 一个前端开发工程师的天猫精灵评测报告
  18. python实现cv2图片读取显示及图片不显示或显示不全的问题分析
  19. STM32串口通信代码正确串口却没反应
  20. 《机器学习实战》第三章

热门文章

  1. 挑战王者荣耀“绝悟” AI,会进化的职业选手太恐怖了!
  2. 开源老兵教你如何评估一项技术是否值得长期投入?
  3. 37岁程序员被裁!120天找不到工作?不想被淘汰,这可能是你最后的机会
  4. 苹果官网下架 iPhone 8 全系;阿里推出“阿里云会议”;深度操作系统 20 BETA 发布 | 极客头条...
  5. 拜托,别再问我什么是 B+ 树了
  6. 中国开发者真实画像:Java长盛,偏爱Windows操作系统,鲜少参与开源项目
  7. 小米新生态总监董红光:致力打造智能服务开放平台
  8. 支付宝澄清使用华为方舟编译器;三星苹果遭遇集体诉讼;PHP 7.4.0 beta4 发布 | 极客头条...
  9. AMD 透漏 Zen 2 技术细节!
  10. 5G 商用时,我们所处的智能城市会是什么样?