对抗生成网络-文字到图片的合成Generative Adversarial Text to Image Synthesis

新的一年,新的开始,好想发论文啊!废话不多说,下面讲下文字到图片的生成。

《对抗生成网络-文字到图片的合成Generative Adversarial Text to Image Synthesis》 文字生成图片
《对抗生成网络-文字到图片的合成Generative Adversarial Text to Image Synthesis》 最有代表的一张图怕是这个了,牛人,大佬

RNN可用来对文字进行判别和表示,GAN可以做图片生成,那么如何将字符翻译到图像像素呢?这篇论文给出了一个网络。使用RNN,来做图片生成描述,由于它是根据图片的内容和他前一个词生成下一个词,是遵循链式规则的。使用描述生成图片的话,能够正确表达文本的正确图像样例是很多的,比如鸟,生成的图片各种鸟都不能说是错的,文字的改变会影响大片区域pixel的变化,而且没有什么关联性。对于文本生成图像这个任务,我们将这个任务分解成两个子问题,首先,获取重要细节的—-文本特征表示。然后,用这个特征合成一张较好的图片。下载原论文地址

原始GAN

《对抗生成网络-文字到图片的合成Generative Adversarial Text to Image Synthesis》 Gan的损失函数

x表示真实图片,z表示输入G网络的噪声,而G(z)表示G网络生成的图片。

D(x)表示D网络判断真实图片是否真实的概率(因为x就是真实的,所以对于D来说,这个值越接近1越好)。而D(G(z))是D网络判断G生成的图片的是否真实的概率。

网络架构

如果要输入文本信息?问题就来了,怎么得到文字信息。作者用了自己之前的方法《Learning Deep Representations of Fine-Grained Visual Descriptions》,不是这篇文的重点,他只是利用了这篇文章的文本特征表示,就是对文本有个向量表示,他的之前的方法表示的好所以就用了。

《对抗生成网络-文字到图片的合成Generative Adversarial Text to Image Synthesis》 基于文本的DCGAN结构

文本描述向量——上图中深蓝色的条条,在生成网络和判别网络中都有输入。

看这个网络结构就可以知道,他大概是有一个噪声+向量(表达文字的)作为生成网络的输入。你会不会想,怎么不直接输入文本特征呢?留来大家想想。 而作者论文实际是这么来做生成网络的,首先我们将之前得到的文本向量,用网络全连接层对文本向量压缩,最后得到128维向量,在原来的随机噪声后面直接相连(concate)输入生成网络中生成图片。

对于判别网络呢,作者也加入了这个文本描述。加入的方式是空间复制,之前文章也有介绍过,就是对于N*N的feature map后面加其他模态信息的时候用的方法。在判别网络中,首先对输入做几个stride=2的卷积,每个卷积都带有spatial batch normalization和leaky Relu。当feature map的大小变为2×2时,则又一次对文本编码结果通过一个全连接层,将全连接层的结果拼接到这个大小为2×2的feature map上。然后对拼接结果做一个1×1的卷积和2×2的卷积。这篇论文判别器中加入文本信息,目的是的判别器要判别出文字描述与图片是否相符,后面详细介绍,就是文中提到的GAN-CLS。当然判别器本职工作是生成合理的图片。

下面就开始讲下论文中用到的两个两类判别器,GAN_CLS和GAN_INT.

GAN-CLS

为了回答《是否图片是按照描述生成的呢》提出了GAN-CLS,为了使判别模型能够拥有判断文本与图像是否匹配的能力,除了<假图,描述>和<真图,描述>外,添加第三种样本即<真图,不匹配描述> ,前两个生成合理图像,第三个与第二个判别对相比,生成匹配描述。这样,判别器就能将是否合理图片和是否匹配的信号都传递给生成器了。

整个网络的训练过程是如下图所示。

《对抗生成网络-文字到图片的合成Generative Adversarial Text to Image Synthesis》 训练过程

数据集中每张图片对应了五个描述

一次选batch个图片进行训练,对每个图片进行以下操作

1.对于图片给出的描述编码

2.任意一个不正确的描述也编码

3.随机选择噪声向量

4.将噪声连接描述升入到生成器中

5.这时,利用3种 描述-图像对, <假图,描述>    <真图,描述>     <真图,不匹配描述>

6.判别器的损失函数,更新判别器。第十行

7.生成器的损失函数,更新生成器。第十二行

GAN-INT

什么是流形?可以略过奥。流形学习的观点是认为,我们所能观察到的数据实际上是由一个低维流形映射到高维空间上的。因为在一些高维中的数据会产生维度上的冗余,实际上只需要比较低的维度就能唯一地表示。首先流形能够刻画数据的本质。就像深度学习“特征学习”,所谓特征,就是能“表示事物本质的内容”,一般来说特征的维度应该小于数据本身。跟我们卷积得到特征也是小于数据本身的。我们如何来说明“模型学习到了流形”?前面提到了高维数据其实是由低维流形生成的。如果我们能模拟这个生成过程,再通过对低维流形的微调,应该能得到对应的“有意义且有道理”的高维数据。


根据文中说,嵌入对之间的插值是符合数据流形的,我自己认为,他做插值的目的就是让
文本表示更符合本质,
 就是说,文本表示尽量准确了。觉得是作者要套自己的论文,哭唧唧。也有可能有别的意思?

《对抗生成网络-文字到图片的合成Generative Adversarial Text to Image Synthesis》 论文中贝塔取0.5,也就是融合两个文本,但文本长度是不变的,因为t1和t2是个向量,贝塔是参数

数据集我们能从论文中得到,用的是CUB bird 和 oxford-102 flower。为什么生成大量的额外的文本表示? 在 CUB bird中, 比如某张图片:“白色的海鸥”,另一张图片描述是“绿色的鹦鹉”, 那我利用插值方法,咦,生成一个新的描述,是什么呢?“绿色的海鸥” 有意思吧!这也就是作者说的zero shot,呵呵。 他的做插值的对象,不是一张图的几个caption之间,而是在整个数据集,因为海鸥的颜色只有那么几种,训练来训练去,都是这几种,不会有绿色,而在整个数据集中,也就是鸟这个数据集中,我们就可以得到其他鸟的的属性。耶耶耶!

风格

一般情况下很多时候一句话就是描述content的,那么背景和姿态是谁描述的呢?是不是噪声呢?哎嘿!在做风格转换的时候,首先使用S提取生成器一张图像的风格信息,得到s(style),然后将随机噪声替换为s,s和文本进行组合输入给生成器得到某风格下的图像。

《对抗生成网络-文字到图片的合成Generative Adversarial Text to Image Synthesis》 x,我们选择的图片,S()是风格提取器,得到x的风格。然后生成器的输入变成了s+文本,得到风格图

实验

那我们首先看看,风格生成的怎么样。

《对抗生成网络-文字到图片的合成Generative Adversarial Text to Image Synthesis》 风格背景和姿态

有两种风格。第一种我们可以将先前看到文本和先前看到的样式结合起来,但是在新颖的配对中,生成与训练期间任何看到的图像非常不同的合理图像。使用先前看到的属性,也就是说,多个视觉方面的文本表示。就跟我之前举例子一样。

《对抗生成网络-文字到图片的合成Generative Adversarial Text to Image Synthesis》 风格拟合效果

基于base line的三种方法比较

看看视觉效果

《对抗生成网络-文字到图片的合成Generative Adversarial Text to Image Synthesis》 如果不用插值的话,也就是前两个方法。我们发现生成的背景姿势都一样,颜色正确。插值后,后两种,生成的图像多样。能够匹配大部分或者全部的背景

《对抗生成网络-文字到图片的合成Generative Adversarial Text to Image Synthesis》 对于花这个类,baseline 形态看起来更多样化。后两个方法看起来,生成的花几乎都是一种花

看看插值的作用


《对抗生成网络-文字到图片的合成Generative Adversarial Text to Image Synthesis》 左边是对描述内容的文本插值,可以清楚地看到这个目标的变化结果。右边是对噪声进行插值,可以看到目标是不变的,背景变得平缓

生成多目标和背景

MS COCO上做实验。


《对抗生成网络-文字到图片的合成Generative Adversarial Text to Image Synthesis》 对于多目标和变化背景亟待解决

    原文作者:水球喵
    原文地址: https://www.jianshu.com/p/1515958fd82a#comments
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞