Swin Transformer
Swin Transformer é um Transformer de visão hierárquico que calcula a autoatenção em janelas locais deslocadas, fazendo com que seu custo cresça linearmente com o tamanho da imagem.
O Swin Transformer, abreviação de Transformer de janela deslocada, é um Transformer de visão hierárquico que calcula a autoatenção em pequenas janelas locais e desloca essas janelas entre camadas consecutivas. Ze Liu e colegas da Microsoft Research Asia o apresentaram no artigo de 2021 Swin Transformer: Transformer hierárquico de visão usando janelas deslocadas, que ganhou o prêmio Marr de melhor artigo na ICCV 2021. As janelas locais fazem o custo da atenção crescer linearmente com o número de pixels, em vez de quadraticamente, e a fusão gradual de recortes produz mapas de características em múltiplas escalas, como os de uma rede neural convolucional. Juntas, essas características tornaram os Transformers backbones práticos e de uso geral para detecção de objetos e segmentação em imagens de alta resolução, além da classificação.
Como funcionam as janelas deslocadas#
Primeiro, o Swin divide a imagem em recortes de 4×4 pixels e projeta cada um em um embedding de token, de modo que uma imagem de 224×224 se torne uma grade de tokens de 56×56 com 96 canais no modelo Tiny. A atenção global sobre todos os 3.136 tokens compararia cada token com todos os outros; o Swin divide a grade em janelas não sobrepostas de 7×7 tokens e calcula a atenção somente dentro de cada janela. Para uma grade h×w com C canais, o artigo apresenta o custo da atenção global como 4hwC² + 2(hw)²C, em comparação com 4hwC² + 2M²hwC para janelas de M×M tokens, que é linear em hw.
As janelas, sozinhas, nunca trocariam informações; por isso, a cada segundo bloco, a grade de janelas é deslocada pela metade de uma janela, ou seja, 3 tokens, e as novas janelas cruzam os limites antigos. Para manter constante o número de janelas, a implementação faz a rotação cíclica do mapa de características e mascara a atenção entre tokens que não eram vizinhos na imagem original. Cada bloco também adiciona às pontuações de atenção um viés posicional relativo aprendido.
Entre os estágios, uma camada de fusão de recortes concatena cada grupo de tokens vizinhos de 2×2 e os projeta linearmente, reduzindo a resolução pela metade e dobrando o número de canais. Os quatro estágios produzem mapas de características com 1/4, 1/8, 1/16 e 1/32 da resolução de entrada, os mesmos strides da ResNet; assim, o Swin pode ser integrado a cabeças de detecção e segmentação existentes, como uma rede piramidal de características. A implementação do torchvision mostra os dois mecanismos:
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)}")A saída é Window [7, 7], shift [0, 0] then [3, 3], seguida pelas saídas dos estágios (1, 56, 56, 96), (1, 28, 28, 192), (1, 14, 14, 384) e (1, 7, 7, 768): cada estágio reduz a grade pela metade e dobra os canais, formando a pirâmide esperada pelas cabeças de predição densa.
Swin Transformer em comparação com ViT e CNNs#
O ViT original divide as imagens em recortes de 16×16, mantém uma única resolução em todas as camadas e aplica atenção global, o que é adequado para classificação de imagens, mas se torna caro para as entradas de alta resolução usadas em detecção e segmentação. O Swin reintroduz duas características prévias das redes convolucionais — localidade e hierarquia de características —, mantendo os pesos da atenção dependentes da entrada. Suas janelas locais diferem da atenção com janela deslizante, em que cada token presta atenção à própria vizinhança, pois as janelas do Swin são partições fixas compartilhadas pelos tokens, que se mapeiam eficientemente para multiplicações de matrizes na GPU.
No lançamento, o maior modelo, Swin-L pré-treinado no ImageNet-22K, atingiu 87,3% de precisão top-1 no ImageNet-1K, 58,7 de AP de caixas e 51,1 de AP de máscaras no COCO test-dev, além de 53,5 de mIoU no ADE20K, os melhores resultados publicados nesses benchmarks de detecção e segmentação semântica. Seu sucesso também impulsionou a pesquisa em convoluções: o ConvNeXt (2022) da Meta modernizou a ResNet com escolhas de projeto inspiradas no Swin e igualou ou superou sua precisão.
O Swin pode servir como backbone de um modelo Ultralytics personalizado: o módulo TorchVision em um arquivo YAML de modelo carrega o swin_t do torchvision com seus pesos pré-treinados no ImageNet, e uma cabeça de detecção YOLO é treinada com o único mapa de características de stride 32 que ele retorna.
Variantes e aplicações#
- Swin Transformer V2: ampliou o projeto para 3 bilhões de parâmetros e imagens de até 1.536×1.536 pixels em 2022, usando atenção de cosseno escalada e um viés posicional contínuo com espaçamento logarítmico para manter a estabilidade do treinamento.
- Reconhecimento de ações em vídeo: o Video Swin Transformer estende as janelas para três dimensões, abrangendo espaço e tempo, para classificar ações em clipes de vídeo.
- Super-resolução e restauração: o SwinIR usa blocos Swin para ampliar imagens, reduzir ruído e remover artefatos JPEG.
- Análise de imagens médicas: Swin-Unet e Swin UNETR combinam codificadores Swin com decodificadores no estilo U-Net, e o Swin UNETR segmenta tumores cerebrais em volumes de RM 3D.










