swin transformer公式
时间: 2024-12-25 20:12:13 浏览: 60
Swin Transformer是一种基于Transformer架构的新型卷积神经网络模型,它引入了局部感知窗口以及层次结构设计,以解决传统Transformer在处理空间信息方面的效率问题。Swin Transformer的核心在于“Swin”的两个部分:“Shifted Windows”和“Window Attention”。
1. **Shifted Windows**:将图像划分为多个非重叠的窗口(Windows),每个窗口内的位置编码仅与自身窗口内的其他位置相关,减少了计算量,并保持了自注意力机制的空间局部性。
2. **Window Attention**:在每个窗口内执行自注意力机制,然后通过线性投影将窗口内的特征融合到整个序列上,再进行跨窗口的关注。这允许信息在大尺度和小尺度之间交互。
3. **Multi-scale Structure**:通过堆叠不同大小的窗口,形成了一个多尺度的结构,有助于捕捉不同分辨率下的视觉特征。
4. **Hierarchical Layout**:在多层网络中,较低层关注全局,较高层则逐渐缩小视野,专注于细节。
Swin Transformer的主要公式包括自注意力模块(Attention)和窗口内的前向传播过程,但由于篇幅有限,这里无法给出完整的数学公式。如果你想深入了解具体的数学公式,可以参考论文《Swin Transformer: Hierarchical Vision Transformer using Shifted Windows》中的描述。
相关问题
swin transformer block 计算公式
### Swin Transformer Block 的计算公式
Swin Transformer 中的每一个 block 是由多个子模块构成,这些子模块共同协作来实现高效的特征提取。具体来说,一个标准的 Swin Transformer block 主要包含两个核心部分:多头窗口自注意力(W-MSA 或 SW-MSA)和一个多层感知机(MLP)。此外,还加入了残差连接以及 LayerNorm 层以促进训练稳定性。
#### 多头窗口自注意力 (Multi-head Window Self-attention, W-MSA)
对于输入张量 \(X \in R^{H\times W \times C}\),其中 H 和 W 表示高度和宽度,C 代表通道数:
1. 首先将输入划分为不重叠的局部窗口;
2. 对于每个窗口内的 token 序列执行常规的多头自注意操作;
\[ Q = XW_Q,\ K=XW_K,\ V=XW_V \]
这里 \(Q\),\(K\) 和 \(V\) 分别表示查询、键和值矩阵,而 \(W_Q\), \(W_K\)\(W_V\) 则是可学习参数权重矩阵[^1]。
接着定义相对位置偏置项 B:
\[ A_{ij}=\frac{Q_i(K_j)^T}{\sqrt{d_k}}+B_{i-j}, i,j=1,...,n \]
最后得到加权求和后的输出 O :
\[ Z = softmax(A)V \]
为了提升表达能力并减少冗余信息的影响,在奇数层会采用移位窗口策略(SW-MSA)[^4]。
#### MLP 子层
紧接着上述自注意力机制之后的是两层全连接网络组成的前馈神经网络 FFN ,其形式如下所示:
\[ GELU(W_1Z+b_1) \]
```python
import torch.nn as nn
class Mlp(nn.Module):
def __init__(self, in_features, hidden_features=None, out_features=None, act_layer=nn.GELU, drop=0.):
super().__init__()
self.fc1 = nn.Linear(in_features, hidden_features)
self.act = act_layer()
self.drop = nn.Dropout(drop)
...
```
整个block 结构还包括了Layer Normalization 和 Skip Connection 来增强梯度传播效果[^3]。
swin transformer涉及到的公式
Swin Transformer是一种基于Transformer架构的模型,它在传统的自注意力机制中引入了空间局部性和层次结构,以提高计算效率并解决大分辨率输入的问题。核心组件包括窗口内注意力(Windowed Self-Attention)和跨窗口注意力(Cross-Window Attention),以及一种新颖的划分策略(Shifted Windows)。
1. 窗口内注意力(Window-based Attention):
这里注意力仅在每个小窗口(window)内部计算,而不是在整个特征图上。其公式可以简化为标准的注意力机制,但它只考虑了局部的信息:
\[
Attention(Q, K, V) = softmax\left(\frac{QK^T}{\sqrt{d_k}}\right)V
\]
其中 \( Q \), \( K \), 和 \( V \) 分别是查询、键和值矩阵,\( d_k \) 是键向量的维度。
2. 跨窗口注意力(Cross-Window Attention):
为了融合来自不同窗口的信息,Swin Transformer设计了一种交替进行窗口内注意力和跨窗口注意力的方式。跨窗口注意力相当于将窗口内的注意力视为查询,其他窗口作为键和值,这样信息可以在更大的范围内流动:
\[
CrossAttention(Q, K', V') = softmax\left(\frac{QK'^T}{\sqrt{d_k}}\right)V'
\]
3. Shifted Windows:
通过将窗口左移一部分,避免了直接相邻窗口间的冗余计算,减少了计算复杂度,并有助于更好地学习长距离依赖。
阅读全文
相关推荐
















