Swin Transformer
了解 Swin Transformer 架构如何使用移动窗口实现高效的计算机视觉,并探索 Ultralytics 平台上的工作流。
由微软研究人员在2021年的里程碑论文 "Swin Transformer: Hierarchical Vision Transformer using Shifted Windows" 中提出,这种 深度学习 (DL) 架构调整了 注意力机制,以处理高分辨率视觉数据的复杂性。与处理统一长度文本标记的 自然语言处理 模型不同,该架构承认视觉元素在尺度上存在巨大差异。通过构建分层表示并利用独特的窗口技术,它实现了相对于图像大小的 线性计算复杂度,使其成为各种 计算机视觉 (CV) 任务的高效骨干网络。
平移窗口和分层设计的工作原理#
主要的创新在于模型如何构建 特征提取。它首先将输入图像分割成小的、不重叠的图块。然而,与早期模型不同的是,它在更深的层中逐步将这些相邻的图块合并为更大的区域。这种分层方法允许网络提取丰富的 特征图,这些特征图代表了从微小视觉细节到大型物体的各种尺度的全局上下文。
为了保持计算效率,自注意力仅在局部、隔离的窗口内计算,而不是在整个图像上计算。为了确保信息跨这些边界流动,窗口在连续层之间进行“平移”。这种平移窗口方案有效地桥接了独立区域,提供了全面的 多尺度空间层次结构,而没有与全局注意力相关的大量计算负担。
Swin Transformer 与视觉 Transformer (ViT) 的对比#
在比较现代架构时,区分该模型与标准的 视觉Transformer (ViT) 是很重要的。原始 ViT 将图像视为固定大小图块的序列,并同时计算所有这些图块的全局注意力。虽然准确性很高,但这会导致 二次计算复杂度,这意味着随着图像分辨率的增加,处理时间和内存需求会急剧飙升。
相比之下,Swin 架构的分层和基于窗口的设计使复杂度保持线性。这使得它对于需要高分辨率输入和输出的密集预测任务更加实用。因此,它在诸如用于多尺度 目标检测 的 COCO test-dev 数据集 以及用于精确 图像分割 的 ADE20K 语义分割数据集 等基准测试上取得了先进的结果。
现代 AI 中的实际应用#
由于其灵活性和效率,官方的 微软研究院 GitHub 仓库 实现已被应用到复杂的高风险行业中。
- 医学图像分析:在临床环境中,像 Swin-Unet 这样的网络利用该架构进行 体积 3D MRI 扫描 和高分辨率组织病理学分析。该模型保留密集空间层次结构的能力有助于识别早期肿瘤等微小异常。你可以阅读更多关于 医学成像研究 的最新突破。
- 卫星图像分析:对于 环境监测和遥感 而言,捕获大规模地理上下文至关重要。分层结构可高效处理用于森林砍伐跟踪、城市规划和作物健康监测的大规模航空数据集。
与 PyTorch 和 Ultralytics 的集成#
对于构建自定义神经网络的开发者来说,使用 官方 PyTorch 文档 来实现此架构非常简单。torchvision 库 包含预训练版本,例如轻量级的 Tiny 变体,并在 ImageNet 上进行了优化。
import torch
from torchvision.models import Swin_T_Weights, swin_t
# Load a pre-trained Tiny variant with ImageNet weights
weights = Swin_T_Weights.IMAGENET1K_V1
model = swin_t(weights=weights)
model.eval()
# Run a single batch containing a 3-channel, 224x224 dummy image tensor
dummy_image = torch.randn(1, 3, 224, 224)
output = model(dummy_image)
# The output shape is [1, 1000], representing the 1000 ImageNet classes
print(f"Prediction tensor shape: {output.shape}")虽然基于 transformer 的骨干网络提供了优秀的多尺度表示,但现代应用通常需要对 边缘 AI 设备 进行纯端到端优化。例如,Ultralytics YOLO26 提供了一个原生的端到端架构,它更小、更快,开箱即用且高度准确,在实时边缘环境中表现出色。无论使用依赖 transformer 的架构还是快速的卷积模型,开发者都可以通过 Ultralytics 平台 管理其整个工作流程——从数据标注到训练。这个全面的云工具链使 模型部署 和持续的 模型监控 变得简单而高效。






