Swin Transformer:将卷积网络和 Transformer 结合

2023-12-13 09:31:27

Swin Transformer:将卷积网络和 Transformer 结合

?


前置知识:ViT:视觉 Transformer

论文地址:https://arxiv.org/abs/2106.13230

代码地址:https://github.com/SwinTransformer/Video-Swin-Transformer

网络结构

Transformer 在视觉上的问题:

  • 如果图像尺寸变化大,性能不稳定,时好时坏
  • 在像素点多的图像上,全局注意力计算量要大于 CNN

Swin 是滑动窗口的缩写。

用滑动窗口让注意力机制,在局部范围内(减少计算量),同时跨窗口的连接(保持全局信息)。

Swin Transformer 和 ViT 对比图:

滑动窗口能实现卷积网络的效果,对局部特征的提取,大大节省计算量。

层次化设计

网络结构,采用层次化设计:

图(a),从左往右看:

  • Patch Partition:先把图像切分为固定大小的图像块
  • Linear Embeding:进行嵌入位置向量
  • Basic Layer:再分 4 个阶段,每个阶段都在缩小分辨率(从 1 4 \frac{1}{4} 41? 1 8 \frac{1}{8} 81? 1 16 \frac{1}{16} 161? 1 32 \frac{1}{32} 321?),感受野会逐步扩大,从关注线条、斑点、色彩,到眼睛、鼻子、头发,再到整个脸


图像没变,Patch 变大了,这样就改变了注意力的区域,虽然越来越大,加入邻域要素,但不是全局注意力。

  • Patch Merging:每个阶段都会先合并图像块(降低图像分辨率)
  • Swin Transformer Block:基本构建单元,由局部窗口交互、全局窗口交互和转换层组成,用于在局部和全局范围内进行特征交互。

Swin Transformer 块

图 (b),就是 Swin Transformer Block 具体细节:

  • MLP:多层感知器,就是一个分类网络
  • LN:层归一化
  • W-MSA:窗口多头自注意力模块,在窗口范围内做attention
  • SW-MSA:滑动窗口多头自注意力模块,在滑动窗口范围内做attention

W-MSA、SW-MSA

Block 核心是用了 W-MSA、SW-MSA:

  • W-MSA 是为了减少计算量,注意力限制在一个小窗口内,当然窗口会越来越大,考虑邻域要素。
  • SW-MSA 解决的是注意力机制局部化,导致的信息、特征损失,信息和信息之间没有交流。

好像读一本书:

  • 首先,W-MSA可以将你的注意力限制在一个小窗口内,比如每次只关注故事中的一小段内容。这样,就可以更集中地理解每个人物和事件之间的关系,而不需要一次性地理解整个故事。

  • 接着,SW-MSA可以让你通过滑动窗口的方式,将不同窗口中的内容进行比较和交互。这样,就能够捕捉到故事中的重要事件和关键人物,不受它们在故事中的具体位置影响。可以在不同位置观察故事中的情节,而不会错过任何重要的细节。

SW-MSA 的设计遇到问题,如果只是简单的将原始的窗口向右下角移动2个patch,会导致每个窗口大小不一样,且每个窗口内的patch数量不同,既加重了模型的计算复杂度,也不能并行计算。

环状 SW-MSA

作者提出了,环状 SW-MSA。


最开始是9个不均匀的patch。

为了均匀,将原来的 A、B、C 部分做一个旋转拼接,就又可以恢复成一个有 4 个窗口,且patch数量均匀的数据了。

  • cyclic shift:将 A、B、C 移动到反向位置(窗口补齐),保证窗口大小一致(原来是 9 个不规则窗口,方便并行计算)
  • MSA 掩码:把原本不属于一个窗口的数据,不会得到较高的注意力(绿色C、蓝色B、黄色A 的值都低)

Masked Attention 计算过程:

左图的 Window0 窗口,patch没有任何拼接处理,因此不需要做任何掩码(masked)操作,可以正常做attention。

  • 右图的 window0 的颜色为全黑,意味着无需任何掩码操作。

左图的 Window2 这个窗口,标号为 3 的来自同一批patch,标号为 6 的来自环状移动过来的另一批patch。

因此 3 和 6 之间是不能做 attention 的,这意味着如果 attention score 是由 3 的一块 patch 和 6 的一块 patch 计算得来,我们就需要把这个score设置成 -100,这样一来在后续做softmax时,对应位置的结果就可以小到忽略不计,以此来取得遮掩效果。

  • 右图的 window2 的黄色部分表示不需要做 mask 的分数,黑色部分表示需要做 mask 的分数。

这代表什么呢?

  • 相同区域之间做 MSA 操作,就没掩码
  • 不同区域之间做 MSA 操作,就带掩码

环状 SW-MSA 不仅能跨窗口连接,还支持并行计算。

文章来源:https://blog.csdn.net/qq_41739364/article/details/134883630
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。