Swin Transformer (Shifted Window Transformer)
Swin Transformer est une architecture de Vision Transformer hiérarchique développée par Microsoft Research, qui calcule l’attention dans des fenêtres locales décalées (shifted windows) pour obtenir une complexité linéaire par rapport à la taille de l’image, tout en permettant les connexions inter-fenêtres. C’est le premier Transformer à surpasser les CNN sur les benchmarks de détection d’objets COCO et de segmentation sémantique ADE20K.
- Nom complet
- Shifted Window Transformer
- Créateur
- Microsoft Research Asia
- Publications
- ICCV 2021 (V1, Marr Prize / Best Paper) · CVPR 2022 (V2)
- Auteurs clés
- Ze Liu, Han Hu, Yutong Lin, Yue Cao, Baining Guo
- Innovation
- Attention locale par fenêtres décalées + feature maps hiérarchiques
- Meilleurs scores
- 87,3 % top-1 ImageNet-1K (V1-L, 22K→1K) · 63,1 box AP COCO (V2-G) · 59,9 mIoU ADE20K (V2-G)
- Licence
- Open Source MIT
- Code
- github.com/microsoft/Swin-Transformer
Le problème que Swin résout
Le Vision Transformer (ViT) original de Google traite l’image comme une séquence plate de patches et applique une attention globale sur tous les tokens. Ce mécanisme a deux limitations majeures pour les tâches de vision denses.
Premièrement, la complexité de l’attention est quadratique par rapport au nombre de tokens. Pour une image de 224×224 avec des patches de 16×16, on obtient 196 tokens, ce qui reste gérable. Mais pour une image de 1024×1024 avec des patches de 4×4 (nécessaires pour la segmentation fine), on passe à 65 536 tokens, et la matrice d’attention explose en mémoire.
Deuxièmement, ViT produit des feature maps à une seule résolution. Or les tâches de détection d’objets et de segmentation nécessitent des représentations multi-échelles pour capter à la fois les petits et les grands objets. Les CNN classiques comme ResNet produisent naturellement cette hiérarchie via leurs couches de pooling successives.
Swin Transformer résout les deux problèmes en introduisant une attention locale par fenêtres (complexité linéaire) et une structure hiérarchique avec fusion de patches entre les stages (multi-échelle native).
Architecture de Swin Transformer
Partitionnement en patches
Contrairement à ViT qui utilise des patches de 16×16, Swin Transformer commence avec des patches de 4×4 pixels. Pour une image de 224×224 en RGB, cela produit 56×56 = 3 136 patches, chacun de dimension 48 (4 × 4 × 3 canaux). Ces patches sont projetés linéairement dans un espace d’embedding de dimension C (96 par défaut pour Swin-T).
Ce choix de petits patches est crucial : il permet de capturer des détails fins dès le départ, ce que les patches 16×16 de ViT ne peuvent pas faire.
Attention par fenêtres locales (W-MSA)
Au lieu de calculer l’attention entre tous les tokens de l’image, Swin partitionne la grille de patches en fenêtres non chevauchantes de taille M×M (7×7 par défaut). L’attention multi-têtes est calculée indépendamment au sein de chaque fenêtre.
Concrètement, pour un stage contenant h×w tokens et une fenêtre de taille M×M, la complexité passe de O((h×w)²) pour l’attention globale à O(h×w × M²) pour l’attention par fenêtres. Puisque M est fixe (typiquement 7), la complexité est linéaire par rapport à la taille de l’image. C’est l’avantage fondamental de Swin sur ViT.
Avec des fenêtres de 7×7, chaque opération d’attention ne porte que sur 49 tokens, quel que soit la taille totale de l’image. C’est ce qui rend Swin praticable sur des images de 1 536×1 536 pixels dans la version V2.
Fenêtres décalées (SW-MSA) : le mécanisme clé
Le problème évident de l’attention par fenêtres est l’absence de communication entre fenêtres adjacentes. Les tokens au bord d’une fenêtre ne voient pas leurs voisins de la fenêtre d’à côté.
Swin résout cela avec un mécanisme élégant de fenêtres décalées (shifted windows). Les couches de Transformer sont organisées par paires :
Couche impaire (l) : partitionnement régulier en fenêtres M×M. L’attention est calculée dans chaque fenêtre (W-MSA).
Couche paire (l+1) : le partitionnement est décalé de ⌊M/2⌋ pixels horizontalement et verticalement. Les nouvelles fenêtres chevauchent les frontières des fenêtres de la couche précédente (SW-MSA).
Ce décalage permet aux tokens proches des bords de communiquer avec les tokens de fenêtres voisines. En alternant fenêtres régulières et décalées, l’information se propage progressivement à travers toute l’image, sans jamais avoir besoin d’une attention globale coûteuse.
Fusion de patches (Patch Merging)
Entre chaque stage, une couche de patch merging fusionne les features de groupes de 2×2 patches voisins. Concrètement, les vecteurs de 4 patches adjacents (chacun de dimension C) sont concaténés pour former un vecteur de dimension 4C, puis une couche linéaire réduit cette dimension à 2C.
Le résultat : le nombre de tokens est divisé par 4 à chaque stage (la résolution spatiale est divisée par 2 dans chaque dimension), tandis que la dimension des features double. C’est exactement le comportement des couches de convolution+pooling dans les CNN, et c’est ce qui crée la hiérarchie de feature maps exploitable par FPN, U-Net ou d’autres décodeurs multi-échelles.
Les 4 stages de Swin
L’architecture complète de Swin Transformer est organisée en 4 stages successifs :
| Stage | Résolution (Swin-T, 224×224) | Dim. features | Nombre de blocs | Opération |
|---|---|---|---|---|
| Stage 1 | 56×56 | C (96) | 2 | Projection linéaire des patches 4×4 |
| Stage 2 | 28×28 | 2C (192) | 2 | Patch merging + blocs Swin |
| Stage 3 | 14×14 | 4C (384) | 6 | Patch merging + blocs Swin |
| Stage 4 | 7×7 | 8C (768) | 2 | Patch merging + blocs Swin |
Chaque bloc Swin est composé d’une couche de normalisation (LayerNorm), d’une attention par fenêtres (W-MSA ou SW-MSA en alternance), d’une connexion résiduelle, d’une deuxième LayerNorm, et d’un MLP à 2 couches avec activation GELU. Cette structure est identique à un bloc Transformer standard, à l’exception de l’attention par fenêtres.
Biais de position relatif
Au lieu des embeddings de position absolue utilisés par ViT, Swin utilise un biais de position relatif ajouté directement aux scores d’attention. Pour une fenêtre de taille M×M, chaque coordonnée relative entre deux tokens prend une valeur dans la plage [-(M-1), M-1] sur chaque axe. Le biais est appris via une table de paramètres de taille (2M-1) × (2M-1), indexée par les coordonnées relatives entre les deux tokens dans la paire d’attention.
Les ablations du papier montrent que ce biais de position relatif est significativement meilleur que les embeddings de position absolue (+1,2 % sur ImageNet, +1,3 box AP sur COCO, +0,5 mIoU sur ADE20K).
Les variantes de Swin Transformer
Swin V1 (ICCV 2021)
La publication originale définit quatre tailles de modèles. La dimension de base C et le nombre de blocs par stage varient :
| Modèle | C | Blocs par stage | Params | FLOPs | Top-1 ImageNet-1K | Top-1 (22K→1K) |
|---|---|---|---|---|---|---|
| Swin-T (Tiny) | 96 | {2, 2, 6, 2} | 29 M | 4,5 G | 81,3 % | n/a |
| Swin-S (Small) | 96 | {2, 2, 18, 2} | 50 M | 8,7 G | 83,0 % | n/a |
| Swin-B (Base) | 128 | {2, 2, 18, 2} | 88 M | 15,4 G | 83,5 % | 86,4 % |
| Swin-L (Large) | 192 | {2, 2, 18, 2} | 197 M | 34,5 G | n/a | 87,3 % |
Swin-T a un coût computationnel similaire à ResNet-50, Swin-S à ResNet-101, et Swin-B à RegNet-32GF. La différence : Swin les surpasse systématiquement sur les tâches denses (détection, segmentation) tout en restant compétitif en classification.
Sur COCO object detection avec le framework Cascade Mask R-CNN, Swin-L atteint 58,7 box AP et 51,1 mask AP sur le test-dev, surpassant le meilleur modèle précédent (ResNeXt-101) de +2,7 box AP et +2,6 mask AP. Sur ADE20K en segmentation sémantique, Swin-L atteint 53,5 mIoU, battant le record précédent de +3,2 mIoU.
Swin V2 (CVPR 2022) : passage à l’échelle
Swin V2 s’attaque aux défis du passage à l’échelle des Vision Transformers. L’objectif : entraîner des modèles de plusieurs milliards de paramètres capables de traiter des images haute résolution (jusqu’à 1 536×1 536). Pour y parvenir, trois innovations techniques sont introduites.
Residual Post-Normalization. Dans Swin V1, la normalisation est placée avant chaque branche résiduelle (pre-norm, comme dans ViT). Swin V2 déplace la normalisation après la branche résiduelle (post-norm). Ce changement réduit la variance des valeurs entre couches profondes, stabilisant l’entraînement des très grands modèles. Sans cette modification, les modèles de taille H (658 M params) crashent systématiquement pendant l’entraînement.
Scaled Cosine Attention. L’attention classique (dot-product) est remplacée par une attention basée sur la similarité cosinus, normalisée par un facteur de température appris. Cela évite que certaines têtes d’attention dominent les autres, un problème qui s’aggrave avec la profondeur du modèle.
Log-spaced Continuous Position Bias (Log-CPB). Le biais de position relatif de V1 utilise une table fixe de paramètres liée à la taille de fenêtre. Transférer un modèle entraîné avec des fenêtres 8×8 vers des fenêtres 16×16 nécessite une interpolation, ce qui dégrade les performances. Log-CPB remplace la table par un petit réseau MLP qui prend des coordonnées relatives en échelle logarithmique comme entrée et génère les biais. Ce réseau peut extrapoler naturellement à des tailles de fenêtres jamais vues à l’entraînement.
| Modèle SwinV2 | Params | Top-1 ImageNet-V2 | Box AP COCO | mIoU ADE20K |
|---|---|---|---|---|
| SwinV2-T | 29 M | n/a | n/a | n/a |
| SwinV2-B | 88 M | 78,1 % (384×384) | n/a | n/a |
| SwinV2-L | 197 M | 78,3 % (384×384) | n/a | n/a |
| SwinV2-H | 658 M | n/a | n/a | n/a |
| SwinV2-G (Giant) | 3 B | 84,0 % | 63,1 / 54,4 | 59,9 |
SwinV2-G, avec 3 milliards de paramètres, était au moment de sa publication le plus grand modèle de vision dense jamais entraîné. Il établit des records sur les quatre benchmarks évalués : ImageNet-V2 classification (84,0 %), COCO détection (63,1 box AP), ADE20K segmentation (59,9 mIoU) et Kinetics-400 classification vidéo (86,8 %).
Point notable : SwinV2-G est entraîné avec SimMIM (auto-supervisé) sur seulement 70 millions d’images annotées, soit 40× moins que les modèles précédents à l’échelle du milliard (Google ViT-G, entraîné sur JFT-3B). C’est une avancée majeure en efficacité de données.
Extensions de la famille Swin
Video Swin Transformer. Adapte les fenêtres décalées à la dimension temporelle pour la reconnaissance d’actions vidéo. Atteint 84,9 % top-1 sur Kinetics-400 et 86,1 % sur Kinetics-600, avec un modèle 3× plus petit et 20× moins de données de pré-entraînement que les approches précédentes.
Swin-MoE. Variante Mixture-of-Experts (MoE) de Swin Transformer, implémentée avec Tutel (bibliothèque MoE optimisée). Permet d’augmenter la capacité du modèle sans augmenter proportionnellement le coût computationnel à l’inférence.
Swin MLP. Remplace toutes les couches d’attention multi-têtes par des couches MLP (group linear layers). Démontre que le schéma de fenêtres décalées améliore aussi significativement les architectures MLP pures, pas seulement les Transformers.
Swin vs. les autres Vision Transformers
| Critère | Swin | ViT | DeiT | BEiT |
|---|---|---|---|---|
| Type d’attention | Locale (fenêtres décalées) | Globale | Globale | Globale |
| Feature maps | Hiérarchiques (multi-échelle) | Résolution unique | Résolution unique | Résolution unique |
| Complexité | O(n × M²) linéaire | O(n²) quadratique | O(n²) quadratique | O(n²) quadratique |
| Taille de patches | 4×4 | 16×16 | 16×16 | 16×16 |
| Position encoding | Biais relatif (table / Log-CPB) | Embeddings absolus | Embeddings absolus | Biais relatif |
| Détection (COCO box AP) | 58,7 (V1-L) / 63,1 (V2-G) | Pas nativement adapté | Pas nativement adapté | Pas nativement adapté |
| Segmentation (ADE20K mIoU) | 53,5 (V1-L) / 59,9 (V2-G) | Limité | Limité | Limité |
| Haute résolution (>512px) | Excellente (linéaire) | Coûteuse | Coûteuse | Coûteuse |
Verdict. Swin est le choix naturel quand vous avez besoin d’un backbone pour des tâches denses (détection d’objets, segmentation, images haute résolution). Sa structure hiérarchique et sa complexité linéaire lui donnent un avantage structurel sur les ViT purs. Pour de la classification pure sur images de taille modeste (224×224), DeiT III et BEiT sont des alternatives compétitives avec des architectures plus simples. Pour le pré-entraînement auto-supervisé à grande échelle, DINOv2 utilise un ViT pur mais avec une stratégie de distillation sophistiquée.
Utiliser Swin en pratique
Via Hugging Face Transformers
Swin est intégré nativement dans Hugging Face Transformers avec tous les checkpoints Microsoft disponibles sur le Hub.
from transformers import AutoImageProcessor, SwinForImageClassification
import torch
# Charger le modèle et le processeur
processor = AutoImageProcessor.from_pretrained(
"microsoft/swin-tiny-patch4-window7-224"
)
model = SwinForImageClassification.from_pretrained(
"microsoft/swin-tiny-patch4-window7-224"
)
# Inférence
inputs = processor(images=image, return_tensors="pt")
with torch.no_grad():
logits = model(**inputs).logits
predicted_class = logits.argmax(-1).item()
print(model.config.id2label[predicted_class])
Les modèles disponibles incluent les variantes V1 et V2, avec pré-entraînement sur ImageNet-1K et ImageNet-22K :
| Modèle Hugging Face | Pré-entraînement | Résolution |
|---|---|---|
microsoft/swin-tiny-patch4-window7-224 |
ImageNet-1K | 224 |
microsoft/swin-small-patch4-window7-224 |
ImageNet-1K | 224 |
microsoft/swin-base-patch4-window7-224 |
ImageNet-1K | 224 |
microsoft/swin-base-patch4-window12-384 |
ImageNet-22K→1K | 384 |
microsoft/swin-large-patch4-window12-384 |
ImageNet-22K→1K | 384 |
Swin est utilisable comme backbone avec le paramètre output_hidden_states=True, qui fournit les feature maps à chaque stage sous forme (batch, num_channels, height, width) via reshaped_hidden_states.
Via timm
La bibliothèque timm offre un catalogue encore plus large de variantes Swin, incluant les checkpoints SimMIM (auto-supervisés) :
import timm
# Swin-T standard
model = timm.create_model(
"swin_tiny_patch4_window7_224",
pretrained=True
)
# SwinV2-B pré-entraîné SimMIM
model = timm.create_model(
"swinv2_base_window12to24_192to384.ms_in22k_ft_in1k",
pretrained=True
)
# Liste de toutes les variantes
swin_models = timm.list_models("swin*")
print(f"{len(swin_models)} modèles Swin disponibles")
Comme backbone pour la détection et la segmentation
L’utilisation la plus courante de Swin est comme backbone dans des frameworks de détection et segmentation. Les intégrations les plus matures sont :
MMDetection (détection d’objets) : Swin est directement utilisable comme backbone dans Faster R-CNN, Cascade Mask R-CNN, HTC++, DINO (détecteur), etc. C’est la configuration qui a produit les scores records sur COCO.
MMSegmentation (segmentation sémantique) : Swin est compatible avec UperNet, FPN, et d’autres décodeurs. La configuration Swin-L + UperNet produit le score de 53,5 mIoU sur ADE20K rapporté dans le papier.
Detectron2 (Meta) : des intégrations communautaires existent pour utiliser Swin comme backbone dans Detectron2, bien que l’intégration officielle soit moins directe que dans MMDetection.
Performances détaillées
Classification d’images (ImageNet)
Sur ImageNet-1K entraîné from scratch, Swin-T (29 M params, 4,5 GFLOPs) atteint 81,3 % top-1, surpassant DeiT-S (79,8 %, 22 M params) et EfficientNet-B3 (81,1 %, 12 M params). Le trade-off vitesse/précision est comparable à celui des meilleurs CNN optimisés par NAS (EfficientNet, RegNet), mais Swin a l’avantage d’être une architecture manuellement conçue, avec un potentiel d’amélioration restant.
Avec un pré-entraînement sur ImageNet-22K, Swin-L atteint 87,3 % top-1, ce qui le place dans le peloton de tête des backbones visuels pour la classification.
Détection d’objets (COCO)
C’est sur COCO que Swin a créé la surprise. Avec le framework Cascade Mask R-CNN et un schedule d’entraînement 3×, Swin-L atteint 58,7 box AP et 51,1 mask AP sur le test-dev. Ce score surpasse ResNeXt101-64×4d de +3,6 box AP et +3,3 mask AP à FLOPs et latence comparables.
Avec HTC++ (un framework de détection plus avancé), les gains restent élevés : +4,1 box AP et +3,1 mask AP. Swin V2-G pousse ces résultats encore plus loin avec 63,1 box AP et 54,4 mask AP.
Segmentation sémantique (ADE20K)
Sur ADE20K avec le framework UperNet, Swin-S atteint 49,3 mIoU, soit +5,3 mIoU par rapport à DeiT-S à coût computationnel comparable. Swin-L pré-entraîné sur ImageNet-22K atteint 53,5 mIoU, battant le record précédent de SETR (+3,2 mIoU) malgré un modèle plus petit. Swin V2-G étend ce record à 59,9 mIoU.
Impact et héritage
Swin comme standard de backbone
Swin Transformer est rapidement devenu le backbone de référence pour les tâches de vision denses. Quasiment toute publication récente en détection d’objets ou segmentation inclut Swin dans ses comparaisons. Il a remplacé ResNet et ResNeXt comme baseline forte dans la communauté de recherche.
Influence du mécanisme de fenêtres décalées
Le concept de fenêtres locales avec communication inter-fenêtres a inspiré de nombreuses architectures ultérieures. CSWin Transformer (aussi de Microsoft) utilise des bandes croisées au lieu de fenêtres carrées. Focal Transformer combine attention locale et tokens globaux. MaxViT (Google) alterne attention par fenêtres et attention par grille. Toutes ces architectures sont des variations sur l’idée fondamentale de Swin : structurer l’attention spatialement pour la rendre scalable.
Impact académique
Le papier Swin Transformer original a accumulé plus de 15 000 citations, ce qui en fait l’un des travaux les plus cités de la décennie en vision par ordinateur. Le Marr Prize à ICCV 2021 confirme sa position comme contribution fondamentale au domaine.
Limites de Swin
Complexité d’implémentation. L’implémentation du cyclic shift, du masquage d’attention, et du patch merging est plus complexe que celle d’un ViT vanilla. L’optimisation CUDA n’est pas aussi mature que pour les convolutions (cuDNN), bien que NVIDIA ait publié une implémentation optimisée via FasterTransformer avec des gains de vitesse significatifs sur T4 et A100.
Biais de localité. En limitant l’attention à des fenêtres locales, Swin sacrifie la capacité de modéliser des dépendances globales directes. Même avec le mécanisme de shift, la propagation d’information d’un coin à l’autre de l’image nécessite de traverser plusieurs couches. Pour certaines tâches nécessitant une compréhension globale (comme le captioning d’images ou le visual grounding), un ViT avec attention globale peut être préférable.
Pas le meilleur en classification pure. Pour de la classification d’images à résolution standard (224×224), Swin n’a pas d’avantage structurel sur les ViT purs. DeiT III, BEiT, et les modèles DINOv2 atteignent des scores comparables ou supérieurs en classification, avec une architecture plus simple.
Dépassé par les modèles de fondation récents. Les modèles de fondation visuels actuels (DINOv2, EVA-02, InternViT) utilisent des architectures ViT pures avec des stratégies d’entraînement auto-supervisées à très grande échelle. Pour le transfer learning généraliste, ces modèles offrent des représentations plus riches que Swin. Cependant, Swin conserve un avantage dans les scénarios où l’efficacité computationnelle sur haute résolution est critique.
Cas d’usage concrets
Détection d’objets en production. Swin est le backbone de choix dans de nombreux systèmes de détection industriels (véhicules autonomes, inspection visuelle, imagerie satellite). La combinaison Swin + DINO (détecteur, pas le modèle auto-supervisé) ou Swin + Co-DETR produit des détecteurs parmi les plus performants sur COCO.
Segmentation d’images médicales. La structure hiérarchique de Swin le rend particulièrement adapté à la segmentation médicale (scanners, IRM, coupes histologiques). Swin-UNet et d’autres architectures basées sur Swin ont obtenu des résultats compétitifs sur des benchmarks médicaux.
Analyse d’images satellite. Les images satellite sont souvent de très haute résolution (plusieurs milliers de pixels). La complexité linéaire de Swin permet de traiter ces images sans les sous-échantillonner autant que ce que nécessiteraient les ViT purs.
Classification et reconnaissance vidéo. Video Swin Transformer étend le mécanisme à la dimension temporelle, ce qui le rend efficace pour l’analyse vidéo (actions, événements, surveillance).
Modèles multimodaux. Swin sert de branche visuelle dans certains modèles vision-langage, notamment comme alternative au ViT dans les architectures de type CLIP ou dans des pipelines de multimodal learning.
Questions fréquentes sur Swin Transformer
Quelle est la différence entre Swin Transformer et ViT ?
La différence fondamentale est le mécanisme d’attention. ViT utilise une attention globale (chaque token attend tous les autres), ce qui donne une complexité quadratique. Swin utilise une attention locale par fenêtres décalées (chaque token n’attend que les tokens dans sa fenêtre de 7×7), ce qui donne une complexité linéaire. De plus, Swin produit des feature maps hiérarchiques (multi-échelle) via le patch merging, ce qui le rend directement compatible avec les décodeurs de détection et segmentation. ViT produit des features à résolution unique.
Quand utiliser Swin plutôt qu’un CNN comme ResNet ?
Swin surpasse systématiquement ResNet et ResNeXt sur les tâches denses (détection d’objets, segmentation) à FLOPs comparables. Si vous démarrez un nouveau projet de détection ou de segmentation, Swin est un meilleur choix par défaut. En revanche, pour du déploiement edge ou mobile où les convolutions bénéficient d’optimisations matérielles matures (cuDNN, TensorRT), un CNN optimisé (EfficientNet, MobileNet) peut rester préférable en termes de latence réelle.
Quel modèle Swin choisir pour un nouveau projet ?
Pour la plupart des projets, partez de Swin-T (29 M params) si votre budget GPU est limité, ou de Swin-B pré-entraîné sur ImageNet-22K pour maximiser les performances. Si vous travaillez sur de la haute résolution ou que la robustesse au changement de résolution est importante, préférez SwinV2 avec Log-CPB. Pour les très grands projets, les checkpoints SwinV2 pré-entraînés avec SimMIM (auto-supervisé) offrent de meilleures performances en transfer learning.
Swin Transformer est-il encore pertinent face aux modèles de fondation récents ?
En termes de performances brutes de transfer learning, des modèles comme DINOv2 et InternViT surpassent Swin. Cependant, Swin conserve des avantages pratiques : complexité linéaire pour les images haute résolution, feature maps multi-échelles natives (sans adaptateur), et un écosystème mature (intégrations MMDetection, MMSegmentation, Detectron2). Pour de la détection ou segmentation sur des images de grande taille, Swin reste un choix solide et éprouvé.
Comment fonctionne le mécanisme de shifted windows ?
Les couches du Transformer alternent entre deux schémas de partitionnement. Les couches impaires utilisent des fenêtres régulières alignées sur une grille fixe. Les couches paires décalent cette grille de la moitié de la taille d’une fenêtre dans chaque direction. Ce décalage fait que les nouvelles fenêtres chevauchent les frontières des fenêtres précédentes, créant des connexions entre zones qui étaient séparées. L’implémentation utilise un décalage circulaire (cyclic shift) combiné à un masque d’attention pour éviter de traiter des fenêtres de tailles variables, ce qui maintient l’efficacité computationnelle.