欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

那些年的零-shot学习探索:GAN与VAE的实战应用

最编程 2024-07-24 10:01:20
...

一、《Feature Generating Network for Zero-Shot learning》

这篇论文由Yongqin Xian 发表于CVPR2018。
在看这篇文章之前,我们首先来梳理一下Zero-Shot Learning (ZSL) 的任务。所以,什么是ZSL呢?这种任务要求我们基于可见的一些物体,训练网络对物体属性的感知,从而对没有见过的物体进行分类。通俗点讲,就是我们给网络看了小脑斧、小马的图片,告诉他小脑斧身上有花纹,但是腿短,小马身上没花纹,但是腿长,小斑马身上有花纹而且腿长,有一天,我们给网络一张小斑马的图片,问他这是什么。即使他从没有见过斑马的图片,我们依然希望他通过之前的知识,能够对图片进行正确的分类。


什么是Zero-Shot Learning?

从数学角度来讲,设可见的图像集合为S = {(x^s,y^s,c(y^s))}, 其中 x 是图像,y 是图像所属的类别, c(y^s) 是该类别的一些类别属性,比如attributes、description等等。不可见的图像集合为U = {(y^u,c(y^u))},仅有图像类别和类别属性。所以普通细粒度分类的任务就是学习一个分类器f_{zsl}: X->Y^u,预测从未见过的图像类别。

但是这样的分类面临一个问题,(DV在讨论实验室项目时也提到过小样本学习面临同样的困境),就是在实际情况中,我们并不知道待分类的图像之前见没见过。所以就出现了一个更符合实际的任务,Generalized ZSL(GZSL),他的分类器是f_{zsl}: X->Y^u \cup Y^s,即预测集中含有见过和没见过的图像类别。

了解了什么是ZSL和GZSL之后,就可以正式开始解读这篇论文啦。
作者使用三种conditional GAN来循序渐进的生成embedding feature。

论文模型

1. f-GAN

这是一种条件GAN(对条件GAN的介绍),对生成器和判别器都额外增加附加信息c(y),这里的附加信息是类别attributes或者description。
给定训练数据(来自可见数据集S),作者计划训练一个generator G: Z \times C -> X,其中Z是高斯噪声,C是class embedding,生成的是image feature \tilde{x}~ \in X

所以整个GAN的损失函数就如下所示:

f-GAN

即训练时,生成器输入的是高斯噪声和某些可见类别的class embedding,输出的是该类别的image feature 。判别器输入的是类别的class embedding 和真实的image feature 以及生成的image feature 。

2. f-WGAN

作者又采用另一种GAN网络,Wasserstein GAN(对Wasserstein GAN的介绍

WGAN

3. f-CLSWGAN

作者认为单纯使用WGAN还不足以使generator生成的features能够训练出一个好的分类器,所以作者提出加上一个分类loss。

二、《f-VAEGAN-D2: A Feature Generating Framework for Any-Shot learning》

这是Yongqin发表在CVPR2019的文章。
这篇文章的思路是将GAN和VAE结合,GAN的generator和VAE的decoder用同样的参数。这样,GAN的generator的输入就有了VAE的约束。作者大概就是这个意思吧。这篇文章代码没有看。


f-VAEGAN-D2

三、《Generalized Zero- and Few-Shot Learning via Aligned Variational Autoencoders》

这篇文章单纯使用VAE来做Zero- and Few-Shot Learning,发表于CVPR2019。作者用了两个结构相同的VAE。


CADA-VAE

这个作者的思想不同于Yongqin的想法,后者是将class embedding (attributes) 当做辅助信息输入Decoder、Generator和Discriminator;前者是利用两个VAE,一个对image进行encode, 另一个对class embedding进行decode。

为了保证image和class embedding被投影到的空间一致,除了两个VAE各自的传统loss:

屏幕快照 2019-05-31 下午4.32.05.png

作者还将两个encoder的输出互换到decoder的输入端,生成Cross-Alignment loss。通俗地讲,这个loss的作用就是让image潜在空间z里面的向量,通过class embedding的decoder以后,也能还原成相应类别的class embedding。

CA:Cross-Alignment loss

还有一个Distribution Alignment loss, 是为了令两个VAE的潜在空间的均值方差服从同样的分布设置的:

DA:Distribution Alignment loss

推荐阅读