StackGAN: Text to Photo-realistic Image Synthesis with Stacked Generative Adversarial Networks 阅读笔记
Abstract
我们通过一个 粗糙-细化 过程将困难的问题分解成了可管理的子问题。Stage-I的GAN根据文字描述粗糙的生成了原始的形状和颜色,获得了Stage-I的低分辨率图片。Stage-II的GAN以Stage-I的结果图片和文字描述为输出,生成了带有逼真细节的高分辨率图片。它能够纠正Stage-I的缺陷并在精细过程中加一些很好的细节。为了改善合成影象的多样性并增加GAN训练的稳定性,作者引入了一种新的条件增强技术,鼓励平滑潜在的条件流形。
1.Introduction
生成高分辨率图片的难点在于,自然图片的分布和implied(隐含的?)模型在高维像素空间上不交叠。模仿人类画家的绘画方式,我们将文字生成图像这个难题分解成了两个更易于处理的子问题,就如摘要里所说(StackGAN)。Stage-II以Stage-I产生的结果和文字为输入,学到了Stage-I忽略的文字细节信息。从大致对齐aligned的低分辨率图像生成的模型分布 与图像分布 相交的可能性更高。这就是Stage II GAN能够生成更好的高分辨率图像的根本原因。
当text-image pairs少的时候(数据量少),会导致文字条件流形(text conditioning manifold)稀疏,并且训练困难。因此我们提出了一个新的 Conditioning Augmentation technique条件增强技术去鼓励latent conditioning manifold潜条件流形的平滑性。它允许条件流形中的随机扰动,并增加了合成图片的多样性。
贡献有三个:(1)StackGAN将难题分解成两个可控制的子问题,第一次生成了文字转图片的256×256分辨率的图片。(2)新的条件增强技术稳固了conditional GAN的训练并增加了生成样本的多样性。(3)大量的定性和定量实验以及消融实验,为未来的conditional GAN提供了有用的信息。
2. Related Work
但是训练的不稳定性使GAN模型很难生成高分辨率(例如256×256)图像。
条件图像生成。大多数方法利用简单的条件变量,例如属性或类标签。
除了使用单个GAN生成图像外,还有一些工作利用了一系列GAN来生成图像。
3. Stacked Generative Adversarial Networks
- Stage-I GAN:Stage-I的GAN根据文字描述粗糙的生成了原始的形状和颜色,并根据随机噪声向量画出了背景layout,获得了Stage-I的低分辨率图片。
- Stage-II GAN:Stage-II的GAN以Stage-I的结果图片和文字描述为输出,生成了带有逼真细节的高分辨率图片。它能够纠正Stage-I的缺陷并在精细过程中加一些很好的细节。
3.1. Preliminaries
这个是初始GAN,cGAN就是多了个变量c,G->G(z,c),D->D(x,c),是以c为条件的。
3.2. Conditioning Augmentation
如图2所示,文字描述t会被编码器生成一个embedding
φ
t
\varphi_t
φt,但是这个
φ
t
\varphi_t
φt的维度一般很高(>100),又由于数据量少,会导致隐数据流形的不连续性(discontinuity in the latent data manifold),那生成器肯定不想以这种条件变量为输入,为了缓解此问题,我们提出了条件增强技术以产生额外的条件变量
c
^
\hat{c}
c^。除了从文字描述中提取出来的固定条件变量c,我们又从高斯分布
N
(
μ
(
φ
t
)
,
∑
(
φ
)
)
N(\mu(\varphi_t),\sum(\varphi))
N(μ(φt),∑(φ))中随机采样了隐向量
c
^
\hat{c}
c^,其中均值
μ
(
φ
t
)
\mu(\varphi_t)
μ(φt)和对角协方差矩阵
∑
(
φ
)
\sum(\varphi)
∑(φ)是
φ
t
\varphi_t
φt的函数。条件增强技术产生了更多的训练对,从而提升了对抗条件流形小扰动的鲁棒性。为了进一步强制条件流形的平滑性和避免过拟合,我们在训练过程中将以下正则化项添加到生成器的目标中:
即标准高斯分布和条件高斯分布的KL散度。条件增强技术的随机性增加了生成图像的多样性。
3.3. Stage-I GAN
生成目标的粗糙形状和正确的颜色。
文字描述的embedding
φ
t
\varphi_t
φt 是由预训练好的编码器生成的。高斯条件变量
c
^
0
\hat{c}_0
c^0是从
N
(
μ
0
(
φ
t
)
,
∑
0
(
φ
)
)
N(\mu_0(\varphi_t),\sum_0(\varphi))
N(μ0(φt),∑0(φ))中采样的,旨在捕获带有变化的
φ
t
\varphi_t
φt的含义。以
c
^
0
\hat{c}_0
c^0和随机变量z为条件,Stage-I GAN训练判别器
D
0
D_0
D0和生成器
G
0
G_0
G0,并最大化
L
D
0
L_{D_0}
LD0和最小化
L
G
0
L_{G_0}
LG0:
真实图片
I
0
I_0
I0和图片描述t来自真实数据分布
p
d
a
t
a
p_{data}
pdata。z是从高斯分布
p
z
p_z
pz中随机选取的噪声向量。
λ
\lambda
λ是平衡公式4中两项的正则化参数,该论文中
λ
=
1
\lambda=1
λ=1。
μ
0
(
φ
t
)
,
∑
0
(
φ
)
\mu_0(\varphi_t),\sum_0(\varphi)
μ0(φt),∑0(φ)和网络中的其余部分一起学习。
**Model Architecture.**对于生成器 G 0 G_0 G0,先将 φ t \varphi_t φt投喂进一个全连接层以获得 μ 0 \mu_0 μ0和 σ 0 \sigma_0 σ0(就是 ∑ 0 \sum_0 ∑0),然后 c ^ 0 \hat{c}_0 c^0是从 N ( μ 0 ( φ t ) , ∑ 0 ( φ ) ) N(\mu_0(\varphi_t),\sum_0(\varphi)) N(μ0(φt),∑0(φ))中采样。 N g N_g Ng维度的 c ^ 0 \hat{c}_0 c^0 通过 c ^ 0 = μ 0 + σ 0 ⨀ ϵ \hat{c}_0=\mu_0+\sigma_0\bigodot \epsilon c^0=μ0+σ0⨀ϵ(其中 ⨀ \bigodot ⨀是按元素的乘积, ϵ \epsilon ϵ~N(0,I))。然后 c ^ 0 \hat{c}_0 c^0和一个 N z N_z Nz维度的噪声向量拼接,通过一系列的上采样块来生成一个 W 0 × H 0 W_0 \times H_0 W0×H0的图像。
对于判别器 D 0 D_0 D0,先用一个全连接层将 φ t \varphi_t φt压缩成 N d N_d Nd维,然后再空间复制到 M d × M d × N d M_d\times M_d \times N_d Md×Md×Nd的向量。同时,图像被投入一系列的降采样块直到 M d × M d M_d \times M_d Md×Md空间维度。然后,将图像过滤器映射(image filter map)沿着通道维度与文本张量连接在一起。 所得张量馈入 1 × 1 1 \times 1 1×1卷积层,以共同学习图像和文本上的特征。 最后,具有一个节点的全连接层用于生成决策得分。
3.4. Stage-II GAN
以低分辨率结果
s
0
=
G
0
(
z
,
c
^
0
)
s_0=G_0(z,\hat{c}_0)
s0=G0(z,c^0)和高斯隐变量
c
^
\hat{c}
c^为条件,最大化
L
D
L_D
LD和最小化
L
G
L_G
LG:
不同于原始GAN的公式,随机噪声z没有用于此,其随机性已经被
s
0
s_0
s0保留了。高斯条件变量
c
^
\hat{c}
c^是用的于Stage-I中相同的编码器生成的,输入也是
φ
t
\varphi_t
φt。但是Stage-I和Stage-II的条件增强有不同的全连接层,为了生成不同的均值和方差。这样的话,Stage-II GAN可以学到Stage-I GAN中忽略掉的有用信息。
**Model Architecture.**我们将Stage-II的生成器设计为带有残差块的编码-解码网络。类似于之前, N g N_g Ng维度的 c ^ \hat{c} c^由 φ t \varphi_t φt生成,然后空间复制成 M g × M g × N g M_g\times M_g \times N_g Mg×Mg×Ng张量。同时,Stage-I的结果 s 0 s_0 s0投入降采样块(即编码器)中直到空间大小为 M g × M g M_g \times M_g Mg×Mg。图像特征和文字特征沿着通道维度拼接起来。编码后的图像特征与文本特征一起被馈送到几个残差块中,这些残差块旨在学习图像和文本特征之间的多模式表征。然后用一系列的上采样层(即解码器)来生成 W × H W \times H W×H的高分辨率图像。这样的生成器能够帮助纠正输入图像中的缺陷,同时添加更多细节以生成逼真的高分辨率图像。
对于判别器,其结构类似于Stage-I的判别器,但是其具有额外的降采样块,因为在此阶段图像尺寸较大。 为了显式强制GAN将图像和条件文本之间有更好的对齐,我们在两个阶段都采用了Reed等人提出的matching-aware判别器。在训练期间,判别器将真实图像及其对应的文本描述作为正样本对,而负样本对则由两组组成。 第一组是真实图像和不匹配的文字embeddings,第二个是合成图像和对应的文本embeddings。
3.5. Implementation details
上采样块由nearest-neighbor上采样和随后的
3
×
3
3 \times 3
3×3 stride 1 convolution组成。除最后一个卷积外,每次卷积后均应用批处理归一化BN和ReLU激活。残差块由
3
×
3
3 \times 3
3×3 stride 1 convolution,批归一化BN和ReLU组成。在128×128 StackGAN模型中使用了两个残差块,而在256×256模型中使用了四个残差块。下采样块由
4
×
4
4 \times 4
4×4 stride 2 convolution,批处理归一化和LeakyReLU组成,但第一个没有批处理归一化。
看原文吧。
4. Experiments
一是与当前的两个state-of-the-art算法做了比较。二是消融实验,探究自己提出的几个组件是否真的有用。(那肯定是有用)
4.1. Datasets and evaluation metrics
对数据做了预处理,对几个数据集做了介绍。
**Evaluation metrics.**我们采用了最近提出的一个 数值评估方法“inception score”来定量评估。
x是一个生成的样本,y是由Inception model预测的label。模型应该可以生成多样并具有意义的图像。所以,边际分布p(y)和条件分布p(y|x)的KL散度应该很大。
尽管inception score很有效,但是也无法很好的判断图像的生成质量,所以我们挑选了十个真人来客观判断。
4.2. Quantitative and qualitative results
从图5中可以看出,Stage-II确实可以改正Stage-I中的缺陷,并补充Stage-I忽略的细节。
重点是StackGAN并没有简单的记住了训练样例,而是捕获了复杂的底层 language-image 关系。如图6,我们可以得出结论,生成的图像与训练样本具有一些相似的特征,但是本质上是不同的。
4.3. Component analysis
**The design of StackGAN.**若将输出分辨率从256×256降到128×128,inception score会降低,故如果StackGAN只是增加图像大小而不添加额外的信息,其inception score会与小分辨率的分数一样。这也表明了我们的256×256的模型信息量和细节更多更丰富。
**Conditioning Augmentation.**根据表2和图7,我们可以看出CA提升了训练的稳定性,并增加了生成图像的多样性。
**Sentence embedding interpolation.**为了展示我们的模型学到了平滑的隐数据流形,我们对语句embedding做了插值,并从中生成图像,如图8。
5. Conclusions
与摘要类似。
个人总结:
- GAN生成的图片效果不好原因之一是,生成图像和自然图像在高维像素上不交叠。
- 作者模仿画家作画的步骤,将文字生成图像这个难题分为了两步走,一是先生成大致的形状和颜色,二是在一的基础上纠正错误和补充细节。
- 作者又提出了一种条件增强技术,不采用原始不变的条件,而是从原始条件的正态分布(用到了全连接层)上抽样,从而平滑了隐条件流形,提升了训练的稳定性,增加了生成图像的多样性。