天池大赛通用目标检测的对抗攻击方法一览
©PaperWeekly 原创 · 作者|文永亮
学校|哈尔滨工业大学(深圳)
研究方向|时空序列预测,目标检测
赛题: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
1.1 简要思路
1.2 损失函数
2.1 简要思路
2.2 损失函数
2.3 论文效果
从指标上看,小物体如鸟这样的无目标攻击会比较困难。论文作者指出 DPatch 是具有泛化能力的,YOLO 训练出来的 Patch 给 Faster-RCNN 用也是没问题的,反之也行。
论文链接:https://arxiv.org/abs/1906.11897
3.2 改进点
给 Patch 贴的方式发生一些变化,不只是左上的角落,而是增加一些旋转,亮度,位置的变化 损失函数用了 PGD 的方式
DPatch 的损失函数的更新是直接的最小化目标类别,或者最大化 GT 的类别,并没有用到对抗攻击的手段,这里直接使用了 PGD 一阶最强攻击,可以理解为最大化 GT 类别的一种方式。仔细的看更新方式,最原始的 SGD 就是沿着梯度的负方向更新达到最小化 loss 的目的,如果要最大化 loss 就是得沿着梯度的正方向。
3.3 效果
论文指出这样训练要比 DPatch 快,可是他也更新了 30w 轮,而且每轮还多次攻击。
Adversarial YOLO
代码链接:https://gitlab.com/EAVISE/adversarial-yolo
这篇是 2019 的论文,给了代码的,主要是对人这个类别进行攻击,而天池这个比赛其中人的类别就有 600 多张是有的,所以 1000 张中搞定人的类别的框就已经可以说很成功了。
其中 loss 的设计不太符合比赛,因为他这里的 loss 由三部分组成,考虑了可打印出真实世界进行物理攻击的因素。
4.2 损失函数
具体代码如下,其中 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
结论
本次比赛重在学习,我也没有做过对抗攻击的研究,这番下来对目标检测对抗攻击领域其实有了一定的了解,也希望能够帮助更多的人入门这个领域,我看到落地的 demo 有很多,攻击的效果也是惊人,但是我的尝试过后分数并没有明显的提升,也有可能是我训练得次数太少了,目前我都是只训练了最多 500 轮,论文中都是 30w 轮的迭代。
更多阅读
#投 稿 通 道#
让你的论文被更多人看到
如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。
总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。
PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学习心得或技术干货。我们的目的只有一个,让知识真正流动起来。
📝 来稿标准:
• 稿件确系个人原创作品,来稿需注明作者个人信息(姓名+学校/工作单位+学历/职位+研究方向)
• 如果文章并非首发,请在投稿时提醒并附上所有已发布链接
• PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志
📬 投稿邮箱:
• 投稿邮箱:hr@paperweekly.site
• 所有文章配图,请单独在附件中发送
• 请留下即时联系方式(微信或手机),以便我们在编辑发布时和作者沟通
🔍
现在,在「知乎」也能找到我们了
进入知乎首页搜索「PaperWeekly」
点击「关注」订阅我们的专栏吧
关于PaperWeekly
PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。