ViT vs Swin Transformer
ViT 和 Swin Transformer 的区别
1. 架构设计
ViT (Vision Transformer):
- ViT 直接将图像分割成固定大小的非重叠小块(patches),然后将每个小块展开成一个向量,并将这些向量序列作为输入送入标准的Transformer架构中。每个小块会被映射到一个高维特征空间,然后经过多个Transformer Encoder层进行全局信息的建模。
- ViT不具备卷积神经网络 (CNN) 的局部感知特性,完全依赖自注意力机制来捕捉图像中的全局信息。
Swin Transformer (Shifted Window Transformer):
- Swin Transformer引入了层次化的特征表示,逐层增加特征图的分辨率。
- Swin Transformer通过窗口注意力机制(window attention)来进行局部注意力计算,每个窗口内进行自注意力计算,同时通过窗口的滑动(shifted window)机制来引入跨窗口的交互,这样既保留了局部信息,又捕捉到了跨区域的上下文信息。
- Swin Transformer在图像中构建了类似于CNN的层次结构,但利用了Transformer的自注意力机制,使得它能够更高效地处理大尺寸图像。
2. 计算复杂度
ViT:
- ViT 的自注意力计算复杂度与输入图像大小的平方成正比(O(N^2)),当处理高分辨率图像时,计算成本非常高。
Swin Transformer:
- Swin Transformer的窗口注意力机制将自注意力的计算复杂度降低到与窗口大小线性相关(O(M^2)),而不是整个图像,因此能够更高效地处理大尺寸图像。
3. 全局 vs 局部特征
ViT:
- ViT侧重于从全局角度理解图像信息,直接通过Transformer的全局自注意力机制捕捉全局特征。
Swin Transformer:
- Swin Transformer结合了局部与全局特征的提取方式,通过局部窗口计算保持细粒度信息,同时通过层次结构逐步构建全局上下文信息。
4. 应用场景
ViT:
- ViT 主要用于图像分类任务,在其他视觉任务中的表现不如Swin Transformer。
Swin Transformer:
- Swin Transformer具有更广泛的应用场景,尤其在物体检测、图像分割等任务中表现优异。