Distinguishing Unseen from Seen for Generalized Zero-shot Learning
Abstract 摘要
-
这篇论文提出了一个方法利用视觉和语义两种模态来区分可见域和不可见域。
-
提出了一个两个阶段的训练,利用可见类和不可见类的语义描述来搜索一个阈值,通过这个阈值区分可见类和不可见类的视觉样本。
Contributions 贡献
-
提出了一个方法利用视觉和语义两种模态的语义属性来区分可见域和不可见域。
-
提出一个虚拟类来区分相似的视觉表征,从而可以成功地分辨可见样本和不可见样本。
此外,还提出了利用带注意力机制的“不可见的专家”来识别不可见的样本。
-
在五个基准数据集上取得了不错的效果
Previous work 先前工作
在先前的工作中,不可见类和可见类共享大量的视觉特征跟语义属性。
一方面,是因为它们之间本身有很多的共同点,还有一方面是因为我们的生成器是在可见类的样本上训练的,它使得生成器更易于生成跟可见类相似的特征。
这就会导致在GZSL的任务上,很容易错把不可见类的样本认为是可见类的样本,分类精度下降,使得GZSL的性能很差。
Problem definition
给定两个集合S,U,S代表的是可见类:X_s是可见类的视觉样本,Y_s是可见类的标签,A_s是可见类的语义描述;同理,U代表的是不可见类。
S与U没有交集。
S被分为两部分,一部分用作训练集S_tr,另一部分用作测试集S_te。
Model 模型
first stage 第一阶段
用可见类的数据训练两种模态的VAE模型
- SVAE(超球面变分自动编码器)–更好地解释数据类型,学习潜在表征
(1) 两个自循环
-
seen的语义描述 >>> E_s (语义VAE的编码器)>>> Z_a_s(可见类的语义潜在特征)>>> D_s(语义VAE的解码器) >>> 解码之后的语义属性
通过L_VAE比较原始的语义属性和解码后的语义属性,不断优化语义VAE的编码器和解码器,使编码器生成具有更多信息的潜在特征,使解码器能够生成跟原始语义属性更相似的语义属性。
-
seen的图像 >>> E_v (视觉VAE的编码器)>>> Z_x(可见类的视觉潜在特征)>>> D_v(视觉VAE的解码器) >>> 解码之后的视觉图像
同理,通过L_VAE不断优化视觉VAE的编码器和解码器。
-
前两项为视觉VAE的损失函数部分,后两项为语义VAE的损失函数部分。第一项是对输入的重构损失(生成图像和原始图像之间的差异)。第二项是KL散度是对潜在嵌入层的分布约束,使得潜在变量的后验概率趋向于潜在变量的边缘分布(也叫作先验概率,一般可以用高斯分布之类的来替代)
(2) 两个跨模态
-
seen的语义描述 >>> E_s >>> Z_a_s >>> D_v >>> 解码之后的视觉图像
通过L_cr优化视觉VAE的解码器和语义VAE的编码器。
-
seen的图像 >>> E_v >>> Z_x >>> D_s >>> 解码之后的语义描述
同理,通过L_cr优化视觉VAE的编码器和语义VAE的解码器。
-
前一项是原始语义描述a_s与Z_x通过解码器生成的语义描述的距离,后一项是原始图像x与Z_a_s通过解码器生成的视觉图像的距离。该损失函数是这两项距离的期望值。
(3)同时对齐两种模态的表征 L_w1
- 对于Z_x 和 Z_a_s,使用Wasserstein distance对齐两种模态的潜在表征
+ 通过Wasserstein distance使Z_x 和 Z_a_s这两种潜在特征在所有可能的分布中的距离的期望最小,从而达到对齐的效果。【对齐两种特征,相当于使两种特征更匹配得上】
(4)学习分类器 L_cls1
- 学习一个可见类的分类器,来学习更有区别的潜在表征
这个分类器损失由两部分构成,第一部分是标签p_z_x和分类器预测的概率q_z_x之间的交叉熵损失(刻画两个概率分布,越近,交叉熵越小),第二部分同理。
second stage 第二阶段
利用虚拟类区分可见域和不可见域
(1) unseen的语义描述 >>> E_s >>> Z_a_u >>> D_v >>> 虚拟类的图像样本
-
这里与第一阶段不同的是,只训练了语义VAE(因为生成的样本是虚拟的,不保证的真实性的,不能将这个作为训练D_v的数据,否则还可能导致D_v的效果变差)
-
(2)对齐两种模态的潜在表征 L_w2 -
(3)学习分类器 L_cls2 -
学习一个分类器,用于分离可见类跟虚拟类
fictitious class 虚拟类
-
fictitious class 由一个unseen类的所有生成的潜在特征构成
- before:seen和unseen之间有许多重叠的地方也就是overlap
- after:seen和unseen之间有明显的分界线
-
作用机制 【我的理解是这样👇】:
-
作用:最小化seen和unseen的重叠区域
threshold 阈值
阈值η是人为设定的,满足以下公式:
C是所有训练样本以及其对应的语义描述的余弦相似度的合集。|C|是这个集合的元素个数。γ是一个余弦相似度,γ满足在C中 η x 100% 的余弦相似度比它大。
通过人为设定的阈值η,找到一个余弦相似度γ,通过γ来区分样本是seen或者unseen。
- 作用:分离可见类跟不可见类的视觉样本
seen and unseen expert 可见和不可见的专家
当分离可见域跟不可见域后,对于可见样本采用可见类的“专家”进行分类,对于不可见类的样本采用不可见的“专家”来进行分类。
-
”可见专家“
一个带有VAE的分类器,用于对可见类进行分类。(就是在第一阶段学习的那个分类器)
-
”不可见专家”
一个带有自注意力机制 (用于正则化) 的‘专家’,具体是通过增强类的潜在视觉特征来实现。
- 训练:
A_s(可见类的语义属性) >>> [S2V] (一个语义到视觉的模块) >>>
(A_s对应的可见类的视觉特征)x(可见类视觉特征) >>> ɸ(注意力机制)>>> 进行哈达玛积运算、加法运算跟乘法运算 >>>
与通过softmax,测量两者之间的余弦相似度来对视觉特征进行分类。
- 使用时A_s用A_u替换,x代表unseen的合成视觉特征
Experiments 实验
comparison with the state-of-the-arts 与现有先进模型比较
以谐波平均精度作为评估标准(谐波均值反映了同时识别可见和看不见图像的方法的能力)来看,这个方法在五个基准训练集上基本都取得了第一第二的成绩。
其中一个采用f-CLSWGAN(用WGAN作为分类器损失,在GAN中直接生成特征而不是图像)来训练ZSL分类器,一个采用本文提出的“不可见的专家”来训练分类器。
distinguishing unseen from seen 区分可见域跟不可见域的性能
一些检验区分可见域跟不可见域效果的实验(主要是跟OOD比较)
- OOD跟这篇论文提出的方法相似,不同在于:
- OOD不能利用unseen的知识来补充unseen的视觉特征,但是我们提出的方法可以利用unseen的语义描述来生成合成的视觉特征。
- 还提出了一个新方法:利用fictitious class来区分seen和unseen样本
- 我们采用一个带有自注意力机制的“专家”来区分看不见的类,而OOD是直接采用f-CLSWGAN
- 模型评估指标:
(1) 在三个基准的数据集上,这篇论文提及的方法比COSMO跟OOD相比,谐波平均值更高,曲线下面积更大,假阳率更低。
(2)在相同阈值(η=0.95)的情况下,在五个基准数据集上,我们的方法比OOD的余弦相似度(潜在的视觉表征和语义表征之间的余弦相似性)高。
(3)在可视化实验中,可以看到我们的方法相较于OOD,不可见类和可见类混杂在一起的现象更少
ablation study 消融实验
通过消融实验可以看出,分类器损失、循环一致重构损失、wassertein距离跟fictitious class都是不可或缺,能够使模型的性能效果更好的。
Idea 看法
从这篇的可视化来看,
可以看到可见类的不同类之间是有明显界限的,一个个内部是紧凑的,“抱团的”;而不可见类像一盘散沙,类与类之间感觉界限不是很明显。
所以,感觉对于可见类的分类不采用“看不见的专家”,而是采用别的方法,不知道会不会取得更好的效果。