继续介绍文本生成图像的工做,本篇博客要给出的是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,可能会有更好的效果。