One-Shot Learning
L’apprentissage one-shot reconnaît une nouvelle classe à partir d’un seul exemple étiqueté, généralement en comparant des plongements. Présentation des réseaux siamois, des usages et du code.
L’apprentissage one-shot consiste à reconnaître une nouvelle classe à partir d’un seul exemple annoté. Un modèle classique de classification d’images a besoin de centaines d’images annotées par classe et d’un nouvel entraînement chaque fois qu’une classe est ajoutée, alors qu’une personne peut généralement reconnaître un nouveau visage ou un nouveau produit après l’avoir vu une seule fois. Les systèmes one-shot s’en rapprochent en réutilisant les connaissances acquises sur de nombreuses classes : un réseau entraîné sur ces classes transforme les images en représentations vectorielles où celles d’un même objet sont proches les unes des autres. Un seul exemple suffit alors pour situer une nouvelle classe. La vérification faciale, la vérification des signatures et la reconnaissance de produits fonctionnent toutes de cette manière. Dans les grands modèles de langage (LLMs), le prompting one-shot fournit au modèle un unique exemple de tâche résolu dans son prompt.
Fonctionnement de l’apprentissage one-shot#
La plupart des systèmes one-shot remplacent la classification par la comparaison. Un réseau neuronal effectue l’extraction de caractéristiques sur l’exemple stocké et sur chaque nouvelle requête. Une distance entre les deux représentations vectorielles, comme la distance euclidienne ou la similarité cosinus, détermine si elles correspondent. Un réseau neuronal siamois formalise cette approche avec deux branches qui partagent les mêmes poids. En 1993, Jane Bromley, Yann LeCun et leurs collègues en ont utilisé un pour vérifier des signatures. En 2015, Gregory Koch et ses collègues en ont entraîné un pour classer des caractères manuscrits issus de nouveaux alphabets après avoir vu un seul exemple de chacun :
Le réseau de représentations vectorielles est préalablement entraîné sur de nombreuses autres classes avec des fonctions de perte contrastive ou triplet, qui rapprochent les images d’une même classe et éloignent celles de classes différentes. La distance ainsi apprise se généralise donc aux classes qui apparaissent plus tard. Les méthodes de méta-apprentissage, comme les Matching Networks, s’entraînent sur des milliers de tâches one-shot simulées, chacune comportant un exemple de plusieurs classes, afin que le modèle s’exerce précisément au problème qu’il devra résoudre.
Classification one-shot avec des représentations vectorielles#
Les modèles de classification Ultralytics YOLO26 renvoient des représentations vectorielles d’images via embed(), qui regroupe la sortie de la couche précédant la tête de classification en un vecteur par image. Cet exemple crée un classificateur one-shot à 10 classes pour CIFAR-10 à partir de ces représentations : une seule image stockée par classe constitue l’ensemble des données annotées, et chaque requête reçoit l’étiquette de l’image stockée la plus similaire :
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%)")Le modèle ne s’entraîne jamais sur CIFAR-10. La précision affichée mesure donc à quel point un seul exemple par classe définit cette classe dans l’espace des représentations vectorielles de YOLO26. Pour ajouter une onzième classe, il suffirait de stocker une représentation vectorielle supplémentaire.
Applications#
- Vérification faciale : les portiques automatisés aux frontières comparent une image prise par caméra en direct à l’unique photo stockée sur la puce d’un passeport. Les téléphones et les systèmes de contrôle d’accès comparent chaque tentative au visage enregistré lors de l’inscription.
- Reconnaissance de produits en magasin : les magasins ajoutent constamment de nouveaux produits, et une seule photo de catalogue par article suffit à un système pour le reconnaître en rayon sans nouvel entraînement.
- Apprentissage par imitation one-shot : entraîne des robots à réaliser un nouvel exemple de tâche, comme empiler des blocs dans un nouvel ordre, après avoir observé une seule démonstration.
Défis#
Un seul exemple ne permet pas de représenter les variations d’une classe. Une photo de référence prise sous un mauvais éclairage, sous un angle inhabituel ou avec l’objet partiellement masqué constitue donc un point de comparaison médiocre pour toutes les comparaisons suivantes. Le seuil de correspondance détermine l’équilibre entre les fausses acceptations et les faux rejets ; tu dois l’ajuster sur des paires de validation pour chaque application. Une représentation vectorielle entraînée sur un domaine, par exemple des photos du quotidien, distingue moins bien les classes dans un autre domaine, comme celui des images médicales.
Apprentissage one-shot et termes associés#
- Apprentissage few-shot : problème général consistant à apprendre à partir de quelques exemples annotés par classe. L’apprentissage one-shot en est le cas où il y en a exactement un, noté 1-shot dans la notation N-way K-shot.
- Apprentissage zero-shot : reconnaît des classes sans aucun exemple, à partir d’une description textuelle ou d’attributs.
- Apprentissage par transfert : réutilise un modèle préentraîné pour une nouvelle tâche, généralement en l’affinant à partir de nombreux exemples annotés. Les systèmes one-shot s’appuient eux aussi sur des caractéristiques transférées, mais les comparent directement sans mettre à jour les poids.
- Détection d’anomalies : apprend à reconnaître la normalité et signale tout ce qui s’en écarte fortement. Elle détermine si un élément est inhabituel plutôt que la classe à laquelle il appartient.










