Swin Transformer
Swin Transformer es un Transformer visual jerárquico que calcula la autoatención en ventanas locales desplazadas, por lo que su coste crece linealmente con el tamaño de la imagen.
Swin Transformer, abreviatura de Shifted Window Transformer, es un Transformer de visión jerárquico que calcula la autoatención dentro de pequeñas ventanas locales y desplaza esas ventanas entre capas consecutivas. Ze Liu y sus colegas de Microsoft Research Asia lo presentaron en el artículo de 2021 Swin Transformer: Hierarchical Vision Transformer using Shifted Windows, que ganó el premio Marr al mejor artículo de ICCV 2021. Las ventanas locales hacen que el coste de la atención crezca de forma lineal con el número de píxeles, en lugar de cuadrática, y la fusión progresiva de parches produce mapas de características multiescala, como los de una red neuronal convolucional. Estas características hicieron que los Transformers fueran backbones prácticos de propósito general para la detección de objetos y la segmentación en imágenes de alta resolución, más allá de la clasificación.
Cómo funcionan las ventanas desplazadas#
Swin divide primero la imagen en parches de 4×4 píxeles y proyecta cada uno en un embedding de token, de modo que una imagen de 224×224 se convierte en una cuadrícula de 56×56 tokens con 96 canales en el modelo Tiny. La atención global sobre los 3136 tokens compararía cada token con todos los demás; Swin divide la cuadrícula en ventanas no solapadas de 7×7 tokens y calcula la atención solo dentro de cada ventana. El artículo establece que el coste de la atención global es 4hwC² + 2(hw)²C para una cuadrícula h×w con C canales, frente a 4hwC² + 2M²hwC para ventanas de M×M tokens, que es lineal en hw.
Las ventanas por sí solas nunca intercambiarían información, así que cada dos bloques la cuadrícula de ventanas se desplaza media ventana, es decir, 3 tokens, y las nuevas ventanas atraviesan los límites anteriores. Para mantener constante el número de ventanas, la implementación desplaza cíclicamente el mapa de características y enmascara la atención entre tokens que no eran vecinos en la imagen original. Cada bloque también añade a las puntuaciones de atención un sesgo de posición relativa aprendido.
Entre etapas, una capa de fusión de parches concatena cada grupo de tokens vecinos de 2×2 y los proyecta linealmente, reduciendo a la mitad la resolución y duplicando los canales. Las cuatro etapas producen mapas de características a 1/4, 1/8, 1/16 y 1/32 de la resolución de entrada, los mismos pasos que ResNet, por lo que Swin se integra en cabezas existentes de detección y segmentación, como una red piramidal de características. La implementación de torchvision muestra ambos 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)}")Imprime Window [7, 7], shift [0, 0] then [3, 3], seguido de las salidas de las etapas (1, 56, 56, 96), (1, 28, 28, 192), (1, 14, 14, 384) y (1, 7, 7, 768): cada etapa reduce a la mitad la cuadrícula y duplica los canales, y genera así la pirámide que esperan las cabezas de predicción densa.
Swin Transformer frente a ViT y las CNN#
El ViT original divide las imágenes en parches de 16×16, mantiene una única resolución en todas las capas y aplica atención global, algo adecuado para la clasificación de imágenes, pero costoso con las entradas de alta resolución que requieren la detección y la segmentación. Swin recupera dos sesgos de las redes convolucionales —la localidad y una jerarquía de características—, pero conserva los pesos de la atención, que dependen de la entrada. Sus ventanas locales se diferencian de la atención con ventana deslizante, donde cada token atiende a su propio vecindario, porque las ventanas de Swin son particiones fijas compartidas por los tokens, lo que permite aprovechar eficazmente las multiplicaciones de matrices en GPU.
En su lanzamiento, el modelo más grande, Swin-L preentrenado con ImageNet-22K, alcanzó una precisión top-1 del 87,3 % en ImageNet-1K, un AP de recuadro de 58,7 y un AP de máscara de 51,1 en COCO test-dev, y 53,5 mIoU en ADE20K, los mejores resultados publicados en esos benchmarks de detección y segmentación semántica. Su éxito también impulsó la investigación en convoluciones: ConvNeXt de Meta (2022) modernizó ResNet con decisiones de diseño tomadas de Swin y igualó o superó su precisión.
Swin puede servir como backbone de un modelo Ultralytics personalizado: el módulo TorchVision de un archivo YAML de modelo carga swin_t de torchvision con sus pesos preentrenados de ImageNet, y una cabeza de detección YOLO se entrena con el único mapa de características de paso 32 que devuelve.
Variantes y aplicaciones#
- Swin Transformer V2: amplió el diseño hasta los 3000 millones de parámetros y admitió imágenes de hasta 1536×1536 píxeles en 2022, mediante atención coseno escalada y un sesgo de posición continuo con escala logarítmica para mantener estable el entrenamiento.
- Reconocimiento de acciones en vídeo: Video Swin Transformer amplía las ventanas a tres dimensiones, a través del espacio y el tiempo, para clasificar acciones en clips de vídeo.
- Superresolución y restauración: SwinIR usa bloques Swin para ampliar imágenes, reducir el ruido y eliminar artefactos JPEG.
- Análisis de imágenes médicas: Swin-Unet y Swin UNETR combinan codificadores Swin con decodificadores de estilo U-Net, y Swin UNETR segmenta tumores cerebrales en volúmenes de RM 3D.










