Vision Transformer (ViT)
Esplora la potenza dei Vision Transformer (ViT). Scopri come la self-attention e la tokenizzazione dei patch rivoluzionano la computer vision oltre le CNN con Ultralytics.
Un Vision Transformer (ViT) è un'architettura di deep learning che adatta i meccanismi di auto-attenzione originariamente progettati per il Natural Language Processing (NLP) per risolvere attività visive. A differenza di una tradizionale Convolutional Neural Network (CNN), che elabora le immagini attraverso una gerarchia di griglie di pixel locali, un ViT tratta un'immagine come una sequenza di patch discrete. Questo approccio è stato reso popolare dall'importante articolo di ricerca "An Image is Worth 16x16 Words", che ha dimostrato come le architetture transformer pure possano ottenere prestazioni all'avanguardia nella computer vision (CV) senza affidarsi a layer di convoluzione. Sfruttando l'attenzione globale, i ViT possono catturare dipendenze a lungo raggio in un'intera immagine fin dal primo layer.
Come funzionano i Vision Transformer#
L'innovazione fondamentale del ViT è il modo in cui struttura i dati di input. Per rendere un'immagine compatibile con un Transformer standard, il modello scompone le informazioni visive in una sequenza di vettori, imitando il modo in cui un modello linguistico elabora una frase di parole.
-
Patch Tokenization: L'immagine di input viene divisa in una griglia di quadrati di dimensioni fisse, tipicamente 16x16 pixel. Ciascun quadrato viene appiattito in un vettore, diventando di fatto un token visivo.
-
Linear Projection: Queste patch appiattite vengono passate attraverso un layer lineare addestrabile per creare embedding densi. Questo passaggio mappa i valori dei pixel grezzi in uno spazio ad alta dimensionalità che il modello può elaborare.
-
Positional Encoding: Poiché l'architettura elabora le sequenze in parallelo e manca di una comprensione intrinseca dell'ordine o dello spazio, positional encodings apprendibili vengono aggiunti agli embedding delle patch. Ciò consente al modello di conservare informazioni spaziali su dove appartiene ciascuna patch nell'immagine originale.
-
Self-Attention Mechanism: La sequenza entra nell'encoder Transformer, dove l'self-attention consente a ogni patch di interagire simultaneamente con tutte le altre patch. Ciò consente alla rete di apprendere il contesto globale, comprendendo come un pixel nell'angolo in alto a sinistra si relazioni a uno nell'angolo in basso a destra.
-
Classification Head: Per attività come l'image classification, viene spesso anteposto alla sequenza uno speciale "class token". Lo stato di output finale di questo token funge da rappresentazione aggregata dell'immagine, che viene poi immessa in un classificatore, come un multilayer perceptron (MLP).
Vision Transformer vs CNN#
Sebbene entrambe le architetture mirino a comprendere i dati visivi, differiscono in modo significativo nella loro filosofia operativa. Le CNN possiedono un forte "inductive bias" noto come invarianza di traslazione, il che significa che presuppongono intrinsecamente che le caratteristiche locali (come bordi e texture) siano importanti indipendentemente dalla loro posizione. Ciò rende le CNN altamente efficienti in termini di dati ed efficaci su dataset più piccoli.
Al contrario, i Vision Transformers hanno un bias meno specifico per l'immagine. Devono apprendere le relazioni spaziali da zero utilizzando enormi quantità di training data, come i dataset JFT-300M o ImageNet completo. Sebbene ciò renda l'addestramento più intensivo dal punto di vista computazionale, consente ai ViT di scalare notevolmente bene; con dati e compute power sufficienti, possono superare le CNN catturando strutture globali complesse che le convoluzioni locali potrebbero perdere.
Applicazioni nel mondo reale#
La capacità di comprendere il contesto globale rende i ViT particolarmente utili per ambienti complessi e ad alto rischio.
- Medical Image Analysis: Nell'healthcare AI, i ViT vengono utilizzati per analizzare scansioni ad alta risoluzione come risonanze magnetiche o vetrini di istopatologia. Ad esempio, nel tumor detection, un ViT può correlare sottili anomalie di texture nel tessuto con cambiamenti strutturali più ampi lungo il vetrino, identificando pattern maligni che l'elaborazione locale potrebbe trascurare.
- Satellite Imagery and Remote Sensing: I ViT eccellono nel satellite image analysis laddove le relazioni tra gli oggetti si estendono su grandi distanze. Ad esempio, collegare un sito di deforestazione a una strada di disboscamento lontana richiede la comprensione del "quadro generale" di un paesaggio, un'attività in cui l'attenzione globale di un ViT supera il campo visivo limitato delle CNN standard.
Utilizzare i Transformer con Ultralytics#
La libreria ultralytics supporta architetture basate su Transformer, in particolare il RT-DETR (Real-Time Detection Transformer). Mentre il modello di punta YOLO26 è spesso preferito per il suo bilanciamento tra velocità e precisione su dispositivi edge, RT-DETR offre una potente alternativa per gli scenari che danno priorità al contesto globale.
Il seguente esempio in Python dimostra come caricare un modello pre-addestrato basato su Transformer ed eseguire l'inferenza:
from ultralytics import RTDETR
# Load a pre-trained RT-DETR model (Vision Transformer-based)
model = RTDETR("rtdetr-l.pt")
# Run inference on an image source
# The model uses self-attention to detect objects globally
results = model("https://ultralytics.com/images/bus.jpg")
# Display the detection results
results[0].show()Prospettive future#
La ricerca si sta evolvendo rapidamente per affrontare l'alto costo computazionale dei ViT. Tecniche come FlashAttention stanno rendendo questi modelli più veloci e efficienti dal punto di vista della memoria. Inoltre, stanno diventando comuni architetture ibride che combinano l'efficienza delle CNN con l'attenzione dei Transformers. Per i team che desiderano gestire questi flussi di lavoro avanzati, Ultralytics Platform offre un ambiente unificato per annotare dati, addestrare modelli complessi tramite il cloud e distribuirli su diversi endpoint.






