Ultralytics YOLO27: 加入候补名单。
获取 YOLO 许可
返回 Ultralytics 术语表

Swin Transformer

Swin Transformer 是一种分层视觉 Transformer,在移位的局部窗口中计算自注意力,因此其计算开销随图像大小线性增长。

Swin Transformer 是 Shifted Window Transformer 的简称,是一种分层视觉 Transformer,它在小型局部窗口内计算自注意力,并在相邻层之间移动这些窗口。Microsoft Research Asia 的 Ze Liu 及其同事在 2021 年的论文 Swin Transformer: Hierarchical Vision Transformer using Shifted Windows 中介绍了它;该论文荣获 ICCV 2021 最佳论文 Marr 奖。局部窗口使注意力的计算开销随像素数量线性增长,而不是呈二次增长;逐阶段合并图像块则会产生多尺度特征图,与卷积神经网络的特征图类似。这些特性使 Transformer 成为实用的通用骨干网络,不仅适用于分类,也适用于高分辨率图像上的目标检测和分割。

移位窗口的工作原理#

Swin 首先将图像拆分为 4×4 像素的图像块,并将每个图像块投影为一个token嵌入,因此 224×224 的图像在 Tiny 模型中会变成一个包含 96 个通道的 56×56 token 网格。对全部 3,136 个 token 执行全局注意力,需要将每个 token 与其他所有 token 进行比较;Swin 则将网格划分为互不重叠的 7×7 token 窗口,只在每个窗口内部计算注意力。论文给出的全局注意力开销为 4hwC² + 2(hw)²C,其中网格尺寸为 h×w,通道数为 C;而对于 M×M token 的窗口,开销为 4hwC² + 2M²hwC,该开销随 hw 线性增长。

如果只有窗口,窗口之间就永远无法交换信息,因此每隔一个模块,窗口网格都会移动半个窗口,即 3 个 token,使新窗口跨越旧窗口的边界。为了保持窗口数量不变,实现会循环滚动特征图,并屏蔽原始图像中彼此不相邻的 token 之间的注意力。每个模块还会为注意力分数添加一个可学习的相对位置偏置。

在不同阶段之间,图像块合并层会拼接每组 2×2 相邻 token,再通过线性投影将分辨率减半、通道数加倍。四个阶段输出的特征图分辨率分别为输入的 1/4、1/8、1/16 和 1/32,与 ResNet 的步幅相同,因此 Swin 可以直接接入现有的检测和分割头,例如特征金字塔网络。torchvision 的实现展示了这两种机制:

import torch
from torchvision.models import swin_t

# Swin-T architecture; random weights are enough to inspect its structure
model = swin_t().eval()

# Each pair of blocks uses 7x7 windows, the second shifted by 3 patches
regular, shifted = model.features[1]
print(f"Window {regular.attn.window_size}, shift {regular.attn.shift_size} then {shifted.attn.shift_size}")

# features alternates stages with patch merging; stage outputs are (batch, height, width, channels)
x = torch.randn(1, 3, 224, 224)
with torch.no_grad():
    for i, layer in enumerate(model.features):
        x = layer(x)
        if i % 2 == 1:
            print(f"Stage {i // 2 + 1}: {tuple(x.shape)}")

它会打印 Window [7, 7], shift [0, 0] then [3, 3],然后输出各阶段的结果:(1, 56, 56, 96)、(1, 28, 28, 192)、(1, 14, 14, 384) 和 (1, 7, 7, 768):每个阶段都会让网格减半、通道数加倍,从而生成密集预测头所需的特征金字塔。

Swin Transformer 与 ViT 和 CNN 的区别#

原始 ViT 会将图像切成 16×16 的图像块,在所有层中保持单一分辨率,并执行全局注意力;这适用于图像分类,但处理目标检测和分割所需的高分辨率输入时开销很大。Swin 重新引入了卷积网络的两项先验:局部性和特征层级,同时保留了注意力机制中依赖输入的权重。Swin 的局部窗口与滑动窗口注意力不同;后者让每个 token 都关注自身邻域,而 Swin 使用固定划分、供多个 token 共享的窗口,能够高效映射到 GPU 矩阵乘法。

发布时,最大的模型 Swin-L 使用 ImageNet-22K 预训练,在 ImageNet-1K 上达到 87.3% 的 top-1 准确率,在 COCO test-dev 上达到 58.7 box AP 和 51.1 mask AP,在 ADE20K 上达到 53.5 mIoU,创下这些目标检测和语义分割基准测试的最佳公开结果。它的成功也推动了卷积网络研究:Meta 于 2022 年推出的 ConvNeXt 从 Swin 借鉴设计选择,对 ResNet 进行了现代化改造,达到了与其相当或更高的准确率。

Swin 可以作为自定义 Ultralytics 模型的骨干网络:模型 YAML 文件中的 TorchVision 模块会加载带有预训练 ImageNet 权重的 torchvision swin_t,而 YOLO 检测头则在它返回的单个 stride-32 特征图上进行训练。

变体与应用#

  • Swin Transformer V2:于 2022 年将设计扩展到 30 亿参数,并支持最高 1,536×1,536 像素的图像;它采用缩放余弦注意力和对数间隔连续位置偏置来保持训练稳定。
  • 视频动作识别:Video Swin Transformer 将窗口扩展到空间和时间三个维度,以识别视频片段中的动作。
  • 超分辨率与图像复原:SwinIR 使用 Swin 模块进行图像放大、去噪和 JPEG 压缩伪影去除。
  • 医学图像分析:Swin-Unet 和 Swin UNETR 将 Swin 编码器与 U-Net 风格的解码器结合起来;Swin UNETR 还能分割 3D MRI 体数据中的脑肿瘤。

探索解决方案

体育领域的计算机视觉

体育领域的计算机视觉

了解 Ultralytics YOLO 如何通过球员和球追踪、表现分析、教练洞察及运动员康复,推动体育视觉技术的发展。
了解详情
航空影像计算机视觉

航空影像计算机视觉

使用 Ultralytics YOLO 将无人机和航空影像转化为农业、水产养殖、保护工作和地理空间分析的实时洞察。
了解详情
航空航天中的计算机视觉

航空航天中的计算机视觉

使用 Ultralytics YOLO 将计算机视觉应用于航空航天领域,包括飞机检查、跑道 FOD 检测、机场地面作业和复合材料缺陷检测。
了解详情
安防领域的计算机视觉

安防领域的计算机视觉

使用 Ultralytics YOLO 模型守护每个场所。视觉 AI 可用于周界监控、威胁检测、车牌识别和工作场所安全。
了解详情
机器人领域的计算机视觉

机器人领域的计算机视觉

使用 Ultralytics YOLO 模型提升智能机器的能力。机器人领域的视觉 AI 可用于自主导航、感知、目标跟踪和实时控制。
了解详情
物流中的计算机视觉

物流中的计算机视觉

借助 Ultralytics YOLO 模型优化物流流程。视觉 AI 可用于包裹检查、分拣、车辆跟踪和仓库安全实时监控。
了解详情
零售中的计算机视觉

零售中的计算机视觉

借助 Ultralytics YOLO 模型重新构想零售。视觉 AI 可用于库存跟踪、货架监控、排队管理和更深入的客户洞察。
了解详情
医疗领域的计算机视觉

医疗领域的计算机视觉

借助 Ultralytics YOLO 模型构建医疗解决方案。医疗领域的视觉 AI 可加快医学影像处理、优化诊断并监测患者。
了解详情
制造业中的计算机视觉

制造业中的计算机视觉

利用 Ultralytics YOLO 模型优化制造流程。视觉 AI 可用于质量控制、缺陷检测、个人防护装备合规检查和装配线自动化。
了解详情
汽车领域的计算机视觉

汽车领域的计算机视觉

利用 Ultralytics YOLO 模型在汽车领域应用计算机视觉。视觉 AI 可提升道路安全、驾驶辅助和车辆自动化水平,让道路更智能。
了解详情
农业中的计算机视觉

农业中的计算机视觉

借助 Ultralytics YOLO 模型,将视觉 AI 引入智慧农业。为作物监测、牲畜追踪和精准农业提供支持,从而提高产量并实现更智能的生产。
了解详情

让我们携手构建 AI 的未来!

开启你的旅程,迎接机器学习的未来