(CVPR2023)《Progressive Semantic-Visual Mutual Adaption for Generalized Zero-Shot Learning》理论 & 代码解读

基于渐进式语义-视觉互适技术的广义零样本学习

总结

创新点:该文是要解决多个视觉表象对应于同一个属性时,所产生的语义歧义。这样会影响分类结果的准确率。
解决方法:是用VIT和GloVe分别提取视觉和语义属性特征时渐进式对齐。

一.理论

1.1摘要

各种视觉表象对应于同一属性时,共享属性不可避免地会引入语义歧义,阻碍了语义-视觉准确的对齐。

在本文中,我们部署了双语义-视觉转换器模块(DSVTM)来逐步建模属性原型与视觉特征之间的对应关系,从而构成一个渐进的语义-视觉互适(PSVMA)网络,以实现语义消歧和知识可传递性的改进。

具体来说,DSVTM 设计了一个以实例为动力的语义编码器,该编码器学习以实例为中心的原型以适应不同的图像,从而能够将不匹配的语义-视觉配对重铸为匹配的配对。然后,一个以语义为动力的实例解码器加强了匹配配对之间准确的跨域交互,以实现语义相关的实例适应,从而鼓励生成无歧义的视觉代表。 此外,为了减轻 GZSL 中对所见类别的偏差,还提出了一种消除损失的方法,以追求所见预测与未见预测之间的响应一致性。

1.2 GZSL中基于嵌入方法的模型对比

(CVPR2023)《Progressive Semantic-Visual Mutual Adaption for Generalized Zero-Shot Learning》理论 & 代码解读_第1张图片

a: 早期基于嵌入的方法,把视觉特征和语义特征映射到一个共同的空间中对齐。
b:多尺度的方法,各个层提取的特征拼接起来,获得关于目标特征的更全面信息。(不同层有不同大小的感受野,因此不同尺度的特征捕获了目标的不同细节和上下文信息)
c:语义引导方法
d:我们的 PSVMA.
A:表示类别属性原型。
S:表示共享属性
F:表示视觉特征。
PSVMA 逐步形成语义-视觉互适,以实现语义消歧和提高知识可转移性。

1.3 模型图

模型通过VIT提取视觉特征。
通过GloVe提取语义属性表述特征。
在最后两层用DSVTM对齐。
DSVTM包括IMSE编码器 和 SMID解码器。
(CVPR2023)《Progressive Semantic-Visual Mutual Adaption for Generalized Zero-Shot Learning》理论 & 代码解读_第2张图片

1.4 SMID解码器 和 IMSE编码器总体架构

SMID : Semantic-Motivated Instance Decoder 语义驱动的实例解码器。

IMSE: Instance-Motivated Semantic Encoder 是实例驱动的语义编码器。

所提出的 IMSE 的目标是逐步学习以实例为中心的原型,以 r(r=1,…,R)循环的递归方式生成准确匹配的语义-视觉对。

(CVPR2023)《Progressive Semantic-Visual Mutual Adaption for Generalized Zero-Shot Learning》理论 & 代码解读_第3张图片

1.5 SMID解码器 和 IMSE编码器详细架构

下面对应SMID,上面对应IMSE
(CVPR2023)《Progressive Semantic-Visual Mutual Adaption for Generalized Zero-Shot Learning》理论 & 代码解读_第4张图片

二.代码解读

2.2 预测阶段

思考:属性值和标签的对应方式应该是二维矩阵。比如行索引对应标签,列是属性的值。
也就是说:
零样本学习,事先知道属性描述和对应的标签。现在新遇到一个图片,把该图片与语义属性特征对应起来。再通过语义属性的特征找到对应的标签。
具体来说:语义属性的特征 的 id 对应类别的idx。
把对应类别的idx输入到test_id[idx]中,得到预测label值:outpred[idx]。
真实标签矩阵为:labels[idx]
预测的标签矩阵为:outpred[idx]
计算预测正确的个数 / 总类别数 = 准确率。

根据预测代码中的下面一句:

score = model(img, seen_att=att,att_all=att_all)

输入:要预测的图片,可见类的属性特征,所有属性特征。
输出:要预测的图片与所有属性特征对应的相似分数和对应的索引。

上面单独指出seen_att是如果预测的分数跟seen_attr接近,则可以把范围缩小到可见类。可以计算可见类的准确率。
如果得分高的分数不在seen_att中,则范围缩小到不可见类。方便计算不可见类的准确率。

如下句:

# 取出索引
_,pred = scores.max(dim=1)
# 根据id取出预测的属性结果。
outpred_0 = test_id[pred]
outpred = np.array(outpred_0, dtype='int')

可知,取出所有预测属性分数中,分数最高的一个属性索引。

for l in unique_labels:
	...
	acc += accuracy_score(labels[idx], outpred[idx])
acc = acc / unique_labels.shape[0]

取出所有标签,将标签值和预测结果进行对比。用正确预测个数 / 标签数 得到准确率。

补充

GloVe模型

用于提取语义属性特征。

为了解决词类比任务(如对于句子“king is to queen as man is to woman”,机器学习应当通过词向量得到king -queen = man-woman的结论)等自然语言处理问题,本文提出一种新的GloVe模型,该模型克服了现有的如全局共现矩阵奇异值分解、滑动窗口等模型的缺陷,取得了较好的测试结果。

你可能感兴趣的:(零样本学习,transformer,深度学习,人工智能,计算机视觉,零样本学习)