Robocikowo>ROBOCIKOWO
Architektura

ViT

2020AktywnyOpublikowano: 28 maja 2026Aktualizacja: 28 maja 2026Opublikowany
Architektura klasyfikatora obrazów oparta wyłącznie na enkoderze Transformer, w której obraz jest dzielony na sekwencję patchy 16×16 px traktowanych jak tokeny. Podstawa wielu współczesnych modeli wizyjnych (CLIP, DINO, SAM, MAE).
Kluczowa innowacja
Zastosowanie czystej architektury Transformer do obrazów poprzez podzielenie ich na sekwencję płaskich patchy (np. 16×16 px) traktowanych jak tokeny — pokazując, że indukcyjne uprzedzenia konwolucji (lokalność, równoważność translacyjna) nie są konieczne, jeśli model jest pretrenowany na dostatecznie dużych zbiorach.
Kategoria
Architektura
Poziom abstrakcji
System
Poziom operacji
ModelWarstwaElement architektury
Zastosowania
Klasyfikacja obrazów (ImageNet, fine-grained)Backbone wizyjny dla CLIP, ALIGN, SigLIP (zero-shot)Self-supervised pretraining (DINO, DINOv2, MAE, iBOT, BEiT)Segmentacja (SAM, Segment Anything Model)Detekcja obiektów (DETR-style, ViTDet, OWL-ViT)Vision-Language Models (LLaVA, Flamingo, PaLI, Gemini Vision)Vision-Language-Action w robotyce (RT-2, OpenVLA, π0)Medical imaging, satellite imagery, video understanding

Jak działa

Krok 1 — Patchowanie: obraz H × W × C dzielony na N patchy P × P (np. 224 × 224 → 14 × 14 = 196 patchy po 16 × 16). Implementacyjnie realizowane jako konwolucja Conv2d(in=C, out=d_model, kernel=P, stride=P) — efektywne na GPU. Krok 2 — Patch embedding: każdy patch (P²·C wymiarów) liniowo rzutowany na d_model. Krok 3 — Token [CLS]: uczony wektor d_model doklejany na początek sekwencji jako token klasyfikacyjny (analogicznie do BERT). Krok 4 — Pozycyjny embedding: uczony wektor pozycji 1D (długość N+1) dodawany do każdego tokenu, by nieść informację przestrzenną (sama self-attention jest permutacyjnie niezmiennicza). Krok 5 — Stos enkodera Transformer: L warstw, każda z LayerNorm → Multi-Head Self-Attention → residual → LayerNorm → FFN (gelu) → residual. ViT używa pre-norm (LN przed atencją). Krok 6 — Klasyfikacja: ostatnia reprezentacja tokenu [CLS] przechodzi przez głowicę MLP / linear → softmax po klasach. W treningu standardowym używa się supervised cross-entropy; w nowoczesnych wariantach pretraining może być masked image modeling (MAE), kontrastywny (CLIP/DINO) lub self-distillation (DINOv2). Inferencja na nowej rozdzielczości wymaga interpolacji pozycyjnych embeddingów.

Rozwiązany problem

Jak osiągnąć stan-of-the-art w klasyfikacji obrazów bez polegania na ręcznie zaprojektowanych indukcyjnych uprzedzeniach konwolucji (lokalność, translation equivariance, hierarchia pól receptywnych), oraz jak ujednolicić architekturę między NLP i wizją, otwierając drogę do multimodalnych modeli z jednym backbone.

Komponenty

Patch embeddingTokenizacja obrazu

Podział obrazu na N niezachodzących patchy P × P i ich liniowa projekcja na wymiar d_model. Implementowana zwykle jako Conv2d(C, d_model, kernel=P, stride=P).

INTensor obrazu — batch, kanały (zwykle 3 dla RGB), wysokość, szerokość.
OUTSekwencja N embeddingów patchy o wymiarze d_model.

Oficjalna

[CLS] tokenKlasyfikacyjny "puste pole" agregujące informację

Uczony wektor d_model doklejany na początek sekwencji. Jego reprezentacja z ostatniej warstwy używana jest jako globalny deskryptor obrazu do klasyfikacji.

Oficjalna

Positional embedding (1D learned)Wprowadzenie informacji przestrzennej

Uczony tensor [N+1, d_model] dodawany do tokenów, bo self-attention jest permutacyjnie niezmiennicza i sama nie zna pozycji patchy w obrazie.

1D learnedDomyślne w oryginalnym ViT.
2D learnedOsobne embeddingi dla osi x i y.
SinusoidalStatyczne, jak w NLP Transformerze.
Relative / RoPEWprowadzone w nowszych wariantach (np. ViT-22B).

Oficjalna

Transformer encoder block (pre-norm)Modelowanie globalnych zależności między patchami

L warstw — każda: LN → MHSA → residual → LN → FFN(GELU) → residual. Identyczne jak w BERT/GPT, bez maski przyczynowej (wszyscy-do-wszystkich).

Classification headWyjście

MLP lub liniowa warstwa rzutująca reprezentację [CLS] na logity klas. W self-supervised pretrainingu zastępowana przez projection head (np. DINO MLP).

Oficjalna

Implementacja

Pułapki implementacyjne
Słabe wyniki bez dużego pretreninguWysoka

Trening ViT od zera na ImageNet-1k daje gorsze accuracy niż ResNet — brak indukcyjnych uprzedzeń konwolucji wymaga znacznie więcej danych.

Rozwiązanie:Pretrening na ImageNet-21k / JFT lub destylacja (DeiT). Silna augmentacja (RandAugment, Mixup, CutMix), stochastic depth.
Interpolacja positional embeddings przy zmianie rozdzielczościWysoka

Uczone 1D positional embeddings są specyficzne dla pretreningowego N. Fine-tuning na 384×384 po pretrainingu na 224×224 wymaga interpolacji 2D, inaczej model traci wydajność.

Rozwiązanie:Reshape do 2D, interpolacja biquadratic / bilinear, następnie flatten z powrotem. Lub używać RoPE / relative position.
Kwadratowy koszt na wysokich rozdzielczościachWysoka

Dla zadań gęstych (segmentacja, detekcja) potrzebne są wysokie rozdzielczości; standardowy ViT skaluje się O(N²) w liczbie patchy.

Rozwiązanie:Swin (lokalne okna), FlashAttention (lepsza stała), tokeny adaptive (Token Merging), hierarchiczne backbone.
Brak hierarchii pól receptywnychŚrednia

CNN naturalnie buduje hierarchię feature map od lokalnych do globalnych; standardowy ViT operuje na jednej skali, co bywa problemem dla detekcji obiektów różnej wielkości.

Rozwiązanie:Swin Transformer, MViT, PVT — wprowadzają hierarchię. ViTDet pokazuje, że dla detekcji wystarczy "simple feature pyramid".
Niestabilny trening dużych ViTŚrednia

Bardzo głębokie/duże ViT-y (ViT-H/22B) cierpią na divergencję attention w głębokich warstwach.

Rozwiązanie:QK-norm (normalizacja query/key), zwiększona stabilność LN, gradient clipping, learning rate warm-up, freeze patch embedding na początku.

Ewolucja

Oryginalny paper · 2020 · ICLR 2021 · Alexey Dosovitskiy
An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale
Alexey Dosovitskiy, Lucas Beyer, Alexander Kolesnikov, Dirk Weissenborn, Xiaohua Zhai, Thomas Unterthiner, Mostafa Dehghani, Matthias Minderer, Georg Heigold, Sylvain Gelly, Jakob Uszkoreit, Neil Houlsby
2017
Transformer (Vaswani et al.) — architektura źródłowa

Self-attention bez rekurencji powstaje w NLP — fundament późniejszego ViT.

2020
iGPT (Chen et al., OpenAI) — autoregresyjny generative pretraining na pikselach

Pierwsza wpływowa demonstracja czystego Transformera na obrazach (na pojedynczych pikselach), prekursor ViT.

2020
ViT — "An Image is Worth 16x16 Words" (Dosovitskiy et al.)
Punkt przełomowy

Pełne sformułowanie ViT: patchowanie 16×16, czysty Transformer, pretrening na JFT-300M. Wynik na ImageNet bije najlepsze CNN.

2021
DeiT (Touvron et al., Meta) — data-efficient ViT
Punkt przełomowy

Pokazuje, że ViT można wytrenować na ImageNet-1k bez wielkiego pretreningu dzięki destylacji i ulepszonej augmentacji.

2021
Swin Transformer (Liu et al., Microsoft) — hierarchiczny okienkowy ViT
Punkt przełomowy

Lokalne okienka self-attention + shifted windows + hierarchia rozdzielczości — czynią ViT konkurencyjnym jako general-purpose backbone (detekcja, segmentacja).

2021
CLIP (Radford et al., OpenAI) — ViT jako visual encoder w multimodalności
Punkt przełomowy

ViT staje się standardowym backbone dla kontrastywnego pretreningu obraz-tekst; otwiera erę zero-shot wizji.

2021
MAE (He et al., Meta) — masked autoencoder pretrening ViT
Punkt przełomowy

Maskowanie ~75% patchy i rekonstrukcja — bardzo wydajny self-supervised pretraining dla ViT.

2021
DINO (Caron et al., Meta) — self-distillation no labels

Self-supervised pretraining ViT ujawnia emergentne właściwości segmentacyjne w mapach attention.

2023
ViT-22B (Dehghani et al., Google) — skalowanie ViT do 22B parametrów

Pokazuje, że ViT skaluje się analogicznie do LLM; ujawnia nowe behawioralne właściwości na dużej skali.

2023
DINOv2 (Oquab et al., Meta) i SAM (Kirillov et al., Meta) — ViT jako uniwersalny backbone

ViT staje się fundamentem otwartych foundation models wizyjnych: features general-purpose (DINOv2) i segmentacja promptowalna (SAM).

Hiperparametry (konfigurowalne osie)

Rozmiar patcha (P)Krytyczna

Liczba pikseli na patch (16, 14, 8). Mniejszy P → więcej tokenów → kwadratowo droższa attention, ale lepsza rozdzielczość przestrzenna.

16Domyślne w ViT-B/16, ViT-L/16.
14DINOv2, używane do gęstej segmentacji.
8ViT-B/8 — bardzo gęsta sekwencja, drogie.
Rozmiar modeluKrytyczna

Standardowe warianty: ViT-Ti, ViT-S, ViT-B (Base, ~86M), ViT-L (Large, ~307M), ViT-H (Huge, ~632M), ViT-g/G, ViT-22B.

Rozdzielczość wejściaWysoka

Najczęściej 224×224 (pretraining), 384×384 (fine-tuning). Zmiana rozdzielczości wymaga interpolacji positional embeddings.

Liczba głów attentionWysoka

Standardowo 12 (ViT-B), 16 (ViT-L), 16 (ViT-H). Wymiar głowy d_model / num_heads.

Skala danych pretreningowychKrytyczna

Krytyczna oś według oryginalnego papieru: ViT przegrywa z ResNet na ImageNet-1k, ale wygrywa na ImageNet-21k i JFT-300M.

Typ kodowania pozycjiŚrednia

1D learned (oryginał), 2D learned, sinusoidal, relative, RoPE — wpływa na zdolność do zmiany rozdzielczości.

Złożoność obliczeniowa

Złożoność czasowa: O(N² · d) + O(N · d²) per warstwa. Złożoność przestrzenna: O(N² + N · d).

Paradygmat wykonania

Tryb główny
Gęsty

Standardowy ViT to model gęsty — wszystkie parametry aktywne dla każdego patcha. Warianty MoE (V-MoE) wprowadzają conditional computation, ale nie są częścią rdzennej definicji.

Wzorzec aktywacji
Wszystkie ścieżki aktywne

Równoległość

Poziom równoległości
W pełni równoległy

ViT jest enkoderem (bez maski przyczynowej) — wszystkie patche są przetwarzane równolegle zarówno w treningu, jak i w inferencji. Idealny pod tensor parallelism i sequence parallelism dla bardzo dużych modeli (ViT-22B).

Zakres
TreningInferencjaPomiędzy tokenamiPomiędzy urządzeniami

Wymagania sprzętowe

Podstawowe

ViT to gęsty Transformer — wszystkie operacje (patch embedding, MHSA, FFN) mapują się na matmul i są idealne dla tensor cores (FP16/BF16/FP8).

Podstawowe

ViT powstał w Google na TPU i jest tam treniwany do skali 22B; systolic array doskonale obsługuje MHSA i FFN.

Możliwe

Inferencja ViT-B/S na CPU AVX/AVX-512 (ONNX Runtime, OpenVINO) jest praktyczna dla wsadowych zastosowań, choć wolniejsza niż na GPU.

Ograniczony

Istnieją akademickie akceleratory FPGA dla ViT, ale brak szerokiego ekosystemu produkcyjnego.