Transformer的稳健性更好吗?

2023-11-13

点击下方卡片,关注“CVer”公众号

AI/CV重磅干货,第一时间送达

本文:Greene |  来源:知乎(已获作者授权)

https://zhuanlan.zhihu.com/p/361105702

最近 Transformer 在计算机视觉遍地开花,从纯 Transformer 到 Transformer 和 CNN 的显式隐式杂交,各个任务仿佛嗷嗷待哺的婴儿,等着 Transformer 奶一口,这自然让人好奇 Transformer 的稳健性(Robustness)如何。

然而,Transformer 训练起来算力要求大,对抗训练加 Transformer 训练起来算力要求就是大上加大,好在我们不用亲自花费精力去实验,或者实验到一半的你也可以先休息一下,因为在 arXiv 上已经出现了研究 Transformer 的稳健性的论文。

第一篇映入眼帘的便是 2021年3月26日 公开的 Transformer 的老家谷歌做的这篇:

Srinadh Bhojanapalli, Ayan Chakrabarti, Daniel Glasner, Daliang Li, Thomas Unterthiner, Andreas Veit. Understanding Robustness of Transformers for Image Classification. arXiv:2103.14586

首先,Transformer 也存在对抗样本(Adversarial Example),这依然是一个问题,不过,针对 Transformer 的对抗扰动和针对 CNN 的对抗扰动看起来确实不太一样:

说明 Transformer 和 CNN 摔跤的地方不太一样。Transformer 的对抗扰动有明显的块(Patch)间差异,看起来似乎是每一块单独生成的对抗样本拼接而成的。他们使用 PGD 和 FGSM 测得的稳健性如下:

原文中对威胁模型(Threat Model)的描述是 one gray level,应该对应  。可以看到,Transformer 相对 CNN 并没有显著地更加稳健(Robust),在 FGSM 下的稳健性和应对输入变换(旋转、平移)的稳健性都不如 CNN;在 PGD 攻击下的稳健性比 CNN 要好一些,个人猜测有可能是因为 Transformer 让 PGD 更难优化。

老实说,这个结果让人有点失望,本来以为 Transformer 有从根本上杜绝对抗攻击的可能,但这些结果表明,并没有 o(╥﹏╥)o

不过令人欣慰的是,对抗样本在 Transformer 和 CNN 之间的迁移性不好:

这看起来似乎佐证了 Transformer 和 CNN 确实跌倒在不同的地方[1]。这篇文章处处透露着谷歌的豪气,只能说,不愧是谷歌。

就在这篇文章出现的三天后,arXiv上便再次出现了一篇研究 Transformer 的稳健性的论文:

Rulin Shao, Zhouxing Shi, Jinfeng Yi, Pin-Yu Chen, Cho-Jui Hsieh. On the Adversarial Robustness of Visual Transformers. arXiv:2103.15670

这篇论文最吸引人的地方是开篇的第一幅图:

这个 Transformer 看起来非常稳健啊,难道谷歌这次翻车了?按照这张图,Transformer 的稳健性似乎直接达到了对抗训练之后的CNN基准[2],而且他的结论是越加 CNN,就越不稳健......

然而看到后面却发现,好像结论跟谷歌没差,他们给出的PGD 攻击的结果如下:

在同样的威胁模型下(  ),ViT-B/16 的稳健精确度为 11.05% ~ 4.54%,与谷歌那篇论文的结论基本一致。图 1 目测绘制的是威胁模型为  的结果,这个威胁模型比一个灰度阶梯(1/255)还小,实际意义有限[3]

他们做了更加完善的迁移攻击的研究,结果如下:

颜色更深表示迁移性更强,对角线是自己跟自己的迁移攻击成功率,可以看到,结论与谷歌那篇中一致,对抗样本在 Transformer 与 CNN 之间的迁移性较低。

难能可贵的是,最耗时间的对抗训练他们也帮我们做了,这里使用的威胁模型是常见的  :

需要注意的是,每个模型只训练了 20 个周期(Epoch),一般的对抗训练会进行100个周期(Epoch)以上[4]。根据这个结果,Transformer 在对抗训练后的效果似乎比 CNN 要好,两个精确度都要高一些。

对比 ResNet-18 和 ViT-B/4 使用 TRADES 对抗训练得到的结果,ViT-B/4 的 标准精确度(Clean)要高 7.4%,稳健精确度(AutoAttack)要高 4.3%;鉴于只训练了20个周期,这个更好的效果有可能是因为 Transformer 在对抗训练的前期比 CNN 收敛得更快。

Transformer 是比 CNN 更稳健呢?还是稳健性跟 CNN 差不多呢?两篇论文,诸君自取。不过可以确定的是,Transformer 跟 CNN 跌倒的方式不同,他们确实学习到了很不一样的特征,而不一样的特征能得到相似的效果,不难理解为何关于 Transformer 的论文这么多了。

PS:Transformer 有没有合适的翻译额,中英混杂看起来很累,翻译成变压器或者变形金刚似乎不太好。

参考

  1. ^不过这里测试迁移性使用的是 PGD 攻击,之前已经有研究表明,就迁移性而言,使用 FGSM 这种单次攻击得到的对抗样本要更好一些

  2. ^Robust Bench https://robustbench.github.io/

  3. ^因为保存成图片这个级别的扰动基本就没有用了

  4. ^Tianyu Pang, Xiao Yang, Yinpeng Dong, Hang Su, Jun Zhu. Bag of Tricks for Adversarial Training. arXiv preprint 2020. arXiv:2010.00467 https://arxiv.org/abs/2010.00467

上述两篇论文PDF下载

后台回复:Tranformer鲁棒性,即可下载论文PDF

后台回复:CVPR2021,即可下载CVPR 2021论文和代码开源的论文合集

后台回复:Transformer综述,即可下载最新的两篇Transformer综述PDF

CVer-Transformer交流群成立

扫码添加CVer助手,可申请加入CVer-Transformer 微信交流群,方向已涵盖:目标检测、图像分割、目标跟踪、人脸检测&识别、OCR、姿态估计、超分辨率、SLAM、医疗影像、Re-ID、GAN、NAS、深度估计、自动驾驶、强化学习、车道线检测、模型剪枝&压缩、去噪、去雾、去雨、风格迁移、遥感图像、行为识别、视频理解、图像融合、图像检索、论文投稿&交流、PyTorch和TensorFlow等群。

一定要备注:研究方向+地点+学校/公司+昵称(如Transformer+上海+上交+卡卡),根据格式备注,可更快被通过且邀请进群

▲长按加小助手微信,进交流群

▲点击上方卡片,关注CVer公众号

整理不易,请给CVer点赞和在看

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Transformer的稳健性更好吗? 的相关文章

  • 在python opengl中使用图像中的2d点获取空间中的3d点

    我正在尝试模拟房间中的深度相机 我的相机能够在世界中移动和旋转 并且房间被模拟为围绕 0 0 0 的 3d 立方体 单击按钮时 我想对图像中的 N 个随机点进行采样 并获取这些点与相机的距离 现实世界 中的距离 到目前为止 我已经成功创建了
  • 生成球体的顶点

    在 DirectX 移动照明示例中 圆柱体是按以下方式生成的 for DWORD i 0 i lt 50 i FLOAT theta 2 D3DMX PI i 50 1 pVertices 2 i 0 position D3DMXVECTO
  • Python在3D散点图中用线连接相邻点

    我有两组 x y z 坐标 我用 Matplotlib 将它们绘制在 3D 散点图中 现在 我想将每个生成的四边形与平面连接起来 我已经了解了如何在 3D 空间中绘制 2D 多边形在 python matplotlib 中绘制 3D 多边形
  • 在运行时更改 AR core 中对象的纹理

    我正在创建一个应用程序 我需要在其中更改 3d 对象的纹理 图案 我正在使用 AR Core SDK 和 android 我已经使用了下面的代码 但它不起作用 Texture builder setSource this R drawabl
  • 如何使用 OpenCV Viz 和 ARUCO 转换增强现实应用的 3D 模型

    我正在开发一个简单的基于标记的增强现实应用程序OpenCV 可视化 and ARUCO 我只想在标记上可视化 3D 对象 PLY 格式 我可以使用 ARUCO 毫无问题地运行标记检测和姿态估计 返回旋转和平移向量 我可以在 Viz 窗口中可
  • 给定一个 4x4 齐次矩阵,我如何获得 3D 世界坐标?

    所以我有一个正在旋转然后再次平移和旋转的对象 我将这些翻译的矩阵存储为对象成员 现在 当我进行对象拾取时 我需要知道该对象的 3D 世界坐标 目前我已经能够像这样获得物体的位置 coords 0 finalMatrix 12 坐标 1 最终
  • 是否可以在 Netbeans 7.0 应用程序中使用 Jzy3D?

    好吧 我们正在尝试将 3D 散点图合并到 Netbeans 7 0 中的项目中 我们选择测试的库之一是 Jzy3D 看起来它会做我们需要它做的一切 但不幸的是 它什么也没做 我已经正确安装了 JOGL 并对其进行了测试 发现它可以正常工作
  • 使用 glFrustum 进行离轴投影

    我正在尝试使用 OpenGL 对场景进行离轴投影 并且我阅读了该文档罗伯特 库伊马的离轴投影 http csc lsu edu kooima pdfs gen perspective pdf现在对实际需要做什么有了更好的了解 但仍然有一些部
  • 在 Unity 3D 中使用触摸输入在地形上移动相机

    我是 Unity 新手 我正在尝试弄清楚如何使用触摸输入在地图 地形上移动相机 摄像机将以 90 0 0 的旋转角度俯视地形 地形位于第 8 层 我用键盘移动它没有问题 现在我尝试移动到触摸 如果你想在 iOS 上保持预期的使用情况 那就非
  • 编写每个三角形/面具有纯色的 GLSL 片段着色器的方法

    我有顶点和三角形数据 其中包含每个数据的颜色triangle 面 不是每个顶点 即单个顶点由多个面共享 每个面可能具有不同的颜色 我应该如何在 GLSL 中解决这个问题以获得每个的纯色分配face正在渲染 通过平均顶点相邻多边形的颜色来计算
  • 对一系列点重新采样

    我有一个 3d 点数组 想象一下球的轨迹 有 X 个样本 现在 我想对这些点重新采样 以便我有一个新数组 其中包含 y 个样本的位置 y 可以大于或小于 x 但不能小于 1 始终至少有 1 个样本 将原始数组重新采样为新数组的算法会是什么样
  • 如何在plotly 3D曲面图中标记区域?

    我使用plotly从xyz数据创建3D高程剖面图 它与以下代码配合得很好 import plotly graph objects as go import pandas as pd import numpy as np Read data
  • 如何在SceneKit中实现逼真的景深效果?

    我正在尝试渲染具有真实景深效果的帧 我已经尝试过景深属性camera节点 但它不会产生可用的结果 是否可以切换到景深效果的最大渲染质量 性能不是一个因素 我只需要渲染一帧 用户可以等待它 SceneKit 中逼真的景深效果 在SceneKi
  • 点列表的 3D 轮廓(凹壳)

    我有一个 C 中的 Vector3 点列表 我需要计算这些点的凹轮廓 确实有很多参考资料 特别是对于 凸 分辨率 由于格雷厄姆算法 我已经成功实现了 然而 由于我现在需要有效地计算凹轮廓 所以我迷失了 维基百科确实列出了很多用于凸计算的资源
  • 一次性渲染阴影

    考虑到阴影投射的成本 我想知道对于动态定位的静态对象 例如 程序城市 是否有一个功能或可能 实验性的方法可以在 Three js 中仅渲染一次阴影贴图 甚至在 webgl 中 因此 结果可以在静态对象的下一帧中免费使用 仅当物体移动时才会进
  • 颜色重新映射 - 使用 3D 网格匹配目标调色板?

    假设我有颜色 FOO 它以 RGB 格式存储 我需要重新着色 FOO 以便它与颜色列表中最接近的颜色匹配 即时执行此操作 我是否无法将每种颜色的 RGB 值视为 3D 网格上的点 r x g y b z 并计算点 FOO 与每个颜色点之间的
  • C++ Irrlicht 程序未链接:“未定义对‘__imp_createDevice’的引用”

    我的 Irrlicht 程序无法链接 我使用的编译器是g Code include
  • 将大块位图转换为 3 维位图

    Problem 我需要这个大量的数据作为输入 对于基于C的arduino 这是上面示例中所需格式的大量数据 const byte bitmap 8 8 0xFF 0x81 0x81 0x81 0x81 0x81 0x81 0xFF 0x81
  • 简单的线框格式?

    我正在寻找一种用于线框模型的简单文件格式 我知道 VRML u3D 等 但这些对于我的需求来说似乎很重要 我的标准是 必须有明确的规格 要么是开放的 要么是非常完善 记录的 我只需要 想要 简单的模型 顶点和边 我不想处理面孔或物体 如果格
  • 如何在 GTX 560 及更高版本上使用 OpenGL 进行立体 3D?

    我正在使用在 Windows 7 上运行的开源触觉和 3D 图形库 Chai3D 我重写了该库以使用 Nvidia nvision 执行立体 3D 我将 OpenGL 与 GLUT 一起使用 并使用 glutInitDisplayMode

随机推荐