text to image(七):《TAC-GAN 》

      继续介绍文本生成图像的工做,本篇博客要给出的是2017年3月19号发表于arXiv的《TAC-GAN – Text Conditioned Auxiliary Classifier Generative Adversarial Network》 。git

      论文地址:https://arxiv.org/abs/1703.06412v2github

      源码地址:https://github.com/dashayushman/TAC-GAN网络

      论文结构很是清晰明了,通俗易懂,点赞!框架

1、相关工做函数

      首先是GAN网络的理解:https://blog.csdn.net/zlrai5895/article/details/80648898编码

      做者将实验结果与StackGAN作了对比,StackGAN的相关工做:https://blog.csdn.net/zlrai5895/article/details/81292167spa

      文章中的模型结构是在AC-GAN的基础上作了扩展,下面简单介绍一下AC-GAN。.net

      AC-GAN是一种condition GAN,它以类别标签为condition,而且鉴别器不只仅区分真实图片和合成图片,还给它们分配标签。设计

      AC-GAN的输入:code

      (1)noise z

      (2)文本描述的text embedding

      用表明生成器生成的图像,生成的图片与label class (c)和z有关,则有

      损失包含了两部分:图片和标签

      详细可参考论文:《Conditional image synthesis with auxiliary classifier gans》 。

     此外,TAC-GAN模型结构实现参考了DCGAN,来自论文《Unsupervised representation learning with deep convolutional generative adversarial networks.》

2、基本思想及成果

      TAC-GAN使用 condition GAN的思想,使用文本合成了分辨率128*128的图像。相比StackGAN,它的inception score有了7.8%的提高。不过度辨率没有StackGAN的高(256*256)。

      inception score 的定义能够参考https://blog.csdn.net/sparkkkk/article/details/72565975

3、数据集介绍:

      实验使用的数据集是Oxford-102。

      1.数据集简介:

      数据集由102类产自英国的花卉组成。每类由40-258张图片组成。

      二、数据集结构:

      下载完数据集,解压后可获得一个包含8189张.jpg格式的图片。数据集标签需额外下载。

      数据集结构:

      -imagelabels.mat:总共有8189列,每列上的数字表明类别号。

      -setid.mat

      -trnid.mat:总共有1020列,每10列为一类花卉的图片,每列上的数字表明图片号。

      -valid.mat:总共有1020列,每10列为一类花卉的图片,每列上的数字表明图片号。

      -tstid.mat:总共有6149列,每一类花卉的列数不定,每列上的数字表明图片号。

 

4、模型结构

先上总体结构图,另外,下文提到的向量具体数值均是为了便于理解,并不彻底与代码运行后的实际数值相同。

                            

一、text embedding

      文章使用Skip-Thought 来从caption中生成text embedding.关于Skip-Thought的理解:

      https://zhuanlan.zhihu.com/p/32953049

       来自文章《Skip-Thought Vectors》,这篇论文使用从书籍中提取的连续文本,训练了一个编码器、解码器网络,借鉴了word2vec中skip-gram模型,经过一句话来预测这句话的上一句和下一句。模型被称为skip-thoughts,生成的向量称为skip-thought vector。模型采用了当下流行的端到端框架,经过搜集了大量的小说做为训练数据集,将获得的模型中encoder部分做为feature extractor,能够给任意句子生成vector。咱们就利用encoder 部分产生text embedding。

二、生成器

   首先,数据集中的每一个数据由三部分组成:

表明了一幅图片   是这幅图片的k个文本描述。是图片对应的标签。

训练时,对于某张图片随机挑一个来生成一个text_embedding(),接一个全链接层获得,且,将其与noise链接在一块儿,获得

链接到一个输出为的全链接层,并将输出reshape成。将它输入生成器后续的卷积网络,上采样成128*128*3的

二、鉴别器

鉴别器使用了这样的一个集合:

(图片、类别、文本描述)

又能够被写为

 

鉴别器的第一个输入是集合中的任意一个 I,图像被下采样到

鉴别器的第二个输入是,它被replicated到

两者concat,而后通过一系列卷积层等,最后输出两个全链接层,一个有1个神经元,另外一个有个神经元,第一个FC提供是真仍是假的几率分布,第二个提供类别的几率分布

鉴别器的设计受到了GAN-CLS的启发(来自《Generative adversarial text to image synthesis》)。

能够参考博客https://blog.csdn.net/zlrai5895/article/details/81416053

 

5、损失函数

被计为判别器的输出和每幅图像的指望之间的二进制交叉熵之和。

鉴别器但愿能真的断定为真,假的断定为假。

被即为输出类别与指望类别的熵之和。

 

鉴别器损失+

 

生成器损失要依靠鉴别器的鉴别结果,但愿能欺骗鉴别器。

也是图像和类别两部分。

6、其余

一、模型结构比较容易扩展,能够更换condition。

二、做者认为能够尝试一下使用多阶段的GAN,可能会有更好的效果。