O processo: (1) dividir uma imagem 224×224 em 196 patches de 16×16 pixels, (2) achatar cada patch em um vetor e projetá-lo através de uma camada linear para criar embeddings de patches, (3) adicionar embeddings posicionais para que o modelo saiba onde cada patch está, (4) prefixar um token [CLS] cuja representação final é usada para classificação, (5) processar através de camadas padrão de encoder Transformer. A saída é uma sequência de representações de patches que podem ser usadas para classificação, detecção ou como features para outros modelos.
CNNs têm vieses indutivos embutidos: localidade (pixels próximos são relacionados) e equivariância translacional (padrões são reconhecidos independentemente da posição). O ViT não tem nenhum dos dois — ele trata patches como um conjunto não ordenado (posição vem de embeddings aprendidos) e presta atenção a todos os patches igualmente. Isso torna o ViT menos eficiente em dados que CNNs para datasets pequenos mas mais poderoso para datasets grandes, onde pode aprender esses vieses a partir dos dados em vez de tê-los codificados.
O ViT gerou uma família de vision Transformers: DeiT (treinamento eficiente em dados), Swin Transformer (visão hierárquica com janelas deslocadas), MAE (masked autoencoder para visão auto-supervisionada) e DINO/DINOv2 (representações visuais auto-supervisionadas). Esses modelos agora dominam tarefas de visão: classificação de imagens, detecção de objetos, segmentação e extração de features. A arquitetura ViT também é o encoder de imagem na maioria dos modelos multimodais (LLaVA, GPT-4V).