【第16篇】Swin Transformer,jvm工作原理面试

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Python全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Python知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024c (备注Python)
img

正文

非重叠窗口中的自注意力 为了有效建模,我们建议在局部窗口内计算自注意力。 窗口被布置为以不重叠的方式均匀地划分图像。 假设每个窗口包含 M × M 个补丁,全局 MSA 模块和基于 h × w 补丁图像的窗口的计算复杂度为:

Ω ( M S A ) = 4 h w C 2 + 2 ( h w ) 2 C Ω ( W − M S A ) = 4 h w C 2 + 2 M 2 h w C \begin{aligned} &\Omega(\mathrm{MSA})=4 h w C^{2}+2(h w)^{2} C \\ &\Omega(\mathrm{W}-\mathrm{MSA})=4 h w C^{2}+2 M^{2} h w C \end{aligned} ​Ω(MSA)=4hwC2+2(hw)2CΩ(W−MSA)=4hwC2+2M2hwC​

其中前者与补丁号 hw 的二次方,当 M 固定时后者是线性的(默认设置为 7)。 全局自注意力计算对于大型hw来说通常是负担不起的,而基于窗口的自注意力是可扩展的。

连续块中的移位窗口分区 基于窗口的自注意力模块缺乏跨窗口的连接,这限制了其建模能力。 为了在保持非重叠窗口的高效计算的同时引入跨窗口连接,我们提出了一种移位窗口分区方法,该方法在连续的 Swin Transformer 块中的两个分区配置之间交替。

如图 2 所示,第一个模块使用从左上角像素开始的常规窗口划分策略,将 8 × 8 特征图均匀划分为大小为 4 × 4 (M = 4) 的 2 × 2 窗口。 然后,下一个模块采用从前一层的窗口配置偏移的窗口配置,通过将窗口从规则分区的窗口中移动 ( ⌊ M 2 ⌋ , ⌊ M 2 ⌋ ) \left ( \left \lfloor \frac{M}{2} \right \rfloor, \left \lfloor \frac{M}{2} \right \rfloor \right ) (⌊2M​⌋,⌊2M​⌋)个像素。 使用移位窗口分区方法,连续的 Swin Transformer 块计算为

z ^ l = W − M S A ( L N ( z l − 1 ) ) + z l − 1 z l = MLP ⁡ ( L N ( z ^ l ) ) + z ^ l z ^ l + 1 = S W − M S A ( L N ( z l ) ) + z l z l + 1 = M L P ( L N ( z ^ l + 1 ) ) + z ^ l + 1 \begin{aligned} &\hat{\mathbf{z}}{l}=\mathrm{W}-\mathrm{MSA}\left(\mathrm{LN}\left(\mathbf{z}{l-1}\right)\right)+\mathbf{z}^{l-1} \\ &\mathbf{z}{l}=\operatorname{MLP}\left(\mathrm{LN}\left(\hat{\mathbf{z}}{l}\right)\right)+\hat{\mathbf{z}}^{l} \\ &\hat{\mathbf{z}}{l+1}=\mathrm{SW}-\mathrm{MSA}\left(\mathrm{LN}\left(\mathbf{z}{l}\right)\right)+\mathbf{z}^{l} \\ &\mathbf{z}{l+1}=\mathrm{MLP}\left(\mathrm{LN}\left(\hat{\mathbf{z}}{l+1}\right)\right)+\hat{\mathbf{z}}^{l+1} \end{aligned} ​zl=W−MSA(LN(zl−1))+zl−1zl=MLP(LN(zl))+zlzl+1=SW−MSA(LN(zl))+zlzl+1=MLP(LN(zl+1))+zl+1​

其中 z ^ l \hat{\mathbf{z}}^{l} z^l和 z l \mathbf{z}^{l} zl 分别表示块 l l l 的 (S)WMSA 模块和 MLP 模块的输出特征; W-MSA 和 SW-MSA 分别表示使用常规和移位窗口分区配置的基于窗口的多头自注意力。

移位窗口分区方法在前一层中引入了相邻非重叠窗口之间的连接,并被发现在图像分类、对象检测和语义分割中是有效的,如表 4 所示。

image-20211012150419107

移位配置的高效批量计算 移位窗口分区的一个问题是它会导致更多窗口,在移位配置中从 ⌈ h M ⌉ × ⌈ w M ⌉ \left \lceil \frac{h}{M} \right \rceil \times \left \lceil \frac{w}{M} \right \rceil ⌈Mh​⌉×⌈Mw​⌉ 到 ( ⌈ h M ⌉ + 1 ) × ( ⌈ w M ⌉ + 1 ) \left ( \left \lceil \frac{h}{M} \right \rceil +1 \right ) \times \left ( \left \lceil \frac{w}{M} \right \rceil+1 \right ) (⌈Mh​⌉+1)×(⌈Mw​⌉+1),并且一些窗口将小于 M × M。一个简单的解决方案是将较小的窗口填充到 M × M 的大小,并在计算注意力时屏蔽填充的值。当常规分区中的窗口数量很少时,例如 2 × 2,这个简单的解决方案增加的计算量是相当可观的(2 × 2 !3 × 3,是 2.25 倍)。在这里,我们提出了一种更有效的批量计算方法,通过向左上方向循环移位,如图 4 所示。 在这种移位之后,一个批量窗口可能由几个在特征图中不相邻的子窗口组成,因此采用屏蔽机制将自注意力计算限制在每个子窗口内。使用循环移位,批处理窗口的数量与常规窗口分区的数量相同,因此也是有效的。这种方法的低延迟如表 5 所示。

相对位置偏差 在计算自注意力时,我们遵循 [48, 1, 31, 32] 通过在计算相似度时将相对位置偏差 B ∈ R M 2 × M 2 B\in \mathbb{R}{M{2}\times M^{2}} B∈RM2×M2添加到每个头部:

Attention ⁡ ( Q , K , V ) = S o f t Max ⁡ ⁡ ( Q K T / d + B ) V \operatorname{Attention}(Q, K, V)=\operatorname{Soft\operatorname{Max}}\left(Q K^{T} / \sqrt{d}+B\right) V Attention(Q,K,V)=SoftMax(QKT/d ​+B)V

其中 Q , K , V ∈ R M 2 × d Q, K, V \in \mathbb{R}{M{2} \times d} Q,K,V∈RM2×d是查询、键和值矩阵; d 是查询/键维度,M2 是窗口中的补丁数。 由于沿每个轴的相对位置位于 [−M + 1; M − 1],我们参数化一个更小的偏置矩阵 B ^ ∈ R ( 2 M − 1 ) × ( 2 M − 1 ) \hat{B} \in \mathbb{R}^{(2 M-1) \times(2 M-1)} B^∈R(2M−1)×(2M−1),B 中的值取自 B ^ \hat{B} B^

我们观察到与没有这个偏置项或使用绝对位置嵌入的对应项相比有显着的改进,如表 4 所示。在 [19] 中进一步向输入添加绝对位置嵌入会略微降低性能,因此在我们的实现中没有采用。

预训练中学习到的相对位置偏差也可用于初始化模型,通过双三次插值 [19, 60] 使用不同的窗口大小进行微调。

3.3、架构变体


我们建立我们的基础模型,称为 Swin-B,具有 模型大小和计算复杂度类似于 ViTB/DeiT-B。 我们还介绍了 Swin-T、Swin-S 和 Swin-L,它们分别是模型大小和计算复杂度约为 0.25x、0.5x 和 2x 的版本。 请注意,Swin-T 和 Swin-S 的复杂度分别与 ResNet-50 (DeiT-S) 和 ResNet-101 的复杂度相似。 默认情况下,窗口大小设置为 M = 7。 对于所有实验,每个头部的查询维度为 d = 32,每个 MLP 的扩展层为 α = 4。 这些模型变体的架构超参数是:

  • Swin-T: C = 96 C=96 C=96, layer numbers = { 2 , 2 , 6 , 2 } =\{2,2,6,2\} ={2,2,6,2}

  • Swin-S: C = 96 C=96 C=96, layer numbers = { 2 , 2 , 18 , 2 } =\{2,2,18,2\} ={2,2,18,2}

  • Swin-B: C = 128 C=128 C=128, layer numbers = { 2 , 2 , 18 , 2 } =\{2,2,18,2\} ={2,2,18,2}

  • Swin-L: C = 192 C=192 C=192, layer numbers = { 2 , 2 , 18 , 2 } =\{2,2,18,2\} ={2,2,18,2}

其中 C 是第一阶段隐藏层的通道数。 表 1 列出了 ImageNet 图像分类模型变体的模型大小、理论计算复杂度 (FLOPs) 和吞吐量。

4、实验

===============================================================

我们对 ImageNet-1K 图像分类 [18]、COCO 对象检测 [42] 和 ADE20K 语义分割 [80] 进行了实验。 在下文中,我们首先将所提出的 Swin Transformer 架构与之前在三个任务上的最新技术进行比较。 然后,我们在 Swin Transformer 的重要设计元素做了消融实验。

4.1. ImageNet-1K 上的图像分类


设置 对于图像分类,我们在 ImageNet-1K [18] 上对提议的 Swin Transformer 进行了基准测试,其中包含来自 1,000 个类别的 1.28M 训练图像和 50K 验证图像。 报告了单个作物的 top-1 准确度。 我们考虑两种训练设置:

  • 常规 ImageNet-1K 训练。 此设置主要遵循 [60]。 我们使用一个 AdamW [36] 优化器,使用余弦衰减学习率调度器和 20 个 epochs 的线性热身进行 300 个 epochs。 使用 1024 的批大小、0.001 的初始学习率和 0.05 的权重衰减。 我们在训练中包含了 [60] 的大部分增强和正则化策略,除了重复增强 [30] 和 EMA [44],它们不会提高性能。 请注意,这与[60]相反,其中重复增强对于稳定 ViT 的训练至关重要。

  • 在 ImageNet-22K 上进行预训练并在 ImageNet-1K 上进行微调。 我们还在更大的 ImageNet-22K 数据集上进行了预训练,该数据集包含 1420 万张图像和 22K 类。 我们使用带有 5 个时期线性热身的线性衰减学习率调度器对 60 个时期使用 AdamW 优化器。 批量大小为 4096,初始学习率为 0.001,权重衰减为 0.01。 在 ImageNet-1K 微调中,我们以 1024 的批大小、10-5 的恒定学习率和 1 0 − 8 10^{-8} 10−8 的权重衰减训练模型 30 个时期。

image-20211012150108056

常规 ImageNet-1K 训练的结果 表 1(a) 展示了使用常规 ImageNet-1K 训练与其他主干的比较,包括基于 Transformer 和基于 ConvNet 的主干。

与之前最先进的基于 Transformer 的架构(即 DeiT [60])相比,Swin Transformers 明显优于具有相似复杂性的对应 DeiT 架构:Swin-T (81.3%) 比 DeiT-S (79.8%) + 1.5% ) 使用 2242 输入,Swin-B (83.3%/84.2%) 使用 22 4 2 / 38 4 2 224{2}/384{2} 2242/3842 输入,分别超过 DeiT-B (81.8%/83.1%) +1.5%/1.1%。

与最先进的 ConvNets,即 RegNet [47] 和 EfficientNet [57] 相比,Swin Transformer 实现了稍微更好的速度-精度权衡。 请注意,虽然 RegNet [47] 和 EfficientNet [57] 是通过彻底的架构搜索获得的,但所提出的 Swin Transformer 改编自标准 Transformer,并且具有进一步改进的强大潜力。

ImageNet-22K 预训练的结果 我们还在 ImageNet-22K 上预训练了更大容量的 Swin-B 和 Swin-L。 在 ImageNet-1K 图像分类上微调的结果如表 1(b) 所示。 对于 Swin-B,ImageNet-22K 预训练比从头开始训练 ImageNet-1K 带来了 1.8%∼1.9% 的收益。 与之前 ImageNet-22K 预训练的最佳结果相比,我们的模型在速度和准确度之间取得了明显更好的权衡:Swin-B 获得了 86.0% 的 top-1 准确度,比具有相似推理吞吐量的 ViT 高 2.0% (84.7 对 85.9 张图像/秒)和略低的 FLOP(47.0G 对 55.4G)。 较大的 Swin-L 模型实现了 86.4% 的 top-1 准确率,略好于 Swin-B 模型。

4.2. COCO 上的物体检测


设置 对象检测和实例分割实验在 COCO 2017 上进行,其中包含 118K 训练、5K 验证和 20K 测试开发图像。使用验证集进行消融研究,并在 test-dev 上报告系统级比较。对于消融研究,我们考虑了四种典型的对象检测框架:级联掩码 R-CNN [28, 5]、ATSS [76]、RepPoints v2 [11] 和 mmdetection [9] 中的稀疏 RCNN [55]。对于这四个框架,我们使用相同的设置:多尺度训练 [7, 55](调整输入的大小,使短边在 480 到 800 之间,而长边最多为 1333)、AdamW [43] 优化器(初始学习率为 0.0001,权重衰减为 0.05,批量大小为 16),以及 3x 计划(36 个时期)。对于系统级比较,我们采用改进的 HTC [8](表示为 HTC++)和 instaboost [21]、更强的多尺度训练 [6]、6x 计划(72 epochs)、soft-NMS [4] 和 ImageNet -22K 预训练模型作为初始化。

我们将 Swin Transformer 与标准 ConvNets(即 ResNe(X)t)和之前的 Transformer 网络(例如 迪特。 比较是通过在其他设置不变的情况下仅更改主干来进行的。 请注意,虽然 Swin Transformer 和 ResNe(X)t 由于其分层特征图可直接适用于上述所有框架,但 DeiT 仅生成单一分辨率的特征图,不能直接应用。 为了公平比较,我们按照 [78] 使用反卷积层为 DeiT 构建分层特征图。

image-20211012150014743

与 ResNe(X)t 的比较 表 2(a) 列出了 Swin-T 和 ResNet-50 在四个对象检测框架上的结果。 与 ResNet-50 相比,我们的 Swin-T 架构带来了一致的 +3.4∼4.2 box AP 增益,模型尺寸、FLOPs 和延迟略大 。

表 2(b) 比较了使用 Cascade Mask RCNN 在不同模型容量下的 Swin Transformer 和 ResNe(X)t。 Swin Transformer 实现了 51.9 box AP 和 45.0 mask AP 的高检测精度,与具有相似模型大小、FLOPs 和延迟的 ResNeXt101-64x4d 相比,显着提高了 +3.6 box AP 和 +3.3 mask AP。 在使用改进的 HTC 框架的 52.3 box AP 和 46.0 mask AP 的更高基线上,Swin Transformer 的收益也很高,为 +4.1 box AP 和 +3.1 mask AP(见表 2(c))。 关于推理速度,虽然 ResNe(X)t 是由高度优化的 Cudnn 函数构建的,但我们的架构是通过内置的 PyTorch 函数实现的,这些函数并非都经过优化。 彻底的内核优化超出了本文的范围。

与 DeiT 的比较 使用 Cascade Mask R-CNN 框架的 DeiT-S 的性能如表 2(b) 所示。 Swin-T 的结果比 DeiT-S 高 +2.5 box AP 和 +2.3 mask AP,具有相似的模型大小(86M vs. 80M)和显着更高的推理速度(15.3 FPS vs. 10.4 FPS)。 DeiT 较低的推理速度主要是由于其对输入图像大小的二次复杂度。

与之前最先进技术的比较 表 2© 将我们的最佳结果与之前最先进模型的结果进行了比较。 我们的最佳模型在 COCO test-dev 上实现了 58.7 box AP 和 51.1 mask AP,超过了之前的最佳结果 +2.7 box AP(没有外部数据的复制粘贴 [25])和 +2.6 mask AP(DetectoRS [45])。

4.3. ADE20K 上的语义分割


设置 ADE20K [80] 是一个广泛使用的语义分割数据集,涵盖了广泛的 150 个语义类别。 它总共有 25K 张图像,其中 20K 用于训练,2K 用于验证,另外 3K 用于测试。 我们利用 mmseg [15] 中的 UperNet [66] 作为其高效的基础框架。 附录中提供了更多详细信息。

image-20211012150032790

结果 表 3 列出了不同方法/主干对的 mIoU、模型大小(#param)、FLOP 和 FPS。 从这些结果可以看出,Swin-S 比 DeiT-S 高 +5.3 mIoU(49.3 vs. 44.0),计算成本相似。它也比 ResNet-101 高 +4.4 mIoU,比 ResNet-101 高 +2.4 mIoU ResNeSt-101 [75]。 我们使用 ImageNet-22K 预训练的 Swin-L 模型在 val 集上实现了 53.5 mIoU,超过了之前最好的模型 +3.2 mIoU(SETR [78] 的 50.3 mIoU,具有更大的模型尺寸)

4.4. 消融研究


在本节中,我们使用 ImageNet-1K 图像分类、COCO 对象检测上的 Cascade Mask R-CNN 和 ADE20K 语义分割上的 UperNet 消除了所提出的 Swin Transformer 中的重要设计元素。

image-20211012145950458

移窗 表 4 中报告了对三个任务的移位窗口方法的消融。在 ImageNet-1K 上,具有移位窗口分区的 Swin-T 在每个阶段的性能优于基于单个窗口分区的对应物+1.1% top-1,+ COCO 上为 2.8 box AP/+2.2 mask AP,ADE20K 上为 +2.8 mIoU。 结果表明使用移位窗口在前面层中的窗口之间建立连接的有效性。 移位窗口的延迟开销也很小,如表 5 所示 。

相对位置偏差 表 4 显示了不同位置嵌入方法的比较。 具有相对位置偏差的 Swin-T 在 ImageNet-1K 上产生 +1.2%/+0.8% top-1 准确度,在 COCO 上产生 +1.3/+1.5 box AP 和 +1.1/+1.3 mask AP,在 COCO 上产生 +2.3/+2.9 mIoU ADE20K 分别与那些没有位置编码和绝对位置嵌入的相关,表明相对位置偏差的有效性。 另请注意,虽然包含绝对位置嵌入提高了图像分类精度(+0.4%),但它会损害对象检测和语义分割(COCO 上的框/掩码 AP 为 -0.2,ADE20K 上的为 -0.6 mIoU)。

虽然最近的 ViT/DeiT 模型放弃了图像分类中的平移不变性,尽管它长期以来一直被证明对视觉建模至关重要,但我们发现鼓励某些平移不变性的归纳偏差对于通用视觉建模仍然是可取的,特别是对于 目标检测和语义分割的密集预测任务。

不同的self-attention方法 表 5 中比较了不同自注意力计算方法和实现的实际速度。我们的循环实现比朴素填充的硬件效率更高,特别是对于更深的阶段。 总体而言,它分别为 Swin-T、Swin-S 和 Swin-B 带来了 13%、18% 和 18% 的加速。

基于所提出的自注意力模块 在四个网络阶段,在朴素/内核实现中,移位窗口方法分别比滑动窗口方法效率高 40.8×/2.5×、20.2×/2.5×、9.3×/2.1× 和 7.6×/1.8×。 总体而言,构建在移动窗口上的 Swin Transformer 架构分别比构建在滑动窗口上的 Swin-T、Swin-S 和 Swin-B 变体快 4.1/1.5、4.0/1.5、3.6/1.5 倍。 表 6 比较了它们在三个任务上的准确性,表明它们在视觉建模方面的准确性相似。

image-20211012145935525
文末有福利领取哦~

👉一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。img

👉二、Python必备开发工具

img
👉三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
img

👉 四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。(文末领读者福利)
img

👉五、Python练习题

检查学习结果。
img

👉六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
img

img

👉因篇幅有限,仅展示部分资料,这份完整版的Python全套学习资料已经上传

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注python)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
上传

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注python)
[外链图片转存中…(img-yxy3u05t-1713437451980)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 22
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值