One-Shot Learning
O aprendizado one-shot reconhece uma nova classe a partir de um único exemplo rotulado, geralmente comparando embeddings. Abrange redes siamesas, usos e código.
A aprendizagem one-shot é a tarefa de reconhecer uma nova classe a partir de um único exemplo anotado. Um modelo convencional de classificação de imagens precisa de centenas de imagens anotadas por classe e de novo treino sempre que se adiciona uma classe, enquanto uma pessoa costuma conseguir reconhecer um rosto ou produto novo depois de o ver uma vez. Os sistemas one-shot aproximam-se dessa capacidade reutilizando conhecimento de muitas classes aprendidas anteriormente: uma rede treinada nessas classes mapeia imagens para embeddings em que imagens da mesma coisa ficam próximas, pelo que basta um único exemplo para indicar onde se situa uma nova classe. A verificação facial, a validação de assinaturas e o reconhecimento de produtos funcionam todos desta forma; nos modelos de linguagem de grande escala (LLMs), um prompt one-shot fornece ao modelo um único exemplo resolvido de uma tarefa no prompt.
Como funciona a aprendizagem one-shot#
A maioria dos sistemas one-shot substitui a classificação pela comparação. Uma rede neural executa a extração de características no exemplo armazenado e em cada nova consulta, e uma distância entre os dois embeddings, como a distância euclidiana ou a similaridade de cosseno, determina se correspondem. Uma rede neural siamesa formaliza isto com dois ramos que partilham os mesmos pesos. Jane Bromley, Yann LeCun e colegas usaram uma para verificar assinaturas em 1993, e Gregory Koch e colegas treinaram uma em 2015 para classificar caracteres manuscritos de novos alfabetos depois de verem um exemplo de cada:
A rede de embeddings é pré-treinada em muitas outras classes com perdas contrastivas ou triplet, que aproximam imagens da mesma classe e afastam imagens de classes diferentes, para que a distância aprendida generalize para classes que só aparecem mais tarde. Os métodos de meta-aprendizagem, como as Matching Networks, treinam com milhares de tarefas one-shot simuladas, cada uma com um exemplo de várias classes, para que o modelo pratique exatamente o problema que terá de resolver.
Classificação one-shot com embeddings#
Os modelos de classificação Ultralytics YOLO26 devolvem embeddings de imagem através de embed(), que aplica pooling à saída da camada anterior à head de classificação para obter um vetor por imagem. Este exemplo cria um classificador one-shot de 10 classes para CIFAR-10 a partir desses embeddings: uma imagem armazenada por classe é o único dado anotado, e cada consulta recebe o rótulo da imagem armazenada mais semelhante:
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%)")O modelo nunca treina com CIFAR-10, pelo que a precisão apresentada mede o grau em que um exemplo por classe define essa classe no espaço de embeddings do YOLO26, e adicionar uma décima primeira classe exigiria apenas mais um embedding armazenado.
Aplicações#
- Verificação facial: Os portões de fronteira automatizados comparam uma imagem captada por uma câmara ao vivo com a única fotografia armazenada no chip de um passaporte, e os telemóveis e sistemas de controlo de acesso comparam cada tentativa com o rosto registado no momento da inscrição.
- Reconhecimento de produtos no retalho: As lojas acrescentam novos produtos constantemente, e uma única fotografia de catálogo por artigo permite que um sistema o reconheça na prateleira sem novo treino.
- Aprendizagem por imitação one-shot: Treina robôs para executar uma nova instância de uma tarefa, como empilhar blocos numa nova ordem, depois de observarem uma única demonstração.
Desafios#
Um único exemplo não mostra como uma classe varia, pelo que uma fotografia de referência tirada com pouca luz, de um ângulo invulgar ou com o objeto parcialmente oculto constitui uma referência fraca para todas as comparações seguintes. O limiar de correspondência determina o equilíbrio entre falsas aceitações e falsas rejeições e tem de ser ajustado com pares de validação para cada aplicação; além disso, um embedding treinado num domínio, como fotografias do dia a dia, distingue pior as classes noutro domínio, como o das imagens médicas.
Aprendizagem one-shot vs. termos relacionados#
- Aprendizagem few-shot: O problema geral de aprender com poucos exemplos anotados por classe. A aprendizagem one-shot é o caso com exatamente um exemplo, indicado como 1-shot na notação N-way K-shot.
- Aprendizagem zero-shot: Reconhece classes sem quaisquer exemplos, com base numa descrição textual ou de atributos.
- Aprendizagem por transferência: Reutiliza um modelo pré-treinado numa nova tarefa, geralmente ajustando-o com muitos exemplos anotados. Os sistemas one-shot também dependem de características transferidas, mas comparam-nas diretamente sem atualizar quaisquer pesos.
- Deteção de anomalias: Aprende o que é normal e assinala tudo o que se afasta desse padrão, respondendo se um elemento é invulgar em vez de indicar a classe a que pertence.










