One-Shot Learning
L'apprendimento one-shot riconosce una nuova classe da un singolo esempio etichettato, solitamente confrontando gli embedding. Panoramica delle reti siamesi, degli impieghi e del codice.
L'apprendimento one-shot è il compito di riconoscere una nuova classe a partire da un singolo esempio etichettato. Un modello convenzionale di classificazione delle immagini richiede centinaia di immagini etichettate per classe e un nuovo addestramento ogni volta che si aggiunge una classe, mentre di solito una persona riconosce un nuovo volto o un nuovo prodotto dopo averlo visto una sola volta. I sistemi one-shot si avvicinano a questa capacità riutilizzando la conoscenza di molte classi apprese in precedenza: una rete addestrata su tali classi mappa le immagini in embedding in cui le immagini dello stesso elemento si trovano vicine, perciò basta un singolo esempio per determinare la posizione di una nuova classe. La verifica dei volti, il controllo delle firme e il riconoscimento dei prodotti funzionano tutti in questo modo; nei modelli linguistici di grandi dimensioni (LLM), invece, il prompting one-shot fornisce al modello un singolo esempio svolto del compito nel prompt.
Come funziona l'apprendimento one-shot#
La maggior parte dei sistemi one-shot sostituisce la classificazione con il confronto. Una rete neurale esegue l'estrazione delle caratteristiche sull'esempio memorizzato e su ogni nuova query, mentre una distanza tra i due embedding, come la distanza euclidea o la similarità coseno, determina se corrispondono. Una rete neurale siamese formalizza questo approccio con due rami che condividono gli stessi pesi. Jane Bromley, Yann LeCun e colleghi ne usarono una per verificare firme nel 1993, e Gregory Koch e colleghi ne addestrarono una nel 2015 per classificare caratteri scritti a mano di nuovi alfabeti dopo averne visto un solo esempio per ciascuno:
La rete di embedding viene addestrata in precedenza su molte altre classi con funzioni di perdita contrastive o triplet, che avvicinano le immagini della stessa classe e allontanano quelle di classi diverse, così la distanza appresa si generalizza alle classi che compaiono solo in seguito. I metodi di meta-apprendimento, come le Matching Networks, si addestrano su migliaia di compiti one-shot simulati, ciascuno con un esempio per diverse classi, così il modello si esercita proprio sul problema che dovrà affrontare.
Classificazione one-shot con embedding#
I modelli di classificazione Ultralytics YOLO26 restituiscono embedding delle immagini tramite embed(), che applica un pooling all'output del layer precedente alla head di classificazione per ottenere un vettore per immagine. Questo esempio crea un classificatore one-shot a 10 classi per CIFAR-10 a partire da questi embedding: l'unico dato etichettato è un'immagine memorizzata per classe, e a ogni query viene assegnata l'etichetta dell'immagine memorizzata più simile:
from pathlib import Path
import torch
import torch.nn.functional as F
from torchvision.datasets.utils import download_and_extract_archive
from ultralytics import YOLO
# CIFAR-10 test images, one folder per class
download_and_extract_archive("https://github.com/ultralytics/assets/releases/download/v0.0.0/cifar10.zip", "data")
images = [sorted(folder.glob("*.png")) for folder in sorted(Path("data/cifar10/test").iterdir()) if folder.is_dir()]
model = YOLO("yolo26n-cls.pt")
# Support set: the first image of each class is its only labeled example (one shot)
shots = torch.stack([model.embed(paths[0], verbose=False)[0] for paths in images])
# Query set: the next 50 images of each class, each labeled with the class of its most similar shot
correct = 0
for label, paths in enumerate(images):
for path in paths[1:51]:
query = model.embed(path, verbose=False)[0]
correct += F.cosine_similarity(shots, query.unsqueeze(0)).argmax().item() == label
print(f"10-way 1-shot accuracy: {correct / 500:.1%} (random guessing: 10%)")Il modello non viene mai addestrato su CIFAR-10, quindi l'accuratezza stampata misura quanto un esempio per classe definisca quella classe nello spazio di embedding di YOLO26; per aggiungere un'undicesima classe basterebbe memorizzare un altro embedding.
Applicazioni#
- Verifica dei volti: I varchi automatici alle frontiere confrontano un'immagine ripresa in diretta da una telecamera con l'unica foto memorizzata nel chip del passaporto, mentre telefoni e sistemi di controllo degli accessi confrontano ogni tentativo con il volto registrato al momento dell'iscrizione.
- Riconoscimento dei prodotti al dettaglio: I negozi aggiungono continuamente nuovi prodotti, e una singola foto di catalogo per articolo consente a un sistema di riconoscerlo sullo scaffale senza riaddestramento.
- Apprendimento per imitazione one-shot: Addestra i robot a eseguire una nuova variante di un compito, per esempio impilare blocchi in un nuovo ordine, dopo aver osservato una singola dimostrazione.
Sfide#
Un singolo esempio non può mostrare la variabilità di una classe, quindi una foto di riferimento scattata con poca luce, da un'angolazione insolita o con l'oggetto parzialmente nascosto fornisce un riferimento poco efficace per tutti i confronti successivi. La soglia di corrispondenza determina l'equilibrio tra falsi positivi e falsi negativi e deve essere ottimizzata su coppie di convalida per ogni applicazione; inoltre, un embedding addestrato su un dominio, come le foto di tutti i giorni, distingue meno bene le classi in un altro dominio, come le immagini mediche.
Apprendimento one-shot e termini correlati#
- Apprendimento few-shot: Il problema generale di apprendere da pochi esempi etichettati per classe. L'apprendimento one-shot è il caso con esattamente un esempio, indicato come 1-shot nella notazione N-way K-shot.
- Apprendimento zero-shot: Riconosce classi prive di esempi, sulla base di una descrizione testuale o degli attributi.
- Apprendimento per trasferimento: Riutilizza un modello preaddestrato per un nuovo compito, di solito con un fine-tuning su molti esempi etichettati. Anche i sistemi one-shot si basano su caratteristiche trasferite, ma le confrontano direttamente senza aggiornare alcun peso.
- Rilevamento delle anomalie: Apprende l'aspetto della normalità e segnala tutto ciò che se ne discosta, rispondendo alla domanda se un elemento è insolito anziché a quale classe appartiene.










