Ultralytics YOLO27: 加入候补名单。
获取 YOLO 许可
返回 Ultralytics 术语表

One-Shot Learning

单样本学习通常通过比较嵌入,仅凭一个带标签的示例就能识别新类别。内容涵盖孪生网络、用途和代码。

单样本学习的任务是根据一个带标签的示例识别新类别。传统的图像分类模型每个类别需要数百张带标签的图像,并且每新增一个类别就要重新训练;而人通常只看一次就能认出一张新面孔或一种新商品。单样本系统通过复用从许多已学习类别中获得的知识来接近这种能力:在这些类别上训练的网络会将图像映射到嵌入空间,使同类图像彼此接近,因此只需一个示例就能确定新类别的位置。人脸验证、签名检查和商品识别都采用这种方式;在大型语言模型 (LLM)中,单样本提示则会在提示词中向模型提供一个任务示例。

单样本学习的工作原理#

大多数单样本系统会用比较取代分类。神经网络会对存储的示例和每个新的查询执行特征提取,然后通过两个嵌入之间的距离(例如欧氏距离或余弦相似度)判断它们是否匹配。孪生神经网络通过两个共享相同权重的分支将这一机制形式化。Jane Bromley、Yann LeCun 及其同事在 1993 年使用这种网络验证签名;Gregory Koch 及其同事则在 2015 年训练了这种网络,使其只需看过新字母表中每个字符的一个示例,就能对手写字符进行分类:

嵌入网络会预先在许多其他类别上使用对比损失或三元组损失进行训练,使同一类别的图像彼此靠近、不同类别的图像彼此远离,因此学到的距离度量能够泛化到之后才出现的类别。元学习方法(例如 Matching Networks)会通过数千个模拟的单样本任务进行训练,每个任务包含多个类别各自的一个示例,让模型准确练习它将要面对的问题。

使用嵌入进行单样本分类#

Ultralytics YOLO26分类模型会通过 embed() 返回图像嵌入,该模块会将分类头前一层的输出池化为每张图像对应的一个向量。下面的示例使用这些嵌入构建一个适用于 CIFAR-10 的 10 类单样本分类器:每个类别仅存储一张图像作为唯一的带标签数据,每个查询都会采用与之最相似的存储图像的标签:

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%)")

模型从未在 CIFAR-10 上训练过,因此打印出的准确率衡量的是每个类别仅用一个示例时,该类别在 YOLO26 嵌入空间中的定义效果;要添加第十一个类别,只需再存储一个嵌入。

应用场景#

  • 人脸验证:自动边境闸机会将实时摄像头图像与护照芯片中存储的唯一照片进行比较;手机和门禁系统则会将每次尝试与登记时记录的人脸进行匹配。
  • 零售商品识别:商店不断上架新商品,每件商品只需一张目录照片,系统就能在货架上识别该商品,无需重新训练。
  • 单样本模仿学习:机器人只需观看一次演示,就能学会执行任务的新实例,例如按照新的顺序堆叠积木。

挑战#

单个示例无法展现一个类别的变化情况,因此,在光线不佳、角度异常或物体部分遮挡时拍摄的参考照片,会成为后续所有比较的不良依据。匹配阈值决定误接受和误拒绝之间的平衡,必须针对每个应用使用验证样本对进行调优;此外,在一个领域(例如日常照片)上训练的嵌入,在另一个领域(例如医学图像)中区分类别的效果会较差。

  • 少样本学习:指每个类别只使用少量带标签示例进行学习的一般问题。单样本学习是其中每个类别恰好有一个示例的情况,在 N-way K-shot 表示法中写作 1-shot。
  • 零样本学习:根据文本或属性描述识别完全没有示例的类别。
  • 迁移学习:将预训练模型用于新任务,通常通过许多带标签示例进行微调。单样本系统也依赖迁移得到的特征,但会直接比较这些特征,而不会更新任何权重。
  • 异常检测:学习正常情况的特征,并标记与正常情况相差甚远的内容;它判断的是某个项目是否异常,而不是该项目属于哪个类别。

探索解决方案

体育领域的计算机视觉

体育领域的计算机视觉

了解 Ultralytics YOLO 如何通过球员和球追踪、表现分析、教练洞察及运动员康复,推动体育视觉技术的发展。
了解详情
航空影像计算机视觉

航空影像计算机视觉

使用 Ultralytics YOLO 将无人机和航空影像转化为农业、水产养殖、保护工作和地理空间分析的实时洞察。
了解详情
航空航天中的计算机视觉

航空航天中的计算机视觉

使用 Ultralytics YOLO 将计算机视觉应用于航空航天领域,包括飞机检查、跑道 FOD 检测、机场地面作业和复合材料缺陷检测。
了解详情
安防领域的计算机视觉

安防领域的计算机视觉

使用 Ultralytics YOLO 模型守护每个场所。视觉 AI 可用于周界监控、威胁检测、车牌识别和工作场所安全。
了解详情
机器人领域的计算机视觉

机器人领域的计算机视觉

使用 Ultralytics YOLO 模型提升智能机器的能力。机器人领域的视觉 AI 可用于自主导航、感知、目标跟踪和实时控制。
了解详情
物流中的计算机视觉

物流中的计算机视觉

借助 Ultralytics YOLO 模型优化物流流程。视觉 AI 可用于包裹检查、分拣、车辆跟踪和仓库安全实时监控。
了解详情
零售中的计算机视觉

零售中的计算机视觉

借助 Ultralytics YOLO 模型重新构想零售。视觉 AI 可用于库存跟踪、货架监控、排队管理和更深入的客户洞察。
了解详情
医疗领域的计算机视觉

医疗领域的计算机视觉

借助 Ultralytics YOLO 模型构建医疗解决方案。医疗领域的视觉 AI 可加快医学影像处理、优化诊断并监测患者。
了解详情
制造业中的计算机视觉

制造业中的计算机视觉

利用 Ultralytics YOLO 模型优化制造流程。视觉 AI 可用于质量控制、缺陷检测、个人防护装备合规检查和装配线自动化。
了解详情
汽车领域的计算机视觉

汽车领域的计算机视觉

利用 Ultralytics YOLO 模型在汽车领域应用计算机视觉。视觉 AI 可提升道路安全、驾驶辅助和车辆自动化水平,让道路更智能。
了解详情
农业中的计算机视觉

农业中的计算机视觉

借助 Ultralytics YOLO 模型,将视觉 AI 引入智慧农业。为作物监测、牲畜追踪和精准农业提供支持,从而提高产量并实现更智能的生产。
了解详情

让我们携手构建 AI 的未来!

开启你的旅程,迎接机器学习的未来