基于零样本学习的图像分类算法
题目描述
我们有一个图像分类模型,训练时从未见过“斑马”这个类别的任何图片。现在,要求模型正确地将一张新的测试图片分类为“斑马”。这就是零样本学习(Zero-Shot Learning, ZSL)的核心问题。传统的监督学习需要每个类别的训练样本,而ZSL旨在让模型能够识别在训练阶段从未见过的类别。题目要求:详细解释一种经典的基于属性(Attributes)的零样本图像分类算法的原理与实现步骤。
解题过程循序渐进讲解
第一步:理解问题本质与核心挑战
零样本学习的核心思想是利用辅助信息(如类别属性、词向量等)来建立可见类别(训练阶段有样本的类别)和不可见类别(训练阶段无样本的类别)之间的语义关联。
- 关键术语:
- 可见类别集合(Seen Classes):训练集中包含的类别,例如“马”、“老虎”、“熊猫”。
- 不可见类别集合(Unseen Classes):测试集中出现,但训练集中没有的类别,例如“斑马”。
- 辅助信息(Side Information):用于描述类别的语义信息,是连接可见与不可见类别的桥梁。最常见的是一种称为属性(Attributes)的人工标注语义特征,例如“有黑白条纹”、“有蹄”、“生活在草原”。
- 核心挑战:如何让模型学习到的视觉特征(来自可见类别图片)能够与语义空间(属性空间)对齐,从而在测试时,对于一张未知类别的图片,能够根据其视觉特征在语义空间中匹配到正确的不可见类别描述。
第二步:构建基于属性的零样本学习框架
我们以经典的属性预测(Attribute Prediction) 方法为例。其核心流程分为两个阶段:训练阶段和测试阶段。
训练阶段(在可见类别上进行):
-
数据准备:
- 收集可见类别图片及标签(如“马”、“老虎”)。
- 为所有类别(包括可见和不可见)定义一套共享的语义属性列表(例如,一个50维的向量,每一维代表“是否有条纹”、“是否高大”等二值或连续属性)。
- 为每个类别(包括可见和不可见)标注其属性向量。例如,“斑马”的属性向量在“有黑白条纹”维度为1,“马”在此维度为0。
-
模型构建与训练:
- 目标:训练一个模型,输入一张图片,能预测出其对应的属性向量,而不是直接预测类别标签。
- 网络结构:通常是一个卷积神经网络(CNN)。
- 特征提取层:CNN主干(如ResNet)提取图片的视觉特征
f(x)。 - 属性预测层:一个或多个全连接层,将视觉特征
f(x)映射到属性空间,输出预测的属性向量a_hat。最后一层通常使用Sigmoid激活函数(对应二值属性)来输出每个属性存在的概率。
- 特征提取层:CNN主干(如ResNet)提取图片的视觉特征
- 损失函数:使用二元交叉熵损失(Binary Cross-Entropy Loss),计算预测属性向量
a_hat与图片真实类别对应的属性向量a之间的差异。通过大量可见类别图片的训练,模型学会了从视觉特征到属性语义的映射F: f(x) -> a。
第三步:测试阶段(对不可见类别进行推理)
当模型训练好后,面对一张来自不可见类别(如“斑马”)的测试图片:
- 属性预测:将测试图片输入训练好的模型,得到其预测的属性向量
a_hat_test。 - 语义匹配:计算这个预测的属性向量
a_hat_test与所有不可见类别的预定义属性向量a_zebra,a_giraffe, ... (这些是事先已知的)之间的相似度。常用的相似度度量是余弦相似度(Cosine Similarity)。- 公式:
相似度(zebra) = cos_sim(a_hat_test, a_zebra) = (a_hat_test · a_zebra) / (||a_hat_test|| * ||a_zebra||)
- 公式:
- 分类决策:选择相似度最高的那个不可见类别作为最终预测结果。
预测类别 = argmax_{c ∈ 不可见类别集合} cos_sim(a_hat_test, a_c)
第四步:深入探讨与变体
基本属性预测方法直观,但存在领域偏移(Domain Shift)问题:模型在可见类别上学习的视觉-属性映射,直接用在不可见类别上可能不准确,因为两种类别在视觉特征分布上不同。
一种重要改进是语义嵌入空间(Semantic Embedding Space)方法:
- 思想:不预测属性向量,而是学习一个共同的嵌入空间。在这个空间里,图片的视觉特征和类别的语义向量(属性向量或词向量)都被映射进来,并且让匹配的图片-类别对距离更近。
- 经典模型:ALE (Attribute Label Embedding) 或 DEVISE (Deep Visual-Semantic Embedding)。
- 实现:
- 训练时,对于一张图片
x及其可见类别y,我们有其视觉特征f(x)和该类别的语义向量s(y)。 - 学习一个兼容性函数
F(x, y) = θ(f(x))^T φ(s(y)),其中θ和φ是投影函数(通常是线性层)。 - 损失函数(如排名损失)鼓励正样本对
(x, y)的兼容性得分高于负样本对(x, y')(y'是其他可见类别)。
- 训练时,对于一张图片
- 测试:对于测试图片
x_test,计算其与所有不可见类别语义向量φ(s(z))的兼容性得分F(x_test, z),得分最高的z即为预测类别。
总结
基于属性的零样本图像分类算法,其核心路径是:视觉特征 <-> 语义属性 <-> 类别标签。通过训练模型理解“视觉模式”与“抽象语义”之间的关联,并将其泛化到未见过的类别描述上,从而实现了“举一反三”的分类能力。从直接的属性预测到更鲁棒的语义嵌入对齐,算法的发展旨在更好地桥接视觉与语义之间的鸿沟,缓解领域偏移问题。