StackGAN---ICCV2017

本篇论文解读的排版主要参见原文的格式,针对原文中的每一个小节进行展开,有的是对原文的一个提炼和简单概括,有的是对原文中没有详细介绍的技术的补充和说明。

摘要

  要想从给定的文字描述中生成一幅高质量的图片,是一件十分具有挑战性的事情。而现有的方法(截止至2017年)生成的图片,虽然可以表现出文字中的一些关键信息,但是它们都缺少了很多局部细节。这篇文章提出了一个“堆叠式的生成式对抗神经网络——Stacked Generative Adversarial Networks(StackGAN)”。它可以在根据给定的文本信息,生成像素为256×256的高质量图片。具体的做法是利用“分治”的思想,将一个复杂的问题分解成更易解决的多个小问题。这篇文章将生成图片的过程分为了2个阶段:

  • Stage-1:根据给定的文本信息,生成64×64大小的图片草图,着重于描绘图片中主要目标的轮廓和颜色
  • Stage-2:结合64×64的图片草图和文本信息,生成256×256的更高质量的图片,这个过程不仅修正了第一阶段中的错误信息,同时还反映了的图片中更多的细节。

  另外,为了提高训练时的稳定性和生成图片的多样性,本文还提出了一种新颖的“条件数据增强技术”,可以确保训练过程的平缓( 不懂

介绍

  作者简要介绍了有关“图像生成”和“GAN”的研究现状和存在的困难,然后阐述了本文的3点主要贡献:

  • 提出了一个“堆叠式的生成式对抗神经网络——StackGAN”。该网络是第一个能够生成256×256图片大小的神经网络模型
  • 提出了一个新颖的“条件数据增强技术”。以此来稳定网络训练过程,同时提高了生成图片的多样性
  • 大量的实验和高质量的实验结果表明本文设计的模型框架是有效的,这对以后的研究和发展具有一定的帮助作用

相关工作

  • VAE
  • PixelRNN
  • energy-based GAN
  • $S^2$-GAN

堆叠的生成式对抗神经网络——StackGAN

  为了生成高质量的图片,本文提出了一个简单但是十分有效的网络模型,它将生成过程分成了两个阶段:

  • Stage-1:根据给定的文本信息,生成64×64大小的图片草图,着重于描绘图片中主要目标的轮廓和颜色
  • Stage-2:结合64×64的图片草图和文本信息,生成256×256的更高质量的图片,这个过程不仅修正了第一阶段中的错误信息,同时还反映了的图片中更多的细节。

正文之前——Preliminaries

  作者在这里简单介绍了GAN和Conditional GAN的核心原理。

  • GAN:由两个“子模型”组成,这两个“子模型”不断交替训练,它们的训练目标恰好相反,仿佛实在彼此对抗一般。生成模型G的目标是习得能够代表真实数据分布 $p_{data}$ 的生成概率分布 $p_g$ ,而分辨模型D的目标则是要习得能够准确分辨出 $p_{data}$ 和 $p_g$ 的二分类器。它们之间的关系就像是一场“two-player min-max game”一样,其目标方程可以如下表示:
  • Conditional GAN:是GAN的一种扩展,它令生成器和分辨器均接受一个条件向量 $c$ ,分别写成 $G(z,c)$ 和 $D(x,c)$ ,如此一来,生成器就可以根据不同的条件 $c$ 来限定生成的图片。( $c$ 通常为图片标签或者图片描述)

条件增强技术——Conditioning Augmentation

  如图1所示,文本描述信息 $t$ 首先会通过一个编码器进行编码,生成一个text embedding: $\phi_t$ 。 在之前的工作中,会将text embedding非线性的传送到生成器当中去。但是,由于text embedding通常维度很高(100以上),所以当我们的数据十分有限时,text embedding表现出不连续,稀疏等特点,这对训练生成器来说是不利的。为了缓和这个问题,本文不再将text embedding直接送入的生成器中进行训练,而是随机的从一个独立高斯分布 $N(\mu(\phi_t), \Sigma(\phi_t))$ 当中进行采样,生成新的变量 $\hat{c}$ 。利用该技术,可以从一小部分数据中生成更多的训练数据(pairs)。

  另外,为了更进一步的增强训练时的平滑性,同时为了抑制过拟合,本文还在目标函数中增加了下面的正则惩罚项(KL离散度——KL divergence):

(引入随机性变量 $\hat z$ 的原因,可以考虑是因为同样的特别描述往往可以对应到不同的图片)

Stage-1 GAN

  通过预训练好的编码器对给定的图片描述进行编码,生成text embedding: $\phi_t$ 。利用Conditioning Augmentation技术根据 $\phi_t$ 对 $N(\mu_0(\phi_t),\Sigma_0(\phi_t))$ 采样得到 $\hat c_0$ 。 最后,利用 $\hat c_0$ 和随机向量 $z$ 进行第一阶段的生成,得到 $G(z,\hat c_0)$ 。 在Stage-1的训练阶段,模型通过交替训练以下2个目标函数来分别优化生成器和分辨器:

  • 生成器, $min(L_{G_0})$ :
  • 分辨器, $max(L_{D_0})$ , $D(I,\phi_t)$ 代表图片 $I$ 在 $\phi_t$ 条件下是真实图片的概率:

上面公式中:

  • $I_0$ :来自真实分布 $p_{data}$ 的图片
  • $t$ :来自真实分布 $p_{data}$ 的图片描述
  • $\phi_t$ :t经过预训练好的编码器编码后得到的text embedding
  • $z$ :噪声,从 $p_z$ 分布中随机采样而来(本文用的是高斯分布)
  • $\lambda$ :惩罚项的权重,本文采用 $\lambda = 1$
  • $N(\mu_0 (\phi_t), \Sigma_0(\phi_t))$ :用于生成 $\hat c_0$ 的高斯分布,其期望值和方差都是通过神经网络学习出来的

模型架构

  对于生成器 $G_0$ 来说,要想得到文本条件变量 $\hat c_0$ ,首先要将text embedding $\phi_t$ 送到一个全连接层中以此来生成 $\mu_0$ 和 $\sigma_0$ ( $\sigma_0$ 是 $\Sigma_0$ 对角线上的值),得到高斯分布 $N(\mu(\phi_t),\Sigma(\phi_t))$ 。然后从高斯分布中采样得到文本条件变量 $\hat c_0 = \mu_0 + \sigma_0 \cdot \epsilon$ , $\hat c_0$ 的维度为 $N_g$ 。 这里,“ $\cdot$ ”代表点乘,$\epsilon \sim N(0,I)$ 。之后,将 $\hat c_0$ 和噪声向量 $z$ 连接起来,它们经过一些列“升维块”(upsampling block)之后,会生成大小为 $W_0 \times H_0$ 的图片。

  对与分辨器 $D_0$ 来说,首先利用全连接层将 $\phi_t$ 压缩到 $N_d$ 维,然后,将其在空间上进行复制,形成一个 $M_d \times M_d \times N_d$ 的张量。 同时,将图片送到一系列“降维块”(downsampling block)中,使其具有 $M_d \times M_d \times N_{filter}$ 的空间结构,然后将图片的tensor和文本的tensor
沿着channel的维度连接的一起,然后将其送到 $1 \times 1$ 的卷积层当中,联合学习图片和文本之间的关系特征。最后,将特征传送到输出为一个节点的全连接层,得到当前图片与文本属于真实数据的概率。

Stage-2 GAN

  从Stage-1 GAN中得到的低分辨率图像通常会缺少一些局部细节,有时候还会造成主要目标物不同程度的形变。另一方面,有些存在于文本中的重要信息,也可能被忽视。 因此,本文的Stage-2 GAN在Stage-1的基础上进行构建。它将Stage-1返回的低分辨率图片和图片描述的text embedding作为GAN的条件,使之返回的结果不仅能修正Stage-1中的错误信息,同时还可以补充在Stage-1中没有捕捉到的信息。

  当选取Stage-1低分辨率结果 $s_0 = G_0(z,\hat c_0)$ 和 高斯变量 $\hat c$ 作为GAN的条件时,生成器和分辨器的目标函数如下所示:

  • 生成器, $min(L_G)$ :
  • 分辨器, $max(L_D)$ , $D(I,\phi_t)$ 代表图片 $I$ 在 $\phi_t$ 条件下是真实图片的概率:

  与第一阶段的GAN不同的是,在Stage-2中,本文提出了一个假设,那就是作为Stage-1条件之一的随机变量 $z$ ,可以确保Stage-1的生成结果具有多样性。在这样的假设下,本文在Stage-2阶段并不使用 $z$ 作为条件,而是采用Stage-1的生成结果 $s_0$ 作为条件。 高斯条件变量 $\hat c$ 和 $\hat c_0$ 分别作为Stage-2和Stage-1阶段的CA(Contioning Augmentation),它们共享同一个text embedding—— $\phi_t$ , $\phi_t$ 由同一个预训练的编码器生成。 但是,Stage-1和Stage-2的CA会通过不同的全连接层,因此,它们生成的关于 $\phi_t$ 的均值和方差不同。 通过这种方式,Stage-2可以学习到被Stage-1所忽略的一些有用的信息。

模型架构

  对于生成器,本文利用残差模块(residual blocks)将Stage-2的生成器设计成一个“编码-解码网络”(encoder-decoder network)。 首先,根据给定的text embedding $\phi_t$ 生成维度为 $N_g$ 的文本条件向量 $\hat c$ ,然后对其进行复制,使之形成形状为 $M_g \times M_g \times N_g$ 的张量。 同时,将Stage-1的结果 $s_0$ 送到若干个“降维模块”(downsampling block)中,直至其size变为 $M_g \times M_t$ 为止。然后将文本特征和图片特征沿着channels连接到一起,并将其送到若干个“残差模块”中去,目的是为了学习到图片和文本交织在一起的多模态表征。最终,通过一系列的“升维模块”(upsampling block),也就是解码器(decoder),生成size为 $W \times H$ 的高分辨率图片。

  对于分辨器,它的结构与Stage-1中的结构相似,只不过由于接受的图片size变大了,所以需要更多的“降维模块”(downsampling block)。为了让分辨器更好的学到图片和文本之间的联系,本文采用了matching-aware discriminator,而非vanilla discriminator,具体可以参考才论文中的参考文献部分。 在训练阶段,正反例构成如下:

  • 正例:真实的图片和与之对应的文本描述
  • 反例:1、真实的图片和不相匹配的文本描述  2、生成器生成的图片和与之对应的文本描述

实现细节

  “升维模块”由 $3 \times 3 stride 1$ 的卷积层后接最近邻upsampling组成。除了最后的卷积层外,其他卷积层都使用了Batch Normalization和ReLU激活函数。 “残差模块”由 $3 \times 3 stride 1$ 的卷积层、Batch Normalization和ReLU激活函数组成。 在 $128 \times 128$ 的StackGAN模型中,使用了2个“残差模块”,而在 $256 \times 256$ 的StackGAN模型中,使用了4个“残差模块”。 “降维模块”由 $4 \times 4 stride 2$ 的卷积层、Batch Normalization(除第一层)和LeakyReLU组成。
  默认情况下,$N_g = 128$ , $N_z = 100$, $M_g = 16$, $M_d = 4$, $N_d = 128$, $W_0 = H_0 = 64$ , $W = H = 256$ 。在训练时,首先固定Stage-2 ,同时迭代训练Stage-1 GAN的 $D_0$ 和 $G_0$ 600 epochs。然后再固定Stage-1 ,同时迭代训练Stage-2 GAN的 $G$ 和 $D$ 600epochs。所有的网络训练时都使用ADAM优化算法,batch size为64,初始的学习率为0.0002 ,学习率每经过100epochs都会衰减成原来值的一半。

实验

  为了验证上面提出的模型和方法的有效性,本文进行了大量的高质量实验。本文采用的对照方法是目前(2017)最有效的两个图片生成方法:GAN-INT-CLS和GAWWN 。 测试这两个方法时使用的代码来自于各自的作者。 除此以外,文本还设计了多个baseline models来验证模型整体的设计和每个部分对模型的重要程度。对于第一个baseline,本文直接训练Stage-1 GAN来生成64×64和256×256大小的图片,来探究本文提出的stack结构和CA技术是否对最终结果有帮助。然后修改本文的StackGAN,令其分别生成128×128和256×256大小的图片,来验证在生成更大的图片时,本文的模型是否可以生成取得更好的图片质量。另外,我们还验证了是否有必要在每个Stage都将图片描述作为约束条件之一。

数据集和评价标准

  CUB数据集包含200种鸟类,共11788张图片。由于该数据集中80%的鸟的大小与图片大小的比例小于0.5,因此我们需要对其进行剪裁预处理,确保所有的图片中鸟占总大小的比例在0.75以上。Oxford-102数据集包含102种花类,共8189张图片。为了证实本文方法的有效性,同时还对一个更具挑战性的数据集——MS COCO数据集进行了实验, MS COCO数据集中的图片具有不同的背景,同时每张图片会有多个不同的物体, 它具有80k张图片作为训练集,40k张图片作为作为验证集。 COCO中的每张图片具有5条描述,CUB和Oxford-102中的每张图片具有10条描述。

   评价标准: 目前,关于图片生成还没有很适合的权威的评价标准,在这里,本文采用的是最近比较流行的“inception score”来对生成图片的质量进行评价,公式如下:

其中, $x$ 代表生成的图片, $y$ 代表Inception model预测的图片标签。该评价公式背后包含的隐层含义是: 好的模型应该能生成多种多样并且有意义的图片 。因此,边缘分布 $p(y)$ 和条件分布 $p(y|x)$ 之间的KL散度应该越大越好。对于MC COCO数据集,本文直接使用预训练好的模型进行评价,而对于CUB和Oxfor-102数据集,本文先对其进行fine-tune迁移学习,训练出不同的模型,然后,再分别进行评价。评价时,对每个模型都需要大量的样本参与(随机挑选30k以上个生成模型产生的样本)。

  尽管inception score可以表现出类似于人的对“高质量图片”的感知能力,但是它却不能准确反应出生成的图片和图片描述信息之间的相关联系。因此,本文还进行人工评价。本文随机选取了CUB和Oxfor-102测试集中的50条图片描述信息,从MS COCO测试集中随机选取了4k条图片描述。 对于每条描述信息,对应的生成模型都会产生5张图片, 然后让10个用户通过不同的方法对这些图片进行排序。最后用平均排序结果作为最终的人工评价。

定性/定量结果——Quantitative and qualitative results

  本文在3个数据集上与现有的两种stage of art方法进行比较,inception scores和平均人工排序结果如下表所示。可以看出,本文的Stack GAN方法在三个数据集上全都取得了最好的结果。

  从下面的图中,也可以看出本文提出的方法,可以生成更加生动的图片,同时生成的图片也具有多样性,而非单纯的“记忆”了训练集中的数据。

成分分析——Component analysis

  在本小节中,我们会利用baseline mdoels来分析StackGAN每个成分的作用。下表展示了不同baseline models的inception socres

StackGAN的设计: 如表中前四行所示,如果令Stage-1 GAN直接生成256×256的图片,inception scores会大大下降,并且在不使用CA的情况下,甚至无法生成合理的具有含义的图片。即使在使用CA的情况下可以生成含有一定意义的图片,它的图片质量也远不如Stack GAN生成的图片质量,详情如下图所示。这说明了本文提出了Stack结构是有效的。

另外,当把生成图片的分辨率降到128×128以后,inception socres的值从3.70降到了3.35。需要注意的是,inception model接受的图片大小为299×299,所以它在计算inception scores之前,会先将所有输入图片放缩到规定大小后再送入网络进行计算。因此,如果本文的模型仅仅是将128×128的图片放大到256×256,那么,最终计算出的inception scores就不会产生差异(多个线性放缩的叠加会退化成一个放缩计算),这就说明了本文的模型在生成256×256的图片时,相较于128×128的图片,确确实实生成了更多有效的信息。对于256×256的Stack GAN来说,如果仅仅只在Stage-1使用图片描述作为约束条件,inception scores的值会从3.70降到3.45,这说明将Stage-2阶段确实可以捕捉到Stage-1所忽略的文本信息,从而有助于生成高质量的图片。

条件增强——Conditioning Augmentation: 本文同时还探究了CA技术的有效性,在不使用CA技术时,inception scores的值明显下降,并且,在训练时还容易崩溃,导致生成的图片难以识别。而在使用CA时,不仅能提成inception scores的值,还能生成更加多样的鸟(如姿态、脸的朝向等)。

语句嵌入插值——Sentence embedding interpolation: 为了更进一步的证明我们的模型可以学习到更加光滑的潜在的数据信息,本文通过对text embedding线性插值的方式来进行验证。首先固定住噪声变量 $z$ ,这样一来生成的图片仅受图片text embedding约束的影响。下图中第一行的图片使用的text embedding是由我们自己可以制作的句子生成的,这些句子仅仅包含一些简单的颜色描述。结果显示,生成的图片可以根据不同的text embedding生成与之对应的鸟,可以反映出text embedding中描述的颜色,同时还能保持合理的外形。第二行展示了一些更加复杂句子生成的图片,这些句子包含更多的描述信息,用这些句子生成的图片中的鸟,它们的主要颜色会从红色慢慢变成蓝色,而翅膀的颜色会从黑色慢慢的变成棕色。

总结

  在本篇文章中,作者提出了一个Stack GAN模型框架,同时结合CA技术,来生成具有照片真实度的图片。 该模型将text-to-image synthesis任务变成了一个“草图——细化”的过程。 Stage-1 GAN主要负责输出图片的“草图”,它侧重于输出图片的基本颜色搭配和主要目标的轮廓信息。 Stage-2 会修正Stage-1中的一些错误,同时很会再次根据图片描述来补充Stage-1中遗漏的信息,从而生成更高质量的图片。 大量的实验表明,本文提出的方法是有效的。 同时,与现有的最领先的方法进行比较后,本文的模型可以生成更高分辨率的图片,同时包含更多的信息和细节。