屠榜各大 CV 任务,微软开源的 Swin Transformer 有多强?

简介: 近日,微软 Swin Transformer 代码正式开源,短短两天就在 GitHub 上获得了 1.9k 的 Star,相关话题在知乎上同样引起了广泛的讨论和关注。

微软 Swin Transformer 正式开源

Swin Transformer 可以理解为一个通用的视觉骨干网络,Swin Transformer 设计出了一种分层表示形式,首先由小的 PATCHES 开始,而后逐渐将相邻的各 Patches 融合至一个更深的 Transformer 层当中。通过这种分层结构,Swin Transformer 模型能够使用 FPN 及 UNET 等高密度预测器实现技术升级,通过限制非重叠窗口中的部分计算量降低计算强度。各窗口中的 PATCHES 数量是固定的,因此随着图像尺寸的增加,复杂性也将不断增长。相比于 ViT,Swin Transfomer 计算复杂度大幅度降低,随着输入图像大小线性计算复杂度。

Swin Transformer 的核心设计是将 Self-Attention 层划分为 SHIFT,SHIFTED Window 接入上一层窗口,二者之间保持连接,由此显著增强建模能力。这种策略还有助于有效降低延迟:所有 Query Patches 窗口共享同一 KEY 集,由此节约硬件内存;以往的 Transformer 方法由于使用不同的 Query 像素,因此在实际硬件中往往具有较高延迟;论文实验证明,SHIFTED Window 方法带来的延迟较传统滑动方法更低,且二者的建模能力基本相同。

基于此,Swin Transformer 在各类回归任务、图像分类、目标检测、语义分割等方面具有极强性能,其性能优于 VIT/DEIT 与 RESNE (X) T。

348f9c29d0267d43e478994067f910c4.jpeg

GitHub 地址:https://github.com/microsoft/Swin-Transformer
原作者团队曹越在知乎上的回答:https://www.zhihu.com/question/437495132/answer/1800881612
论文地址:https://arxiv.org/pdf/2103.14030.pdf

实现方法

Swin Transformer 的架构如下图所示。首先,它与 VIT 一样将输入的图片划分为多个 Patches,作者使用 4 x 4 的 patch 大小;之后是嵌入层,最后则是作者设计的 Swin Transformer BLOCK。

75f0733e7557aa3fce1168a9e57e1ea4.jpeg

Swin Transformer Block:此模块是 Transformer 中使用 Shifted Window 的多 ATTENTION 模块,具有一致性;Swin Transformer 模块中包含一个 MSA(多头 Attention)模块 SHIFTED WINDOW,之后是 2 层 MLP,接着将 Layernorm 层添加至各 MSA 模块与各 MLP 层内,而后是剩余连接。

基于 Self-Attension 的 SHIFTED Window

553aa65c2f080109bf38e830ab0e4cf5.jpeg

标准 Transformer 使用全局 self-attention 以创建各令牌之间的关系,但这会令图像大小增加 2 倍、导致复杂性随之提升,因此不适用于处理高强度任务。为了提升建模效率,作者提出由“部分窗口计算 Self-Attention”,即假设各个窗口均包含 MXM Patches、全局 MSA 模块与基于窗口的 MSA 模块,并在 HXW Patches 的图像之上进行复杂度计算:

29575dcbc64a63979dd107d1aa4554ad.jpeg

(1)的复杂度为 PATCH 数量 HW 的次生增长;(2)则为线性增长,其中 m 为固定值,但全局 self-attention 为大 HW,因此基于窗口的 Self-Attention 计算量不会很高。

将 SHIFTED Window 拆分为连续块

基于 Windows 的 Self-Attention 虽然拥有线性增长的复杂度,但其缺少在各窗口之间的连接,因此限制了模型的建模能力。

为了在容器上引入连接以实现模型维护,作者提出了 SHIFTED Window 分割的概念。第一个模块使用中性窗口分割,并根据窗口大小的 M=4 放大得出一个 8 x 8 的特征图。我们将此窗口划分为 2 x 2 的形式,而后通过 Shifted Window 设置下一模块,将其移动 M/2 个像素。

使用 SHIFTED 结构,Swin Transformer Blocks 的计算如下所示:

fb6ea395cbba9d600a64d6b31ecc95f2.jpeg

W-MSA 与 SW-MSA 分别表示使用整齐分割与 SHIFTED SELF-ATTENTION。

Shifted Window 可以跨越多个窗口向模型添加连接,并保持模型的良好运行效率。

SHIFTED WINDOW 高效批量计算

32e245ec9ce080c89a27c18bef86dd7a.jpeg

SHIFTED WINDOW 也有自己的问题,即导致窗口数量增加——由原本的 (h / m xw / m) 个增加到 ((h / m + 1) x (W / m + 1)) 个,而且其中某些窗口要小于 MXM。这种方法会将较小的窗口填充为 MXM,并计算 attention 值以掩蔽填充操作;当窗口数量较少、但大于 2 x 2 时,由此带来的额外计算量将相当可观(由 2 x 2 到 3 x 3,计算量增加达 2.25 倍)。

因此,作者提出了一种更为高效的 BATCH 计算方法,即沿左上角执行 Cyclic Shift。在完成这项位移之后,Batch WINDOW 将拥有一张由非相邻子窗口组成的特征图,这相当于是使用 Cyclic-Shift、Batch-Windows 与整齐窗口分割限制子窗口内的 Self-Attention 数量,从而极大提高了计算效率。

相对位置偏移:

作者介绍了 Self-Attention 中各头的相对位置。偏移 B:

fe3da198a5fd4820d926d126656de143.jpeg

其中:

225a476662938ec91defada2c6283eab.jpeg

d30cb491ff0bc3b778633712bb15a550.jpeg

这将显著提高性能表现。

作者根据大小与计算复杂度建立起一套基本模型,名为 SWIN-B;同时引入了 SWIN-T、SWIN-S 与 SWIN-L,其模型大小与复杂度分别为 0.25 倍、0.5 倍与 2 倍。

当我们将窗口大小 M 设定为 7 时,各头部查询 D 为 32,各扩展层的 mlp α为 4。

c5aa7022d68ae43637249271dbaef3be.jpeg

其中 C 为初始阶段隐藏层的通道数量。

具体表现

图像分类

表 1A,从零开始在 ImgeNet-1K 上进行训练:

236e9c565ec10b0916ac24d5a0b04519.jpeg

表 1B,在 ImageNet-22k 上进行首轮训练,之后迁移至 ImageNet-1K:

1.jpeg

目标检测

表 2A,在不同模型帧上使用 Swin Transformer 替代 BackBone:

2.jpeg

表 2C,与 SOTA 的比较结果:

3.jpeg

语义分割

表 3,对于较小模型,可提供比先前 SOTA SETR 更高的 MIOU:

4.jpeg

消融实验

表 4,Shifted Window 在相对位置偏移中的性能改进:

5.jpeg

表 5,SHIFTED WINDOW 与 CYCLIC 高效执行:

1.jpeg

表 6,不同 Self-Attentions 的比较:

2.jpeg

Transformer 在 CV 上的应用前景有可能替代 CNN 吗?

ViT 的出现扩大了 Transformer 的使用范围,这也让 AI 领域的从业者开始关注 Transformer 与 CNN 的关系。在知乎上,一位用户提问称:

目前已经有基于 Transformer 在三大图像问题上的应用:分类(ViT),检测(DETR)和分割(SETR),并且都取得了不错的效果。那么未来,Transformer 有可能替换 CNN 吗,Transformer 会不会如同在 NLP 领域的应用一样革新 CV 领域?后面的研究思路可能会有哪些呢?

关于这个问题,很多知乎答主已经给出了自己的答案,包括浙江大学控制科学与工程博士、复旦大学微电子学院硕士、阿里巴巴高级算法专家等,大体总结为未来是否会形成完全替代尚不好预测, 但对 CNN 的降维打击已经形成。

感兴趣的用户可以到知乎阅读各位答友的完整回答:https://www.zhihu.com/question/437495132/answer/1800881612

目录
相关文章
|
内存技术 Perl
MTK DDR不能兼容分析
MTK DDR不能兼容分析
666 0
|
8月前
|
机器学习/深度学习 人工智能 监控
基于深度学习的农业虫害自动识别系统:YOLOv8 的完整工程
本项目基于YOLOv8构建了覆盖102类害虫的智能识别系统,融合深度学习与PyQt5图形界面,支持图片、视频、摄像头等多源输入,实现虫害精准检测与实时可视化。具备高精度(mAP@0.5 > 90%)、易部署、操作友好等特点,适用于农田监测、温室预警等智慧农业场景,推动AI技术在农业领域的工程化落地。
1181 6
基于深度学习的农业虫害自动识别系统:YOLOv8 的完整工程
|
存储 文件存储 Windows
简单好用的免费数据恢复软件EasyRecovery
EasyRecovery是Ontrack公司出品的一个硬盘数据恢复软件,能够帮你恢复丢失的数据以及重建文件系统。它提供了完善的数据恢复解决方案,比如删除文件恢复、格式化恢复、分区丢失恢复。在EasyRecovery 14专业版本中,还可以创建恢复盘和克隆盘,实现整盘的数据恢复及系统迁移。
1432 0
|
5月前
|
安全
新硬盘或硬件坏掉?硬件检查工具,了解硬盘健康情况!
新硬盘或硬件坏掉?硬件检查工具,了解硬盘健康情况!
|
8月前
|
存储 安全 数据安全/隐私保护
Joplin:一款真正属于你的开源笔记与待办事项应用
Joplin是一款免费开源的笔记工具,支持Markdown、多端同步与端到端加密,保障数据自主权。支持全平台使用,可同步至云存储,真正实现隐私安全与知识自由管理,是信息时代的理想笔记伴侣。(239字)
1957 13
|
Linux 测试技术 编译器
在go程序中的交叉编译
【7月更文挑战第9天】本文介绍Go 交叉编译允许在一种平台上构建适用于多平台的二进制文件。`go build -cover`用于覆盖率分析,`-coverpkg`控制分析的包范围,生成的二进制文件运行后,覆盖率数据会写入`GOCOVERDIR`指定的目录。
872 14
在go程序中的交叉编译
|
人工智能 开发框架 Java
重磅发布!AI 驱动的 Java 开发框架:Spring AI Alibaba
随着生成式 AI 的快速发展,基于 AI 开发框架构建 AI 应用的诉求迅速增长,涌现出了包括 LangChain、LlamaIndex 等开发框架,但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言,并非十分友好和丝滑。因此,我们基于 Spring AI 发布并快速演进 Spring AI Alibaba,通过提供一种方便的 API 抽象,帮助 Java 开发者简化 AI 应用的开发。同时,提供了完整的开源配套,包括可观测、网关、消息队列、配置中心等。
11771 141
|
API Swift iOS开发
都2022年了,我们来看看iOS StoreKit 2 吧
都2022年了,我们来看看iOS StoreKit 2 吧
2200 0
|
存储 安全 程序员
|
监控 Linux
配置zabbix连接grafana展示监控图形(十)
zabbix连接grafana 1.安装grafana
2143 0
配置zabbix连接grafana展示监控图形(十)