Zero-Shot Learning
零样本学习通过将输入与文本描述匹配,在没有标注示例的情况下识别类别。介绍 CLIP、开放词汇检测及其局限。
零样本学习(ZSL)是指模型识别从未见过标注训练样本的类别的能力。模型无需依赖样本,而是接收每个新类别的描述,例如属性列表;在现代系统中,描述通常是类别名称文本,然后模型在共享的嵌入空间中将输入与这些描述进行匹配。标准监督学习只能预测训练标签中包含的类别,因此新增类别意味着要收集并标注新数据,然后重新训练。OpenAI 的 CLIP使用 4 亿组图像-标题对进行训练;在没有使用 ImageNet 的 128 万张标注训练图像的情况下,它达到了原始监督式 ResNet-50 在 ImageNet 上的准确率。
零样本学习的工作原理#
零样本学习通过连接已见类别和未见类别的语义空间来迁移知识。早期方法会使用人工定义的属性描述每个类别,例如“有条纹”“有蹄子”和“生活在草原”,并训练模型预测这些属性;因此,即使模型在训练时从未见过某种动物,也能根据属性匹配结果将其识别为相应类别。视觉语言模型用自然语言取代了人工构建的属性。CLIP使用对比学习训练图像编码器和文本编码器,使匹配的图像与标题具有相似的嵌入。进行分类时,模型会为每个候选类别的提示(例如“一张斑马的照片”)生成嵌入,为图像生成嵌入,然后选择余弦相似度最高的类别:
由于分类器在推理时根据文本构建,类别列表可以随每个请求而改变。同样的模式也适用于大型语言模型(LLM):零样本提示意味着只给模型一条指令,不提供示例;这一概念由 GPT-3 论文定义。
零样本目标检测#
开放词汇检测将零样本学习从整张图像扩展到单个目标。它会将每个候选区域与所请求类别的文本嵌入进行评分,因此能够在固定标签集以外寻找目标,例如在视频档案中查找特定产品。YOLO-World将这种方法应用于实时 YOLO 模型。Ultralytics YOLOE-26是开放词汇版本的 YOLO26,它使用 MobileCLIP2 文本编码器对传入 set_classes() 的每个类别名称进行编码,无需重新训练,即可为这些类别返回边界框和实例分割掩码:
from ultralytics import YOLOE
# 可接受文本提示的 YOLOE-26 检查点
model = YOLOE("yoloe-26s-seg.pt")
# 在推理时指定类别;此处使用的名称并非 COCO 标签
model.set_classes(["city bus", "sneakers", "glasses"])
# 检测并分割指定类别
results = model.predict("https://ultralytics.com/images/bus.jpg")
result = results[0]
result.save(filename="zero_shot_result.jpg")第一次调用 set_classes() 时会下载文本编码器。对于目标检测,“零样本”是指模型没有接收该类别的标注框;不过,类别名称可能出现在用于预训练编码器的图文数据中。Ultralytics Platform 使用零样本检测器和视觉语言模型自动标注检测数据集,而 VLM Leaderboard会比较它们在真实世界图像中查找对象的准确度。
应用场景#
- 视觉搜索与内容审核:媒体库和内容平台可以根据文本查询查找匹配图像,或标记新的内容类别,而无需针对每个查询训练分类器。
- 机器人技术:机器人接到“拿蓝色马克杯”的指令后,可以定位从未训练过其检测能力的目标类别。
- 野生动物与生物多样性:BioCLIP 使用生命之树各类生物的 1,000 多万张图像进行训练,可根据物种名称进行零样本分类,并获得了 CVPR 2024 最佳学生论文奖。
- 医学影像:使用 X 光片及其书面放射学报告配对数据训练的模型,可以标记从未作为明确训练标签进行标注的影像发现。
挑战#
零样本准确率通常低于使用相同类别的标注样本训练的模型,尤其是在类别细粒度或专业化、且类别名称在网络文本中很少见时。在广义零样本学习中,测试图像可能来自已见类别,也可能来自未见类别;模型会偏向训练过的类别,而基准研究发现,在这种情况下,未见类别的准确率会大幅下降。结果还取决于措辞,因此提示工程也是零样本分类的一部分:将 CLIP 的 ImageNet 提示从单独的类别名称改为“一张{label}的照片”,准确率就提高了 1.3%。










